1、二级 C 语言-110 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:41,分数:100.00)1.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2= =0B.x/2C.x%2!=0D.x%2= =12.以下叙述中正确的是_。(分数:2.00)A.在 C 语言中,逻辑真值和假值分别对应 1 和 0B.关系运算符两边的运算对象可以是 C 语言中任意合法的表达式C.对于浮点变量 x 和 y,表达式:x= =y 是非法的,会出编译错误D.分支结构是根据算术表达式的结果来判断流程走向的3.若变量已正确定义,以下选项中非法的表达式
2、是_。(分数:2.00)A.a! =4|“b“B.“a“=1/2*(x=y=20, x*3)C.“a“%4D.“A“+324.与数学表达式 xyz 对应的 C 语言表达式是_。(分数:2.50)A.(x =y)|(y=x)B.(x=y=z)C.(x=y)!(y=z)D.(x=y) if(a= =1 else printf(“%d,%d,%d/n“,a,b,c); else printf(“%d,%d,%d/n“,a,b,c); 程序运行后的输出结果是_。(分数:2.50)A.1,3,2B.1,3,3C.1,2,3D.3,2,18.若有以下程序: #include stdio.h main( )
3、 int a=1,b=2,c=3,d=4; if(a=2) | (b=1)c=2; if(c= =3) printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.1,2,3,4B.2,1,2,-1C.5,1,2,-1D.2,2,2,49.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,2,4B.2,1,2,-
4、1C.5,1,2,-1D.1,2,3,410.以下关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:2.50)A.可以是任意合法的表达式B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.只能是整数 0 或 111.设有宏定义: #define IsDIV(k,n) (k%n= =1)?1 : 0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) if(x0) y=sqrt(-x);B.if(x =0) y=sqrt(x);else y=sqrt(-x);C.y=sqrt(x);if(x0) y=sqrt(-x);D.y=sqrt(x=0? x : -x);15
5、.下列条件语句中,输出结果与其他语句不同的是_。(分数:2.50)A.if ( a! =0) printf(“%d/n“,x); else printf(“%d/n“, y);B.if ( a= =0 ) printf(“%d/n“,y); else printf(“%d/n“, x);C.if ( a = =0 ) printf(“%d/n“,x); else printf(“%d/n“, y);D.if ( a ) printf(“%d/n“,x); else printf (“%d/n“,y);16.若有以下程序: #include stdio.h main( ) int a=1,b=2
6、,c=3,d=4,r=0; if(a! =1); else r=1; if(b= =2) r+ =2; else; if(c! =3) r+ =3; else; if(d= =4) r+ =4; printf(“%d/n“, r); 则程序的输出结果是_。(分数:2.50)A.10B.7C.6D.317.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4,r=0; if (a! =1); else r=1; if (b= =2) r+ =2; if (c! =3); r+ =3; if (d= =4) r+ =4; printf(“%d/n
7、“, r); 则程序的输出结果是_。(分数:2.50)A.3B.7C.6D.1018.以下叙述中正确的是_。(分数:2.50)A.对于逻辑表达式:a+ +|b+ +,设 a 的值为 1,则求解表达式的值后,b 的值会发生改变B.对于逻辑表达式:a+ + switch(x) case 1: switch(y) ease 0: a+ +; break; case 1: b+ +; break; ease 2: a+ +: b+ +: break; case 3: a+ +; b+ +; printf(“a=%d, b=%d/n“, a, b); 程序的运行结果是_。(分数:2.50)A.a=2,b
8、=2B.a=2,b=1C.a=1,b=1D.a=1,b=020.有以下程序段: #include stdio.h int i, n; for(i=0; i8; i+ +) n=rand() % 5; switch (n) case 1: case 3: printf(“%d/n“,n); break; case 2: case 4: printf(“%d/n“, n); continue; case 0: exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:2.50)A.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结束循
9、环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行21.若有定义:float x=1.5; int a=1,b=3,c=2;则正确的 switch 语句是_。(分数:2.50)A.switch(a+b)case 1: printf(“ */n“);case 2+1: printf(“* * /n“);B.switch(int)x);case 1: printf(“*/n“);case 2: printf(“* */n“);C.switch(x)case 1.0: printf(“*/n“);case 2.0: printf(“* */n“
10、);D.switch(a+b)case 1: printf(“*/n“);case c: printf(“* */n“);22.有以下程序: #include stdio.h main( ) int a =2,3,5,4,i; for(i=0;i4;i+ +) switch(i%2) case 0: switch(ai%2) case 0:ai+ +;break; case 1:ai- -; break; case 1:ai=0; for(i=0:i4;i+ +) printf(“%d“,ai); printf(“/n“); 程序运行后的输出结果是_。(分数:2.50)A.0 3 0 4B.2
11、 0 5 0C.3 3 4 4D.3 0 4 023.下列叙述中正确的是_。(分数:2.50)A.在 switch 语句中,不一定使用 break 语句B.在 switch 语句中必须使用 defaultC.break 语句必须与 switch 语句中的 case 配对使用D.break 语句只能用于 switch 语句24.有以下程序: #include stdio.h main( ) int y=10; while(y- -); printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分数:2.50)A.y=0B.y=-1C.y=1D.while 构成无限循研25.有以下程序:
12、 #include stdio.h main( ) int k=5; while(-k) printf(“%d“,k-=3); printf(“/n“); 执行后的输出结果是_。(分数:2.50)A.1B.2C.4D.死循环26.关于“while(条件表达式)循环体”,以下叙述正确的是_。(分数:2.50)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总是比循环体的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的执行次数与循环体的执行次数无关27.有以下函数: int fun(char * s) char *t=s; while(* t
13、 + +); return(t-s); 该函数的功能是_。(分数:2.50)A.计算 s 所指字符串的长度B.比较两个字符串的大小C.计算 s 所指字符串占用内存字节的个数D.将 s 所指字符串复制到字符串 t 中28.有以下程序: #include stdio.h main( ) int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:2.50)A.0B.-1C.1D.729.有以下函数: int aaa(char *s) char *t=s; while(*t+ +); t-; return(t-s); 以下关于 aaa 函数功能叙述正
14、确的是_。(分数:2.50)A.将串 s 复制到串 tB.比较两个串的大小C.求字符串 s 的长度D.求字符串 s 所占字节数30.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是_。(分数:2.50)A.(E0|E0)B.(E=0)C.(!E=0)D.(E!=0)31.有以下程序: #include stdio.h int fun(char s) int n=0; while(*s = “9“ s+ + ; return(n); main( ) char s10=“6“, “1“, “*“, “4“, “*“, “9“, “*“, “0“, “*“; printf(“%d
15、/n“,fun(s); 程序的运行结果是_。(分数:2.50)A.5B.9C.61D.6149032.若有以下程序: #include stdio.h main( ) int a=-2, b=0; while(a+ +) + +b; printf(“%d,%d/n“, a, b); 则程序的输出结果是_。(分数:2.50)A.1,2B.0,2C.1,3D.2,333.由以下 while 构成的循环,循环体执行的次数是_。 int k=0; while(k=1)k+ +;(分数:2.50)A.有语法错误,不能执行B.一次也不执行C.执行一次D.无限次34.关于 do 循环体 while(条件表达
16、式),以下叙述中正确的是_。(分数:2.50)A.条件表达式的执行次数总是比循环体的执行次数多一次B.循环体的执行次数总是比条件表达式的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的执行次数与循环体的执行次数无关35.以下不构成无限循环的语句或语句组的是_。(分数:2.50)A.n=0;do+ +n; while (n =0);B.n=0;while(1)n+ + ;C.n=10;while(n); n-;D.for(n=0, i=1; ;i+ +) n+ =i;36.若变量已正确定义,有以下程序段: i=0; do printf(“%d,“,i); while(
17、i+ +); printf(“%d/n“,i); 其输出结果是_。(分数:2.50)A.0,1B.0,0C.1,1D.程序进入无限循环37.若有以下程序: #include stdio.h main( ) int a=-2,b=0; do + +b; while(a+ +); printf(“%d,%d/n“,a,b); 则程序的输出结果是_。(分数:2.50)A.1,3B.0,2C.1,2D.2,338.若有以下程序: #include stdio.h main( ) int a=3; do printf(“%d,“,a-=2); while(!(-a); printf(“/n“); 则程序
18、运行后的输出结果是_。(分数:2.50)A.1B.1,-2,C.3,0,D.1,039.若有以下程序: #include stdio.h void fun(int *s) static int j=0; do sj + =sj+1; while(+ +j2); main( ) int i,a10=1,2,3,4,5; for(i=1;i3;i+ +) fun(a); for(i=1; i5; i+ + ) printf(“%d“,ai); printf(“/n“); 则程序运行后的输出结果是_。(分数:2.50)A.34756B.5745C.5795D.3574540.以下程序段中的变量已正确
19、定义: for(i=0; i4; i+ +, i+ + ) for(k=1; k3; k+ +); printf(“*“); 程序段的输出结果是_。(分数:2.50)A.* *B.* * * *C.*D.* * * * * * * *41.若有以下程序: #include stdio.h main( ) int y=9; for( ; y0; y-) if(y%3= =0) printf(“%d“, -y); 则程序的运行结果是_。(分数:2.50)A.852B.963C.741D.875421二级 C 语言-110 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:41
20、,分数:100.00)1.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是_。(分数:1.00)A.x%2= =0 B.x/2C.x%2!=0D.x%2= =1解析:解析 算术运算符的优先级高于关系运算符的优先级,所以当 x 为大于 1 的奇数时,A 选项的值为假,即 0。B 选项的值为不定值,但绝对不是 0。C 选项的值为真,即 1。D 选项的值为真,即 1。2.以下叙述中正确的是_。(分数:2.00)A.在 C 语言中,逻辑真值和假值分别对应 1 和 0B.关系运算符两边的运算对象可以是 C 语言中任意合法的表达式 C.对于浮点变量 x 和 y,表达式:x= =y 是非法的,
21、会出编译错误D.分支结构是根据算术表达式的结果来判断流程走向的解析:解析 A 选项中,在 C 语言中,逻辑真值对应非 0;C 选项中,表达式:x=y 是合法的;D 选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此 B 选项正确。3.若变量已正确定义,以下选项中非法的表达式是_。(分数:2.00)A.a! =4|“b“B.“a“=1/2*(x=y=20, x*3) C.“a“%4D.“A“+32解析:解析 A 选项中“a“即表示 a 为字符常量,再给“a“赋值 1/2*(x=y=20,x*3),是不正确的。因此 B选项正确。4.与数学表达式 xyz 对应的 C 语言表达
22、式是_。(分数:2.50)A.(x =y)|(y=x)B.(x=y=z)C.(x=y)!(y=z)D.(x=y) if(a= =1 else printf(“%d,%d,%d/n“,a,b,c); else printf(“%d,%d,%d/n“,a,b,c); 程序运行后的输出结果是_。(分数:2.50)A.1,3,2B.1,3,3 C.1,2,3D.3,2,1解析:解析 在 if 语句中,else 总是和最近的 if 配对,所以进入第一个 if 语句中条件判断时,因为是逻辑与操作需要两边运箅对象的值均为非零值,才为真,所以需要逐个执行判断的结果为 1,进入第二个 if 语句条件判断,因为
23、b!=2 条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c-!=3)c 的值不变,也不再执行第一个 else 语句。打印 a 的值 1,b 的值 3,c 的值 3。8.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) | (b=1)c=2; if(c= =3) printf(“%d,%d,%d,%d/n“,a,b,c,d); 则程序的输出结果是_。(分数:2.50)A.1,2,3,4B.2,1,2,-1C.5,1,2,-1D.2,2,2,4 解析:解析 第一个 if 语句的判断条件是逻辑或表达式
24、,所以只要有一个运算对象为真结果就为真,且如果前面的已经为兵,后面的表达式不再进行执行判断。执行第一个 if 判断条件时 a 的值为 2,整个表达式的值为真,b 的值不变,c 的值为 2。判断第二个 if 条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式 c=3,不成立,不再判断第二个运算对象,所以不执行 d=-1 操作和 a=5 操作。所以结果为选项 D。9.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4; if(a=2) if(c= =3)|(d=-1) a=5; printf(“%d,%d,%d,%d/n“,a,b
25、,c,d); 则程序的输出结果是_。(分数:2.50)A.2,2,2,4B.2,1,2,-1C.5,1,2,-1 D.1,2,3,4解析:解析 第一个 if 语句的判断条件是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if 判断条件,均为赋值表达式,第一个运算对象 a=2 非零,判断第二个表达式 b=1 也非零,所以条件成立执行 c=2 的赋值操作。执行第二个 if 判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中 c=3 运算对象为假,所以需要判断第二个运算对象 d=-1,结果为非零,所以条件成立,执行a=5,的操作,所以 a 值为 5,b 值为 1,c 值为 2,
26、d 值为-1。10.以下关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:2.50)A.可以是任意合法的表达式 B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.只能是整数 0 或 1解析:解析 C 语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择 A。11.设有宏定义: #define IsDIV(k,n) (k%n= =1)?1 : 0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) if(x0) y=sqrt(-x);B.if(x =0) y=sqrt(x);else y=sqrt(-x);C.y=sqrt(x)
27、;if(x0) y=sqrt(-x); D.y=sqrt(x=0? x : -x);解析:解析 公式的要求是无论 x 大于等于 0 还是小于 0,y 的值都为 x 绝对值的开方。选项 C 中如果 x值小于 0,则 y=sqrt(x)就要出错。本题重点考察的知识点是:sqrt()函数。sqrt()函数的作用是开方计算,要求输入的参数 x 必须大于等于 0。选项 C 一开始调用了 sqrt(x)而没有判断 x 的正负,所以是错误的。15.下列条件语句中,输出结果与其他语句不同的是_。(分数:2.50)A.if ( a! =0) printf(“%d/n“,x); else printf(“%d/n
28、“, y);B.if ( a= =0 ) printf(“%d/n“,y); else printf(“%d/n“, x);C.if ( a = =0 ) printf(“%d/n“,x); else printf(“%d/n“, y); D.if ( a ) printf(“%d/n“,x); else printf (“%d/n“,y);解析:解析 A、B、D 选项的含义均为 a 的值如果为 0 时打印 y 的值,否则打印 x 的值。但是 C 选项的含义是:a 的值为 0 时打印 x 的值,不为 0 时打印 y 的值,与其他选项正好相反。16.若有以下程序: #include stdio.
29、h main( ) int a=1,b=2,c=3,d=4,r=0; if(a! =1); else r=1; if(b= =2) r+ =2; else; if(c! =3) r+ =3; else; if(d= =4) r+ =4; printf(“%d/n“, r); 则程序的输出结果是_。(分数:2.50)A.10B.7 C.6D.3解析:解析 else 总是和与之最近的 if 配对,执行第一个 if,判断条件不成立,执行 else r=1;语句。再执行第二个 if 语句中的判断条件,成立,左移执行 r+=2,r 的值为 3,再执行第三个 if 的判断条件,不成立,执行第 7 行 el
30、se 后面的空语句“;”。再执行第四个 if 的判断条件 d=4 成立,执行 r+=4,r 的值为 7。然后打印输出。17.若有以下程序: #include stdio.h main( ) int a=1,b=2,c=3,d=4,r=0; if (a! =1); else r=1; if (b= =2) r+ =2; if (c! =3); r+ =3; if (d= =4) r+ =4; printf(“%d/n“, r); 则程序的输出结果是_。(分数:2.50)A.3B.7C.6D.10 解析:解析 第一个 if 语句 a!=1 条件为假,所以执行 elst 后的语句 r=1。第二个 i
31、f 语句 b=2 条件成立,执行 r+=2,r 的值变为 3,第三个 if 语句 c!=3 条件为假,所以不做任何操作。执行下面的 r+=3 操作,r 的值变为 6。判断第四个 if 条件,d=4 条件成立,执行 r+=4 操作,结果为 10。18.以下叙述中正确的是_。(分数:2.50)A.对于逻辑表达式:a+ +|b+ +,设 a 的值为 1,则求解表达式的值后,b 的值会发生改变B.对于逻辑表达式:a+ + switch(x) case 1: switch(y) ease 0: a+ +; break; case 1: b+ +; break; ease 2: a+ +: b+ +: b
32、reak; case 3: a+ +; b+ +; printf(“a=%d, b=%d/n“, a, b); 程序的运行结果是_。(分数:2.50)A.a=2,b=2B.a=2,b=1 C.a=1,b=1D.a=1,b=0解析:解析 case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行 switch 语句时,根据 switch 的表达式,找到与之匹配的 ease 语句,就从此 case 子句执行下去,不在进行判断,直到碰到 break 或函数结束为止。所以执行内层 switch(y)时只执行了 a+,此时 a 的值为 1。然后执行外层 case2 语句的 a+;b+;a
33、为 2,b 为 1。所以结果为 B。20.有以下程序段: #include stdio.h int i, n; for(i=0; i8; i+ +) n=rand() % 5; switch (n) case 1: case 3: printf(“%d/n“,n); break; case 2: case 4: printf(“%d/n“, n); continue; case 0: exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:2.50)A.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机
34、数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行 解析:解析 case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行 switch 语句时,根据 switch 的表达式,找到与之匹配的 case 语句,就从此 case 子句执行下去,不再进行判断,直到碰到 break 或函数结束为止。简单的说 break 是结束整个循环体,而 continue 是结束单次循环。B 选项中当产生的随机数 n 为 4 时要执行打印操作。C 选项中当产生的随机数为 1 和 2 时分别执行 case3 与case4 后面语句的内容。由于存在 break 语句所以
35、for 循环不是固定执行 8 次,执行次数与产生的随机数n 有关系。21.若有定义:float x=1.5; int a=1,b=3,c=2;则正确的 switch 语句是_。(分数:2.50)A.switch(a+b)case 1: printf(“ */n“);case 2+1: printf(“* * /n“); B.switch(int)x);case 1: printf(“*/n“);case 2: printf(“* */n“);C.switch(x)case 1.0: printf(“*/n“);case 2.0: printf(“* */n“);D.switch(a+b)cas
36、e 1: printf(“*/n“);case c: printf(“* */n“);解析:解析 B 选项中 switch(int)x);语句不应该有最后的分号。switch(expr1),中的 expr1 不能用浮点类型或 long 类型,也不能为个字符串,所以 C 错误。case 后面常量表达式的类型必须与 switch后面表达式的类型一致,所以 D 错误。22.有以下程序: #include stdio.h main( ) int a =2,3,5,4,i; for(i=0;i4;i+ +) switch(i%2) case 0: switch(ai%2) case 0:ai+ +;br
37、eak; case 1:ai- -; break; case 1:ai=0; for(i=0:i4;i+ +) printf(“%d“,ai); printf(“/n“); 程序运行后的输出结果是_。(分数:2.50)A.0 3 0 4B.2 0 5 0C.3 3 4 4D.3 0 4 0 解析:解析 第一次循环 i 为 0,i%2 为 0,执行 switch(a0%2)中的 case 0 语句,a0+,a0的值变成 3;第二次循环 i 的值为 1,i%2 为 1,执行 case 1:ai=0;所以 a1的值变成 0;第三次循环 i 的值为 2,i%2 为 0,执行 switch(a2%2)中
38、的 case 1 语句,a2-,a2的值变成 4;第四次循环 i 的值为3,i%2 为 1,执行 case 1:ai=0;所以 a3的值变成 0。23.下列叙述中正确的是_。(分数:2.50)A.在 switch 语句中,不一定使用 break 语句 B.在 switch 语句中必须使用 defaultC.break 语句必须与 switch 语句中的 case 配对使用D.break 语句只能用于 switch 语句解析:解析 default 语句在 switch 语句中可以省略,所以 B 错误;switch 语句中并非每个 case 后都需要使用 break 语句,所以 C 错误;brea
39、k 语句还可以用于 for 等循环结构中,所以 D 错误。24.有以下程序: #include stdio.h main( ) int y=10; while(y- -); printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分数:2.50)A.y=0B.y=-1 C.y=1D.while 构成无限循研解析:解析 执行 y-直到值为 0,由于 y-是先用再减,所以退出循环时,y 的值为-1。25.有以下程序: #include stdio.h main( ) int k=5; while(-k) printf(“%d“,k-=3); printf(“/n“); 执行后的输出结果
40、是_。(分数:2.50)A.1 B.2C.4D.死循环解析:解析 -k 先自减再使用,所以第一次判断条件即为 while(4),条件为真,打印 k 的值,k=4-3,结果为 1;第二次判断条件即为 while(0),条件为假,结束循环,打印回车换行符。所以选择 A 选项。26.关于“while(条件表达式)循环体”,以下叙述正确的是_。(分数:2.50)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总是比循环体的执行次数多一次 C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的执行次数与循环体的执行次数无关解析:解析 while 循环是先判断条件,满足
41、条件后执行循环体,执行完后接着判断条件,再执行,直到最后一次判断条件后不成立,跣出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择 B 选项。27.有以下函数: int fun(char * s) char *t=s; while(* t + +); return(t-s); 该函数的功能是_。(分数:2.50)A.计算 s 所指字符串的长度 B.比较两个字符串的大小C.计算 s 所指字符串占用内存字节的个数D.将 s 所指字符串复制到字符串 t 中解析:解析 首先 char*s 接受一个字符型数组的首地址,并将这个首地址赋给另个字符型指针char*t,while(*t+)不断
42、循环直到*t 为“/0”,再将 t-1,这时字符指针 t 指向字符串的最后一个字符,又因为 s 指向字符数组的首地址,即字符串的首地址,所以 return(t-s)便是返回字符数组中字符串的长度。28.有以下程序: #include stdio.h main( ) int a=7; while(a-); printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:2.50)A.0B.-1 C.1D.7解析:解析 a-的含义是先使用后减 1,所以当 a 的值为 0 时,跳出循环,但是仍要执行 a-,a 的值变为-1。29.有以下函数: int aaa(char *s) char *t=
43、s; while(*t+ +); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:2.50)A.将串 s 复制到串 tB.比较两个串的大小C.求字符串 s 的长度 D.求字符串 s 所占字节数解析:解析 本题重点考查的知识点 while 循环语句的应用。aaa()函数中,首先定义了一个字符指针 t指向形参 s,然后通过一个 while 循环让指针 t 不断递增,直到 t 指向字符串结束标识处。当 t 指向结束标识处时,由于后缀+运算符的原因,它还会被再递增 1,所以接下来的 t-;语句让它回到结束标识处。最后返回 t-s,s 还是指向字符串第 1 个字符处,
44、而 t 指向了字符串结尾,故返回值为字符串的长度值。因此 C 选项正确。30.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是_。(分数:2.50)A.(E0|E0)B.(E=0) C.(!E=0)D.(E!=0)解析:解析 while 语句中条件表达式 E 的值不为 0 即为真,认为满足条件,所以与 B 选项中表达式的含义正好相反,因此选择 B 选项。31.有以下程序: #include stdio.h int fun(char s) int n=0; while(*s = “9“ s+ + ; return(n); main( ) char s10=“6“, “1“,
45、“*“, “4“, “*“, “9“, “*“, “0“, “*“; printf(“%d/n“,fun(s); 程序的运行结果是_。(分数:2.50)A.5B.9C.61 D.61490解析:解析 在 fun 函数中,while 循环的功能是:逐个取字符数组 s 中的字符,并判断其是否是数字。若是则将其作为个位数字保存到变量 n 中,n 的原数据的各个数位将相应左移一个 10 进制位。当指针 s指向数组的第 3 位时,循环条件不成立,循环结束,返回 n 的值,输出 n 的值为 61。因此 C 选项正确。32.若有以下程序: #include stdio.h main( ) int a=-2,
46、 b=0; while(a+ +) + +b; printf(“%d,%d/n“, a, b); 则程序的输出结果是_。(分数:2.50)A.1,2 B.0,2C.1,3D.2,3解析:解析 第一次 while 判断条件是 a+,先使用后加 1,为-2 时不为 0,条件为真,执行 a 的自加与+b 操作,a 的值变为-1,b 的值变为 1。第二次 while 判断后,a 的值变为 0,b 的值变为 2。第三次while 判断条件为假,但是仍要执行自加操作,即值为 1,跳出循环。打印 1 和 2。33.由以下 while 构成的循环,循环体执行的次数是_。 int k=0; while(k=1)
47、k+ +;(分数:2.50)A.有语法错误,不能执行B.一次也不执行C.执行一次D.无限次 解析:解析 本题考查 while 语句,while 语句的语义是:计算表达式的值,当值为真(非 0)时,执行循环体语句。k=1 为赋值语句,即 k 的值等于 1。while(k=1)=while(1),是死循环,执行无限次。因此 D 选项正确。34.关于 do 循环体 while(条件表达式),以下叙述中正确的是_。(分数:2.50)A.条件表达式的执行次数总是比循环体的执行次数多一次B.循环体的执行次数总是比条件表达式的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样 D.条件表达式的执行次数与循环体的执行次数无关解析:解析 dowhile 循环的执行过程是先执行一遍循环体后再执行条件表达式的判断条件,直到条件不成立跳出循环,所以循环体和条件表达式的执行次