综合练习题 从下列四个供选择的答案中选出正确的一个答案 1、语句 printf("%%d%d”,123),将输出 A)%23%dB)%%123C)%d123D)上述语句语法有错 “%%”格式表示输出一个“%”。 2、执行下列程序段后,a值为 int a, b a=15:b=12 )?a%:a/5 A)0 B)28 C)4 D)2 先计算a=b++的值: a-的值为15,执行后a=14:b++的值为12,执行后b=13:15=12为假 执行a/5即14/5值为2 结果:a=2 3、判断字符变量c的值为数字(0--9)则返回1,否则返回0,可用表达式 A)0=0)if(x)y=l; else y=-1; B) if(xl =0)if (x>0)y=l; else y=-1; else y=0; C)if(x0)y=l; else y=0; 语句f(x<o)y=-l; else if(x)y=0, else y=1;等价于 if(x<0) else
1 综 合 练 习 题 一、从下列四个供选择的答案中选出正确的一个答案 1、语句 printf(“%%d%d”, 123); 将输出: A) %123%d B) %%d123 C) %d123 D)上述语句语法有错 “%%”格式表示输出一个“%”。 2、执行下列程序段后, a 值为: int a, b; a=15; b=12; a=(a-- ==b++)? a%5 : a/5; A) 0 B) 2.8 C ) 4 D) 2 先计算 a--==b++的值: a--的值为 15,执行后 a=14;b++的值为 12,执行后 b=13;15==12 为假 执行 a/5 即 14/5 值为 2 结果: a = 2 3、判断字符变量 c 的值为数字(’0’---’9’)则返回 1,否则返回 0, 可用表达式: A) ‘0’=0) if (x) y=1; else y= -1; B) if (x!=0) if (x>0) y=1; else y= -1; else y=0; C) if (x0) y=1; else y=0; 语句 if (x<0) y= -1; else if (!x) y=0; else y=1; 等价于: if (x < 0) y = -1; else {
if(Ix) =0 else -1x0 5、循环for(=0,j=5;++il-j,) printf((od%d”,i,j;将执行 A)6次B)3次C)0次D)无限次 i=0,j=5,(+++1)|=(-j4)成立:i=1,j=4 i=1,j=4,(++12)|=(-j→3)成立:i=2,j=3 i=2,j=3,(++i→3)=(-j2)成立:i=3,j=2 6、下列程序段执行后s值为 int F5.s=0 do if (i%2)continue, else S+=i, while(-1); A)15B)9C)6D)以上均不是 写成规范形式 if(%2) continue: else s+= while(-1); i=5.s=0:i%2=1 i=4 i=4,s=0:i%2=0:s=0+4=4;i=3 i=3.s=4:i%2=1 i=2 i=2,s=4:i%2=0:s=4+2=6;i=1 1,s=6:i%2=1 =0
2 if (!x) y = 0; else y = 1; } 即: -1 x 0 5、循环 for(i=0, j=5; ++i!=--j; ) printf(“%d %d”, i, j); 将执行 A) 6 次 B) 3 次 C) 0 次 D) 无限次 i = 0, j = 5, (++i➔1) != (--j➔4) 成立: i = 1, j = 4 i = 1, j = 4, (++i➔2) != (--j➔3) 成立: i = 2, j = 3 i = 2, j = 3, (++i➔3) != (--j➔2) 成立: i = 3, j = 2 …… 6、下列程序段执行后 s 值为: int i=5, s=0; do if (i%2) continue; else s+=i; while (--i); A) 15 B) 9 C) 6 D) 以上均不是 写成规范形式: do if (i % 2) continue; else s += i; while (--i); i = 5, s = 0: i % 2 = 1: i = 4 i = 4, s = 0: i % 2 = 0: s = 0 + 4 = 4; i = 3 i = 3, s = 4: i % 2 = 1: i = 2 i = 2, s = 4: i % 2 = 0: s = 4 + 2 = 6; i = 1 i = 1, s = 6: i % 2 = 1: i = 0
7、对于inta,要使(1>1)a-=a;则a可以是: A)2 B)6 C)10D)2,6,10均可 0000000000000001 1>1: 0000000000000010 (11)|2:0000000000(2) (11)6:0000000000010(6 (11)10:00000000000010(10) 8、对于以下宏定义 #define SQ(x) x*x #define DD(x,y) SQ(x)-sQly) 宏调用DD(2*3,2+3执行后值为 A)43B)1l C)25D)以上均不是 DD(2*3,2+3) →SQ(2*3)-SQ(2+3) →2*3*2*3-2+3*2+3 9、对于以下结构定义 struct i int len; p->str+中的++加在 A)指针str上B)指针p上C)sr所指的内容上D)以上均不是 优先级 “++”,++是右结合 p->sr+++(p->str)++) 例子:假如有 Hello world! \0
3 7、对于 int a,要使((1>1)|a)==a; 则 a 可以是: A) 2 B) 6 C) 10 D) 2,6,10 均可 1: 0000 0000 0000 0001 1>1: 0000 0000 0000 0010 (1>1) | 2: 0000 0000 0000 0010 (2) (1>1) | 6: 0000 0000 0000 0110 (6) (1>1) | 10: 0000 0000 0000 1010 (10) 8、对于以下宏定义: #define SQ(x) x*x #define DD(x,y) SQ(x)-SQ(y) 宏调用 DD(2*3, 2+3)执行后值为: A) 43 B) 11 C) 25 D) 以上均不是 DD(2*3,2+3) ➔SQ(2*3)-SQ(2+3) ➔2*3*2*3-2+3*2+3 ➔43 9、对于以下结构定义: struct { int len; char *str; } *p; *p->str++中的++加在 A) 指针 str 上 B) 指针 p 上 C) str 所指的内容上 D) 以上均不是 优先级: “->” > “*” = “++”, ++是右结合 *p->str++ ➔ *((p->str)++) 例子: 假如有 p len 12 str H e l l o , w o r l d ! \0
则*p>str+的值为H,执行后,str指向e单元 10、将s所指节点加到p所指节点之后(如下图),其语句应为 r×子一 A)S->next=p+l; p->next=s: b)p->next =s, C)S->next=p->next; p->next=s->next D) s->next= p->next; p->next =s; 1l、语句f(a>b)k=0, else k=1;(inta,b,k)等价于: A)k=(a>b)?10;B)k=a>b,C)k=a<=b;D)以上均不是 12、对于inti, char c,s[20从输入序列123ab4efg中将123读入;”b读入c “45efg'读入s,则 scanf语句应写为 A)scanf( %da%c%s", 1, c, s) B) scanf(“%d%≈c%oc%s”,&i,&c,s); C)scanf("%da%c%s", &i, &c, &s) D)scanf(%d%c%c%s", &i, &c, s); 13、若有以下说明和语句,已知int和 double类型分别占2和8个字节,则 sizeof(st) 的值为 struct st char a[ 10] union } A)18 B)20 C)12 D)以上均不是 14、对于以下程序段,运行后i值为 enum WEEKS{1,2,3,4,5,6,7};
4 则*p->str++的值为 ‘H’, 执行后, str 指向’e’单元. 10、将 s 所指节点加到 p 所指节点之后(如下图), 其语句应为: next . ........ p next s A) s->next = p+1; p->next = s; B) p->next = s; s->next = p->next; C) s->next=p->next; p->next=s->next; D) s->next = p->next; p->next = s; 11、语句 if (a>b) k=0; else k=1; (int a, b, k) 等价于: A) k=(a>b)?1:0; B) k=a>b; C) k=a<=b; D) 以上均不是 12、对于 int i; char c, s[20];从输入序列 123ab45efg 中将 123 读入 i; ’ b’读入 c; “45efg”读入 s, 则 scanf 语句应写为: A) scanf(“%da%c%s”, i, c, s) B) scanf(“%d%*c%c%s”,&i, &c, s); C) scanf(“%da%c%s”, &i,&c,&s) D) scanf(“%d%c%c%s”, &i, &c, s); 13、若有以下说明和语句, 已知 int 和 double 类型分别占 2 和 8 个字节,则 sizeof(st) 的值为: struct st { char a[10]; union { int i; double y; } }; A) 18 B) 20 C) 12 D) 以上均不是 14、对于以下程序段, 运行后 i 值为: enum WEEKS {1,2,3,4,5,6,7} ;
enum WeeKs a=l switch(a)i case I: Fl default: 3 A)1 B)0 C)3 D)上述程序有语法错误 15、对于以下递归函数f,调用f(4,其返回值为 Int f(int n) i return f(n-1)+n;) A)10 B)11 C)0 D)以上均不是 16、某一程序 TESTO,编译后运行:TST123456ABC则相应的argc及argv[3] 分别为 A)3“456”B)3“ABC”C)4“456”D)4“ABC” revo CTEST revill 123 ABC 17、如下程序段: intc={1,7,12 int *k printf("next k is %d"*++k) 其输出应为 B)7 D)以上均不对 [0 cl1 2c[2
5 enum WEEKS a=1; int i=0; switch (a) { case 1: i=1; case 2: i=2; default: i=3; } A) 1 B) 0 C) 3 D) 上述程序有语法错误 15、对于以下递归函数 f, 调用 f(4),其返回值为: int f(int n) { return f(n-1)+n; } A) 10 B) 11 C) 0 D) 以上均不是 16、某一程序 TEST.C,编译后运行:TEST 123 456 ABC 则相应的 argc 及 argv[3] 分别为: A) 3 “456” B) 3 “ABC” C) 4 “456” D) 4 “ ABC” 17、如下程序段: int c[]={1, 7, 12}; int *k; k=c; printf("next k is %d",*++k); 其输出应为: A) 2 B) 7 C) 1 D)以上均不对 argv[0] “TEST” argv[1] “123” argv[2] “456” argv[3] “ABC” k 1 c[0] 7 c[1] 12 c[2]
18、如果变量ⅹx有如下类型 struct char al 如果 sizeof(xx)的值为3,则 union char al Int a2 s yy: 则 sizeof(y)函数的返回值应为 A)2B)4C)5D)定义有错 19、对于enum{RAIN, CLOUD, CLEAR} weather,做如下操作: (1) weather=1 2) weather= CLOUD,下列哪个说法是对的 A)()是错的B)(2)是错的C)()与(2)是一样的D)以上都错 20、设ntal=7,a2=1,xx,进行如下操作x=(a3)if(i<4)i=1 else i=2;后i的值应为 A)1B)2 D)语句错误 22、执行下列程序: #define MA(x, y)((x)*(y)) i=MA(,计+1)7; 后变量i的值应为:
6 18、如果变量 xx 有如下类型: struct { char a1; 1 int a2; 2 } xx; 如果 sizeof(xx)的值为 3, 则: union { char a1; int a2; int a3; } yy; 则 sizeof(yy)函数的返回值应为: A) 2 B) 4 C) 5 D)定义有错 19、对于 enum { RAIN, CLOUD, CLEAR } weather;做如下操作: ⑴ weather=1; ⑵ weather=CLOUD; 下列哪个说法是对的。 A) ⑴是错的 B) ⑵是错的 C) ⑴与⑵是一样的 D)以上都错 20、设 int a1=7, a2=1, xx; 进行如下操作 xx = ( a13) if ( i<4 ) i=1 else i=2; 后 i 的值应为: A) 1 B) 2 C) 3 D) 语句错误 22、执行下列程序: #define MA(x, y) ( (x)*(y) ) i=5; i=MA(i,i+1)-7; 后变量 i 的值应为:
A)30B)19C)23D)1 MA(+1)7 (1)*(i+1)-7 (5*6)-7 23、执行下列程序 i=3/2+72=5; 1=45%11+(7>8)?14:21)=14) 后变量访的值应为 A)F0j= B)i=1= i=(32+72)=5)=(1+3)=5)=(4=5)=0; j=1+(21=14)=1+0=1 24、如果 char cc="12345",做 sizeof(cc)后的返回值应为 A)2B)5C)6 sizeof0返回参数对象的字节数:这里的参数是字符数组c,有6个元素 25、如果nti=16,j=23;执行 printf("%x×-%o",ij)后输出为: A)10-23B)10-27C)16-23D)16-27 26、执行下列程序: #define MA(x, y)(x)*(y) int I= i=3MA(i,计+1)+5; printf( %d\n”,) 其输出应为: D)以上都错 3MA(i+1)+5 →3/(1)*(计+1)+5 7
7 A) 30 B) 19 C) 23 D) 1 MA(i,i+1)-7 ➔ ((i) * (i+1)) – 7 ➔ (5 * 6 ) – 7 ➔ 23 23、执行下列程序: int i, j; i = 3/2 + 7/2 == 5; j = 45 % 11 + (((7>8) ? 14:21) == 14); 后变量 i,j 的值应为: A) i=0 j=1 B) i=1 j=1 C) i=0 j=2 D) i=1 j=2 i = ((3/2 + 7/2) == 5) = ((1+3) == 5) = (4 == 5) = 0; j = 1 + (21 == 14) = 1 + 0 = 1 24、如果 char cc[]="12345",做 sizeof(cc)后的返回值应为 A) 2 B) 5 C) 6 D) 1 sizeof()返回参数对象的字节数: 这里的参数是字符数组 cc,有 6 个元素. 25、如果 int i=16, j=23 ; 执行 printf("%x--%o",i, j)后输出为: A) 10--23 B) 10--27 C) 16--23 D) 16--27 26、执行下列程序: #define MA(x, y) (x)*(y) int i = 2; i = 3/MA(i, i+1)+5; printf(“%d\n”, i); 其输出应为: A) 5 B) 8 C) 0 D) 以上都错 3/MA(i,i+1)+5 ➔ 3/(i)*(i+1)+5
→3/2*3+5 →8 27、有一函数 int f(int a)i auto int b=0 static int c=3 b=b+1; return(a+b+c); 如果有nti,j,则执行两次调用:i=f(2),j=f(2)后,i,j值为 )i=7, i=7,j=8 C)1=8 7 注意静态局部变量 static int c;的含义 第一次调用f(2) 开始时:b=0,c=3 执行:b=0+1=1,c=3+1=4 返回:a+b+c=2+1+4=7 调用结束后:静态局部变量c=4保持不变; 第二次调用f(2) 开始时:b=0,c=4 执行:b=0+1=1,c=4+1=5; 返回:a+b+c=2+1+5=8 调用结束后:静态局部变量c=5保持不变; 28、有一函数 int f(char *s)i int k=0: while (s) k=k*10+*s++-0 return (k); 调用f(“1234)的返回结果是 A)“1234”B)1234C)“4321”D)4321
8 ➔ 3/2*3+5 ➔ 8 27、有一函数: int f(int a) { auto int b = 0; static int c = 3; b = b+1; c = c+1; return(a+b+c); } 如果有 int i, j; 则执行两次调用:i=f(2); j=f(2) 后, i, j 值为: A) i = 7, j = 7 B) i = 7, j = 8 C) i = 8, j = 7 D) i = 8, j = 8 注意静态局部变量 static int c;的含义 第一次调用 f(2): 开始时: b = 0, c = 3 执行: b = 0 + 1 = 1, c = 3 + 1 = 4; 返回: a+b+c=2+1+4=7; 调用结束后: 静态局部变量 c=4 保持不变; 第二次调用 f(2): 开始时: b = 0, c = 4 执行: b = 0 + 1 = 1, c = 4 + 1 = 5; 返回: a+b+c=2+1+5=8; 调用结束后: 静态局部变量 c=5 保持不变; 28、有一函数: int f(char *s) { int k = 0; while (*s) k = k*10+*s++-’0’; return(k); } 调用 f(“1234”)的返回结果是: A) “1234” B) 1234 C) “4321” D) 4321
while循环等价于: while(*s)k=k*10+(*s++)-0 该函数的作用将数字字符串转换成相应的整数 29, static int a[ =(1, 2, 31,*p, *q; p=a+l; q=p++; 执行该程序段后,p和q所指向的单元的内容分别为 A)(*p)=1,(*q)=2 B)(p)=2,(q)=3 C)(p)=3,(q)=2 D)以上都错 2 30、 static struct{ int x, y3]; }aB]={{1,2,34},{56,7,8},{9,10,11,12},*p; p 则*(int*)p+1)+2)=? A)3 B)7C)10D)以上都错 6 a[] 10
9 while 循环等价于: while (*s) k = k * 10 + (*s++) – ‘0’; 该函数的作用:将数字字符串转换成相应的整数. 29、static int a[] = {1,2,3}, *p, *q; p = a+1; q = p++; 执行该程序段后, p 和 q 所指向的单元的内容分别为: A) (*p) = 1, (*q) = 2 B) (*p) = 2, (*q) = 3 C) (*p) = 3, (*q) = 2 D) 以上都错 a 30、static struct { int x, y[3]; } a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p; p = a; 则*((int *)(p+1)+2) = ? A) 3 B) 7 C) 10 D) 以上都错 p 1 2 3 4 p+1 5 6 7 8 9 10 11 12 1 a[0] p 2 a[1] 3 a[2] a[0] a[1] a[2]
二、填空题 1、用for循环打印147101316192225,其语句应为: for(Fl; K<=9; 1++) printf(%,,3i-2; 2、执行完下列语句段后,i值分别为_355350 10*(=5); 第一条语句执行后:i=5,j=50 执行第二条语句 计+可*=+2 i+=(*=(i+2) i+=(*=7 i+=(=50*7) i=5+350=355,j=350 3、执行完下列语句段后,i值为:5 static int a[3]4}={{1,2,3},14,56}},i F=a[015 ajO aol X+2 X+4 a01[3 X+6 allo 456 X+8 a[lJ[1] X+10 a[1[2 X+12 a[13] X+14 a[2]0 X+16 a2][ a2][2 a[2][3 ??? X+18 a[0]5的地址:X+(0*4+5)*2=X+10,即对应于a[ll
10 二、填空题 1、用 for 循环打印 1 4 7 10 13 16 19 22 25 , 其语句应为: for (i=1; i<=9; i++) printf(“%3d”, _3*i-2__); 2、执行完下列语句段后, i,j 值分别为:___355,350__ int i, j; j=10*(i=5); i+=j*=i+2; 第一条语句执行后: i = 5, j = 50 执行第二条语句: i+=j*=i+2 ➔ i += (j *= (i+2)) ➔ i += (j *= 7) ➔ i += (j = 50*7) ➔ i = 5 + 350 = 355, j = 350 3、执行完下列语句段后, i 值为:__5__ static int a[3][4]={{1,2,3},{4,5,6}}, i; i= a[0][5]; a[0][0] 1 X a[0][1] 2 X+2 a[0][2] 3 X+4 a[0][3] ? X+6 a[1][0] 4 X+8 a[1][1] 5 X+10 a[1][2] 6 X+12 a[1][3] ? X+14 a[2][0] ? X+16 a[2][1] ? X+18 a[2][2] ? X+20 a[2][3] ? X+22 a[0][5]的地址: X+(0*4+5)*2 = X + 10, 即对应于 a[1][1]