问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-27 11:45

我来回答

6个回答

热心网友 时间:2022-04-11 17:41

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

热心网友 时间:2022-04-11 18:59

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

热心网友 时间:2022-04-11 20:34

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, *#

热心网友 时间:2022-04-11 22:25

请看下文
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语言知识的点点滴滴,您的关注是我持续创作的动力,请收藏本文、转发并点赞,希望得到您的持续关注,谢谢!

热心网友 时间:2022-04-12 00:33

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 都匹配失败,那么就什么都不执行。

热心网友 时间:2022-04-12 02:58

switch语句可以算是if else语句的一种特殊情况。当我们使用if else语句来做判断时,如果我们只想对条件表达式的结果做一些特定值的判断,那么就可以使用switch语句。例如:我们需要根据当前月份来判断这个月份应该有多少天,我们可以使用if else语句来处理这个问题,但同样也可以使用switch语句来处理。switch语句的使用方式如下:switch右侧的小括号中的变量或表达的值的结果是一个确定的值。大括号中可以有多个case语句,case右侧的值如果等于switch右侧小括号中的值,那么程序将执行当前case大括号下的内容(case下的大括号可以省略,但建议保留),在大括号中的最后一行需要加入break语句,表示执行完当前条件分支的case之后程序跳出当前switch结构,如果没有break则程序会顺序执行下面的case语句代码,即使case后的值不等于switch的条件值。如果switch中所有的case值都不等于switch的条件值,那么程序将执行default后的大括号中的内容,default分支即为默认条件分支,也就是说当所有的case分支都没有起作用时程序将执行此默认分支,(default分支可以省略,但建议保留)。例如:int month = 11;
int day;
switch (month)
{
case 0://一月
{
day = 31;
break;
}
case 1://二月
{
day = 28;
break;
}
case 2://三月
{
day = 31;
break;
}
case 3://四月
{
day = 30;
break;
}
//5月到11月略
case 11://十二月
{
day = 31;
break;
}
default://其它情况
{
day = 0;
break;
}
}

上面程序执行的过程为:switch (month)中的条件表达式的值为11,也就是十二月(月分从0开始),程序会将这个值与所有的case条件值做比较。第一个case的条件值为0,11与0相比较的结果为假,则程序跳过此case分支;第二个case的条件值为1,11与0想比较结果为假,则程序跳过此case分支;依次比较,当case 11: { } 这个条件值为11,11与11相比较的结果为真,于是程序进入此case分支,执行day = 0;语句。注意,当执行完这个语句之后,程序需要通过break跳出当前switch结构,如果不使用break语句,程序在执行完day = 31之后,就会继续向下执行下一个分支,即使其条件不符合。也就是说,如果不用break跳出,程序在执行完day = 31后,还会继续向下执行day = 0;于是程序的运行结果就出现了错误。
通过上面例子我们可以看到swtich与if else语法的书写方式不同,但功能很类似,只不过switch中的case值是固定的常量,而if 后的条件值可以是一个变量或条件表达式,所以说if else结构在使用范围上比switch更广,但switch结构的语法更清晰,它适用于一些特定的情况,在一些固定值的条件判断中使用switch更加方便美观一些。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小米平板6Max没有网络怎么办 ...wifi和4G网络我都试过都现实吗没有网络。刚买的是正品没有刷机_百度... 2023年淘宝双11招商规则 淘宝国庆狂欢季招商规则及玩法 淘宝年货买不停招商规则 淘宝超来电活动招商规则 ZIP转换成RAR怎么转换? 衢州醉根艺品有限公司怎么样? 徐谷青主要业绩 徐谷青人物介绍 c语言中switch语句里的break加与不加有什么关系 c语言中switch中break的用法 关于C语言switch语句的break问题 C语言中,有break 和没有break有什么不同? 有一个三个雷组成的字,怎么念? 三个雷念什么 三个雷是什么字 三个雷什么字 三个雷字重叠起来怎么念?是什么意思? 三个雷字加一起念什么 三个雷念什么字 三个“雷”字是什么字呀 三个雷是什么字? 三个雷字加一起念什么就是三个雷字,先是上下结构,上 三个“雷”字在一起怎么读 怎么打出这个字? 三个雷字怎么读? 三个雷读什么字 三个雷读音是什么啊? 三个雷的字,读什么?什么意思? 熊猫属于保护动物,如果私自饲养,会有什么惩罚? c语言中关于break语句的用法 C语言问题,没有break的switch语句该怎么运行? 黄瓜的腌制方法酸甜脆 黄瓜怎么做好吃,腌酸甜黄瓜的家常做法 家政的证书是中管院盖的章国家承认吗 建设银行卡上的CCB SQ是什么意思 建行龙卡储蓄卡上CCB NM 是什么意思?这种卡在鄂尔多斯取钱收手续费么? 燕京理工学院学费 请问:哪个部门能发放国家认可的家政服务员资质证书 建设银行卡上CCB HLJ什么意思 经家政公司培训,获得资质。真实有效吗? 燕京理工学院学费2020 中国建设银行卡龙卡上面的ccbxz英文什么意思 燕京理工学院官网美术学费一年多少钱,其它所有费用总共多少钱? 通过家政公司培训获得资质,真实有效吗? 燕京理工为什么叫皇家理工? 月嫂证全国通用吗 中国建设银行卡上CCBCQ是什么 现在很多家政公司都免费学习技术,这种证件全国都认可吗? 燕京理工学院学费多少钱?