求问这道关于Switch语句的c语言的题

作者&投稿:唐瞿 (若有异议请与网页底部的电邮联系)
求问一道switch语句的C语言题目~

你好,你的理解都是对的。只是忽略了一个知识点。第一个switch的case 0后没有break,所以会接着做case 1.满意请采纳

没有错的

1. K = 5 没有 相关case 执行 default ; 这是 n = 0; k--后 k = 4 break跳出 switch 判断while循环条件 while(k>0&&n<5); 再次进入 switch

2 k = 4, 执行 n+=2 后 n = 2, k-- 后 k = 3;break跳出 switch 判断while循环条件 while(k>0&&n<5); 再次进入 switch

3. k = 3,执行 n +=1后 n = 3;break跳出 switch 判断while循环条件 while(k>0&&n<5); 再次进入 switch

4. k =3 执行 n +=1后 n = 4 break;跳出 switch 判断while循环条件 while(k>0&&n<5); 再次进入 switch

5. k =3 执行 n +=1后 n = 5 ;break跳出 switch 判断while循环条件 while(k>0&&n<5); 不符合 循环条件。跳出循环

最后 k = 3 n = 5

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

因为在这里k的初始值是等于8,进入多分支选择时,在已经列出的常量清单中并没有8,所以就从default,这个入口进入,开始执行,由于执行还一个语句后没有退出语句break;所以就连续三次执行加法语句k+=1;
也就是说,在原值8的基础上连续加了三次1,所以k的值就等于11了。

x=0;y=2;z=3;
switch(x)
{case 0: switch(y=2)
{case 1: printf("*");break;
case 2: printf("%");break;}
case 1: switch(z)
{case 1: printf("$");
case 2: printf("*");
default: printf("#"); }
}

这样处理一下结构就很清楚啦,结果应该是显示*。
switch(y=2)相当于switch(1)。switch(x)
{case 0: switch(y=2)
{case 1: printf("*");break;
case 2: printf("%");break;}
case 1: switch(z)
{case 1: printf("$");
case 2: printf("*");
default: printf("#"); }
}
第一个switch(x)->case0
case0:switch(y=2)注意括号中得到的是bool值,即0或1,这里是1,所以printf(“*”)
由于case0没有break;顺序执行下面case1:switch(z),z=3,所以选择default,printf(“#”)。
所以最后答案是:C, *#

请看下文
C语言中选择结构分为if语句和switch语句两种,两种语句均可以依据条件不同而选择执行不同的语句块,但switch语句更多地应用于多分支结构。对于switch语句你都学会使用了吗?本文将总结switch语句基本用法及使用技巧,希望能给大家提供参考。
1、 switch语句基本用法
C语言中,switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。
其使用一般形式如下:
switch(表达式)
{
case 常量表达式1:
语句块1;
break;
case 常量表达式2:
语句块2;
break;
……
case 常量表达式m:
语句块m;
break;
default:
语句块n;
break;
}
使用说明如下:
1) 程序执行时,首先计算表达式的值,与case后面的常量表达式值比较,若相等就执行对应部分的语句块,执行完后利用break语句跳出switch分支语句。若表达式的值与所有的case后的常量表达式均不匹配,则执行default项对应的语句n,执行后跳出switch分支语句。
2) case后面的常量表达式只能是整型、字符型或枚举型常量的一种;各case语句表达式的值各不相同,只起到一个标号作用,用于引导程序找到对应入口。
3) 这里的语句块可以是一条语句,或其它复合语句。语句块可以不用花括号“{}”。
4) 各个case语句并不是程序执行的终点,通常需要执行break语句来跳出switch分支语句;若某case语句的语句块被执行后,若其后没有break语句,则顺序执行其它case语句,直到遇到break语句或后面所有case语句全部执行完,再跳出switch分支语句。
5) 多个case可以共用一组执行语句块。
6) 各个case和default出现的先后次序,并不影响执行结果。
7) default语句不是必须的,但建议加上作为默认情况处理项。
8) switch语句仅做相等性检测,不能像if语句那样做关系表达式或逻辑表达式计算,进行逻辑真假判断。
2、 switch语句使用技巧
1) 尽量减少case语句数量
C语言C89标准指出,一个switch语句至少应支持257个case语句;而在C99标准中分支个数要求提升至1023个。在实际编程开发应用中,为了提高程序可读性与执行效率,应尽量减少case语句的数量。尽量将长的switch语句转换为嵌套的switch语句,即可以将高频执行的语句放在一个case语句中,作为嵌套switch语句的最外层;把执行频率较低的case语句放在另一个switch语句中,放置于嵌套switch语句的内层。
2) case语句结尾勿忘加break语句
在switch语句中,每个case语句的结尾不要忘记添加break语句,否则将导致多个分支重叠,除非有意而为之。
3) 注意case语句的排序
通常按照字母或数字顺序来排序;若switch语句存在多个情况正常和异常的语句,应尽量将情况正常的语句排在前面;另外也可以根据执行频率来排序,如果能预测出每条case语句的大概执行频率,可以将频率最高的语句排在前面。
好了,关于switch语句的用法今天就总结到这,如果大家有任何疑问请留言探讨。我是“C语言知识传播者”,志在瞄准C语言,挖掘和总结C语言的难点和痛点,给C语言编程爱好者和本领域从业人员提供参考,我会用心总结C语言知识的点点滴滴,您的关注是我持续创作的动力,请收藏本文、转发并点赞,希望得到您的持续关注,谢谢!

C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:

#include <stdio.h>int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
if(a==1){
printf("Monday\n");
}else if(a==2){
printf("Tuesday\n");
}else if(a==3){
printf("Wednesday\n");
}else if(a==4){
printf("Thursday\n");
}else if(a==5){
printf("Friday\n");
}else if(a==6){
printf("Saturday\n");
}else if(a==7){
printf("Sunday\n");
}else{
printf("error\n");
}
return 0;}

运行结果:
Input integer number:3↙
Wednesday

对于这种情况,实际开发中一般使用 switch 语句代替,请看下面的代码:

#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}

运行结果:
Input integer number:4↙
Thursday

switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下:
switch(表达式){ case 整型数值1: 语句 1; case 整型数值2: 语句 2; ...... case 整型数值n: 语句 n; default: 语句 n+1;}
它的执行过程是:
1) 首先计算“表达式”的值,假设为 m。

2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。

3) 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。

4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。

需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。例如:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
case 3: printf("Wednesday\n");
case 4: printf("Thursday\n");
case 5: printf("Friday\n");
case 6: printf("Saturday\n");
case 7: printf("Sunday\n");
default:printf("error\n");
}
return 0;
}

运行结果:
Input integer number:4↙
Thursday
Friday
Saturday
Sunday
error

输入4,发现和第四个分支匹配成功,于是就执行第四个分支以及后面的所有分支。这显然不是我们想要的结果,我们希望只执行第四个分支,而跳过后面的其他分支。为了达到这个目标,必须要在每个分支最后添加break;语句。

break 是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。

使用 break 修改上面的代码:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}

运行结果:
Input integer number:4↙
Thursday

由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加break;语句。

最后需要说明的两点是:
1) case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。请看下面的例子:

case 10: printf("..."); break; //正确
case 8+9: printf("..."); break; //正确
case 'A': printf("..."); break; //正确,字符和整数可以相互转换
case 'A'+19: printf("..."); break; //正确,字符和整数可以相互转换
case 9.5: printf("..."); break; //错误,不能为小数
case a: printf("..."); break; //错误,不能包含变量
case a+10: printf("..."); break; //错误,不能包含变量

2) default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。


...是遇到第一个break就直接跳出switch与语句了?不执行后面的swit...
c语言问题第24题,是不是遇到第一个break就直接跳出switch与语句了?不执行后面的swit c语言问题第24题,是不是遇到第一个break就直接跳出switch与语句了?不执行后面的switch(b%2)了?谢谢!!!... c语言问题第24题,是不是遇到第一个break就直接跳出switch与语句了?不执行后面的switch(b%2)了?谢谢!!! 展开 ...

我有一对表,swit zerland 1882年的球型表,另外个球面可以看到机芯,大的...
这种表在中国出现已经近十年了有4--5公分直径水晶球怀表1882年瑞士产欧米咖露空机芯中间还有有道金箍。。。如果是真的,至少60--100万,但是,你自己最明白,是不是少花了个万字,很少有人5--60买来,知道上当后100块都卖不出,大部分是8--90块钱出手,还有很多人是100甚至多一点入的现在还把玩...

c++的return switcg()问题
include <iostream> using namespace std;int main(){ string a[1]={"伙"};cout<

VLAN问题
8 config-if#switchport mode trunk(把fa0\/12定义为trunk的开启模式,企望模式 dynamic desirable 自动模式 dynamic auto)9 show interface fa0\/12 switport(查看fa0\/12的trunk的管理模式和工作模式)

Java新手问题!!
} if(j==0){ System.out.println("*");continue;} System.out.print("*");if(j==9){ for(int i=0;i<j*2;i++){ System.out.print("*");} continue;} for(int i=0;i<j*2-1;i++){ System.out.print(" ");} System.out.println("*");} } 这鬼东西搞了半天,呵呵 ...

我有一块瑞士1882年的欧米茄水晶球怀表,保存9成新,走时精确,问一下能...
30元吧,你遇见好人了,可以给50元,回答完毕。

我想问一下,澳大利亚TAFE课程拿到的文凭,国内的教育部承认吗?_百度知 ...
是认可的,但不是全部tafe学校都认,而且读tafe的基本都是想移民的,人家根本不回国...中国教育部认可的澳大利亚tafe学校名单,澳大利亚tafe学校链接地址, 澳大利亚留学- tafe学校介绍,64所tafe学校(澳大利亚职业技术学校)推荐:所在城市 澳大利亚留学 64所tafe学校名称 缩写 tafe学校中文名 Australian ...

问一首歌的名字
在百度里搜“California Feat K'ream Akia ”歌词:Starin at my window at you Am I the same without you And I ain't the same without you Can't even do my thing without you So long to the one that I love And I remember how it was I wish I could be back there cuz I ...

维西傈僳族自治县17894372557: 一道C语言中有关switch语句的题 -
苏邵左福: 没有错的1. K = 5 没有 相关case 执行 default ; 这是 n = 0; k--后 k = 4 break跳出 switch 判断while循环条件 while(k>0&&n<5); 再次进入 switch2 k = 4, 执行 n+=2 后 n = 2, k-- 后 k = 3;break跳出 switch 判断while循环条件 while(k>0&&n<5); 再...

维西傈僳族自治县17894372557: 求一个简单的含switch语句的C程序 -
苏邵左福: C语言switch应用例子: 例一: #include<stdio.h> int main() { double score; printf("请输入分数:\n");scanf("%lf",&score); switch((int)(score/10)) //switch((int)score/10)出现错误 {case 10: case 9:printf("A(最好)\n");break; ...

维西傈僳族自治县17894372557: 请问c语言的switch语句到底是什么? -
苏邵左福: C语言中,switch语句的使用格式如下:switch(表达式){ case 常量表达式1 : 语句1; break; case 常量表达式2 : 语句2; break; ...... case 常量表达式n : 语句n; break; default : 语句n+1;}举例如下:int i=4, a=0; switch(i) {case 1 : ...

维西傈僳族自治县17894372557: c语言switch语句 -
苏邵左福: 不能,case后面的常量表达式只能是整型,字符型 #include<stdio.h> void main() { int score=0; int grade=0; printf("成绩(0-100)\n");scanf("%d",&score); //键盘输入学生成绩 while(score>=0&&score<=100) { grade=score/10; switch(...

维西傈僳族自治县17894372557: (switch 语句)c语言题 -
苏邵左福: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16#include <stdio.h>intmain () {intn;printf("读入一个整数 ");scanf("%d", &n);switch(n) {case1: printf("第一个福娃名字\n"); break;case2: printf("第二个福娃名字\n"); break;case3...

维西傈僳族自治县17894372557: c语言中的switch语句 -
苏邵左福: 首先外部switch语句中x=1,所以执行case 1:里面的语句,接着又一个switch语句判断y=0,所以进入case 0:里面的语句,由a++得到a=1;接着break,退出该switch语句,因为case 1后面没有break,所以继续执行case2: a++;b++,这个时候的a=2,b=1,然后一个break语句结束外层的switch语句,最后输出a=2,b=1;

维西傈僳族自治县17894372557: C语言中switch语句的用法 -
苏邵左福: 在每个case语句后加上break语句(即在每个printf语句后加上一句break;),执行break后直接跳出switch.这样就只输出一个了

维西傈僳族自治县17894372557: C语言的switch语句 -
苏邵左福: 比如.你要开灯,现在有7种颜色的灯:1--赤;2--橙;3--黄;4--绿;5--蓝;6--靛;7--紫.各种颜色的代号如上所示.现在你要选择灯的颜色,就可以用swtich语句:switch(light) { case 1:printf("开赤灯\n");break; case 2:printf("开橙灯\n...

维西傈僳族自治县17894372557: C语言 题目 SWITCH语句 -
苏邵左福: case'c':case'C'printf("pass");这句后面没有break;,所以不会跳出switch,会继续执行下一行代码.也就是case'd':case'D'printf("warn");不信你在case'c':case'C'printf("pass");后面加个break;

维西傈僳族自治县17894372557: 一道C语言题.用switch语句 -
苏邵左福: n");break; case 2; void main() { int a=0:printf(" else if(a>=60)n=2; else n=3;n");break; case 1; switch(n) { case 0:printf("输入错误\%d&quot,n;=85)n=1;); printf("输入成绩:\n&quot#include<stdio.h>):printf(" case 3:printf("fail\break;pass\n"very good\,&a); if(a<0 || a>100)n=0; else if(a> scanf(&quot

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