练习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    Bx=7 y=9 z=7    Dx=8 y=9 z=7    Dx=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          B7        C8        D9
解析:这里考察自增运算符++,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          Bm=1        Cm=2        Dm=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          B1        C2        D3
解析:这里考察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  )。

Aswitch(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小时内删除。