分支语句和循环语句(C语言)

本文详细介绍了C语言中的选择结构和循环结构,包括if和switch语句,以及while、for和do-while循环。讲解了各种语句的形式、执行逻辑和常见问题,如if的就近原则、switch的case匹配、break和continue的用法,并通过实例代码展示了它们的工作原理和注意事项。此外,还探讨了break和continue在不同循环中的差异。
摘要由CSDN通过智能技术生成

           前言:C语言中的语句由分号隔开,分号即为语句结束的标志。语句共有三种逻辑:1,顺序结构,可以形象的理解为一条道顺着走下去。2,选择结构,就是走着走着遇到几个分岔口,然后你选择一下走哪。3,循环结构,就是跑圈,跑的圈数达到一定条件,然后就不跑圈了。本章着重讲分支语句和循环语句,就是选择结构和循环结构。至于顺序结构也就是没啥可讲的。

  1. 分支语句(选择结构)

C语言中的选择结构主要由两类语句体现:一是 if语句;二是 swich语句。Swich语句的好处在于可以更加简明的去处理情况多代码。

先聊,if语句。

共有三种形式:

  1. 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没有打印。

看到这里,我把分支语句和循环语句都已讲完了,完结散花,哈哈,希望这篇博客对大家有帮助!最后祝大家每天收获满满,代码越写越好!!!!

  

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

动名词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值