C语言题switch语句

来源:百度知道 编辑:UC知道 时间:2024/07/08 18:04:02
以下程序的输出结果是()
main()
{char *a="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]);}
A.4 2 1 1 B.0 0 0 8 C.4 6 7 8 D.8 8 8 8

不懂是怎么做的。

你的题有点毛病 如果 把s改成a的话 选b
void main()
{char *a="12134211";int v[4]={0,0,0,0},k,i;
for(k=0;a[k];k++)
{switch(a[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]);}
对于switch语句当执行完一个case后 流程控制转移到下一个case继续执行知道结束
这道题目当s【k】=1时先执行case'1':i=0; 接着case'2':i=1; case'3':i=2; case'4':i=3;最后i=3; 接着v[i]++;v[3]变成1;(原本 v[0]=0 v[1]=0v[2]=0v[3]=0)
以后无论输入s【k】等于什么 最后都要执行到case'4':i=3; 一共八次 v[3]变成8;
如果你的课本是谭浩强版本 请看105页 “说明”

switch(s[k]) 错了! 你没用定义S[K]数组或指针,应该是a[k]吧,这样的话答案是B!
switch case语句中,它先计算a[k]的值,然后在case中找到值相同的一项去执行,如果相等的第一个case语句后没用接break语句的话,它还会继续执行后面的语句。该题就是这样,(指针与数组的运用一样),你看你的指针a中所有数都小于等于4,也就是a[K]的值《=4,这样的话 switch中每次都执行到case'4':i=3;这样每次都相当于
v[3]++;共有8次,这样就有v[3]==8,而其他的都为零了!注意你的for循环结束的条件是a[k]=0,这样就是要做8次!
建议:简单的东西就在turboc上运行下,单步调试下就会知道答案了的!