前言:C语言中的语句由分号隔开,分号即为语句结束的标志。语句共有三种逻辑:1,顺序结构,可以形象的理解为一条道顺着走下去。2,选择结构,就是走着走着遇到几个分岔口,然后你选择一下走哪。3,循环结构,就是跑圈,跑的圈数达到一定条件,然后就不跑圈了。本章着重讲分支语句和循环语句,就是选择结构和循环结构。至于顺序结构也就是没啥可讲的。
- 分支语句(选择结构)
C语言中的选择结构主要由两类语句体现:一是 if语句;二是 swich语句。Swich语句的好处在于可以更加简明的去处理情况多代码。
先聊,if语句。
共有三种形式:
- If(表达式)2.if(表达式)3.if(表达式)
语句; 语句; 语句;
else else if(表达式)
语句; 语句;
else
语句;
它的执行规则是:if表达式如果为真,那么就执行if下的语句。若if表达式为假就去判断else表达式的真假,同理若为真就执行else if 下的语句,若依据为假,就执行 else。
If语句共有三种形式,根据情况去使用。If 明显用于只用一次判断,就去执行与否的情况;if else语句更适用于除了if判断的情况外,仅有一种与之对立的情况,然后去判断要执行的who的操作;if -else if -……else if -else 这种明显是适用于多种情况需要判断,然后进行操作的。
如图所示:
解释一下上面的表达式所谓的真假,在C语言里0即为假,所有非0就是真。也可以是判断条件,如果条件成立就是真,不成立就是假。
If语句种还有常见的问题就是“悬空else“,else 于if对应是依照就近原则的。
比如以下代码:
大家猜猜会运行出啥结果?
好了,你们思考着。我先把答案发了。
答案是不有点出乎意料,我猜有结果是hehe ,有结果是haha,还有的是hehe,haha。
为什么不打印结果呢?
我写成这样是不好看点?
If()的表达式先判断,a==1的条件为假,所以if下的语句不执行,else和最近的if匹配,所以这个if -else语句是不会打印的。
从这个代码我们可以认识到else的就近原则,也可以知道着{}的好处,让代码的可读性提高,我可以用这个{}改一改代码。如图:
这次的结果就是:
因为大括号{}括住的语句是if(b==2)
Printf(“hehe\n”);
下面的else与if(a==1)对应,所以打印出了else下的语句
Haha。
聊完了if语句,再聊switch语句。
上文讲到switch是用于处理情况较多的代码的,当然我们的if语句也可以处理情况多的代码,就是if-else if……-else语句,之所以出现switch,是因为其更为方便。
Switch语句的形式:
Swich(整型表达式)
{ case 整型常量表达式:
语句1;
break;
case 整型常量表达式:
语句2;
break;
……
default:
语句;
}
基本是这样的形式。
逻辑:就是swich()的整型表达式是一个接受量,接受到一个整型数据,然后走进{}里,对应这case前的整型常量,假如接到的整型表达式的值为1,那么就执行case1下的语句。接到2就是从case2开始执行语句。
讲到这里得提到break,接上文,如果执行case1的语句,后面没有break,那么程序会执行case2下的语句,按照顺序结构往下执行,直到遇见break才会跳出swich语句,如果没有break就会从case1一直执行到default 前的语句。
举个例子:我想输入1,就打印出星期一。输入2就打印出星期二。
直接上代码,如图:
我输入1,看结果如何?
明显这不是我想要的结果。看我利用上break的效果:
可以,那用这个代码我们再去看看default的作用。
可以发现,default可以说明接受的数据,没在case情况内。
嗯,没有default语句,其实c语言也不会报错,但是加一条default语句可以增加代码可读性,是编程的好习惯。
2.循环语句
C语言的循环结构有三种形式:一,while循环。二,for循环。三,do-while循环。
(一)While循环
While循环的逻辑其实和if语句类似,while(表达式)
语句;
若表达式为真,就是执行语句。区别在于有表达式中变量的调整。即判断循环的终止与否。
While语句的基本形式:
While(表达式)
{ 语句;
表达式中变量的调整;
}
举个例子:
在屏幕上打印1-10的数字。
直接上代码:
看这个while语句,()内的表达式为i<n;i<n成立,为真,所以执行printf(“%d ”,i);i++。i++即为表达式中变量的调整,当i=n时循环结束。
(二)for循环
for循环是C语言中用的最多的,for循环的形式为
for(表达式1;表达式2;表达式3)
{ 语句;
}
可以说for循环是while循环的简洁版,表达式1就是变量的初始化,表达式2是变量判断,表达式3是变量的调整。
对比上图,我用for循环做一个打印1-10的代码。
对比while循环,for循环的()里把变量初始化,变量判断,变量调整都直接码进去了。While循环的()里只是判断变量的。
现在说说for语句的执行逻辑,如图:
可以看到变量的初始化就初始一次,以后就没它事情。然后走到判断部分,如果为真就执行for控制的语句,执行完就会进行变量的调整,再走到判断部分,直到判断为假就会跳出循环。
For语句的变种:
for(表达式1;表达式2;表达式3)
其中的表达式1,表达式2,表达式3都可以省略。会使for循环的执行变得不同以往。
1.for(;;)
三个表达式都省略,这就是死循环会不断的执行for控制的语句。
2.for(i=0;;i++)
同上,也是死循环,因为没有判断部分,导致程序默认为真,一直执行语句。
3.for(;i<10;i++)
省略了初始化部分,会使的程序发生意想不到的变化。
往往会在for语句的嵌套使用中出现问题。
我想打印十遍0-9,先上没初始化的代码。
可以看到屏幕上打印了1-9;这是啥情况?我把初始化的j加上看看。
看来问题就是出在了初始化上了,如图中我的嵌套for语句为 for(;j<10;j++),这样写的结果是只打印一次0-9;导致这样的结果,是每次第一个for循环进去后,由于j没有初始化,所以保留上次运行所储存的变量值也就是10;j=10,不满足j<10,所以从第二次的for(i循环)起,里面的for(j循环)根本就不执行。
由此可见这样省略要慎重,否则容易出bug。
4.for(i=1;i>0;)
省略了调整部位会导致俩种情况:要么死循环,要么不循环。这取决于变量初始化部分满不满足,判断条件。
5.for(变量1,变量2;判断部分;调整部分)
C语言是允许for()中的变量初始,判断,调整部分可以由多个变量组成,由几个变量组成,这取决于你。
(三)do while循环
do while语句的形式为 do
语句;
While(表达式);
逻辑如图:
就是一上来就执行do下的语句,当然多条语句要加{},没加{}系统只默认do控制底下的第一条语句。执行完了,就去while的()里判断要是条件为真就再返回上去do,如果判断位假,就跳出循环。
老样子用do-while循环打印0-9。代码如图:
好了以上就是三大循环的讲解。
现在开始讲讲循环里面的break和continue。Break和continue在三大循环中的作用本质一样,但在for循环中还是有些差异的,而在while和do-while循环中,作用一致。
(‘1’)for循环中的break和continue
For循环中的break,就是结束循环,直接不循环了。代码举例,我打数字1-4,到5就跳出循环。
Continue的作用:跳过continue后的代码直接回到变量调整部分前,也就是i++的前面。将break改为continue看看效果。
可以看到是只有5没有打印,其余都打印出来了。
(‘2’)while和do-while循环的break,continue
Break和for语句没区别就是跳出循环,不再循环。
代码依旧是打印1-4,到5就跳出循环。
在while和都do-while中,continue会直接跳过后面的语句,来到判断部分,不会来到变量调整的部分。如果你的变量调整部分放在了continue的后面,就会导致死循环。举例说明一下:
打出了1 2 3 4,但是代码还在运行没有结束,正常结束会有一句话:请按任意键继续。运行的时候4后面有个小标在闪烁,但是截屏是看不到,有兴趣的,可以自己编代码跑一跑。
现在我将代码中的变量调整放到continue的前面。
可以看到是只有5没有打印。
看到这里,我把分支语句和循环语句都已讲完了,完结散花,哈哈,希望这篇博客对大家有帮助!最后祝大家每天收获满满,代码越写越好!!!!