习题四  选择结构程序设计
1. 设变量xy均已正确定义并赋值。以下if语句中,在编译时将产生错误信息的是______
Aif(x++);  Bif(x>y && y!=0);  Cif(x>0) x--       Dif(y<0) {;}
                                    else  y++;           else  x++;
解析:本题考查的是if语句。if后表达式两侧的圆括号不可少,最后是一条语句或是用花括号括起来的一组语句。选项AB是在表达式后跟了一条空语句,选项D是在表达式后跟了一组空语句,选项Cx--是表达式而不是语句,所以在编译时会出现错误信息。故本题答案选C
2. 有以下程序
main()
{ int  i;
  for(i=1;i<=40;i++)
  { if(i++%5==0)
        if(++i%8==0) printf ("%d",i);}
  printf("\n"); }
执行后的输出结果是______
A5  B24   C32     D40
  解析:本题考查的是if语句的应用。在满足for 语句条件下,第一个if语句的条件是指i先对5取余后,再自行加1;第二个if语句的条件是指:i=i+1后,再对8取余。故本题答案选C
3. 在嵌套使用if语句时,C语言规定else总是______
A、和之前与其具有相同缩进位置的if配对    B、和之前与其最近的if配对
C、和之前与其最近的且不带elseif配对  D、和之前的第一个if配对
解析:本题考查的是if语句的使用规则。在嵌套使用if语句时,C语言规定else总是和之前与
其最近的且不带elseif配对。故本题答案为C
4. 有以下程序
main()
{ int i=1,j=2,k=3;
  if(i++==1&&(++j==3||k++==3))
  printf("%d %d %d\n",i,j,k); }
程序运行后的输出结果是______
A1 2 3   B2 3 4  C2 2 3   D2 3 3
  解析:本题考查的是条件判断语句。本题中执行"i++==1&&(++j==3||k++==3)"时,先执行i++==1,由于i++是先运算,后自加,所以表达式"i++==1"的值为真,其值为1,然后执行括号中的表达式,由于++j是先自加,后运算,所以表达式"++j==3" 的值为真,根据短路原理,
右边的表达式"k++==3"不再进行运算,直接得出括中表达的值为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。故本题的答案为D
5.有以下程序:
main()
{ int i;
  for(i=0;i<3;i++)
    switch(i)
    {case 0:printf("%d",i);
    case 2:printf("%d",i);
    default:printf("%d",i);}}
程序运行后的输出结果是______
A022111    B021021  C000122     D012
解析:此题考点是switch语句。switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值到匹配的入口标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行。在此题中当i=0时,执行第一个case语句,因为它后面没有break,所以一直到执行完default语句结束,再执行下一循环。故本题答案为C
6. 下列条件语句中,功能与其他语句不同的是______
Aif(a) printf("%d\n",x); else printf("%d\n",y);
Bif(a==0) printf("%d\n",y); else printf("%d\n",x);
Cif (a!=0) printf("%d\n",x); else printf("%d\n",y);
Dif(a==0) printf("%d\n",x); else printf("%d\n",y);
    解析:此题考的是if语句中逻辑表达式值的判断。if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a0等值,即a不为真,就输出y的值,否则输出x的值,此与选项A等价;再看选项Ca不等于0,即为真,输出x,否则输出y,与前两个都同意;而选项D恰好与前几项的意思相反,它是a0时,输出x,为真时输出y。故本题答案为D
7.有以下程序
main()
{  char k; int i;
  for(i=1;i<3;i++)
  { scanf("%c",&k);
    switch(k)
    { case '0': printf("another\n");
      case '1': printf("number\n");}
  }}
程序运行时,从键盘输入:01↙,程序执行后的输出结果是______
printf是什么意思c++Aanother  Banother     Canother     Dnumber
  number       number        number         number
another       number
解析:此题考点是switch语句。本题中没有使用break终止switch语句的执行,本题当k0时,执行完case '0'后将继续执行case '1'。故本题答案为C
8.以下4个选项,不能看作一条语句的是______
A{;}    Ba=0,b=0,c=0;   Cif(a>0);   Dif(b==0)m=1;n=2;
    解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出
的两种操作之一。在ifelse后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。故本题答案为D
9.以下程序的输出结果是______
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);
}
A-1  1     B0  1    C1  0     D0  0
解析:本题的考查点是if条件的判断。++a是先运算后使用,b--是先使用后运算。执行++a后,a值为0,不满足条件,所以a0b仍为1,接下去执行else语句,输出1  0。故本题答案为C
10. 有以下程序
    main()
    {  int c;
      while((c=getchar() )!='\n') {
          switch(c-'2') {
            case 0: case 1: putchar(c+4);
            case 2:putchar(c+4);break;
            case 3:putchar(c+3);
            default:putchar(c+2);break; } }
}
A668977     B668966    C66778777     D6688766
解析:本题的考查点是switch()语句。getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-'2'的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为 668977。故本题答案为A
11.有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______
Aif (c<a) x=1;                    Bif (a<3) x=3;
  else if (b<a) x=2;                   else if (a<2) x=2;
  else x=3;                             else x=1;
Cif (a<3) x=3;                    Dif (a<b) x=b;
  if (a<2) x=2;                         if (b<c) x=c;
  if (a<1) x=1;                         if (c<a) x=a;
  解析:本题的考查点是if语句。选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;选项Ba<3成立,执行第一种操作,x=3;选项Ca<3成立,执行第一种操作,x=3a<2成立,执行第二种操作,此时x=2a<1不成立,最后的不执行,所以执行此段程序后x=2;选项фa<b成立,执行x=b,此时x=2b<c成立,执行x=c,此时x=3c<a不成立,不执行x=a,所以执行此段程序后x=3。故本题答案为C
12.以下关于逻辑运算符两侧运算对象的叙述中正确的是______
A、只能是整数01             B、只能是整数0或非0整数
C、可以是结构体类型的数据      D、可以是任意合法的表达式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。