1、二级 C 语言-基本语句、选择结构及答案解析(总分:82.50,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:40.00)1.若变量已正确定义,有以下程序段:int a=3, b=5, c=7;if(ab)a=b; c=a;if(c!=a)c=b;printf(“%d, %d, %d/n“, a, b, c);其输出结果是: A.程序段有语法错误 B.3,5,3 C.3,5,5 D.3,5,7(分数:1.00)A.B.C.D.2.若变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是_。 A.n=0; while(ch=getchar()!=!/n)n+;
2、B.n=0; while(getchar()!=/n)n+; C.for(n=0; getchar()!=/n; n+); D.n=0; for(ch=getchar(); ch!=/n; n+); (分数:1.00)A.B.C.D.3.程序段:int x=12; double y=3.141593; printf(“%d%8.6f“, x, y);的输出结果是_。 A.123.141593 B.123.141593 C.12,3.141593 D.123.1415930(分数:1.00)A.B.C.D.4.若有定义语句:double x, y, *px, *py;执行了 px= py=之后,
3、正确的输入语句是_。 A.scanf(“%f%“, x, y); B.scanf(“%f%f“ C.scanf(“%lf%lf“, px, py); D.scanf(“%lf%lf“, x, y);(分数:1.00)A.B.C.D.5.若变量已正确定义为 int 型,要通过语句 scanf(“%d, %d, %d“, 给 a 赋值 1、给 B 赋值2、给 C 赋值 3,以下输入形式中错误的是(表示一个空格符)_。 A.1,2,3 回车 B.123 回车 C.1,2, 回车 D.1,2,3 回车(分数:1.00)A.B.C.D.6.以下选项中不是 C 语句的是_。 A.int i;i+;prin
4、tf(“%d/n“, i); B.; C.a=5, c=10 D.;(分数:1.00)A.B.C.D.7.执行以下程序时输入 1234567,程序的运行结果为_。#include stdio.hmain() int x, y;scanf(“% 2d% 2ld“, printf(“% d/n“, x+y); A.17 B.46 C.15 D.9(分数:1.00)A.B.C.D.8.若有定义 char a; int b; float c; double d; ,则表达式 a+b+c-d 的结果为_型。 A.double B.int C.float D.char(分数:1.00)A.B.C.D.9.
5、若有定义 int a, b;,则用语句 scanf(“%d%d“, 输入 a, b 的值时,不能作为输入数据分隔符的是_。 A., B.空格 C.回车 D.Tab 键(分数:1.00)A.B.C.D.10.运行下面的程序,如果从键盘上输入:ab 回车c 回车def 回车则输出结果为_。#define N 6#include stdio.hmain() char cN;int i=0;for(; im; ci=getchar(), i+);for(i=0; iN; i+) putchar(ci); printf(“/n“); A.a b c d e f B.a b c d C.ab c d D.
6、abcdef(分数:1.00)A.B.C.D.11.以下程序的输出结果是_。#include stdio.hmain() printf(“% f“, 2.5+1*7% 2/4); A.2.500000 B.2.750000 C.3.375000 D.3.000000(分数:1.00)A.B.C.D.12.根据定义和数据的输入方式,输入语句的正确形式是_。已有定义:float f1, f2;数据的输入方式:4.523.5 A.scanf(“%f, %f“, B. scanf(“%f%f“, C.scanf(“%3.2f%2.1f“, D. scanf(“%3.2f, %2.1f“, (分数:1.
7、00)A.B.C.D.13.以下程序不用第 3 个变量,实现将两个数进行对调的操作,请填空。#include stdio.hmain() int a, b;scanf(“% d% d“, printf(“a=% db=% d“, a, b);a=a+b; b=a-b; a=_;printf(“a=% db=% d/n“, a, b); A.a+b B.a-b C.b*a D.a/b(分数:1.00)A.B.C.D.14.已知字母 A 的 ASCII 码为 65,若变量 kk 为 char 型,以下不能正确判断出 kk 中的值为大写字母的表达式是_。 A.kk=Aelse if(c-1=d)=1
8、printf(“% d/n“, d+1);elseprintf(“% d/n“, d+2);执行后输出结果是_。 A.2 B.3 C.4 D.编译时有错,无结果(分数:1.00)A.B.C.D.16.当整型变量 c 的值不为 2、4、6 时,值也为“真”的表达式是_。 A.(c=2)|(c=4)|(c=6) B.(c=2”功能等价的是_。 A.if(ab) else k=0; B. if(ab)|(bc)k=1; else k=0; C.if(a=b)k=0; else if(b=c)k=1; D. if(ab)k=1; else if(bc)k=1; else k=0;(分数:1.00)A.
9、B.C.D.19.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。 A.x%2=1 B.x/2 C.x%2!=0 D.x%2=0(分数:1.00)A.B.C.D.20.执行以下程序段后,w 的值为_。int w=A, x=14, y=15;w=(x|y) A.-1 B.NULL C.1 D.0(分数:1.00)A.B.C.D.21.有以下程序:main() int i=1, j=1, k=2;if(j+|k+)执行后输出的结果是_。 A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3(分数:1.00)A.B.C.D.22.若变量已正确定义,有以下程序段:int a
10、=3, b=5, c=7;if(ab) a=b; c=a;if(c!= a) c=b;printf(“% d, % d, % d/n“, a, b, c);则程序输出结果为_。 A.程序段语法错 B.3,5,3 C.3,5,5 D.3,5,7(分数:1.00)A.B.C.D.23.以下程序的输出结果是_。试题程序#include stdio.hmain() int a, b, c;a=10; b=50; c=30;if(ab)a=b, b=c;c=a;printf(“a=% d, b=% d, c=% d“, a, b, c); A.a=10,b=50,c=10 B.a=10,b=30,c=1
11、0 C.a=50,b=30,c=10 D.a=50,b=30,c=50(分数:1.00)A.B.C.D.24.有以下程序:#include stdio.hmain() int x=1, y=2, z=3;if(xy)if(yz) printf(“% d“, +z);else printf(“% d“, +y);printf(“% d/n“, x+);程序的运行结果是_。 A.331 B.41 C.2 D.1(分数:1.00)A.B.C.D.25.有以下程序:#include stdio.hmain() int x=1, y=2, z=3;if(xy)printf(“% d“, yx? 1:2)
12、;elseprintf(“% d“, zx? 2:3);程序的运行结果是_。 A.1 B.2 C.3 D.4(分数:1.00)A.B.C.D.26.下列说法正确的是_。 A.条件运算符是单目运算符 B.条件运算符是双目运算符,因为它有 2 个运算符号 C.条件运算符是三目运算符,因为它有 3 个运算对象 D.条件运算符的优先级高于赋值运算符和逻辑运算符(分数:1.00)A.B.C.D.27.以下选项中,能正确表示 a10 或 a0 的关系表达式是_。 A.a=10 or a=0 B.a=10|a=0 C.a=10 x=35;if(!a) x-;else if(b);if(c) x=3;else
13、 x=4; A.34 B.4 C.35 D.3(分数:1.00)A.B.C.D.29.以下程序的输出结果为_。#include stdio.hmain() int a, b , c=246;a=c/100% 9;b=(-1)printf(“% d, % d/n“, a, b); A.2,1 B.3,2 C.4,3 D.2,-1(分数:1.00)A.B.C.D.30.已知 a=1、b=3、c=5、d=5,下列程序段运行后,x 的值是_。if(ab)if(cd)x=1;elseif(ac)if(bd)x=2;else x=3;else x=6;else x=7; A.1 B.2 C.3 D.6(分
14、数:1.00)A.B.C.D.31.能正确表示 a 和 b 同时为正或同时为负的表达式是_。 A.(a=0|b=0)if(+a0)elseprintf(“% d % d/n“, b, a); A.-11 B.01 C.10 D.00(分数:1.00)A.B.C.D.33.下列关于 switch 语句和 break 语句的结论中,正确的是_。 A.break 语句是 switch 语句中的一部分 B.在 switch 语句中可以根据需要使用或不使用 break 语句 C.在 switch 语句中必须使用 break 语句 D.break 语句只能用于 switch 语句中(分数:1.00)A.B
15、.C.D.34.若有定义 int a=1, b=0;,则执行以下语句后,输出为_。switch(a) case 1:switch (b) case 0:printf(“* *0* *“); break;case 1:printf(“* *1* *“); break;case 2:printf(“* *2* *“); break; A.* *0* * B.* *0* * * *2* * C.* *0* * * *1* * * *2* * D.有语法错误(分数:1.00)A.B.C.D.35.以下程序的输出结果是_。#include stdio.hmain() int x=1, a=0, b=0;
16、switch (x) case 0:b+;case 1:a+;case 2:a+; b+;printf(“a=% d, b=% d/n“, a, b); A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2(分数:1.00)A.B.C.D.36.以下程序的输出结果是_。#include stdio.hmain() int a=12, b=5, c=-3;if(ab)if(b0) c=0;else c+;printf(“% d/n“, c); A.0 B.1 C.-2 D.-3(分数:1.00)A.B.C.D.37.阅读以下程序:#include stdio.hmain
17、() int x;scanf(“% d“, if(x-5)printf(“% d“, x);else printf(“% d“, x+);程序运行后,如果从键盘输入 5,则输出结果是_。 A.3 B.4 C.5 D.6(分数:1.00)A.B.C.D.38.两次运行下面的程序,如果从键盘上分别输入 6 和 4,则输出的结果是_。#include stdio.hmain() int x;scanf(“% d“, if(x+5)printf(“% d“, x);else printf(“% d/n“, x-); A.7 和 5 B.6 和 3 C.7 和 4 D.6 和 4(分数:1.00)A.B
18、.C.D.39.以下程序的运行结果是_。#include stdio.hmain() int num=4;switch (num) case 0: printf(“0“); break;case 1: printf(“1“); break;case 2: printf(“2“); break;default: printf(“-1“); break; A.-1 B.0 C.1 D.2(分数:1.00)A.B.C.D.40.有以下程序:#include stdio.hmain() int x=1, y=0, a=0, b=0;switch (y) case 1:switch(y)case 0:
19、a+; break;case 1: b+; break;case 2: a+; b+; break;case 3: a+; b+;printf(“% d, % d“, a, b);程序的运行结果是U /U。 A.1,0 B.2,2 C.1,1 D.2,1(分数:1.00)A.B.C.D.二、B操作题/B(总题数:13,分数:42.50)41.下列给定程序的功能是:调用函数 fun()将指定源文件中的内容输出到屏幕。主函数中源文件名放在变量 sfname 中,目标文件名放在变量 tfname 中。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改
20、程序的结构。试题程序int fun(char * source, char * target) FILE * fs; char ch;if(fs =fopen(source, “r“)=NULL)return 0;printf(“/nThe data in file:/n“);ch=fgetc(fs);while(!feof(fs) putchar(_);ch=fgetc(fs);fclose(fs);printf(“/n/n“);return 1;(分数:5.00)填空项 1:_42.以下程序的功能是:通过函数 func()输入字符并统计输入字符的个数。输入时用字符作为输入的结束标识。请将横
21、线处的地方填上正确语句。 #include stdio.h long _; main() long n; n = func(); printf(“n=% ld/n“, n); long func() long m; for(m=0; getchar()!=; _) retum m; (分数:5.00)填空项 1:_43.给定程序的功能是:判断字符 ch 是否与串 str 中的某个字符相同,若相同什么也不做,若不同则插在串的最后。注意:部分源程序给出如下。请勿改动函数 main()和其他函数中的任何内容,仅在标号处填入所编写的若干表达式或语句。试题程序#include stdio.h#inclu
22、de string.hvoid fun(char * str, char ch) while(* str if(*str != ch) str0=ch;str1=0;main() char s81, c;printf(“/nPlease enter a string:/n“);gets(s);printf(“/n Please enter the character to search:“);c=_;fun(s, c);printf(“/nThe result is % s/n“, s);(分数:5.00)填空项 1:_44.下列给定程序中函数 fun()的功能是:将字符串中的字符逆序输出,但
23、不改变字符串中的内容。例如,若字符串为 abcd,则应输出:dcba。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdio.hvoid fun(char*a) if(*a) fun(a+1);/* * * * *found* * * * * /printf(“% c“*a);main() char s10=“abcd“;printf(“处理前字符串=% s/n, 处理后字符串=“, s);fun(s);printf(“/n“);_45.下列给定程序中函数 fun()的功能是:将长整型数中各位上为奇
24、数的数依次取出,构成一个新数放在t 中。高位仍在高位,低位仍在低位。例如,当 s 中的数为 87653142 时,t 中的数为 7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdlib.h#include stdio.h#include conio.hvoid fun(long s, long * t) int d;long s1=1;*t=0;while(s0) d=s% 10;if(d% 2!=0)或 if(d% 2=1) *t=d*s1+*t;s1 *=10;s/=10;void m
25、ain() long s, t;printf(“/nPlease enter s:“);/* * * * *found* * * * * /_fun(s,printf(“The result is:% ld/n“, t);(分数:5.00)填空项 1:_46.下列给定程序中,函数 fun()的功能是进行数字字符转换。若形参 ch 中是数字字符09,则将0转换成9,1转换成8,2转换成7,9转换成0;若是其他字符则保持不变。并将转换后的结果作为函数值返回。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include st
26、dio.h_ fun(char ch) if(ch=0return ch;main() char c1, c2;printf(“/nThe result:/n“);c1=2; c2=fun(c1);printf(“c1=% cc2 =% c/n“ c1, c2);c1=8; c2=fun(c1); 17printf(“c1=% cc2=% c/n“, c1, c2); c1=a; c2=fun(c1);printf(“c1=% cc2=% c/n“, c1, c2);(分数:5.00)填空项 1:_47.给定程序中,函数 fun()的功能是:统计形参 s 所指的字符串中数字字符出现的次数,并存
27、放在形参t 所指的变量中,最后在主函数中输出。例如,若形参 s 所指的字符串为“abcdcf35adgh3kjsdf7“,则输出结果为 4。请在标号处填入正确内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.hvoid fun(char *s, int *t) int i, n;n=0;for(i=0; si_0; i+)if(si_0* t=n;main() chars80= “abcdef35adgh3kjsdf7“;int t;printf(“/nThe original string is: % s/n“,
28、 s);fun(s, printf(“/nThe result is: % d/n“, t);(分数:5.00)填空项 1:_48.下列给定程序中函数 fun()的功能是:将 tt 所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。例如,若输入“Ab, cD”,则输出“AB, CD”。请在标号处填入正确的内容,使程序得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include conio.h#include stdio.h#include string.hchar*fun(char tt) int i;for(i=0; tti; i
29、+)if(tti_a)_ (tti_z)tti-=32;return (tt);main() char tt81;printf(“/nPlease enter a string:“);gets(tt);printf(“/nThe result string is: /n% s“,fun(tt);(分数:5.00)填空项 1:_49.下列给定程序中,函数 fun()的功能是:如果参数是大写字母则转换为对应的小写字母,如果是小写字母则转换为对应的大写字母,其他字符则返回字符#,请在标号处填入正确的内容,使程序得出正确的结果。试题程序char fun(char c) if _c=c-32;else
30、if _c=c+32;_c=#;return c;(分数:5.00)填空项 1:_50.编写函数 fun(),其功能是:求出 11000 能被 7 或 11 整除,但不能同时被 7 和 11 整除的所有整数,并将其放在 a 所指的数组中,通过 n 返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数 main()和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。试题程序#include stdlib.h#include conio.h#include stdio.hvoid fun(int *a, int *n)void main() int aa1000, n
31、, k;fun(aa, for(k=0; kn; k+)if(k+1)% 10=0) printf(“% 5d“, aak);printf(“/n“); /*一行写 9 个数*/elseprintf(“% 5d“, aak);_51.下列给定的程序中,fun()函数的功能是:将 p 所指的字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。例如,若输入:I am a student to take the examination则应输出:I aM A studenT tO takE thE examinatioN请改正程序中的错误,使它能得出正确的结果。注意:不要改
32、动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdlib.h#include string.h#include conio.h#include ctype.h #include stdio.hvoid fun(char*p) int k=0;for(;*p; p+)if(k) /* * * * *found* * * * * /if(p=) k=0;/* * * * *found* * * * * /*p=toupper( *(p-1);else k=1;*p=toupper(*p);void main() char chrstr64;int d;pr
33、intf(“/nPlease enter an English sentence within 63 letters:“);gets(chrstr);d=strlen(chrstr);chrstrd=;chrstrd+1=0;printf(“/nBefore changing:/n % s“, chrstr);fun(chrstr);printf(“/nAfter changing:/n % s“, chrstr);_52.函数 fun()的功能是:统计长整数 n 的各位上出现的数字 1、2、3 的次数,并用外部(全局)变量c1、c2、c3 返回主函数。例如,当 n=123114350 时,结
34、果应该为:c1=3 c2=1 c3=2。注意:部分源程序给出如下。请勿改动 main()函数和其他函数中的任何内容,仅在函数 fun()的标号处填入所编写的若干表达式或语句。试题程序#include stdio.hint c1, c2, c3;void fun (long n) c1=c2=c3=0while(n) switch (_) case 1:c1+; _;case 2: c2+; _;case 3: c3+;n/=10;main() long n=123114350L;fun (n);printf(“/nThe result:/n“);printf(“n=% id c1=% d c2
35、 =% d c3 =% d/n“, n, c1, c2, c3);(分数:2.50)填空项 1:_53.下列给定程序中,函数 fun()的功能是:将大写字母转换为对应的小写字母之后的第 5 个字母;若小写字母为 vz,使小写字母的值减 21。转换后的小写字母作为函数值返回。例如,若形参是字母 A,则转换为小写字母 f;形参是字母 W,则转换为小写字母 b。请改正函数 fun()中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h#include ctype.h char fun(char c) if(
36、c=A if(c=a else if(c=vreturn c;main() char c1, c2;printf(“/nEnter a letter (A-Z):“);c1=getchar();if(isupper(c1) c2=fun(c1);printf(“/n/nThe letter % c change to % c/n“ c1, c2);elseprintf “/nEnter (A-Z) ! /n“);_二级 C 语言-基本语句、选择结构答案解析(总分:82.50,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:40.00)1.若变量已正确定义,有以下程序段:int a=
37、3, b=5, c=7;if(ab)a=b; c=a;if(c!=a)c=b;printf(“%d, %d, %d/n“, a, b, c);其输出结果是: A.程序段有语法错误 B.3,5,3 C.3,5,5 D.3,5,7(分数:1.00)A.B. C.D.解析:解析 此题是 if 语句的例子。两个 if 语句的判断条件都不满足,程序只能执行 c=a 这条语句,所以变量 c 的值等于 3,变量 b 的值没有变化。程序输出的结果为 3,5,3,所以正确答案为 B。解析 本题考查 putchar 函数的使用。putchar 函数的作用是向终端输出一个字符。例如,putchar(ch);,它输出
38、字符变量 ch 的值,ch 可以是字符型变量,也可以是整型变量。若 ch 是整型变量,则输出的是ASCII 码值对应的字符。2.若变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是_。 A.n=0; while(ch=getchar()!=!/n)n+; B.n=0; while(getchar()!=/n)n+; C.for(n=0; getchar()!=/n; n+); D.n=0; for(ch=getchar(); ch!=/n; n+); (分数:1.00)A.B.C.D. 解析:解析 A 项每进行一次循环判断一个字符是否回车,如果不是就进行下一次判断,因此
39、可以统计出输入字符个数;B 项与 A 项的判断相似,仅为是否将读入的数据赋值给一个变量,因此并不影响判断结果;C 项用 for 循环来判断,与 B 的判断完全相同,可以统计出输入字符个数;D 项中 ch=getchar()是给变量 ch 赋初值,如果输入回车,则程序只循环一次,如果输入一个非回车的字符,则程序进入死循环。因此,本题正确答案为 D。3.程序段:int x=12; double y=3.141593; printf(“%d%8.6f“, x, y);的输出结果是_。 A.123.141593 B.123.141593 C.12,3.141593 D.123.1415930(分数:1
40、.00)A. B.C.D.解析:解析 本题考查 printf 函数的输出格式控制符,%m.nf 表示指定输出的实型数据的宽度为 m(包含小数点),并保留 n 位小数。但输出数据的小数位大于 n 时,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理;当输出数据的小数位小于 n 时,在小数位的最右边补 0,使输出数据部分宽度为n。若给出的总宽度 m 小于 n 加上整数位数和小数点,则自动突破 m 的限制;反之,数字右对齐,左边补空格。本题中 3.141593 数值长度为 8,小数位数为 6,因此左端没有空格,故正确答案为 A。4.若有定义语句:double x, y, *px, *py;
41、执行了 px= py=之后,正确的输入语句是_。 A.scanf(“%f%“, x, y); B.scanf(“%f%f“ C.scanf(“%lf%lf“, px, py); D.scanf(“%lf%lf“, x, y);(分数:1.00)A.B.C. D.解析:解析 本题考查 scanf 函数,其格式为:scanf(控制格式,地址表列),其中地址表列中应为要赋值变量的地址。本题要为变量 x 和 y 赋值,并定义了两个指针分别指向 x 和 y,因此取得变量 x 和 y 的地址的方法有两种。一种是使用取地址符号“ 给 a 赋值 1、给 B 赋值2、给 C 赋值 3,以下输入形式中错误的是(表
42、示一个空格符)_。 A.1,2,3 回车 B.123 回车 C.1,2, 回车 D.1,2,3 回车(分数:1.00)A.B. C.D.解析:解析 由于 scanf 格式输入语句中,使用逗号作为输入时的间隔,所以在输入时需要使用逗号隔开。只有选项 B 中没有使用逗号,故本题选 B。6.以下选项中不是 C 语句的是_。 A.int i;i+;printf(“%d/n“, i); B.; C.a=5, c=10 D.;(分数:1.00)A.B.C. D.解析:7.执行以下程序时输入 1234567,程序的运行结果为_。#include stdio.hmain() int x, y;scanf(“%
43、 2d% 2ld“, printf(“% d/n“, x+y); A.17 B.46 C.15 D.9(分数:1.00)A.B. C.D.解析:8.若有定义 char a; int b; float c; double d; ,则表达式 a+b+c-d 的结果为_型。 A.double B.int C.float D.char(分数:1.00)A. B.C.D.解析:9.若有定义 int a, b;,则用语句 scanf(“%d%d“, 输入 a, b 的值时,不能作为输入数据分隔符的是_。 A., B.空格 C.回车 D.Tab 键(分数:1.00)A. B.C.D.解析:10.运行下面的程
44、序,如果从键盘上输入:ab 回车c 回车def 回车则输出结果为_。#define N 6#include stdio.hmain() char cN;int i=0;for(; im; ci=getchar(), i+);for(i=0; iN; i+) putchar(ci); printf(“/n“); A.a b c d e f B.a b c d C.ab c d D.abcdef(分数:1.00)A.B.C. D.解析:11.以下程序的输出结果是_。#include stdio.hmain() printf(“% f“, 2.5+1*7% 2/4); A.2.500000 B.2.750000 C.3.375000 D