内容正文:
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《编程语言基础—C语言》高教版第五版
高频考点冲刺卷(七)原卷版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,能正确表示C语言中double类型常量的表达式是( )
A. 0.5E2.5 B. 5e0.5 C. .2E-3 D. E15
2. 设有定义:int a=10, b=3; 则表达式(a=a%b, a/b)的值是( )
A. 1 B. 3 C. 0 D. 3.333
3. 若有定义:int k=3; float x=2.5, y=4.8; 则表达式x+k%3*(int)(x+y)%2/4的值是( )
A. 2.500000 B. 2.750000 C. 3.500000 D. 0.000000
4. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a=2, b=1, c=2;
if(a<b)
if(b=0) c=0;
else c++;
printf("%d
",c);
}
A.0 B. 1 C. 2 D. 3
5. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int i, j, x=0;
for(i=0; i<2; i++)
{
x++;
for(j=0; j<=3; j++)
{
if(j%2) break;
x++;
}
x++;
}
printf("x=%d
", x);
}
A. x=4 B. x=6 C. x=8 D. x=12
6. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int a=5, b=4, c=3, d=2;
if(a>b>c)
printf("%d
", d);
else if((c-1>=d)==1)
printf("%d
", d+1);
else
printf("%d
", d+2);
return 0;
}
A. 2 B. 3 C. 4 D. 编译有错
7. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int i=1, sum=0;
while(i<=10)
{
if(i%2) continue;
sum+=i;
i++;
}
printf("%d
", sum);
}
A.0 B. 10 C. 30 D. 死循环
8. 以下程序的输出结果是( )
#include <stdio. h>
main()
{ int x , i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0) printf("%d ",x);
}
}
A. 39 81 B. 42 84 C. 26 68 D. 28 70
9. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[4][4]={{1,3,5,7},{2,4,6,8},{3,5,7,9},{4,6,8,10}};
int i, s=0;
for(i=0; i<4; i++)
s+=a[i][3-i];
printf("%d
", s);
}
A.18 B. 20 C. 22 D. 24
10.以下程序的输出结果是( )
#include <stdio.h>
main()
{
int i, k, a[10], p[3];
k=5;
for(i=0; i<10; i++) a[i]=i;
for(i=0; i<3; i++) p[i]=a[i*(i+1)];
for(i=0; i<3; i++) k+=p[i]*2;
printf("%d
", k);
}
A. 20 B. 21 C. 22 D. 23
11. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int a[], int n, int flag)
{
int i=0, j, t;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(flag?a[i]>a[j]:a[i]<a[j])
{
t=a[i]; a[i]=a[j]; a[j]=t;
}
}
main()
{
int c[10]={7,2,5,3,4,6,1,8,9,10}, i;
fun(c, 4, 1);
fun(c+4, 6, 0);
for(i=0; i<10; i++)
printf("%d,", c[i]);
}
A. 7,2,5,3,4,6,1,8,9,10, B. 2,3,5,7,10,9,8,6,4,1,
C. 2,3,5,7,10,9,8,6,1,4, D. 1,2,3,4,5,6,7,8,9,10,
12. 以下程序的输出结果是( )
#include <stdio.h>
f(int a)
{
int b=0;
static int c=3;
a=c++, b++;
return a;
}
main()
{
int a=2, i, k;
for(i=0; i<2; i++)
k=f(a++);
printf("%d
", k);
}
A. 4 B. 3 C. 2 D. 5
13. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int *x,int *y)
{
printf("%d %d ", *x, *y);
*x=3; *y=4;
}
main()
{
int x=1, y=2;
fun(&y, &x);
printf("%d %d
", x, y);
}
A. 2 1 1 2 B. 2 1 4 3 C. 1 2 1 2 D. 1 2 3 4
14. 设有以下结构体定义:
struct student
{
num;
har name[20];
float score;
} stu, *p=&stu;
则对结构体成员num的正确引用是( )
A.stu->num B. student.num C. p->num D. (*p).num
15. 以下程序的输出结果是( )
#include <stdio.h>
struct STU
{
char name[10];
int num;
};
void f1(struct STU c)
{
struct STU b={"LiGuo", 2042};
c=b;
}
void f2(struct STU *c)
{
struct STU b={"SunDan", 2044};
*c=b;
}
main()
{
struct STU a={"YangHan", 2041}, b={"WangLi", 2043};
f1(a); f2(&b);
printf("%d %d
", a.num, b.num);
}
A. 2041 2044 B. 2041 2043 C. 2042 2044 D. 2041 2044
16. 设有定义:a=5, b=6, *p=&a, *q=&b; 执行下列程序段后,a、b的值分别是( )
if(*p<*q)
{ *p=*p+*q; *q=*p-*q; *p=*p-*q; }
A.a=5, b=6 B. a=6, b=5 C. a=5, b=5 D. a=6, b=6
17. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10}, *p=a+3;
printf("%d
", p[5]);
}
A. 5 B. 6 C. 9 D. 8
18. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4]=a;
int i, j, sum=0;
for(i=0; i<3; i++)
for(j=0; j<2; j++)
sum+=*(*(p+i)+j);
printf("%d
", sum);
}
A. 33 B. 35 C. 78 D. 36
19. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
char s[]="ABCD", *p;
for(p=s; p<s+4; p++)
printf("%s
", p);
}
A.ABCD B. A C. ABCD D. ABCD
BCD B ABC BCD
CD C AB CD
D D A D
20. 以下程序的输出结果是( )
#include <stdio.h>
#include <string.h>
void fun(char *s, char *t)
{
while(*s) s++;
while((*s++=*t++)!='\0');
}
main()
{
char ss[20]="ABCD", tt[]="EFGH";
fun(ss, tt);
printf("%s
", ss);
}
A. ABCD B. EFGH C. ABCDEFGH D. ABCD\0EFGH
21. 以下程序的输出结果是( )
#include <stdio.h>
void swap(const char *x, const char *y)
{
const char *t;
t=x; x=y; y=t;
}
main()
{
const char *s1="abc", *s2="123";
swap(s1, s2);
printf("%s %s
", s1, s2);
}
A. abc123 B. abc 123 C. 123 abc D. 编译错误
22. 下面程序的运行结果是( )
#include <stdio.h>
main()
{ char ch[7]={"65ab21"};
int i,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=s*10+ch[i]-'0';
printf("%d
",s);
}
A.12ab56 B.6521 C.6 D.62
23.以下程序的输出结果是( )
#include <stdio.h>
main()
{
char str[][10]={"China","Beijing"}, *p=str[0];
printf("%s
", p+10);
}
A. Beijing B. China C. ng D. 输出不确定
24.以下程序的输出结果是( )
main()
{ char s[10]={'a','b','c','d'};
printf("%d",strlen(s+2));
}
A.值不确定 B.10 C.3 D.2
25.以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
int i;
for(i=0; i<3; i++)
printf("%d ", pa[i][2-i]);
printf("
");
for(i=0; i<3; i++)
printf("%d ", p[2-i]);
}
A.3 5 7 B. 3 6 9 C. 3 5 7 D. 3 6 9
3 2 1 3 2 1 3 5 7 3 6 9
二、简答题(共3小题,每题5分,共15分)
1. 阅读程序,写出运行结果
#include <stdio.h>
main()
{
int a=1, b=2, c=3, d=0;
if(a==1 && b++==2)
if(b!=2 || c--!=3)
printf("%d,%d,%d
", a,b,c);
else
printf("%d,%d,%d
", a,b,c);
else
printf("%d,%d,%d
", a,b,c);
}
2. 阅读程序,写出运行结果
#include <stdio.h>
f(int n)
{
static int a=1;
n+=a++;
return n;
}
main()
{
int a=3, s;
s=f(a);
s=s+f(a);
printf("%d
", s);
}
3.程序改错,程序功能如下:
学习优良奖的条件如下:所考5门课的总成绩在450分(含)以上;或者每门课都在88分(含)以上。输入某学生5门课的考试成绩,输出是否够学习优良奖的条件。
#include<stdio.h>
main()
{
int score,sum=0;
int i,n=1;
for(i=1;i<5;i++)
{scanf("%d",&score);
sum+=score;
if(score<=88 )n++;
}
if(sum>=450 || n==5 )
printf("The student is very good!
");
else
printf("The student is not very good!
");
}
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是:输出杨辉三角形的前10行。请补全程序。
#include <stdio.h>
main()
{
int a[10][10], i, j;
for(i=0; i<10; i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2; i<10; i++)
for(j=1; j<i; j++)
a[i][j]= ① ;
for(i=0; i<10; i++)
{
for(j=0; j<=i; j++)
printf("%5d", ② );
printf("
");
}
}
2. 下面程序的功能是:输入一个字符串,将字符串中的所有字符按ASCII码值从小到大排序后输出。请补全程序。
#include <stdio.h>
#include <string.h>
main()
{
char str[80], *p=str, temp;
int i, j, n;
gets(str);
n=strlen(str);
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if( ③ )
{
temp=*(p+i);
④ ;
*(p+j)=temp;
}
puts(str);
}
3. 下面程序的功能是:输入一行字符,统计其中有多少个单词(单词间用空格分隔)。请补全程序。
#include <stdio.h>
main()
{
char str[80];
int i, num=0, word=0;
char c;
gets(str);
for(i=0; (c=str[i])!='\0'; i++)
{
if(c==' ') ⑤ ;
else if(word==0)
{
⑥ ;
num++;
}
}
printf("单词数=%d
", num);
}
四、综合应用题(共2小题,每题10分,共20分)
1. 请编写函数fun,其功能是:
要求主函数中输入n的值,并输出计算结果。
2. 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《编程语言基础—C语言》高教版第五版
高频考点冲刺卷(七)解析版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 以下选项中,能正确表示C语言中double类型常量的表达式是( )
A. 0.5E2.5 B. 5e0.5 C. .2E-3 D. E15
答案:C
解析:C语言中浮点型常量使用科学计数法表示时,E/e后必须是整数,且E/e前必须有数字。A选项指数是小数,B选项指数是小数,D选项缺少小数部分。
2. 设有定义:int a=10, b=3; 则表达式(a=a%b, a/b)的值是( )
A. 1 B. 3 C. 0 D. 3.333
答案:C
解析:逗号表达式从左往右依次执行,表达式的值取决于最后一个表达式的值a=a%b=1,a/b=1/3=0(整数除法)。
3. 若有定义:int k=3; float x=2.5, y=4.8; 则表达式x+k%3*(int)(x+y)%2/4的值是( )
A. 2.500000 B. 2.750000 C. 3.500000 D. 0.000000
答案:A
解析:计算过程:k%3=0,所以整个表达式为x+0=2.5。
4. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a=2, b=1, c=2;
if(a<b)
if(b=0) c=0;
else c++;
printf("%d
",c);
}
A.0 B. 1 C. 2 D. 3
答案:C
解析:注意else与if的匹配规则:else与最近的if匹配。
因为a=2, b=1,a<b为假,else与内层if匹配,外层没有else,if语句不执行,所以c保持原值2。
5. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int i, j, x=0;
for(i=0; i<2; i++)
{
x++;
for(j=0; j<=3; j++)
{
if(j%2) break;
x++;
}
x++;
}
printf("x=%d
", x);
}
A. x=4 B. x=6 C. x=8 D. x=12
答案:B
解析:外层循环2次,每次外层循环:x++(1次),内层循环j=0时j%2=0执行x++,j=1时j%2=1执行break,退出内层循环,然后x++。所以每次外层循环x增加3,共2次,x=6。
6. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int a=5, b=4, c=3, d=2;
if(a>b>c)
printf("%d
", d);
else if((c-1>=d)==1)
printf("%d
", d+1);
else
printf("%d
", d+2);
return 0;
}
A. 2 B. 3 C. 4 D. 编译有错
答案:B
解析: a>b>c即(5>4)>3,5>4为真(值为1),1>3为假,执行else if。(c-1>=d)即2>=2为真(值为1),所以输出d+1=3。
7. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int i=1, sum=0;
while(i<=10)
{
if(i%2) continue;
sum+=i;
i++;
}
printf("%d
", sum);
}
A.0 B. 10 C. 30 D. 死循环
答案:D
解析:当i为奇数时,i%2为1,执行continue,跳过i++,导致i永远不变,陷入死循环。
8. 以下程序的输出结果是( )
#include <stdio. h>
main()
{ int x , i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0) printf("%d ",x);
}
}
A. 39 81 B. 42 84 C. 26 68 D. 28 70
答案:D
解析:寻找满足以下条件的i(1≤i≤100):i+1是2的倍数,i+2是3的倍数,i+3是7的倍数,输出i+3的值,i+3的值要能够同时被i+1,i+2,i+3整除。
9. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[4][4]={{1,3,5,7},{2,4,6,8},{3,5,7,9},{4,6,8,10}};
int i, s=0;
for(i=0; i<4; i++)
s+=a[i][3-i];
printf("%d
", s);
}
A.18 B. 20 C. 22 D. 24
答案:C
解析:求反对角线元素和:a[0][3]=7, a[1][2]=6, a[2][1]=5, a[3][0]=4,和为22。
10.以下程序的输出结果是( )
#include <stdio.h>
main()
{
int i, k, a[10], p[3];
k=5;
for(i=0; i<10; i++) a[i]=i;
for(i=0; i<3; i++) p[i]=a[i*(i+1)];
for(i=0; i<3; i++) k+=p[i]*2;
printf("%d
", k);
}
A. 20 B. 21 C. 22 D. 23
答案:B
解析: p[0]=a[0]=0, p[1]=a[2]=2, p[2]=a[6]=6,k=5+0×2+2×2+6×2=5+0+4+12=21。
11. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int a[], int n, int flag)
{
int i=0, j, t;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(flag?a[i]>a[j]:a[i]<a[j])
{
t=a[i]; a[i]=a[j]; a[j]=t;
}
}
main()
{
int c[10]={7,2,5,3,4,6,1,8,9,10}, i;
fun(c, 4, 1);
fun(c+4, 6, 0);
for(i=0; i<10; i++)
printf("%d,", c[i]);
}
A. 7,2,5,3,4,6,1,8,9,10, B. 2,3,5,7,10,9,8,6,4,1,
C. 2,3,5,7,10,9,8,6,1,4, D. 1,2,3,4,5,6,7,8,9,10,
答案:C
解析: fun(c,4,1)对前4个升序排序→2,3,5,7。fun(c+4,6,0)对从第5个开始的6个元素降序排序→10,9,8,6,4,1。合并为:2,3,5,7,10,9,8,6,4,1。
12. 以下程序的输出结果是( )
#include <stdio.h>
f(int a)
{
int b=0;
static int c=3;
a=c++, b++;
return a;
}
main()
{
int a=2, i, k;
for(i=0; i<2; i++)
k=f(a++);
printf("%d
", k);
}
A. 4 B. 3 C. 2 D. 5
答案:A
解析: 第一次调用:c=3,a=c++,a=3,c=4。第二次调用:c=4,a=c++,a=4,c=5。k保存最后返回值4。
13. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int *x,int *y)
{
printf("%d %d ", *x, *y);
*x=3; *y=4;
}
main()
{
int x=1, y=2;
fun(&y, &x);
printf("%d %d
", x, y);
}
A. 2 1 1 2 B. 2 1 4 3 C. 1 2 1 2 D. 1 2 3 4
答案:B
解析: fun(&y,&x)传递y和x的地址,在fun中*x是y的值2,*y是x的值1,输出"2 1"。然后*x=3修改y为3,*y=4修改x为4。返回后输出"4 3"。
14. 设有以下结构体定义:
struct student
{
num;
har name[20];
float score;
} stu, *p=&stu;
则对结构体成员num的正确引用是( )
A.stu->num B. student.num C. p->num D. (*p).num
答案:C
解析: p是指针,可使用->或(*p).访问成员,C和D都正确,但单选题中C是最佳答案。15. 以下程序的输出结果是( )
#include <stdio.h>
struct STU
{
char name[10];
int num;
};
void f1(struct STU c)
{
struct STU b={"LiGuo", 2042};
c=b;
}
void f2(struct STU *c)
{
struct STU b={"SunDan", 2044};
*c=b;
}
main()
{
struct STU a={"YangHan", 2041}, b={"WangLi", 2043};
f1(a); f2(&b);
printf("%d %d
", a.num, b.num);
}
A. 2041 2044 B. 2041 2043 C. 2042 2044 D. 2041 2044
答案:D
解析: f1传值调用,不改变a;f2传地址调用,改变b为{"SunDan",2044}。所以输出2041 2044。
16. 设有定义:a=5, b=6, *p=&a, *q=&b; 执行下列程序段后,a、b的值分别是( )
if(*p<*q)
{ *p=*p+*q; *q=*p-*q; *p=*p-*q; }
A.a=5, b=6 B. a=6, b=5 C. a=5, b=5 D. a=6, b=6
答案:B
解析: *p=a=5, *q=b=6,*p<*q为真,执行交换,结果是a=6,b=5。
17. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10}, *p=a+3;
printf("%d
", p[5]);
}
A. 5 B. 6 C. 9 D. 8
答案:C
解析: p指向a[3]即4,p[5]相当于*(p+5),即a[8]=9。
18. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4]=a;
int i, j, sum=0;
for(i=0; i<3; i++)
for(j=0; j<2; j++)
sum+=*(*(p+i)+j);
printf("%d
", sum);
}
A. 33 B. 35 C. 78 D. 36
答案:A
解析:此程序为求二位数组中第i行j列的累加和。i的取值为0,1,2。j的取值为0,1。所以累加的为第1、2、3行的前两个元素的值即sum=1+2+5+6+9+10=33。
19. 以下程序的输出结果是( )
#include <stdio.h>
main()
{
char s[]="ABCD", *p;
for(p=s; p<s+4; p++)
printf("%s
", p);
}
A.ABCD B. A C. ABCD D. ABCD
BCD B ABC BCD
CD C AB CD
D D A D
答案:D
解析: p依次指向'A'、'B'、'C'、'D',输出p指向的字符串,分别是"ABCD"、"BCD"、"CD"、"D"。
20. 以下程序的输出结果是( )
#include <stdio.h>
#include <string.h>
void fun(char *s, char *t)
{
while(*s) s++;
while((*s++=*t++)!='\0');
}
main()
{
char ss[20]="ABCD", tt[]="EFGH";
fun(ss, tt);
printf("%s
", ss);
}
A. ABCD B. EFGH C. ABCDEFGH D. ABCD\0EFGH
答案:C
解析: fun函数将tt字符串连接到ss后面,结果是"ABCDEFGH"。
21. 以下程序的输出结果是( )
#include <stdio.h>
void swap(const char *x, const char *y)
{
const char *t;
t=x; x=y; y=t;
}
main()
{
const char *s1="abc", *s2="123";
swap(s1, s2);
printf("%s %s
", s1, s2);
}
A. abc123 B. abc 123 C. 123 abc D. 编译错误
答案:B
解析: 调用时指针x指向s1,指针y指向s2,调用结束后指针x指向s2,指针y指向s1。不影响main中的s1和s2,所以输出不变。
22. 下面程序的运行结果是( )
#include <stdio.h>
main()
{ char ch[7]={"65ab21"};
int i,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=s*10+ch[i]-'0';
printf("%d
",s);
}
A.12ab56 B.6521 C.6 D.62
答案:C
解析:for循环的循环体只当i=0时执行一次,i+=2后,i的值为3,此时循环条件ch[i]>='0'&&ch[i]<='9'的值为0,循环结束,所以s的值为6。
23.以下程序的输出结果是( )
#include <stdio.h>
main()
{
char str[][10]={"China","Beijing"}, *p=str[0];
printf("%s
", p+10);
}
A. Beijing B. China C. ng D. 输出不确定
答案:A
解析:str是二维数组,str[0]="China"占6字节(含'\0'),str[1]="Beijing"。p指向str[0],p+10指向str[1]的开始,输出"Beijing"。
24.以下程序的输出结果是( )
main()
{ char s[10]={'a','b','c','d'};
printf("%d",strlen(s+2));
}
A.值不确定 B.10 C.3 D.2
答案:D
解析:strlen(s+2)从s[2](即'c')开始计算字符串长度,遇到s[4]的'\0'结束,中间包含'c'和'd'两个字符,故长度为2。
25.以下程序的输出结果是( )
#include <stdio.h>
main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
int i;
for(i=0; i<3; i++)
printf("%d ", pa[i][2-i]);
printf("
");
for(i=0; i<3; i++)
printf("%d ", p[2-i]);
}
A.3 5 7 B. 3 6 9 C. 3 5 7 D. 3 6 9
3 2 1 3 2 1 3 5 7 3 6 9
答案:A
解析: pa[i][2-i]:i=0时pa[0][2]=a[0][2]=3;i=1时pa[1][1]=a[1][1]=5;i=2时pa[2][0]=a[2][0]=7。p[2-i]:p指向a[0][0],p[2]=a[0][2]=3;p[1]=a[0][1]=2;p[0]=a[0][0]=1。所以输出"3 5 7 3 2 1"。
二、简答题(共3小题,每题5分,共15分)
1. 阅读程序,写出运行结果
#include <stdio.h>
main()
{
int a=1, b=2, c=3, d=0;
if(a==1 && b++==2)
if(b!=2 || c--!=3)
printf("%d,%d,%d
", a,b,c);
else
printf("%d,%d,%d
", a,b,c);
else
printf("%d,%d,%d
", a,b,c);
}
答案: 1,3,3
解析:a==1为真,b++==2:b++为后自增,先使用2==2后,自增为3,条件为真;进入内层if,b!=2为真(b=3),逻辑或短路,不执行c--!=3,c保持3。输出1,3,3。
2. 阅读程序,写出运行结果
#include <stdio.h>
f(int n)
{
static int a=1;
n+=a++;
return n;
}
main()
{
int a=3, s;
s=f(a);
s=s+f(a);
printf("%d
", s);
}
答案: 9
解析: 第一次调用f(3):a是静态局部变量,初始为1,n=3+1=4,a自增为2,返回4。第二次调用f(3):a保持2,n=3+2=5,a自增为3,返回5。s=4+5=9。
3.程序改错,程序功能如下:
学习优良奖的条件如下:所考5门课的总成绩在450分(含)以上;或者每门课都在88分(含)以上。输入某学生5门课的考试成绩,输出是否够学习优良奖的条件。
#include<stdio.h>
main()
{
int score,sum=0;
int i,n=1;
for(i=1;i<5;i++)
{scanf("%d",&score);
sum+=score;
if(score<=88 )n++;
}
if(sum>=450 || n==5 )
printf("The student is very good!
");
else
printf("The student is not very good!
");
}
答案:
①n=0
②i<=5
③score>=88
④sum>=&&n==5
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是:输出杨辉三角形的前10行。请补全程序。
#include <stdio.h>
main()
{
int a[10][10], i, j;
for(i=0; i<10; i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2; i<10; i++)
for(j=1; j<i; j++)
a[i][j]= ① ;
for(i=0; i<10; i++)
{
for(j=0; j<=i; j++)
printf("%5d", ② );
printf("
");
}
}
答案: ①:a[i-1][j-1]+a[i-1][j],②:a[i][j]
2. 下面程序的功能是:输入一个字符串,将字符串中的所有字符按ASCII码值从小到大排序后输出。请补全程序。
#include <stdio.h>
#include <string.h>
main()
{
char str[80], *p=str, temp;
int i, j, n;
gets(str);
n=strlen(str);
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if( ③ )
{
temp=*(p+i);
④ ;
*(p+j)=temp;
}
puts(str);
}
答案: ③:*(p+i)>*(p+j),④:*(p+i)=*(p+j)
3. 下面程序的功能是:输入一行字符,统计其中有多少个单词(单词间用空格分隔)。请补全程序。
#include <stdio.h>
main()
{
char str[80];
int i, num=0, word=0;
char c;
gets(str);
for(i=0; (c=str[i])!='\0'; i++)
{
if(c==' ') ⑤ ;
else if(word==0)
{
⑥ ;
num++;
}
}
printf("单词数=%d
", num);
}
答案:⑤:word=0,⑥:word=1
四、综合应用题(共2小题,每题10分,共20分)
1. 请编写函数fun,其功能是:
要求主函数中输入n的值,并输出计算结果。
答案:
参考程序:
#include<stdio.h>
#include<math.h>
double fun(int n)
{
int i;
double s=1.0,p=1.0;
for(i=2;i<=n;i++)
{
p+=pow(i,0.5);
s+=p;
}
return s;
}
main()
{int n,s;
printf("请输入n的值:");
scanf("%d",&n);
s=fun(n);
printf("%d",s);
}
2. 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
答案:
参考程序:
double fun(int n)
{
int I;
double sum=0.0;
for(i=1;i<=n;i++)
if(i%5==0 || i%9==0)
sum+=1.0/I;
return sum;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$