首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于c语言的几道选择题,困扰小弟我好久了

2012-09-10 
关于c语言的几道选择题,困扰我好久了[28]、以下程序的输出结果是( )。main(){int a0,jfor(j0j4j++){sw

关于c语言的几道选择题,困扰我好久了
 
 
[28]、以下程序的输出结果是( )。
main()
{int a=0,j;
 for(j=0;j<4;j++)
 {switch(j)
  {case 0:
  case 3:a+=2;
  case 1:
  case 2:a+=3;
  default:a+=5;
  }
  }
  printf("%d\n",a);
}
【答  案】D
【分  数】1分 
【选  项】
A、20
B、13
C、10
D、36
 
 
[34]、下列程序运行后的输出结果是( )。 
fun(int a, int b)
{ if(a>b) return(a);
  else return(b);
}
main()
{ int x=3, y=8, z=6, r;
  r=fun(fun(x,y), 2*z);
  printf("%d\n", r);
}
【答  案】D
【分  数】1分 
【选  项】
A、3
B、6
C、8
D、12
36]、在C语言中,函数的隐含存储类别是( )。 
【答  案】C
【分  数】1分 
【选  项】
A、auto
B、static
C、extern
D、无存储类别 
 
 
 
[41]、若a是整型变量,表达式~(a^~a)等价于( )。 
【答  案】C
【分  数】1分 
【选  项】
A、~a
B、1
C、0
D、2
46]、语句printf(“%d\n”,strlen(“xyz\t\xab\3\\”));的输出结果是( )。 
【答  案】C
【分  数】1分 
【选  项】
A、9
B、11
C、7
D、8
53]、有以下程序:
main()
{ char str[ ][8]={“Hello”,“Beijing”},*p=str;
 printf(“%s\n”,p+8);}
该程序运行后的输出结果是( )。 
【答  案】B
【分  数】1分 
【选  项】
A、Hello
B、Beijing
C、jing
D、ijing
[59]、有如下程序:
#define f(x)x*x
main()
{ int i ;
i=f(2+2)/(1+1);
printf(“%d\n”,i);}
该程序执行后的输出结果是( )。 
【答  案】B
【分  数】1分 
【选  项】
A、21
B、7
C、8
D、4
求高手分别解释一下这几道题目的过程?????

[解决办法]
第[28]题,由于switch中未加break语句,所以会产生连加,最终得36:
a = 0;
a += 2 + 3 + 5; (j = 0)
a += 3 + 5; (j = 1)
a += 3 + 5; (j = 2)
a += 2 + 3 + 5; (j = 3)
[解决办法]
第[34]题,实际上是在求x/y/2*z中的最大值,所以3/8/12中当然12是最大的。
[解决办法]
1.D
测试你是否知道switch要用break,否则从每个匹配点往下都执行
[解决办法]
第[41]题,a^~a是与本身的非异或自然是得到每位都是1,在求反得到每位都是0。
[解决办法]
59.B
看你是否知道宏替换只是简单展开,替换后变成i=2+2*2+2/(1+1);所以是7
[解决办法]
第[59]题,把宏展开i = 2 + 2 * 2 + 2 / (1 + 1),然后乘除的优先级别高,所以i = 2 + 4 + 1,结果为7。
[解决办法]
其它的题目自己研究吧。
[解决办法]
46.C
这个有点意思,xyz\t\xab\3\\
\t 制表符
\xab 16进制数ab表示的ascii字符
\3 等同于3
\\ 就是\
加前面xyz就7个
[解决办法]
1、每个case后面没有break,程序找到对应的case后会把该case及后面所有的case包括default都执行一遍。
2、没什么问题啊,返回最大值而已。里面的fun(x,y)返回8,在和2*z=12比较,最后返回12
3、概念
4、^是异或符号,~是取反。~a是a的二进制标志中所有的0变成1,所有的1变成0后得到的值,a和~a求异或即得到 一个全1的二进制数字(异或运算对应位的值不同则返回1,相同则返回0)。最后取反得到全0的二进制数字,即为0。

5、x,y,z,\t,\xab,\3,\共七个字符。
6、p指向str[][]第一个元素的第一个位置,如果看成矩阵的话,就指向其第一行第一列,p+8即为往后移动8个位置,指向Beijing中的B。
7、根据f的定义:(x)x*x,f(2+2)即为用2+2替换x,即f(2+2)=(2+2)2+2*2+2=4*2+2*2+2=14,所以最后输出7
[解决办法]
没有改变实参啊,它是先取x/y的最大值,然后再和2*z比较,最后返回它们当中的最大值,所以实际上是在求x/y/2*z中的最大值,返回给r打印出来。


探讨

引用:
第[34]题,实际上是在求x/y/2*z中的最大值,所以3/8/12中当然12是最大的。


它不是值传递么?不改变实参的值啊?

------解决方案--------------------


探讨

引用:
1、每个case后面没有break,程序找到对应的case后会把该case及后面所有的case包括default都执行一遍。
2、没什么问题啊,返回最大值而已。里面的fun(x,y)返回8,在和2*z=12比较,最后返回12
3、概念
4、^是异或符号,~是取反。~a是a的二进制标志中所有的0变成1,所有的1变成0后得到的值,a和~a求异或即得到 一个全1的二进……

[解决办法]
第[41]题,a^~a是与本身的非异或自然是得到每位都是1,在求反得到每位都是0。 这个题我用VS跑出来是-1
[解决办法]
看错了 确实应该等于0 看漏了括号外面的~
[解决办法]
探讨
p指向str[][]第一个元素的第一个位置,如果看成矩阵的话,就指向其第一行第一列,p+8即为往后移动8个位置,指向Beijing中的B。
这个p+8指向的应该i啊 刚刚开始就是第一位,往后移8为不就是i吗?怎么会输出字符串啊?

[解决办法]
探讨

1、每个case后面没有break,程序找到对应的case后会把该case及后面所有的case包括default都执行一遍。
2、没什么问题啊,返回最大值而已。里面的fun(x,y)返回8,在和2*z=12比较,最后返回12
3、概念
4、^是异或符号,~是取反。~a是a的二进制标志中所有的0变成1,所有的1变成0后得到的值,a和~a求异或即得到 一个全1的二进制数字(异或运算对应位……
7、根据f的定义:(x)x*x,f(2+2)即为用2+2替换x,即f(2+2)=(2+2)2+2*2+2=4*2+2*2+2=14,所以最后输出7

[解决办法]
好好复习下基础知识。。。。

热点排行