作业帮 > 综合 > 作业

关于C语言的一道题目程序是这样的?main(){char *t="23142";int a=0,b=0,c=0,d=0,

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/05 16:44:04
关于C语言的一道题目
程序是这样的?
main()
{char *t="23142";
int a=0,b=0,c=0,d=0,k;
for(k=0;t[k];k++)
switch(t[k])
{default:d++;
case'1':a++;
case'2':b++;
case'3':c++;
}
printf("%d,%d.%d,%d\n",a,b,c,d);
}
请问最后输出什么?还有为什么?
怎么分的情况
请您讲清楚一些
程序执行的步骤是什么?
关于C语言的一道题目程序是这样的?main(){char *t=
输出:2,4,5,1
就是依次分情况对a,b,c,d中的一个递增.
好吧,那我就做一次计算机做的事情:
程序流程:
main()
{char *t="23142";
//定义了一个数组,其中存储了一个字符串“23142”
int a=0,b=0,c=0,d=0,k;
//定义了一些变量,用于记录及做为循环变量
for(k=0;t[k];k++)
//循环,直到t[k]==0(也就是‘\0’)时跳出循环,每一个循环
//都执行一次switch判断.
switch(t[k])
{default:d++;
case'1':a++;
case'2':b++;
case'3':c++;
}
//以上为switch判断,如果这个程序你是想统计字符串t中的各种
//字符的个数,那么就是写错了,也许你一切的疑问也在于此.
//简单地说:在swich(...) case ..:default ..:语句中,每一
//case 都只是一个标记,表示从哪里开始执行,比如说k=0时,t[k]=‘2’,
//通过switch(t[k]) 判断 与case '2' 相符,则程序从这里开始执行,先是
//b++,顺次执行下去,接着是c++;若是在k = 3时,t[k]='4'由于不与任何一个 //case相符,此时执行default语句,同样地这只是一个开始执行的标志,然后
//顺次执行下去,d++,a++,b++,c++.
//所以由上可见,当你想要统计一字符个数时,因为顺次执行的原故,所有其 //后的的语句也会被执行,这当然会使得最后的统计结果与预期的不一致,而 //且看上去很怪.
//改正意见:(1)不要把default:写在最上面,这是个很不好的习惯,也不符 //合判断的过程(本来就是先看有没有符合的case,最后没有了才去找default //的.)
//(2)通常情况下,你不希望后面语句也被顺次执行,所以一般在每一个case
//后的语句里加上break;以及时退出switch.你也许是初学C吧,注意把这个 //switch的分支,与if else if else等区分一下,就可以了.
printf("%d,%d.%d,%d\n",a,b,c,d);
}
其实这些你都可以在书上找到的,说得也比我好,当然书上没有针对这一具体困惑的回答.
我尽量答得足够详细了,鄙人来此不是为了攒积分的(百度积分好看不抵事),只是一方面自己从别人的问题中通过思考获益,一方面能帮助他人也确实是一种快乐.如果你想了解更多内容,或是获得更及时的,来自更高水平的人的帮助,可以去csdn看看,我不是做广告,那里程序的论坛的人气确实比这里旺.
如果觉得答得不好,就不用给分了.不过欢迎有什么问题发信息给我,就是别让我说得更详细些了,很麻烦的...