且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

迟来的分支语句

更新时间:2022-09-27 21:51:29

1,什么是语句?

       1.1表达式语句

诸如int a = 10;        int b = 20;       int c = 0;       c = a + b;之类的语句(由表达式加上";"组成。) 其一般形式为:表达式;执行表达式语句就是计算表达式的值和执行副作用。例如:1,x=y+z; a=520;(赋值语句; 2,i++;自增1语句,i值增1。(先运算i再加1) 3,++i;(先增1后运算)等等;


       1.2函数调用语句

1:函数作为表达式中的一项出现在表达式中 如“z=max(x,y)”2:函数作为一个单独的语句 如               “printf("%d",a);”  3:函数作为调用另一个函数时的实参  如“printf("%d",max(x,y));”


       1.3控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。 可分成以下三类:1. 条件判断语句也叫分支语句:if语句、switch语句;  2. 循环执行语句:do while语句、while语句、for语句;3. 转向语句:break语句、goto语句,continue语句、return语句。


       1.4复合语句

复合语句简称为语句块,它使用大括号把许多语句和声明组合到一起,形成单条语句。语句块与简单的语句不同,语句块不用分号当作结尾。

用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如:

迟来的分支语句

       1.5空语句

迟来的分支语句

2,分支语句

        2.1  if语句

迟来的分支语句


迟来的分支语句


解释一下: 如果表达式的结果为真,则语句执行。 在C语言中 0表示假,非0表示真。


                迟来的分支语句         

使用if语句时,即使语句列表只有一行,也尽量写出{}   !!!!不为别的,看起来舒服                  

                   2.1.1悬空else

当年写了类似这样的代码时


迟来的分支语句 


改正:       //适当的使用{}可以使代码的逻辑更加清楚。 //代码风格很重要                   迟来的分支语句由此可见:else的匹配:else是和它离的最近的if匹配的。                

        2.2  switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。如果我们要输出周一到周日的话,可以选择用if else来完成,但是未免过于繁琐。例如      迟来的分支语句

那我们写成 if...else if ...else if 的形式太复杂那我们就得有不一样的语法形式这就是switch 语句。

迟来的分支语句

语句项:

迟来的分支语句


综上所述,我们在输出周一到周日在采用switch语句时可采用以下代码:                                  迟来的分支语句

但是此时就会出现一个非常严重的问题,当你在输入数值2时,理想状态下输出星期二,但是星期二到星期日的一并打印出来了,这并不是我们想要看到的结果。此时此刻我们就应该想到应该有这么一个东西可以在你输入数值后,打印相应的回复,并随即跳出语句,即我们想要的输出值。这就是switch的灵魂伴侣  break  !!(详解见下)

                   2.2.1switch语句中的break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。如: 迟来的分支语句                 

迟来的分支语句

此时此刻,我们不难发现,加入break后,当再次输入2时,只打印了星期2,即我们想要的回复。编程好习惯 :在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

                   2.2.2default子句

如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。如:                                                                                                

迟来的分支语句