C语言填空题,以下程序的输出结果是()我想知道逻辑推理过程 A.4 2 1 1 B.0 0 0 8 C.4 6 7 8 D.8 8 8 8

main()
{char*s="12134211";int v[4]={0,0,0,0},k,i;
for (k=0;s[k];k++;)
{switch (s[k])
{case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;
}
v[i]++;
}
for (k=0;k<4;k++)
printf("%d",v[k]);
}

无论s[k]为'1'、'2'、'3'、'4',都会执行i = 3,原因是各个case语句后面都没有break语句,所以v[k]++,就是v[3]++,字符串s中只有'1'、'2'、'3'、'4'四中字符,共有8个,也就是说,v[3]++共执行8次,所以输出结果是B:0008。追问

我这C语言是初学,能麻烦再说的详细点吗?switch中匹配 case '1':i=0;,没有break,switch一直执行下去,是怎么执行的?V[3]++因为for执行了8次而加了8次,那么前面0 0 0 是怎么出来的?谢了

追答

通常情况下,case语句后面会跟一个break语句,例如
switch(c) {
case '1' : i = 0break;
case '2' : i = 1;break;
case '3' : i = 2;break;
case '4' : i = 3;break;
default :
}
当c为'1'时,会执行i = 0;然后跳出switch,执行后面的语句。但你的代码中,没有break;,就会顺序执行,i = 0,i = 1,i = 2,i = 3,之后才跳出switch,即每次都会执行i = 3,所以v[i]++就是v[3]++,而其v[0],v[1]和v[2]仍然保持0值不变。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-28
答案是B.0 0 0 8
for (k=0;s[k];k++;)
在这for循环中,总共执行了8次,s[k]的值:1 2 1 3 4 2 1 1
如果s[k]为1时,
switch(1)
{
...........
}在这switch中匹配 case '1':i=0;此时i的值为1,但是因为没有break,那么switch会一直执行下去,直到 i = 3,其它的s[k]的值也一样,所以最后都有v[3]++;因为for执行了8次,v[3]也自加了8次,所以答案为B追问

我这C语言是初学,能麻烦再说的详细点吗?switch中匹配 case '1':i=0;,没有break,switch一直执行下去,是怎么执行的?V[3]++因为for执行了8次而加了8次,那么前面0 0 0 是怎么出来的?谢了

追答

1、
因为开始时有int v[4]={0,0,0,0},对数组v的初始化,刚开始v[0],v[1],v[2],v[3]都等于0,而后面只有
v[3]自加了8次,v[0],v[1],v[2]没有变,还是0
for (k=0;k<4;k++)
printf("%d",v[k]);
} 这个for的作用是分别在屏幕输出v[0],v[1],v[2],v[3],所以为0 0 0 8
2、
switch(表达式){ case 值1:... }它会根据表达式中的值去匹配case中的值,一旦成功,以后不在匹配,在这次例子中,假如s[k]为'2',那么switch中匹配 case '2',那么会执行i=1;因为没有break,以后也不再匹配case中的值,所以会执行i=2;i=3;所以最好i=3;其它值同样道理

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网