关于c语言的几道选择题,困扰小弟我好久了
关于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打印出来。
------解决方案--------------------
[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打印出来。
------解决方案--------------------