全国计算机等级考试二级C语言选择结构测试
一、选择题
(1)当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是
A)k%2
B)k%2==1
C)(k%2)!=0
D)!k%2==1
(2)设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是
A)k=k>=k
B)-k++
C)k%int(f)
D)k>=f>=m
(3)设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是
A)(!a==1)&&(!b==0)
B)(a<b)&& !c||1
C)a && b
D)a||(b+b)&&(c-a)
(4)设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句
if (a<b)
if(c==d) y=0;
else y=1;
该语句所表示的含义是
(5)有以下程序
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A)6,1
B)2,1
C)6,0
D)2,0
(6)有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程序运行后的输出结果是
A)1 2 3
B)2 3 4
C)2 2 3
D)2 3 3
(7)若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是
A) abs(x-y)<10
B) x-y>-10&& x-y<10
C) @(x-y)<-10||!(y-x)>10
D) (x-y)*(x-y)<100
(8)有以下程序
main()
{
int a=3,b=4,c=5,d=2;
if(a>b)
if(b>c)
printf("%d",d++ +1);
else
printf("%d",++d +1);
printf("%d\n",d);
}
程序运行后的输出结果是
A) 2
B) 3
C) 43
D) 44
(9)下列条件语句中,功能与其他语句不同的是
A) if(a) 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==0) printf("%d\n",x); else printf("%d\n",y);
(10)以下4个选项中,不能看作一条语句的是
A) {;}
B) a=0,b=0,c=0;
C) if(a>0);
D) if(b==0) m=1;n=2;
(11)以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是
A) if((a>B) &&(b>C) ) k=1; B) if((a>B) ||(b>C) ) k=1
else k=0;
C) if(a<=B) k=0; D) if(a>B) k=1;
else if(b<=C) k=1; else if(b>C) k=1;
else k=0;
(12) 有以下程序
main()
{int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是
A) 0,0
B) 0,1
C) 1,0
D) 1,1
(13) 有定义语句:int a=1,b=2,c=3,x; 则以下选项中各程序段执行后,x的值不为3的是
A) if (c<a) x=1; B) if (a<3) x=3;
else if (b<a) x=2; else if (a<2) x=2;
else x=3; else x=1;
C) if (a<3) x=3; D) if (a<b) x=b;
if (a<2) x=2; if (b<c) x=c;
if (a<1) x=1; if (c<a) x=a;
(14)有以下程序
main()
{ int i=1,j=1,k=2;
if((j++‖k++)&&i++) printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A) 1,1,2
B) 2,2,1
C) 2,2,2
D) 2,2,3
(15)有以下程序
main()
{ int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2)
}
执行后输出结果是
A) 2 B) 3 C) 4 D) 编译时有错,无结果
(16) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是
A) 6 B) 0 C) 2 D) 1
(17) 有一函数, ,以下程序段中不能根据x值正确计算出y值的是
A) if(x>0) y=1; B) y=0;
else if(x==0) y=0; if(x>0) y=1;
else y=-1; else if(x<0) y=-1;
C)y=0; D)if(x>=0)
if(x>=0); if(x>0) y=1;
if(x>0) y=1 ; else y=0;
else y=-1; else y=-1;
(18) 有以下程序
main()
{ int a=15,b=21,m=0;
switch(a%3)
{ case 0:m++;break;
case 1:m++;
switch(b%2)
{ default:m++;
case 0:m++;break;
}
}
printf(“%d\n”,m);
}
程序运行后的输出结果是
A) 1 B) 2 C) 3 D) 4
(19) 以下程序的输出结果是
main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 B) 4 C) 6 D) 不确定
(20) 以下程序的输出结果是
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
A) 1 B) 0 C) 非0的数 D) -1
(21) 设 a、b、C、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a>b)&&(n=c>d)运算后,n的值位为
A) 0 B) 1 C)2 D) 3
(22) 阅读以下程序:
main()
{ int x;
scanf(“%d”,&x);
if(x--<5) printf(“%d”’x);
else printf(“%d”’x++);
}
程序运行后,如果从键盘上输人5,则输出结果是
A)3 B) 4 C) 5 D) 6
(23) 假定w、x、y、z、m均为int型变量,有如下程序段:
w=1; x=2; y=3; z=4;
m=(w<x)?w; x; m=(m<y)?m;y; m=(m<z)?m; z;
则该程序运行后,m的值是
A) 4 B) 3 C) 2 D) 2
(24) 设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为
A) 不定值 B) 4 C) 3 D) 1
(25) 若执行以下程序时从键盘上输入9,则输出结果是
A) 11 B) 10 C) 9 D) 8
Main0
{ int n;
scanf(“%d”,&n);
if(n++<10) printf(“%d\n”,n);
else printf(“%d\n”,n--);
}
(26) 若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是
A) swich(a+b); B) switch(a*a+b*b)
{ case 1:y=a+b; break; {case 3:
case 0:y=a-b; break; case 1:y=a+b;break;
} case 3:y=b-a,break;
}
C) switch a D) switch(a-b)
{ case c1 :y=a-b; break {default:y=a*b;break
case c2: x=a*d; break case 3:case 4:x=a+b;break
default:x=a+b; case 10:case 11:y=a-b;break;
} }
(27) 能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是
A) a>=10 or a<=0
B) a>=0|a<=10
C) a>=10 &&a<=0
D) a>=10‖a<=0
(28) 有如下程序
main0
{ int x=1,a=0,b=0;
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
(29) 有如下程序
main0
{ float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0) y=1.0/x;
else y=1.0;
printf(“%f\n”,y);
}
该程序的输出结果是
A) 0.000000
B) 0.250000
C) 0.500000
D) 1.000000
(30) 有如下程序
main0
{ int a=2,b=-1,c=2;
if(a<b)
if(b<0) c=0;
else c++
printf(“%d\n”,c);
}
该程序的输出结果是
A) 0 B) 1 C) 2 D) 3
(31) 设 int x=1, y=1; 表达式(!x||y--)的值是
A) 0 B) 1 C) 2 D) -1
(32) 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是
A) if (x>0) y=1; B) if(x)
else if(x<0)y=-1; if(x>0)y=1;
else y=0; else if(x<0)y=-1;
else y=0;
C) y=-1 D) y=0;
if(x) if(x>=0)
if(x>0)y=1; if(x>0)y=1;
else if(x==0)y=0; else y=-1;
else y=-1;
(33) 语句:printf("%d",(a=2)&&(b= -2);的输出结果是
A) 无输出
B) 结果不确定
C) -1
D) 1
(34) 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是
A) c=b=a;
B) (a=c) ‖(b=c) ;
C) (a=c) &&(b=c);
C) a=c=b;
(35) 能正确表示a和b同时为正或同时为负的逻辑表达式是
A) (a>=0‖b>=0)&&(a<0‖b<0)
B) (a>=0&&b>=0)&&(a<0&&b<0)
C) (a+b>0)&&(a+b<=0)
D) a*b>0
(36) 以下程序的输出结果是
A) -1 1 B) 0 1 C) 1 0 D) 0 0
main( )
{ int a= -1,b=1,k;
if((++a<0)&& ! (b-- <=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
}
(37) 以下程序输出结果是
A) 7 B) 6 C) 5 D) 4
main()
{ int m=5;
if(m++>5) printf("%d\n",m);
esle printf("%d\n",m- -);
}
(38) 当a=1,b=3,c=5,d=5时,执行下面一段程序后,x的值为
A) 1 B) 2 C) 3 D) 6
if(a<b)
if(c<d) x=1;
else
if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
else x=7;
(39) 表示关系x<=y<=z的c语言表达式为
A) (X<=Y)&&(Y<=Z)
B) (X<=Y)AND(Y<=Z)
C) (X<=Y<=Z)
D) (X<=Y)&(Y<=Z)
(40) 有以下程序
#include
main()
{ int a,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
输出结果是
A) 2,1
B) 3,2
C) 4,3
D) 2,-1
(41) 设a为整型变量,不能正确表达数学关系:1010&&a>15
D)!(a<=10)&&!(a>=15)
(42) 若有以下定义:
float x;int a,b;
则正确的switch 语句是
A)switch(x) B)switch(x)
{ case1.0:printf("*\n"); { case1,2:printf("*\n");
case2.0:printf("**\n"); case3:printf("**\n");
} }
C)switch (a+b) D)switch (a+b);
{ case 1:printf("\n"); { case 1:printf(."*\n");
case 1+2:printf("**\n"); case 2:printf("**\n");
} }
(43) 假定所有变量均已正确说明,下列程序段运行后x的值是
a=b=c=0;x=35;
if(!a)x--;
else if(b);
if(c)x=3;
else x=4;
A)34 B)4 C)35 D)3
(44) 在以下一组运算符中,优先级最高的运算符是
A)<= B)= C)% D)&&
(45) 表达式:10!=9的值是
A) true B) 非零值 C) 0 D) 1
(46) 在下列选项中,不正确的赋值语句是
A) ++t;
B) n1=(n2=(n3=0));
C) k=i==j;
D) a=b+c=1;
(47) 能正确表示a≥10或a≤0的关系表达式是
A)a>=10 or a<=0
B)a>=10│a<=0
C)a>=10││a<=0
D)a>=10 ││a<=0
(48) 为表示关系x≥y≥z,应使用C语言表达式
A) (x>=y)&&(y>=z)
B(x>=y)AND(y>=z)
C)(x>=y>=z)
D)(x>=y)&(y>=z)
(49) 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是
main( )
{ int x;
scanf("%d",&x);
if(x + + >5) printf("%d",x);
else printf("%d\n",x - -); }
A) 7和5
B) 6和3
C) 7和4
D) 6和4
(50) 以下程序的输出结果是
main( )
{ int a=-1,b=4,k;
k=(+ +a〈0)&&!(b - -〈=0);
printf("%d%d%d\n",k,a,b); }
A) 104
B) 103
C) 003
D) 004
(51) 下面的程序
A) 有语法错误不能通过编译
B) 输出* * * *。
C) 可以通过编译,但是不能通过连接,因而不能运行。
D) 输出# # # #。
main()
{ int x=3,y=0,z=0;
if(x=y+z)printf("* * * *");
else printf("# # # #");}
(52) 若执行下面的程序时从键盘上输入5,则输出是
A) 7 B) 6 C) 5 D) 4
main()
{ int x;
scanf("%d",&x);
if(x++>5) printf("%d\n",x);
else printf("%d\n",x--);}
(53) 下面程序的输出是
A) 0 0 3 B) 0 1 2 C) 1 0 3 D) 1 1 2
main()
{ int a=-1, b=4,k;
k=(a++<=0)&&(!(b--<=0));
printf("%d %d %d\n",k,a,b);}
(54) 下面的程序片段所表示的数学函数关系是上面程序片段的输出结果是
(55) 下面程序的输出是
A) -1 B) 0 C) 1 D) 不确定的值
main()
{ int x=100, a=10, b=20, ok1=5, ok2=0;
if(a<b)
if(b!=15)
if(! ok1)
x=1;
else
if(ok2)x=10;
x=-1;
printf("%d\n",x);}
(56) 设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是
A) ’a’&&’b’
B) a<=b
C) a||b+c&&b-c
D) !((a<b)&&!c||1)
(57) 请读程序:
#include<stdio.h>
main()
{ float x,y;
scan("%f",&x);
if(x<0.0) y=0.0
else if((x<5.0)&&(x!=2.0))
y=1.0/(x+2.0);
else if (x<10.0) y=1.0/x;
else y=10.0;
printf("%f\n",y);
}
若运行时从键盘上输入2.0<CR>(<CR>表示回车),则上面程序的输出结果是
A) 0.000000
B) 0.250000
C) 0.500000
D) 1.000000
(58) 请读程序:
#include<stdio.h>
main()
{ int x=1, y=0, a=0, b=0;
switch(x)
{ case 1:
switch(y)
{ case 0: a++;break;
case 1: b++;break;
}
case 2:
a++; b++; break;
}
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
(59)以下程序的输出结果是 【59】 。
# include<stdio.h>
main()
{ int a ,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b); }
A) 6,1
B) 2,1
C) 6,0
D) 2,0
(60) 若k是int型变量,且有下面的程序片段:
k=-3
if(k<=0) printf("####")
else printf("&&&&");
上面程序片段的输出结果是
A) ####
B) &&&&
C) ####&&&&
D) 有语法错误,无输出结果
二、填空题
(1)以下程序运行后的输出结果是 【1】 。
main()
{ int a=1,b=2,c=3;
if(c=a) printf("%d\n",c);
else printf("%d\n",b);
}
(2)以下程序运行后的输出结果是
main()
{
int a=3,b=4,c=5,t=99;
if(b<a&&a<c) t=a;a=c;c=t;
if(a<c&&b<c) t=b;b=a;a=t;
printf("%d%d%d\n",a,b,c);
}
(3)以下程序运行后的输出结果是
main()
{
int a,b,c
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c);
}
(4)以下程序运行后的输出结果是 【4】 。
main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{ case 0:a++; break;
case 1:b++; break;
}
case 2:a++;b++; break;
}
printf("%d %d\n",a,b);
}
(5)有以下程序
main( )
{ int n=0,m=1,x=2;
if(!n) x-=1;
if(m) x-=2;
if(x) x-=3;
printf(“%d\n”,x);
}
执行后输出结果是【5】 。
(6) 以下程序运行后的输出结果是 【6】 。
main()
{ int p=30;
printf (“%d\n”,(p/3>0 ? p/10 : p%3));
}
(7) 以下程序运行后的输出结果是【7】 。
main()
{ int a=1, b=3, c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
(8)若有以下程序
main()
{ int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
执行后输出结果是 【8】 。
(9)若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
执行后输出结果是 【9】 。
(10)以下程序运行后的输出结果是 [10] 。
main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf(“%d,%d \n”,x,y);
}
(11) 若从键盘输入58,则以下程序输出的结果是 【11】 。
main()
{ int a;
scanf("%d",&a);
if(a>50) printf("%d",a);
if(a>40) printf("%d",a);
if(a>30) printf("%d",a);
}
(12) 以下程序输出的结果是【12】 。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
(13)设y是int型变量,请写出判断y为奇效的关系表达 【13】 。
(14) 表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 [14] 。
(15) 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 [15] 。
(16)表示条件:10<x<100或者说x<0的C语言表达式是【16】 。
(17) 条件“20<x<30或x<-100”的C语言表达式是 【17】 。
答案:
一、选择题
01) D 02) C 03) A 04) C 05) B
06) D 07) C 08) A 09) D 10) D
11) A 12) C 13) C 14) C 15) B
16) D 17) C 18) A 19) C 20) A
21) C 22) B 23) D 24) C 25) B
26) D 27) D 28) A 29) C 30) C
31) B 32) A 33) D 34) C 35) D
36) C 37) B 38) B 39) A 40) A
41) A 42) C 43) B 44) C 45) D
46) D 47) D 48) A 49) A 50) D
51) D 52) B 53) C 54) C 55) A
56) D 57) C 58) A 59) B 60) D
二、填空题
(1) 1
(2) 4599
(3) 10 20 0
(4) 2 1
(5) -4
(6) 3
(7) yes
(8) 1
(9) 5 0 3
(10) 20,0
(11) 585858
(12) 0
(13) (y%2)!==1或y%2或(y%2)!=0
(14) x>5||x<-5
(15) x==0||x==1
(16) (x>10 && x<100)││x<0 或(1010 && x<100) 或 0>x││(10< && x<100)
(并且括号有无都可以)
(17) ((20<x)&&(x<30))||(x<-100) 或 20<x&&x<30||x<-100