(18)以下程序段的输出结果是
: z) B& y7 V# |: {. Y8 {8 F" n int a=1234;
g0 L, ~0 E5 s9 w. q5 } printf("%2d\n",a);
6 e' I8 S# |+ h A)12 0 F# `% q! a+ m
B)34
$ z& r0 u6 ?3 } C)1234 - M$ r$ S2 |9 }5 l7 T
D)提示出错、无结果
/ g* x% b, j; N& `" N 【答案】C
5 z& ^5 u, I9 W6 L 【解析】 printf()函数的输出格式,当整数的值超过格式要求输出范围时,原样输出。本题中要求输出两个有效数字,而实际上a有4个有效数字,故原样输出,输出1234。4 ]% X- k G' t. f& {8 U
$ q/ a) x, u) @4 f5 V
(19)以下选项中不属于C语言的类型的是% Q2 J4 d* L: c$ i0 U( v
A)signed short int
6 B/ V5 k* E) v: O+ G) k) E6 ? B)unsigned long int4 B" e6 Z2 M& n
C)unsigned int 7 T: k/ K1 n+ F( m) Q( W' Q' t
D)long short' c+ {8 s9 k3 d6 x
【答案】D- H* R, b$ _9 S. d
【解析】在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。
! W+ Q) T9 M' y9 c7 `5 f2 { K' @( L. r2 p+ H4 C7 ~
(20)若有说明语句:int a,b,c,*d=&c;则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
; x7 i- p- A! ?/ S! ?/ w5 `' H- J A)scanf("%d%d%d",&a,&b,d); 5 m6 L/ c7 E5 {( M/ O0 e
B)scanf("%d%d%d",&a,&b,&d);
: c2 X8 d. ?3 s6 E C)scanf("%d%d%d",a,b,d);
$ h6 S" k: h+ ^ Q4 w D)scanf("%d%d%d",a,b,*d);
2 Z3 \8 B( h6 C7 \; ?0 a4 m& J: r K1 X, v 【答案】A, Z0 t# i/ ?$ L
【解析】scanf()函数有两个参数,第一个参数是输入格式字符串,第二个参数是输入变量地址列表。输入格式字符串主要由“%”符号和格式字符组成。地址列表是由多个地址组成的。选项B中d已经为地址,不应在加上求地址符号“&”;选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&”;选项D中指针d所指向的存储空间的位置为变量c的值,不为地址。
9 Y. k4 Q v0 g. L2 J: x A9 N+ N. f; F
(21)在16位C编译系统上,若定义long a;,则能给a赋40000的正确语句是
2 T; u0 U2 L+ K @) x. l A)a=20000+20000;
' q1 F- i; \, H& \' G B)a=4000*10;
% ~ c8 H; z3 R# {' C* Z) ~5 o$ r C)a=30000+10000;
" T( r7 y6 Y) u3 p! x6 x* P: S) [ D)a=4000L*10L;
) O9 { e* `2 n; b7 i. C( O 【答案】D0 ^7 _! o. t. u. F0 i
【解析】由于20000+20000、4000*10及30000+10000都是整型表达式,故运算的结果仍然是整型,表达式运算的结果超出了整型数据的范围,不正确。而D是长整型运算,不会超出长整型的范围。
/ z9 f- j- r& ~9 U" W4 z8 V" [2 C, e0 E0 o
(22)以下叙述正确的是
5 Y+ `' J% h9 t! I) X A)可以把define和if定义为用户标识符
I* Y8 c% v0 q) |2 i B)可以把define定义为用户标识符,但不能把if定义为用户标识符
0 ~, {) _* _$ ~$ E0 L3 U7 j C)可以把if定义为用户标识符,但不能把define定义为用户标识符9 ]3 y3 @7 w6 s8 I* q4 t2 S
D)define和if都不能定义为用户标识符
: [2 O% S# ~( y+ d# d7 l# g- k8 F 【答案】B% S5 I6 [# h6 O/ j1 J: g6 E
【解析】C语言中的保留字,而define不是保留字。用户标识符不允许使用保留字。
* D' s$ j* P: o7 H(23)若定义:int a=511,*b=&a;则printf("%d\n",*b);的输出结果为
% d" D& l; \" E A)无确定值
8 x: O1 P4 j2 b+ I B)a的地址
- a5 L/ @4 ?. F: r' J& h% d2 T C)512 9 t+ y; o3 G# }
D)5117 D8 A5 J; p8 i
【答案】D
/ e, B+ @# P2 K3 O+ M 【解析】本题中先定义了一个int型的变量a并赋初值为511,接着定义了一个指向a的指针变量b,在printf()函数的输出格式中,是输出*b,即输出指针所指向变量a的值为511,因此输出511。
. w# n( ^" x1 r! P! F5 b
" r7 L" U/ R6 s) ?& r (24)以下程序的输出结果是' I" v% L* y2 _4 }
main()
" w0 X' f- c! N0 t$ S; s2 @0 q { int a=5,b=4,c=6,d;; H+ H4 d: B1 @+ P# z4 A+ @: E( g
printf(("%d\n",d=a>b?)(a>c? a:c):(b));
. h* O( L6 |% q# [ }2 x# u4 H! O! ~- F* b) a( u
A)5 9 Z; r6 Q/ N7 j; j9 d7 L; j) ~
B)4
6 w" }7 M2 S( U% f& ?/ { C)6 8 Z, l- c _# F% A" a
D)不确定
# _" E6 G& j- T- g9 k, P$ Q1 E 【答案】C& V- Q. `, J& k" S& ?
【解析】在C语言中问号表达式(如:a>c?a:c;)的计算规则为:如果a>c为真,那么表达式的值为a的值;否则表达式的值为c的值。本题中的printf()函数中的输出表达式,首先计算括号内的条件表达式,它的值为6(a>c?a:c中a>c即5>6为假故该表达式的值为c的值即为6),然后再计算外面表达式(等价于a>b?6:b)的值,同理可得该表达式的值为6,将值6赋值给d,因此最后输出该表达式的值为6。
9 B: N" I( H3 b9 t; K8 W; Z, ~. b9 b- R- { v& u; U
(25)以下程序中,while循环的循环次数是8 k& o; ?2 i2 q; ^
main()
2 g" f/ {1 z. Q& t! F { int i=0;: V0 t' K: F7 c# Z9 c6 C* _
while (i<10)
5 r0 ~6 |6 E2 @* L U' F& l { if(i<1)continue;0 E7 i% a; ~( r1 q% d; `
if(i==5) break;( k; y1 Z4 Z/ S x q4 c2 T
i++;
& F0 ]+ [& P" N0 g, \3 A" w }. X1 ]7 e. K; H* N1 V1 f
…
0 _% J$ k x- ^& D }1 x7 f+ B- y' k/ b2 _
A)1 # W9 v8 X- z7 }
B)10 ' `4 N6 d3 j- ^! q$ f* X
C)6
x- K4 _! _+ Y/ \' t; ] D)死循环,不能确定次数 H8 E9 T$ R6 w0 `! S5 |$ r8 u+ P
【答案】D
8 M+ m) W6 V( r6 j 【解析】break语句只能在循环体和switch语句体内使用,当break出现在switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但不在switch语句体内时,则在执行break后,跳出本层循环体。而continue语句的作用是结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本程序中,变量i的初始值为0,判断while后面括号内表达式的值为真,执行循环体内的if语句,判断if后面括号内表达式的值为真,执行“continue;”语句。因continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以i的值未发生变化,循环条件仍然为真,if语句也仍然成立,因此循环将无止境地进行下去。* H& M. D. q- A/ G5 \6 w
7 _* R5 Y! r& b' S (26)以下程序的输出结果是 H- V) _4 k+ w e
main()0 D" ^$ ]/ V, b( u
{ int a=0,i;; E4 F2 C3 A; H- e
for(i=1;i<5;i++)- b( {, r- g7 l4 c" ?: {
{ switch(i)3 ~! s" `: V5 E5 }$ t( G6 `3 j
{ case 0:
0 A, W3 a5 q E3 h. Q case 3:a+=2;& l/ R8 v; l7 \- d' L
case 1:
4 t& i7 c& t: Q* e5 e* _ case 2:a+=3;1 p2 O( n4 V C- W2 ]$ j, Z a( K% Z
default:a+=5;
( q3 E9 f6 d2 ^) a( u5 \) ^- Y }4 A6 v% Y& M1 f" e& ~& _! B
}" a9 D" S+ O, d' x
printf("%d\n",a);
/ L2 T5 K- k/ c; w, \: w1 w" N }% Z# {6 O& _+ j6 C+ D
A)31
: {' r1 W5 S$ Z/ u B)13
; B) e" T9 X7 ^5 ^/ z6 n( \, f C)10 & i6 B; |* V. h
D)20* q7 l" m! {6 y% Y; ~- U1 }3 P+ z
【答案】A
9 n/ c1 D4 E8 n5 [; o 【解析】switch语句的执行过程是:在switch后面的表达式的值和case后面常量表达式的值吻合时,就执行该case分支的语句。如果在该语句的后面没有break语句,则按顺序继续执行下一个case分支,直到遇到break语句或switch多分支语句结束,在switch语句中,break语句的作用是使流程跳出switch结构,终止switch语句的执行。在本题中,因为每个case语句后面都没有break语句,所以,第一轮循环(i==1)执行过后a的值为8,第2轮(i==2)执行过后a的值为16,第3轮(i==3)执行过后a的值为26,第4轮(i==4)执行过后a的值为31,然后执行“i++”语句,这时循环条件为假,循环结束。 Y7 c$ O7 K. D! F" s" u% `
: K3 p k- Y5 v0 j9 G/ D% n% Z2 m) y! n (27)以下程序的输出结果是
! X5 a0 Q( b6 J main()
2 @5 Q6 ~, }6 Q/ j { int a=4,b=5,c=0,d;0 u% t. j* c7 k7 ~3 B1 A8 J% c, C& ]
d=!a&&!b‖!c;
8 p a* @: V9 i' \$ g8 |4 I# [ printf("%d\n",d);
; q' P# u8 _" e8 i! ?: g, u! x }4 w: M6 ]1 O |0 K+ B* a
A)1
) G& V& C* h5 m* D/ C B)0
' x8 S! L- }, {" D3 f( h z4 y. a5 l* V C)非0的数
) x, Z4 F' s' i" w D)-1
: s ]5 l- R; K 【答案】A
. b2 y( S# f% ~, R [) P 【解析】由于单目运算符优先级高于“&&”和“||”运算,所以先计算!a、!b和!c分别为“假”、“假”、“真”,然后是&&运算和“||”运算,原表达式就等价于“假”&&“假” ||“真”,又由于“&&”的优先级高于“||”运算符,所以先计算“假”&&“假”,还是为假,最后是“假”||“真”为真。因此最后d被赋值为1,故最后输出为1。
9 c7 \, |% W% l6 u( g2 k+ X7 J& s, ?# g
(28)以下程序的输出结果是4 i$ D% x, c2 g' l3 ~! s2 b
#include <stdio.h>
; y+ T1 S5 m: K6 `. ` main()
; {6 Y' z/ H6 H) j: E { int i=0,a=0;; }2 A r8 o6 Z9 o- r
while (i<20)
# f% l6 p9 W. ^/ ]8 h, ^+ H o { for(;;)% P& n0 T' \1 k. v+ \* x
{ if((i%10)==0) break;
! y# `" Q9 c3 D& r* V: S, w! y else i--;
7 p8 G0 }4 W) y% `; n8 h8 p) _& m }+ M& G2 \$ ]6 p) S [# a: Y2 t
i+=11;a+=i;
- H* F2 Q& w t: w7 t% e. ^ }1 k: U; l% y I
printf("%d\n",a);
+ ^& T6 ^- N, r; u n }" I, W8 }. p( R. H- D k
A)21 4 w, G6 s$ {' v1 ?
B)32 - w# f6 C9 U( `- [" q0 u
C)33
7 M* a4 J+ ] D; R2 S D)115 {8 P: G' t0 c
【答案】B- f- t4 C5 _2 [3 q
【解析】break语句只能在循环体和switch语句体内使用。本题程序为在while循环中嵌套for循环。先看内层for循环,该循环的3个表达式全部省略,循环条件始终为真,但循环体内的break语句为终止循环的条件。首先,由初始条件判断外层循环while括号内表达式的值,该值为真,执行本次while循环,即执行循环体内的if语句,判断该表达式后面括号里表达式的值为真,执行break语句,跳出内层循环,执行下面的语句,此时i和a的值均变为11;回到外层循环,判断表达式“i<20”仍为真,执行内层循环语句,此时if条件不满足,执行else语句,i的值为10,继续内层循环,if语句条件满足,执行break语句,跳出内层循环,执行下面的语句后,i和a的值分别是21和32。再判断外层循环的条件为假,结束循环。4 F; a6 N/ g$ y9 d( e
1 |3 V& v" s6 Q. S: z% k% P. c8 w (29)以下程序的输出结果是
6 V0 s' n, f) E0 X char cchar(char ch)9 g! c8 \ P2 P- }& z1 ]
{
' E/ E) n# X" B5 h0 L5 A if(ch>='A' &&ch<='Z')ch=ch-'A'+'a';* E6 D0 \' y I' p0 f' ^4 `3 V
return ch;! K9 s2 h' e* ~8 i* b( [
}
, ^! c. z4 \* `! ]7 F$ f main()- N3 h2 `2 I, M9 j
{ char s[]="ABC+abc=defDEF",*p=s;7 S& T& D3 Z" D
while(*p)
* b# G: J2 @3 Q4 W% g# ?; _! t# ^6 r { *p=cchar(*p);' P# `4 z+ z+ `1 \/ d. L
p++;* G! W; L4 s+ D8 L+ C
}' K/ M, \$ A# Z. _
printf("%s\n",s);
: a2 {1 L8 u- r9 X$ q }3 `, R/ u6 v/ W1 p Y! m, S
A)abd+ABC=DEFdef 3 }, g2 y: E$ G6 e( ^
B)abc+abc=defdef $ C3 t6 w1 H5 Q; Z! M5 F
C)abcABCDEFdef 8 k/ z8 L8 j h
D)abcabcdefdef7 _9 o# _3 d( P" n
【答案】B
6 F+ M4 f) }6 O* @) M' @2 n 【解析】本题首先定义了一个函数cchar(),有一个字符型参数ch。在函数中首先判断该字符是否为大写字母,如果是则把它转换成小写字符再赋值给ch,把ch作为函数值返回。在主函数中定义了一个字符数组s并初始化,然后定义了一个指针变量并使它指向数组s。接着通过一个while循环利用指针变量p,依次取出字符数组的字符(直到遇到字符串结束标志'\0'),并调用cchar()函数,把大写字母转换成小写字母,其他字符不变。最后输出字符数组为s中的内容,结果为“abc+abc=defdef”。 |