无忧首页企业系统我的无忧
无忧服务:
兼职活动培训
娱乐交友:
交友社区资讯
全职实习:
实习暑假寒假
微信号:school51
扫一下,立即关注
加关注
在线支付,立省10元
下载新版APP
===大学生成长生活平台===

2011年计算机等级二级C语言课后练习题及答案解析(4)

2012-12-26来源/作者:卫凯点击次数:552

  一、单项选择题
  1.对if语句中表达式的类型,下面正确的描述是【 】。
  A) 必须是关系表达式
  B) 必须是关系表达式或逻辑表达式
  C) 必须是关系表达式或算术表达式
  D) 可以是任意表达式
  分析:C语言中if语句的表达式可以是任意类型,只要表达式的值非0就算作真,是0就作为假。
  本题正确答案为D。
  2.多重if_else语句嵌套使用时,寻找与else配套的if方法是【 】。
  A) 缩排位置相同的if
  B) 其上最近的if
  C) 下面最近的if
  D) 同行上的if
  分析:多重if_else嵌套时,else总是与它上面最近的if配对。
  本题正确答案为B。
  3.以下错误的if语句是【 】。
  A) if(x>y) z=x;
  B) if(x==y) z=0;
  C) if(x!=y) printf("%d",x) else printf("%d",y);
  D) if(x  分析:选项C)中的第一个printf语句后面丢了分号,所以是错误的。
  本题正确答案为C。
  4.以下判断两个字符串相等的正确方法是【 】。
  A) if(str1=str2)
  B) if(str1==str2)
  C) if(strcpy(str1,str2)=0)
  D) if(strcmp(str1,str2)==0)
  分析:选项A)中用了赋值号,显然是错误的,选项C)中的字符串拷贝函数strcpy不能比较大小,选项B)中的"=="号也不具有串比较功能,比较两个字符串的大小应用字符串比较函数。
  本题正确答案为D。
  5.执行下面程序的正确结果是【 】。
  main( )
  { float a=1.9;
  switch(a)
  { case 0: printf("0000");
  case 1: printf("1111");
  case 2: printf("2222");
  }
  printf("%f",a);
  }
  A) 1.900000
  B) 111122221.900000
  C) 22221.900000
  D) 0000111122221.900000
  分析:题中定义了单精度实数a,所以最下面的printf语句输出有6位小数,另外C语言在判断switch表达式的值时,是按整型数据处理的(但不4舍5入),所以程序是从case 1处开始执行的,因没有break语句,接着会执行case 2。
  本题正确答案为B。
  6.以下程序的输出为【 】。
  main( )
  { int a=20,b=30,c=40;
  if(a>b) a=b,
  b=c;c=a;
  printf("a=%d,b=%d,c=%d",a,b,c);
   }
  A) a=20,b=30,c=20
  B) a=20,b=40,c=20
  C) a=30,b=40,c=20
  D) a=30,b=40,c=30
  分析:题中的"a=b , b=c;"是一个语句书写在了两行,因a>b为假,所此句不执行,又"c=a"与if语句无关,总要执行,故a,b值不变,c值为20。
  本题正确答案为A。
  7.对于条件表达式(k)?(i++):(i--)来说,其中的表达式k等价于【 】。
  A) k==0 B) k==1 C) k!=0 D) k!=1
  分析:因为条件表达式e1?e2:e3的含义是e1为真时,取表达式e2的值,否则取表达式e3的值,"为真"的意思就是不等于0。
  本题正确答案为C。
  8.执行下面的程序后,输出为【 】。
  main( )
  { int m=20;
  swith(m)
  { case 19: m+=1;
  case 20: m+=1;
  case 21: m+=1;
  case 22: m+=1;
   }
  printf("%d\\n",m); }
  A) 20 B) 21 C) 22 D) 23
  分析:因无break控制语句,程序会从case 20开始连续执行后面的各个case语句,最后结果是m=23。
  本题正确答案为D。
  9.下面程序运行结果为【 】。
  main( )
  { char c=′a′;
  if(′a′  elseprintf("UP");
  }
  A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过
  分析:关系运算符“<”和“<=”的优先级相同,计算顺序是从左向右,求解表达式′a′  本题正确答案为A。
  10.对下述程序,正确的判断是【 】。
  main( )
  { int a,b;
  scanf ("%d,%d",&a,&b);
  if(a>b)a=b; b=a;
  elsea++; b++;
  printf("%d,%d",a,b); }
  A) 有语法错误不能通过编译
  B) 若输入4,5则输出5,6
  C) 若输入5,4则输出4,5
  D) 若输入5,4则输出5,5
  分析:不管if语句中的条件真假,它只能执行一个语句,要想根据条件执行多个语句,应写成复合语句,程序中if和else的后面都有两个语句,违反了这一点。
  本题正确答案为A。
  11.分析以下程序,结论是【 】。
  main( )
  { int x=5,a=0,b=0;
  if(x=a+b) printf("****\\n");
  elseprintf("####\\n");
  }
  A) 有语法错,不能通过编译
  B) 能通过编译,但不能连接
  C) 输出****
  D) 输出 ####
  分析:if语句中的判别式可以是赋值表达式,题中if(x=a+b)的含义是,先把a+b的值赋给x,再判断x的值是否为0。
  本题正确答案为D。
  12.对下面的程序,正确的说法是【 】。
  main( )
  { int a,b=1,c=2;
  a=b+c,a+b,c+3;
  c=(c)?a++:b--;
  printf("c=%d/n",(a+b,c)); }
  A) 无错误 B) 第三行有错误 C) 第四行有错误 D) 第五行有错误
  分析:第三行是由逗号表达式组成的语句,第四行是由条件表达式组成的语句,第五行printf语句的输出项为逗号表达式,本题没有语法错误。
  本题正确答案为A。
  13.执行下面的程序时,输入abc(其中CR代表回车),输出结果是【 】。
  #include
  #include
  main( )
  { char ch;
  while((ch=getchar( ))!=′\\n′)
  { switch(ch-′a′)
  { case 0: putchar(ch+1);
  case 1: putchar(ch+1);break;
  case 2: putchar(ch+2);
  case 3: putchar(ch+2);break;
  }
  }
  }
  A) abc B) bbc C) abcd D) bbcee
  分析:用getchar函数输入数据,接收的是ASCII码,当输入为a时对应执行case 0和case 1处的语句,当输入为b时,执行case 1处的语句,当输入为c时,对应执行case 2和case 3处的语句。
  本题正确答案为D。
  二、填空题
  1.下面程序的输出结果是-11,请填空。
  main( )
  { int x=100,a=200,b=50;
  int v1=25,v2=20;
  if(a  if(b!=50)
  if(!v1)
  x=11;
  else if(v2)
  x=12;
  x=【1】;
  printf("%d",x);
  }
  分析:此题属于if语句的嵌套应用,因第一个if语句的条件就为假,所以后面的if语句都没有被执行,只执行了x=【1】;一句。
  本题正确答案为 【1】-11。
  2.执行下面程序时,若从键盘上输入8,则输出为9,请填空。
  main( )
  { int x;
  scanf("%d",&x);
  if(【2】>8)
  printf("%d\\n",++x);
  else printf("%d\\n",x--);
  }
  分析:在【2】处不能为大于8的数,否则要执行printf("%d\\n",++x);语句,使输出值大于9,if语句的条件表达式中应有一个先用后增1的变量x,才能在输入x为8时,执行else后面的语句:printf("%d\\n",x--);输出9。
  本题正确答案为 【2】 x++。
  3.执行下面程序时输出为1,请填空。
  main( )
  { int a=4,b=3,c=2,d=1;
  printf("%d\\n",(a  }
  分析:因为a  本题正确答案为 【3】d或1。
  4.执行以下程序后的输出结果为a=【4】,b=【5】。
  main( )
  { int k=1,m=0;
  int a=10,b=10;
  switch(k)
  { case 1: switch(m)
  { case 0: a+=1;break;
  case 1: b++ ;break;
  }
  case 2: a++;b++;break;
  case 3: a++;b++;
  }
  printf("\\na=%d,b=%d",a,b);
  }
  分析:此题概念是考查switch语句的嵌套应用,switch语句的特点是在没有遇到break语句时,要连续执行后面的case语句,本程序的执行路线是外部switch的case 1→内部switch的case 0→外部switch的case 2。
  本题正确答案为 【4】12 【5】11。
  5.根据下式填空,将程序补充完整。 y=-1.0(x<0.0)
   2.0/(x-1.0)(0.0   3.0/x(x=1.0或10.0   4.0(x>=20)main( )
  { float x,y;
  scanf("%f",&x);
  if(【6】)
  y=-1.0;
  else if((【7】)&&(x!=1))
  y=2.0/(x-1.0);
  else if(【8】)
  y=3.0/x;
  else
   y=4.0;
  printf("%f/n",y); }
  分析:本题可根据已知的分段函数式中x与y之间的关系和条件判断语句if的先后顺序,将x的值按从小到大进行判断填空。
  本题正确答案为 【6】 x<0.0 【7】 x<10.0 【8】 x<20.0。

  编辑推荐:

  一、2010年全国计算机二级C语言考试题型分析

  二、2010年全国计算机二级C语言考试教材及出题比例

  三、2010年全国计算机二级C语言考试教材各章的特点及学习方法

  四、2010年全国计算机二级C语言考试答题策略及技巧

  五、2010全国计算机等级考试二级C编程时常犯的错误

  六、2010年全国计算机二级C语言考试就业方向和就业前景





相关阅读



关于我们 | 联系我们 | 用户指南 | 网站地图 | 意见建议 | 会员注册 | 用户协议 | 隐私政策