练习2
一、选择题
1.下面关于语句的说法中,正确的是( A B D )。
A、对程序中使用的变量、数组、函数等进行定义、声明的语句属于说明性语句
B、表达式后面加;号构成表达式语句
C、复合语句中不允许包含另一条复合语句
D、对程序执行流程起控制作用的语句属于控制语句
解析:复合语句是可以嵌套的,所以C选项是错误的;
2.下面语句中,错误的是( B )。
A、m=x>y>z; B、float x=y=z; C、m=x,m>y; D、{k=m>n;k?:x,y;}
解析:C语言中,在变量声明语句中不能使用连续赋值初始化变量,故 B选项是错误的。
3.下面不正确的if语句形式是( A )。
A、if (x=y;) m++; B、if (x<=y) m++; C、if (x-y) m++; D、if ( x ) m++;
解析:if选择结构中圆括号内是表达式,而不能是语句,故A选项是错误的。
4.下面不正确的if语句形式是( C )。
A、if (x=y) ; B、if (x=switch语句必须使用break吗=y) m=0,n=1; C、if (x>=y) m=0 else n=1; D、if ( x!=y ) m=n;
解析:C选项中if结构中条件成立时执行的m=0后没有分号,缺少语句标识,故结构错误;
5.下面程序的运行结果是( A )。
int main()
{
int x=7,y=8,z=9;
if(x>y)
x=y,y=z; z=x;
printf("x=%d y=%d z=%d\n",x,y,z);
return 0 ;
}
A、x=7 y=8 z=7 B、x=7 y=9 z=7 D、x=8 y=9 z=7 D、x=8 y=9 z=8
解析:这里主要是考察if选择结构条件下所能执行的语句只有x=y,y=z;而后边的z=x;并受选择结构条件所限制,所以根据题目要求当x>y(7>8)不成立,x=y,y=z;语句不能被执行,而只执行z=x;语句,将变量x的值赋值给z变量,而x与y的值不变化,所以x=7 y=8 z=7,故答案选A;
6.下面程序的运行结果是( B )。
int main()
{
int x=6,y=6;
if(++x<y++)
printf("%d\n",x++);
else
printf("%d\n",y++);
return 0;
}
A、6 B、7 C、8 D、9
解析:这里考察自增运算符++,if(++x<y++)条件中++x表示先自增变为7,而y++是先参与比较运算后再是y变量自增,过条为7<6不成立,故执行else后面的语句输出y++,因为y的值在比较结束后已经递增变为7,故输出结果为7,输出之后y才变为8;故答案选B;
7.下面程序的运行结果是( D )。
int main()
{
int x=1,y=2,z=3,m=1
if(!x)m--;
else if(!y)m=2;
else if(!z);
else m=3;
printf("m=%d\n",m);
return 0;
}
A、m=0 B、m=1 C、m=2 D、m=3
解析:这里考察if…elseif多分支结构的执行,第1个条件!x为假,执行第2个条件!y也为假,执行第3个条件!也为假,执行最后一个else语句m=3; 然后执行printf语句输出m=3;故答案选D;
8.在下面的if语句中,功能上具有等价关系的两条if语句是( B )。
①if (flag) x+y; else x-y;
②if (flag==1) x+y; else x-y;
③if (flag!=0) x+y; else x-y;
④if (flag==0) x+y; else x-y;
A、①和② B、①和③ C、③和④ D、②和③
解析:①结构中的条件是flag变量,该结构执行是flag值不等于0执行x+y,反之执行x-y,
与③结构执行一致;而②选择结构中是判断flag等于1和不等于1两种情况,而④结构执行与①和③刚好相反;故答案选B;
9.在if语句多层嵌套的情况下,为了正确区分多个if和else之间的匹配关系,C语言规定:如果没有使用花括号,那么从最内层的else开始,else总是与其( D )。
A、前面最近的if配对 B、缩进位置相同的if配对
C、后面最近的if配对 D、前面最近的且尚未与其它else配对的if配对
解析:在程序,对于if与else的配对是,程序由上而下从第1个else开始寻其配对的if, else寻配对if是从else位置开始向上寻配对的if,这个if是离else最近的if,但是注意这个if要是没有被配过对的,如果最近的if已经被之前else配对过了,那么需要继续向上if,故答案选D;
10.下面程序的运行结果是( A )。
int main()
{
int a=3,b=5,c=2,d=3,m=0;
if(a>b)
if(a>c)
if(a>d) m=1;
else m=2;
else m=3;
printf("%d\n",m);
return 0;
}
A、0 B、1 C、2 D、3
解析:这里考察if的嵌套,进一步考察else与if的配对,根据上一题描述,在程序中由上而下从第1个else m=2;查离他最近的if(a>d) m=1;与其配对,下面第2个else m=3;与离它最近且没有配对的if是if(a>c),程序只有两个else,那么第1个if(a>b)没有与之配对的else;当进行if(a>b)判断时其条件为假,没有执行的else,整个if结构执行结束,执行printf语句输出m的值,而m的初值为0,故答案选A;
11.对下面程序运行结果的分析中,正确的是( D )。
int main ( )
{
int x,y;
scanf("%d,%d",&x,&y);
if (x>y)
x=y;y=x;
else
x++; y++;
printf("%d,%d\n",x,y);
return 0;
}
A、若输入4和3,则输出4和5 B、若输入3和4,则输出4和5
C、若输入4和3,则输出4和5 D、有语法错误,不能通过编译
解析:本题考核重点是if选择结构中语句层次的划分,对于if语句后只能有一条语句,如果多条需要用一对花括号{ }将多条语句括起来,故本题的if语句后面有两条语句,所以这是一个单条件的if语句,后面的else不能与这个if匹配,所以就语法错误,故答案选D
12.以下关于switch语句的叙述中,不正确的是( C )。
A、switch语句中各case子句后面的表达式必须是整型或字符型常量表达式。
B、同一switch语句中各case子句后面表达式的值必须互不相同。
C、switch语句中必须有default部分 。
D、switch语句必须与break语句结合才能实现真正的选择结构。
解析:再switch结构语句中defaule部分是可有可无的,他的作用是当所有case后的常量都不满足表达式的值时,default位置作为switch语句结构的入口点;而break语句再switch语句中的作用是中断switch语句的执行,以实现分支效果,本题答案选C;
13.假定已定义变量int x,y;则下面正确的switch语句是( BD )。
A、switch(x)
{
case 1.1: y++;
case 2.1: y--;
default: y*=y;
}
C、switch(x)
{
case 2: y++;
case 1+1: y--;
default:y*=y;
}
B、switch(x)
{
case 'a':y++;
case 'b':y--;
default:y*=y;
}
D、switch(x)
{
default: y*=y;
case 1: y++;
case 1+1: y--;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论