C语言关于for,switch语句的题目,详解。

#include <stdio.h>
main()
{int s=0,n;
for(n=0;n<3;n++)
{switch(s)
{case 0:
case 1:s+=1;
case 2:s+=2;break;
case 3:s+3;
case 4:s+=4;}
printf("%d\n",s);}}

答案是3,10,14
具体算出来的过程是什么

首先,先熟悉一下switch里常见逻辑

case标签后无break;则向下一个case标签后的语句执行,例如文中case 1:s+=1;没有break;则会继续向下执行case 2的内容。如果是case 4则会跳出。

好,来分析一下,一共3次循环

for(n=0;n<3;n++)
{
switch(s)
{
case 0:
case 1:s+=1;
case 2:s+=2;break;
case 3:s+3;
case 4:s+=4;
}
printf("%d\n",s);
}

第一次循环,s为0,依次执行标签0,1,2 也就是s+=1,s+=2后,得到s为3

第二次循环,s为3,依次执行的标签为3,4 也就是s+3(这步没有对自身赋值,可以忽略),s+=4,后,得到s为7

第三次循环,s为10,无该项,s为7

最终得到3,7,7而不是3,10,14

希望对你有帮助,测试环境为TC2.0与VC6.0,均为此答案

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-05
先不说过程是什么,这代码明显有问题。
#include <stdio.h>
main()
{
int s = 0 , n; //规范点,这个需要初始化
for(n=0;n<3;n++)
{
switch(s)
{
case 0:
break; //这里需要break;
case 1:
s+=1;
break; //这里同上
case 2:
s+=2;
break;
case 3:
s+3;
break; //同上
case 4:
s+=4;
break; //同上,但是因为这是最后一个,加不加不影响,但是还是规范的来
}
printf("%d\n",s);
}
}
整个代码的具体流程就是。定义s=0 n=0 ,然后n自增,循环三次。每次对s的值进行判断,如果s=0,则输出0
s=1 s=s+1 // s=2
s=2 什么都不做 输出原来的值,也就是0
s=3 s+3 // s=3
s=4 s=s+4 //s=4

------------------------------------------------------------但是也考虑你仅仅是为了好玩,不按规范来写switch case,那么

一共循环了三次
第一次循环 s初始为0 ,但 case 0 并没有break;所以,会导致case 1 执行 ,同理 会导致 case 2也执行,到这里case 2有了 break 所以就是 在case 0什么也不做 case 1 s=1 case 2的时候 s=s+2 s=3。
第二次循环
同理 case 3也没有break ,所以会导致case 4的相继执行

上一次 s=3 了 然后 s+3=6 s+= 4 所以 s=10

第三次循环 应该仍旧是10

我用的c++编译器,答案是 3,7,7 这牵扯到作用域不同。
第2个回答  2013-08-05
首先你的程序这句话错了:case 3:s+3;改为case 3:s+=3;

其次你需要知道,switch里,执行顺序是起始case到结束于break,没有break继续执行。
然后分析结果如下:
第一次for循环n=0:
这个时候s=0,那么switch里执行的是
case 0:
case 1:s+=1;
case 2:s+=2;break;//注意,要执行到break为止
那么这个时候s=3.
printf("%d\n",s)的结果是3.

第二次for循环n=1:
这个时候s=3,那么swaitch里执行的是
case 3:s+3;
case 4:s+=4;
那么这个时候s=10;
printf("%d\n",s)的结果是10.
第三次for循环n=2:
这个时候s=10,那么swaitch里没有执行的。
那么这个时候s=10;
printf("%d\n",s)的结果是10.
所以结果为3 10 10.该结果和我运行结果一致。
因此你的答案3 10 14是错误的哦,亲。自己执行下就知道结果了。
第3个回答  2013-08-05
个人认为答案有误。按你的程序。答案应为。

3
7
7

C语言关于for,switch语句的题目,详解。
首先,先熟悉一下switch里常见逻辑 case标签后无break;则向下一个case标签后的语句执行,例如文中case 1:s+=1;没有break;则会继续向下执行case 2的内容。如果是case 4则会跳出。好,来分析一下,一共3次循环 for(n=0;n<3;n++){switch(s){case 0:case 1:s+=1;case 2:s+=2;break;case...

...我是C语言初学者,这有一道switch语句的题,请大家帮帮忙,帮我解答一...
switch (k){ default: c+=k;case 2: c++; break;case 4: c+=2; break;} 这都是for的循环这个知道吧?问题就是你的default: c+=k;后面没有 break 所以k等于1的时候 执行了default: c+=k;c等于1 不会跳出 还会继续执行case 2: c++; break c等于2了 。然后 k等于2 c等于3了。

C语言switch循环题就解答
很简单,for循环里面嵌套一个switch语句,所以我们从for循环开始看 首先k的初值是5,然后每次循环递减1(k--),所以k在6次循环中的取值分别为:5, 4, 3, 2, 1, 0 接下来把这6个值按从左到右的顺序代入switch语句中,就和解方程一样:1、k=5,switch中执行的语句为 case 5:s++;...

c语言中,for循环里嵌套了switch循环,switch循环里有两个结果,一个brea...
在你这个题目中是 switch 语句嵌套在for语句当中!因为break 在包含在switch语句当中的!所以break 跳出的是 switch的多分支结构而不是跳出for 语句 所以for语句是要执行完毕的!你应该去翻翻嵌套使用循环语句方面的东西。

C语言for循环加switch循环?
s[]里面的数都是1或2或3,而switch(s[k])里的case 正好是1,2,3,所以s[]里的数一共有8个,肯定会执行8次switch(s[k]),并且case 1, case 2后面都没有break,所以肯定会执行case 3,所以x[s[k]]++就相当于要嘛 s[1]++ ,要嘛s[2]++,要嘛s[3]++,s[0]则不变还是0,所以...

C语言程序中for循环和switch的用法?
}}void ComputeAverage() { average = sum \/ 5.0; \/\/ 平均成绩\/\/ printf("全班平均成绩为%7.2f\\n", average);}void Sort() { for (j = 0; j < 4; j++) \/\/ 成绩由高到低排序\/\/ for (i = 0; i < 4 - j; i++) if (score[...

C语言 switch语句的问题
解答:1.请问为什么字母要用''括起来 答:因为ch要判断的是字符 2.如果ch=1 那么是执行case '1'还是 case 1 如果是后者的话 为什么数字不用括起来 答:执行case '1'3.假如执行了break语句 是返回第二行重新判断 答:是跳出switch,跳到putchar('*')执行,然后继续执行FOR循环 4.假如执行了...

一道c语言编程题,求教
思路分析:首先建立一个缓冲数组,由于题目要求输入的数据个数不超过两位,所以,数据的位数设为100即可,即BUF[100]; 当检测到输入,(+,-,*,\/)的时候,停止输入,并将前面的树,用求最大最小的算法(查找法)找出其最大值和最小值(这个算法也可以在输入的时候同时操作!),当输入“=”的...

求问这道关于Switch语句的c语言的题
这是因为这个switch...case句块的执行顺序是这样的,一开始k=8,在case从句中没有匹配的,所以它会执行defult句块中的内容,因为没有break语句来中断,所以在那之后会继续往下执行case10,case11句块中的内容,直到触底退出,因为这个过程共有3个k+=1语句,所以k被加了3次1,这样k的值就从8变成了...

一道关于C语言switch的题,不知道怎么理解,希望懂的人赐教
并由第一个case分支开始将其与case后的常量表达式比较当表达式的值与某个case分支的常量表达式相等时,则执行case后的语句,遇到break则跳出,如没有break ,程序会执行到最后自动跳出。default放在什么位置都行,当表达式的值与所有的case分支的常量表达式都不等时,则执行default后的语句!

相似回答