1、福建省二级 C语言-2 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:60.00)1.以下不正确的 if语句是_。(分数:2.00)A.if(xy);B.if(x=yC.if(x!=y)scanf(“%d“, D.if(xy)x+; y+;2.if语句嵌套使用时,else 总是与_配对。(分数:2.00)A.同一行上的 ifB.其之前最近的 ifC.其之前最近的未配对的 ifD.缩排位置相同的 if3.以下程序的输出结果是_。 #includestdio.h int main() int a=-1, b=1, k; if(+a0 else printf(
2、“%d%d/n“, b, a); return 0; (分数:2.00)A.-1 1B.0 1C.1 0D.0 04.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是_。(分数:2.00)A.if(abelse k=0;B.if(ab|bc)k=1;C.if(a=b)k=0;else if(b=c)k=1;else k=0;D.if(ab)k=1;else if(bc)k=1;5.以下程序运行后的输出结果是_。 #includestdio.h int main() int a=15, b=22, m=1; switch(a%3) case 0:switch(b%5) defau
3、lt:m-; case 2:m+; break; case 3:m-; break; case 1:m+; printf(“%d/n“, m); return 0; (分数:2.00)A.0B.1C.2D.36.以下描述中正确的是_。(分数:2.00)A.do-while语句构成的循环,当 while后的表达式的值为零时结束循环B.do-while语句构成的循环,当 while后的表达式的值为非零时结束循环C.do-while语句构成的循环只能用 break语句退出D.do-while语句构成的循环可以用 continue语句退出7.以下程序执行后,输出结果为_。 int main() int
4、 x, y; for(x=1, y=1; y50; y+) if(x=10)break; if(x%2=1) x+=5; continue; X-=3; printf(“x=%d“, x); return 0; (分数:2.00)A.10B.11C.12D.138.下列程序段的执行次数为_。 int a=1; while(1) a+; +a; if(a4)break;(分数:2.00)A.1B.2C.死循环D.错误9.下面程序的运行结果是_。 int main() int x=0, y=0; while(x15) y+; x+=+y; printf(“%d, %d“, y, x); retur
5、n 0; (分数:2.00)A.20,7B.6,12C.20,8D.8,2010.对于下面程序段,描述中正确的是_。 int i=100; while(i=0) i=i-1;(分数:2.00)A.while循环执行 100次B.循环体语句一次也不执行C.while循环执行 99次D.循环体语句执行一次11.下面程序的运行结果是_。 int main() int a=3, b=2, c=1; while(abc) a=a+b; b=a-b; a=a-b; c=a+b; printf(“%d, %d, %d“, a, b, c); return 0; (分数:2.00)A.2,3,5B.3,2,5
6、C.2,3,1D.3,2,112.对于下面程序段,描述中正确的是_。 x=2; do x*=x; while(!x!=0);(分数:2.00)A.是死循环B.循环执行 2次C.循环执行 1次D.有语法错误13.若有定义:int k; ,下面不会出现死循环的程序段是_。(分数:2.00)A.k=0=while(k%2=k+%2)k+;B.k=0;while(1)k=k%100+1; if(k100)break;C.k=0;do+k;while(k0);D.for(;);14.从键盘输入 2473,下面程序的运行结果是_。 #includestdio.h int main() int c; whi
7、le(c=getchar()!=“/n“) switch(c-“2“) case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3); default: putchar(c+2); break; printf(“/n“); return 0; (分数:2.00)A.668977B.668966C.66778777D.668876615.下面程序的运行结果是_。 #includestdio.h int main() int a, b; for(a=1, b=1; a=100; a+) if(b=20
8、)break; if(b%3=1) b+=3; continue; b-=5; printf(“%d/n“, a); return 0; (分数:2.00)A.7B.8C.9D.1016.C语言中数组元素引用时,其下标允许是_。(分数:2.00)A.关系表达式B.整型表达式C.任何类型的表达式D.整型常量或整型表达式17.以下对一维整型数组 k正确定义的是_。(分数:2.00)A.k20;B.int n=20, kn;C.#define N 20int kN;D.int n;scanf(“%d:, int kn;18.在 C语言中,二维数组元素在内存中的存放顺序是_。(分数:2.00)A.按行
9、存放B.按列存放C.由用户自己定义D.由编译器决定19.以下一组对数组 a初始化的语句中,给 a数组所有元素赋初值 0的正确语句是_。(分数:2.00)A.int a9=9*0;B.int a9=0;C.int a9=;D.int a9=0;20.以下能对二维数组 m进行正确初始化的语句是_。(分数:2.00)A.int m2=1, 2, 2, 0, 3;B.int m24=1, 2, 3, 4, 2, 5;C.int m3=1, 2, 3, 4, 5;D.int m3=1, , 2, 5, 3;21.若有说明:int a10; ,则对 a数组元素引用不正确的是_。(分数:2.00)A.a4+
10、5B.a10C.a10-10D.a522.若有说明:int k34; ,则对 k数组元素的正确引用是_。(分数:2.00)A.a20B.a1, 3C.a24D.a(2)(1)23.执行 int a3=1, 2, 3, 4, 5, 6, 7;语句后,a10的值是_。(分数:2.00)A.1B.3C.5D.424.以下关于数组的描述正确的是_。(分数:2.00)A.数组的大小是固定的,但可以有不同数据类型的数组元素B.数组的大小是可变的,但所有数组元素的数据类型必须相同C.数组的大小是固定的,所有数组元素的数据类型必须相同D.数组的大小是可变的,可以有不同数据类型的数组元素25.以下对二维数组 a
11、正确定义的语句是_。(分数:2.00)A.int a3;B.float a(3, 4);C.float a34;D.int a3, 4;26.若有说明:int k4=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11; ,则 k数组的第一维长度是_。(分数:2.00)A.3B.2C.1D.无确定值27.以下程序段的运行结果是_。 int i, a10; for(i=0; i10; i+) ai=i; for(i=0; i10; i+, i+) ai+=2; for(i=0; i10; i+) printf(“%d“, ai);(分数:2.00)A.0123456789B.032
12、54769811C.21436587109D.23456789101128.以下程序的运行结果是_。 #includestdio.h int main() int k9=19, 16, 17, 15, 13, 11, 10, 9, i=1, s=0; while(i9 printf(“%d/n“, s); return 0; (分数:2.00)A.33B.52C.101D.11029.以下程序的运行结果是_。 #includestdio.h int main() int m3=1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11; int i, k=2; for(i=0; i3;
13、 i+) print(“%d“, mki); return 0; (分数:2.00)A.4 5 7B.2 7 9C.9 10 11D.6 8 930.设有如下程序段: int a34=1, 0, 2, 1, 0, 2, 1, 0, 1, 1, 0, 1, i, j, sum=0; for(i=0; i=2; i+9) for(j=0; j=i; j+) sum+=aij; 则执行该程序段后,sum 的值是_。(分数:2.00)A.0B.4C.5D.3二、填空题(总题数:21,分数:40.00)31.以下程序运行时输入 12,输出结果是 1。 #includestdio.h int main()
14、 char ch1, ch2; int n1, n2; ch1=getehar(); ch2=getchar(); n1=ch1-“0“; n2=n1*10+(ch2-“0“); printf(“%d/n“, n2); return 0; (分数:2.00)32.以下程序运行后的输出结果是 1。 #includestdio.h int main() int x=3, y=0, z=0; if(x=y+z)printf(“* *“); else printf(“#“); return 0; (分数:2.00)33.以下程序运行时输入 10,20,输出结果是 1。 #includestdio.h
15、int main() int x, y, t=0; scanf(“%d, %d“, if(xy) t=x; x=y; y=t; printf(“%d, %d/n“, x, y); return 0; (分数:2.00)34.以下程序运行时输入 9,输出结果是 1。 #includestdio.h int main() int n; scanf(“%d“, if(n+10) printf(“%d/n“, n); else printf(“%d/n“, n-); return 0; (分数:2.00)35.以下程序运行后的输出结果是 1。 #includestdio.h int main() in
16、t n=0, m=-10, x=2; if(!n)x-=1; if(-m)x-=2; if(x)x-=3; printf(“%d/n“, x); return 0; (分数:2.00)36.下面程序的功能是输入等比数列的首项(a)、公比(d)和项数(n),计算等比数列的和并输出,请把程序补充完整。 #includestdio.h int main() int a, d, n, i; int x, sum=0; scanf(“%d%d%d“, x= 1; for(i=1; i2=n; i+) sum+=x; 2; printf(“a=%d, d=%d, n=%d, sum=%d“, a, d,
17、n, sum); return 0; (分数:2.00)37.下面程序的功能是输出如图所示的矩阵。请把程序补充完整。 (分数:2.00)38.下面程序的功能是计算多项式 (分数:2.00)39.如果用 0至 9之间不同的三个数构成一个三位数,且各位数字之和是 5,下面程序将输出这些数,并统计出共有多少种方法,请把程序补充完整。 #includestdio.h int main() int i, j, k, count=0; for(i=1; i=9; i+) for(j=0; j=9; j+) if( 1) continue; else for(k=0; k=9; k+) if( 2) pri
18、ntf(“%4d“, i*100+j*10+k); count+; printf(“n%d“, count); return 0; (分数:2.00)40.有 1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请把程序补充完整。 #includestdio.h int main() int day, x1, x2; day=0; x1=1020; while( 1) x2= 2; x1=x2; day+; printf(“day=%d/n“, day); return 0; (分数:2.00)41.下面程序的功能是求零件总数:有一堆零件,如果分成 4个零件一组的
19、若干组,则多 2个;若分成 7个零件一组,则多 3个;若分成 9个零件一组,则多 5个,这堆零件最少有几件?请把程序补充完整。 #includestdio.h int main() int i=1, s=1; do if(i-2)%4=0) if(!(i-3)%7) if( 1) printf(“%d“, i); 2 i+; while(s); return 0; (分数:2.00)42.下面程序的功能是求 1至 1000之间满足“用 2除余 1,用 3除余 2,用 5除余 3”的数,且每行打印11个数,请把程序补充完整。 #includestdio.h int main() int i=1,
20、 j=0; do if( 1) printf(“%5d“, i); j=j+1; if( 2)printf(“/n“); i=i+1; while(i1000); return 0; (分数:2.00)43.父亲说:今年哥哥年龄的平方加上弟弟的年龄,等于 1119;弟弟年龄的平方加上哥哥的年龄,等于933;他们现在的年龄都不超过 35岁。下面程序的功能是计算哥哥和弟弟的年龄,请把程序补充完整。 #includestdio.h int main() int i, j; for(i=1; i=35; i+) j= 1; if( 2) break; printf(“The old brother“s
21、 age is: %d/n“, i); printf(“The young brother“s age is: %d/n“, j); return 0; (分数:2.00)44.以下是一个投标公司中标评分统计程序,数组 r存有 9个评委的打分,统计时,去掉其中的 1个最高分与 1个最低分,其他 7个分数的平均分即是最后得分,请把程序补充完整。 #includestdio.h int main() float r9=8.9, 7.6, 9.1, 8.5, 8.6, 8.3, 9.0, 8.4, 8.7; float sum, ave, max, min; int i; 1; for(i=0; i
22、9; i+) sum+= 2; max=min=r0; for(i=1; i9; i+) if( 3) max=ri; if(minri) min=ri; ave= 4; printf(“Average=%.2f/n“, ave); return 0; (分数:2.00)45.下面程序的功能是给一维数组 a输入任意 5个小于 10的正整数,并输出经过 5次逐位右移一位形成的方阵,请把程序补充完整。假设输入为:5 6 8 4 3,则输出的结果为: 3 5 6 8 4 4 3 5 6 8 8 4 3 5 6 6 8 4 3 5 5 6 8 4 3 #includestdio.h int main(
23、) int a5, i, j, k, n; for(i=0; i5; i+) scanf(“%d“, for(n=1; n=5; n+) k=a4; for( 1; j=0; j-) aj+1=aj; 2 for(i=0; i5; i+) printf(“%d“, ai); printf(“/n“); return 0; (分数:2.00)46.下面程序的功能是从键盘输入任意 20个整数存放在 a数组中,统计其中能被 3或 7整除的个数,并依次将这些数存入 b数组中,请把程序补充完整。 #includestdio.h int main() int a20, b20, i, j=0, n=0;
24、for(i=0; i20;i+) scanf(“%d“, for(i=0; i20; i+) if( 1 | ai%7=0) 2=ai; n+; printf(“Array b is:/n“); for(j=0; 3; j+) printf(“%d“, bj); printf(“/n“); printf(“n=%d/n“, n); return 0; (分数:2.00)47.下面程序用直接交换排序法实现对键盘输入的任意 25个数按从大到小顺序排列,请把程序补充完整。 #includestdio.h int main() int m25; int i, j, temp; printf(“Ente
25、r array m:/n“); for(i=0; i25; i+) scanf(“%d“, for(i=0; i24; i+) for( 1; j25; j+) if(mimj) temp=mi; mi=mj; 2 printf(“Now array m is:/n“); for(i=0; i25; i+) printf(“%d“, mi); printf(“/n“); return 0; (分数:2.00)48.下面程序用以计算数组 X中所存放的由键盘输入的 n个采样值的方差,请把程序补充完整。方差公式如下: (分数:2.00)49.下面程序用以求矩阵 a和 b的差,结果存入矩阵 c并按矩阵
26、形式输出。请填空完善程序。 #includestdio.h int main() int a34=2, 3, 1, 1, 5, 6, 7, 9, 11, 15, 18, 36; int b34=7, 9, 4, 5, 12, 13, 17, 22, 35, 11, 46, 10; int i, j, c34; for(i=0; i3; i+) for(j=0; j4; j+) 1 for(i=0; i3; i+) for(j=0; j4; j+) printf(“%4d“, cij); 2 return 0; (分数:2.00)50.下面程序的功能是将方阵 m中左下半三角(含对角线)所有元素值
27、增加 10,右上半三角所有元素值乘以5的形式重置,并输出重置前及重置后的方阵 m。请填空完善程序。 #includestdio.h int main() int m55=2, 3, 1, 1, 5, 6, 7, 9, 11, 15, 18, 36, 17, 26, 22, 8, 25, 10, 12, 20, 25, 4, 13, 30, 16; int i, j; printf(“Previous array is:/n“); for(i=0; i5; i+) for(j=0; j5; j+) printf(“%3d“, mij); printf(“/n“); for(i=0; i5; i+
28、) for(j=0; j5; j+) if( 1) mij+=10; else 2; printf(“Current array is:/n“); for(i=0; i5; i+) for(j=0; j5; j+) printf(“%3d“, mij); printf(“/n“); return 0; (分数:1.00)51.下面程序的功能是根据键盘输入的 n(2n9),自动产生一个 nn的方阵 a,该方阵将自然数以 S形形式填充,请填空完善程序。如,n 值为 5,则将产生如下方阵。 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 2
29、2 23 24 25 #includestdio.h int main() int a1010; int i, j, n; printf(“Input n:/n“); scanf(“%d“, for(i=0; in; i+) for(j=0; jn; j+) if( 1) aij=n*i+j+1; else aij=(i+1)*n-j; printf(“Array a is:/n“); for(i=0; in; i+) for(j=0; j 2; j+) printf(“%4d“, aij); printf(“/n“); return 0; (分数:1.00)福建省二级 C语言-2 答案解析(
30、总分:100.00,做题时间:90 分钟)一、选择题(总题数:20,分数:40.00)1.一个 C语言源程序的执行_。(分数:2.00)A.从 main()函数开始,直到 main()函数结束 B.从第一个函数开始,直到最后一个函数结束C.从第一条语句开始,直到最后一条语句结束D.从 main()函数开始,直到最后一个函数结束解析:2.C语言中,合法的整型常数是_。(分数:2.00)A.-068B.0x48a C.1, 256D.1.0解析:3.以下关于 C语言变量的叙述中,错误的是_。(分数:2.00)A.不同基本类型的变量之间不能进行混合运算 B.在定义变量的同时可对变量赋初值C.变量按所
31、定义的类型存放数据D.程序中的变量必须先定义后使用解析:4.若已定义 int a, b=6;执行语句 a=-b; 后,变量 a、b 的值分别_。(分数:2.00)A.5 5 B.5 6C.6 5D.6 6解析:5.以下程序运行时,应从键盘输入_,则输出结果是:3 6。 #includestdio.h int main() int a, b; scanf(“%d, %d“, printf(“%d %d/n“, a, b); return 0; (分数:2.00)A.3,6 B.3 6C.6,3D.a=3 b=6解析:6.若已定义 int a=1, b=2, c=3, d=4, k=2, t=2;
32、 ,执行(k=ab)|(t=cd)后 t的值是_。(分数:2.00)A.“false“B.2 C.0D.1解析:7.以下关于运算符优先顺序的描述中,正确的是_。(分数:2.00)A.关系运算符算术运算符赋值运算符逻辑与运算符B.逻辑与运算符关系运算符算术运算符赋值运算符C.赋值运算符逻辑与运算符关系运算符算术运算符 D.算术运算符关系运算符赋值运算符逻辑与运算符解析:8.执行以下程序,若从键盘输入 1,则输出结果是_。 #includestdio.h int main() int k; scanf(“%d“, switch(k) case 1: printf(“%d“, k+); case 2
33、: printf(“%d“, k+); case 3: printf(“%d“, k+); break; default: printf(“Full!/n“); return 0; (分数:2.00)A.1B.2C.234D.123 解析:9.以下不是无限循环的语句是_。(分数:2.00)A.while(1)a+;B.for(m=0, n=1; n+m; n=i+)i=n; C.for(;a+=i);D.for(i=10;i-)sum+=i;解析:10.以下程序运行结果是_。 #includestdio.h int main() int a=1, 3, 4, 6, 9, i, x=1; for
34、(i=0; i3; i+) x+=ai+1; printf(“%d/n“, x); return 0; (分数:2.00)A.9B.14 C.15D.10解析:11.执行 int a4=2, 3, 5, 7, 8, 9, 11, 13, 15; 语句后,a12的值是_。(分数:2.00)A.11 B.3C.5D.9解析:12.以下给字符数组 str定义和赋值,正确的是_。(分数:2.00)A.char str10;str=“good“;B.char str10;strcpy(str, “abdefghijklmnxy“);C.char str10=“abdefghijklmnxy“;D.cha
35、r str=“good“; 解析:13.下列叙述错误的是_。(分数:2.00)A.形式参数也属局部变量B.在其他函数中定义的变量在主函数中不能使用C.主函数中定义的变量属全局变量 D.全局变量的作用域从定义该变量的位置开始至本源文件结束解析:14.下列叙述错误的是_。(分数:2.00)A.C程序在执行过程中对预处理命令行进行处理 B.预处理命令行都必须以#号开始C.在程序中凡是以#号开始的语句行都是预处理命令行D.以下是正确的宏定义:#define CR 45解析:15.对于基类型相同的两个指针变量 p1、p2,则下列运算不合理的是_。(分数:2.00)A.p1=p2B.p1+p2 C.p1p
36、2D.p2-p1解析:16.以下程序的运行结果是_。 #includestdio.h void fun(int x, int y, int*p) *p=x+y; int main() int a, b, c; fun(5, 3, fun(7, a, fun(a, b, printf(“%d, %d, %d/n“, a, b, c); return 0; (分数:2.00)A.0, 0, 0B.8, 15, 0C.8, 0, 0D.8, 15, 23 解析:17.若有以下结构类型定义及结构变量说明: struct example int a; char se; vl; 则_是正确的结构变量声明或
37、结构变量成员引用。(分数:2.00)A.example.a=50;B.example v2; v2.a=50;C.struct example v2; v2.a=50; D.struct v2; v2.a=50;解析:18.以下程序的运行结果是_。 #includestdio.h struct STU char name10; float score3; ; int main() struct STU s3=“zhang“, 95, 89, 78, “wang“, 77, 68, 80, “hong“, 67, 76, 70; struct STU*p=s; int i; float sum=
38、0; for(i=0; i3; i+) sum=sum+p-scorei; printf(“%6.2f/n“, sum); return 0; (分数:2.00)A.239.00B.262.00 C.225.00D.213.00解析:19.以下程序段执行后,变量 c的值为_。 int a=3, b=2, c; c=(a b)2;(分数:2.00)A.11B.12C.3D.4 解析:20.C语言中系统默认的文件类型有_。(分数:2.00)A.类型文件和文本文件B.二进制文件和类型文件C.文本文件和记录文件D.文本文件和二进制文件 解析:二、程序填空题(总题数:1,分数:20.00)(在每对/*/
39、之间填写内容,完成题目的要求)(分数:20.00)(1).以下程序的功能是将输入字符串中所有的字符“k“删除。 如:输入:adklhjkyuer 输出:adlhjyuer /*/ 1/*/ int main() char str100; int/*/ 2/*/; printf(“Enter string:“); gets(str); for(i=j=0; stri!=“/0“; i+) if(stri!=“k“) strj=stri; /*/ 3/*/; strj=“/0“; printf(“Now sting is:“); puts(str); return 0; (分数:10.00)解析:
40、#includestdio.h i, j j+(2).以下程序用以输出两个正整数 a和 b,它们满足 a能被 13整除,b 能被 11整除,且 a与 b之和为316。 #includestdio.h int main() int i=0, a, b; do i+; b=316-13*i; while(/*/ 1/*/); a=13*i; printf(“%d+%d=316/n“, a, b); return 0; (分数:10.00)解析:b%11三、程序改错题(总题数:1,分数:20.00)(修改每对/*/之间存在的错误,完成题目的要求)(分数:20.00)(1).以下程序用以输出 1100
41、 之间所有偶数的累加和。 #includestdio.h int main() /*/ 1 int i/*/; int sum=0; while(i+, i=100) if(/*/ 2 i=(i/2)*2/*/) continue; sum+=i; printf(“sum=%d/n“, sum); return 0; (分数:10.00)解析:int i=0 i!=(i/2)*2 或 i%2!=0(2).以下程序实现如下图形的输出。 1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1 #includestdio.h int main() /*/
42、1 int a5, 5; /*/ int i, j; for(i=0; i5; i+) for(j=0; j5; j+) if(/*/ 2 j=i/*/) aij=0; else /*/ 3 aij=i+2-j; /*/ printf(“%3d“, aij); printf(“/n“); return 0; (分数:10.00)解析:int a55; ji aij=i+1-j;四、编程题(总题数:1,分数:20.00)(补充每对/*/之间的程序段,完成题目的要求)(分数:20.00)(1).程序中的 fun()函数用以完成如下数学表达式。 (分数:10.00)_正确答案:()解析:double
43、 z; if(x0) z=(x+1)/2; else if(x=0) z=0.568; else z=x*x/2; return z;(2).请编写程序中的 letters()函数,主函数调用该函数用以将字符数组 str1中出现的英文字母依次存放在字符数组 str2中(所有大写字母在前、小写字母在后)。如: str1中字符串:adKDsdi798?sdfAE str2中字符串:KDAEadsdisdf #includestdio.h void letters(char s, char str) /*/ /*/ int main() char str1100, str2100; printf(“Enter a string:“); gets(str1); letters(str1, str2); printf(“string is converted:“); puts(str2); return 0; (分数:10.00)_正确答案:()解析:int i=0, j=0; while(si!=“/0“) if(si=“A“ j+; i+; i=0; while(si!=“/0“) if(si=“a“ j+; i+; strj=“/0“;