综合练习题 从下列四个供选择的答案中选出正确的一个答案 1、语句 printi(%%d%d”,123),将输出 A)%123%dB)%%123%d123D)上述语句语法有错 “%%”格式表示输出一个“%”。 2、执行下列程序段后,a值为 int a, b a=(a=b++)?a%5:a5; B)28 C)4 D)2 先计算a-=b++的值: a--的值为15,执行后a=14:b++的值为12,执行后b=13:15=12为假 执行a5即14/5值为2 结果:a=2 3、判断字符变量c的值为数字(0--39)则返回1,否则返回0,可用表达式 A)0<=c<=9B)0<=c&&c<=9C)0<=cc<=“9D)以上均不是 4、对于intx,y,语句if(x0)y=-l; else if(!x)y=0, else y=1;等价于 A)y=0; if(x>=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 (x<0)y=-1; if (x!=0)y=l; else y=0 1; if(x!=0)if (x>0)y=l; else y=0; x<0 0 5、循环for(=0,j=5;++i-j;) printf((“%od%d”,,j),将执行 A)6次B)3次C)0次D无限次 i=0,j=5,(++i1)|=(-j14)成立:i=1,j=4 i=1,j=4,(++i+2)l=(-→3)成立:i=2,j=3 i=2,j=3,(++i+3)|=(-12)成立:i=3,j=2
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’<=c<=‘9’ B) ‘0’<=c && c<=‘9’ C) ‘0’<=c || c<= ‘9’ D)以上均不是 4、对于 int x, y; 语句 if (x<0) y= -1; else if (!x) y=0; else y=1; 等价于: A) y=0; if (x>=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 (x<0) y= -1; if (x!=0) y=1; else y=0; D) y= -1; if (x!=0) if (x>0) y=1; else y=0; 即: -1 x < 0 y = 0 x = 0 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 1=5.s=0 do if(i%2)continue; else s+=i, while(--1) A)15B)906D)以上均不是 写成规范形式 if(i% 2) while(--1) i=5,s=0:i%2=1 i=4,s=0:i%2=0:s=0+4=4;i=3 i=2,s=4:i%2=0:s=4+2=6 =1,s=6:i%2=1 7、对于以下宏定义 #define n3 # define y(n)(N+1)幸n 执行语句“z=2*(N+Y(5+1)”后z的值为 C)25 D)以上均不是 宏定义的执行是先替换再参与运算 z=2*(N+(N+1)5+1)=2(3+(3+1)*5+1)=48 8、以下宏替换的叙述不正确的是 A)宏替换时不占运行时间 B)宏名无类型 C)宏替换只是字符替换 D宏名必须用大写字母表示 9、语句if(a>b)k=0, else k=1;(inta,b,k)等价于: k=(a>b)?1:0,B)k=a>b,Qk=a<=b;D)以上均不是 10、对于inti; char c, s[20]从输入序列123ab4sefg中将123读入i,'b'读入c;“45eg”读入S 则 scanf语句应写为 A)scanf("%da%c%s", i, c, s) B) scanf(“%d%^c%c%s”,&i,&e,s)
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、对于以下宏定义: #define N 3 #define Y(n) ((N+1)*n) 执行语句“z=2*(N+Y(5+1))”后 z 的值为: A) 48 B) 42 C) 25 D) 以上均不是 宏定义的执行是先替换再参与运算 z=2*(N+(N+1) 5+1)=2*(3+(3+1) *5+1)=48 8、以下宏替换的叙述不正确的是 A)宏替换时不占运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字母表示 9、语句 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) 以上均不是 10、对于 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) 11、对于以下程序段,运行后i值为 enum WeeKs{1,2,3,4,5,6,7} enum weeks a=l int i =0 switch(a)i case 2: 1 =2 default: i=3 A)1 B)0 D)上述程序有语法错误 12、某一程序 TEST. C,编译后运行:TEST123456ABC则相应的argc及argv3]分别为 A)3“456”B)3“ABC C)4“456”D)4“ABC” ar revo TEST argyll 123 -456 rgv ABC” 13、如下程序段 intc={1,7,12}; printf("next k is %d",*++k) 其输出应为 A)2 B)7 D)以上均不对 [ 4、如果变量ⅹx有如下类型: struct i
3 C) scanf(“%da%c%s”, &i,&c,&s) D) scanf(“%d%c%c%s”, &i, &c, s); 11、对于以下程序段, 运行后 i 值为: enum WEEKS {1,2,3,4,5,6,7} ; 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) 上述程序有语法错误 12、某一程序 TEST.C,编译后运行:TEST 123 456 ABC 则相应的 argc 及 argv[3]分别为: A) 3 “456” B) 3 “ABC” C) 4 “456” D) 4 “ ABC” 13、如下程序段: int c[]={1, 7, 12}; int *k; k=c; printf("next k is %d",*++k); 其输出应为: A) 2 B) 7 C) 1 D)以上均不对 14、如果变量 xx 有如下类型: struct { char a1; 1 argv[0] “TEST” argv[1] “123” argv[2] “456” argv[3] “ABC” k 1 c[0] 7 c[1] 12 c[2]
2 如果 sizeof(xx)的值为3,则 则 sizeof(y)函数的返回值应为: A)2B)4C)5D)定义有错 15、执行下列程序 #define MA(x, y)((x)*(y)) 后变量i的值应为: B)19C23D)1 (1)*(1+1)) 16、执行下列程序 1,J i=3/2+7/2=5 j=45%1ll+((7>8)?14:21)=14) 后变量i的值应为: Ali=0j=l B) 1=((3/2+7/2)=5)=((1+3)=5)=(4=5)=0; 17、如果 char cc="12345",做 sizeof(cc)后的返回值应为 A)2B)506D)1 sIze0返回参数对象的字节数:这里的参数是字符数组c,有6个元素
4 int a2; 2 } xx; 如果 sizeof(xx)的值为 3, 则: union { char a1; int a2; int a3; } yy; 则 sizeof(yy)函数的返回值应为: A) 2 B) 4 C) 5 D)定义有错 15、执行下列程序: #define MA(x, y) ( (x)*(y) ) i=5; i=MA(i,i+1)-7; 后变量 i 的值应为: A) 30 B) 19 C) 23 D) 1 MA(i,i+1)-7 ➔ ((i) * (i+1)) – 7 ➔ (5 * 6 ) – 7 ➔ 23 16、执行下列程序: 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 17、如果 char cc[]="12345",做 sizeof(cc)后的返回值应为 A) 2 B) 5 C) 6 D) 1 sizeof()返回参数对象的字节数: 这里的参数是字符数组 cc,有 6 个元素
18、如果inti=16,j=23;执行 printf("%x-%o",i,j)后输出为: A)10-23B10-27C)16--23D)16-27 19、执行下列程序: #define MA(x, y)(x)*(y) inti=2 i=3/MA(,计+1)+5; printf("%dn”,1) 其输出应为 B) D)以上都错 3MA(1,i+1)+5 3(1)*(计+1)+5 少32*3+5 20、有一函数: int f(int a)( auto intb=0 static intc= 3 如果有inti,j;则执行两次调用:i=(2);j=(2)后,i,j值为 B)i=7,j=8 C)i=8 7 D)i=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 调用结束后:静态局部变量∞=4保持不变; 第二次调用f(2):
5 18、如果 int i=16, j=23 ; 执行 printf("%x--%o",i, j)后输出为: A) 10--23 B) 10--27 C) 16--23 D) 16--27 19、执行下列程序: #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 20、有一函数: 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):