100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C语言详解系列——分支语句详解if switch

C语言详解系列——分支语句详解if switch

时间:2021-06-27 14:20:29

相关推荐

C语言详解系列——分支语句详解if switch

文章目录

什么是语句if语句悬空else switch语句break的使用default 的使用

在之前的分享中,我们了解到了c语言是结构化的程序设计语言。分为顺序结构,选择结构,循环结构三大类。今天我将与大家详细分享选择结构中if switch的用法。

什么是语句

我们说详解分支语句,首先我们需要知道什么是语句,其实用分号隔开的就是一个语句。在c语言中语句可以大致分为五类:

1.表达式语句

2.函数调用语句

3.控制语句

4.复合语句

5.空语句

我们今天所讲的是控制语句,控制语句主要用来控制程序的执行流程,实现程序的各种结构方式。

例如:

1.条件判断语句也叫分支语句:if语句、switch语句

2.循环执行语句:do while·语句 、while语句、for语句

3.转向语句 :break语句、goto语句、continue语句、return语句

if语句

if语句的语法结构到底是怎么样的呢?在if语句中分为双分支、多分支。语法结构如下

int main(){if (表达式)语句;//双分支if (表达式)语句1;else语句2;//多分支if (表达式1)语句1;else if (表达式2)语句2;else语句3;}

如果表达式为真就执行语句,那么在C语言中如何表示真假呢?C语言规定了非0就为真,0就为假。注意if else if else默认只能控制一个语句。

#include<stdio.h>int main(){int a = 1;if (a == 1)printf("hehe\n");elseprintf("haha\n");printf("momo\n");return 0;}

例如上面这个代码最后输出的结果是hehe和momo同时输出。我们的思路其实是当a = 1时我们输出hehe其他时候输出haha和momo,那么该如何实现呢?我们就需要让else同时控制两个语句,执行多条语句。我们使用{}将语句括起来变成一个代码块,就可以实现。

#include<stdio.h>int main(){int a = 1;if (a == 1)printf("hehe\n");else{printf("haha\n");printf("momo\n");}return 0;}

悬空else

在分支语句中还有很多小的细节值得我们注意例如悬空else

#include <stdio.h>int main(){int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;}

上面这个代码的输出结果是什么呢?是不是有很多小伙伴觉得输出的结果是haha。其实不是,上面这个代码什么也没有输出。出现错误判断的关键就是对else的判断不准确,else是与第一个if对应还是与第二个if对应呢?这种情况我们就称为悬空else。直接上结论,else与他距离最近的if相匹配。所以上面的代码可以写为

#include <stdio.h>int main(){int a = 0;int b = 2;if(a == 1){if(b == 2)printf("hehe\n");elseprintf("haha\n");}return 0;}

不知道大家有没有感觉到第二次的代码比第一次的代码,逻辑更加清晰,更具观赏性。这里我们不得不提到代码书写风格的重要性。好的书写形式可以更好的帮助我们理解代码

例如:

int main(){if (condition){return x;}return y;}

int main(){if (condition){return x;}else{return y;}}

上面两个代码的逻辑是一样的,但是,是不是代码2的逻辑更加清晰。

int main(){int num = 1;if (num == 3){printf("ok\n");}return 0;}

int main(){int num = 1;if (3 == num){printf("ok\n");}return 0;}

上述代码中的区别就在于if语句中的表达式不一样,虽然表达的意思相同但是代码2中的写法更加不容易出错。因为如果写错成if(3 = num)就会报错因为3是常量不能改变常量的值,而代码1中的表达式写错就不会报错。这些小细节就可以体现我们写代码的level。

switch语句

switch语句也是一种分支语句,常常用于多分支的情况。例如:判断今天是星期几,输入1,输出星期一,输入2,输出星期二,以此类推到输出星期日。我们可以用if else if else,但这样写起来太复杂了,这个时候我们就需要使用switch了。swtich语法结构

swtich(整形表达式)

{

语句项:

}

语句项是什么呢?

case 整形常量表达式:

语句;

例如:

int main(){int day = 0;printf("输入今天的天数\n");scanf("%d", &day);switch (day){case 1:printf("星期1");case 2:printf("星期2");case 3:printf("星期3");case 4:printf("星期4");case 5:printf("星期5");case 6:printf("星期6");case 7:printf("星期7");}return 0;}

我们发现上面的代码并没有实现我们想要的分支逻辑,因为当我们输入1时,输出的结果为星期1到7,这是因为我们没有设置分支的出口break。

int main(){int day = 0;printf("输入今天的天数\n");scanf("%d", &day);switch (day){case 1:printf("星期1");break;case 2:printf("星期2");break;case 3:printf("星期3");break;case 4:printf("星期4");break;case 5:printf("星期5");break;case 6:printf("星期6");break;case 7:printf("星期7");break;}return 0;}

所以我们就了解到了,在switch语句中case决定分支的入口,break决定分支的出口。还有值得我们注意的是switch语句中必须使用整形表达式,浮点型不行会报错,字符型也可以在switch中使用,因为字符在底层存储当中是以阿斯克码值的形式存储的。

break的使用

并不是每一个case语句后面都需要加break语句,可以根据需求使用break控制分支的出口。例如:

int main(){int day = 0;printf("输入今天的天数\n");scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日");break;case 6:case 7:printf("休息日");break;}return 0;}

这样我们就使用break语句把语句列表划分为不同的分支部分。在提一下代码编写的风格,最好在最后一个case后面加上一条break语句,这样方便下一次编写。

default 的使用

如果表达式的值与所有的case的标签值都不匹配,我们可以使用default来提示用户,default可以写在任何位置,并且一个switch语句只能有一个default子句。

注:最后在每个switch语句中都放一个default子句,并且可以在后面加上break

例如:

int main(){int day = 0;printf("输入今天的天数\n");scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日");break;case 6:case 7:printf("休息日");break;default:printf("输入错误");break;}return 0;}

这样当我们输入大于7的数字时就会给我们提示输入错误了。

#include <stdio.h>int main(){int n = 1;int m = 2;switch (n){case 1:m++;case 2:n++;case 3:switch (n){//switch允许嵌套使用case 1:n++;case 2:m++;n++;break;}case 4:m++;break;default:break;}printf("m = %d, n = %d\n", m, n);return 0;}

最后给大家留下一道练习题,你知道最后结果是什么吗?答案是m = 5,n =3.你理解了嘛。

好了这就是我与大家分享的分支结构,如果写的不好希望大家提出建议,有错误也请大家指出,我希望可以和大家一起学习一起分享一起进步。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。