C语言零基础第4讲:循环语句

目录

1.while循环

1.1 while循环的语法形式

​编辑1.2 while循环的练习 

2.for循环 

2.1 for循环的语法形式

 2.2 for循环的练习

3.do while循环 

3.1 do while循环的语法形式

3.2 do while循环的练习

4.break和continue语句

4.1while循环中的break 

4.2 while循环中的continue

4.3 for循环中的break

4.4 for循环中的continue

4.5 do while循环中的break

4.6 do while循环中的continue

5.循环的嵌套

6.跳转语句:goto语句


正文开始

         C语言是结构化的程序设计语言,分为:顺序结构选择结构循环结构。我们日常所见的事情,都可以拆分为这三种结构,或者这三种结构的组合。

        在这里,我们一起来讨论循环语句:for、while、do while。我们可以使用循环语句来实现循环结构。

1.while循环

1.1 while循环的语法形式

        while语句的语法形式如下:

while( 表达式 )
    语句;

        while语句和if语句一样,只能控制后面的一条语句,如果想控制更多语句,可以使用花括号{}把它们括起来,如下:

while( 表达式 )
{
    语句1;
    语句2;
    ...
}

        只要while括号里的表达式为真,就会一直执行所控制的语句,直到表达式变成假才会停止,否则将会进入死循环。

        为了避免死循环,可以加入一些语句,使得条件表达式的值逐渐趋向于向0转变,如下:

1.2 while循环的练习 

练习1:在屏幕上打印1~10的值。

 

练习2:输入一个正整数,逆序打印这个整数的每一位。

例如:

输入:1234,输出:4 3 2 1

输入:521,输出:1 2 5 

 

2.for循环 

2.1 for循环的语法形式

        for循环是3种循环中使用得最多的,语法形式如下:

for(表达式1;表达式2;表达式3)
    语句;
  1. 表达式1:用于循环变量的初始化。
  2. 表达式2:满足这个表达式时,才能进入循环。
  3. 表达式3:用于循环变量的调整。 

        与if、while语句一样,它只能控制后面的一条语句,如果循环体想包含更多的语句,可以加上花括号{},如下:

for(表达式1;表达式2;表达式3)
{
    语句1;
    语句2;
    ...
}

 2.2 for循环的练习

练习1:在屏幕上打印1~10的值。

         如上,首先对循环变量 i 进行初始化,即i = 1。当 i <=10 时,才能进入循环。每执行一次循环体中的语句,i 的值+1。随着 i 的增大,当不满足 i <= 10时,循环停止。

        在这里,我们顺便提一下,关于作用域的问题。请看下面的代码:

        如上,有的人可能发现了,其实可以直接在for循环的第一个表达式中声明变量并初始化,这样看起来非常简洁。但是,如果你在循环结束之后,还想继续使用变量 i 的话,你会发现,是用不了它的。

        简单来说,这是因为,在for循环中声明的变量,属于局部变量,它只在for循环中起作用。当循环结束之后,它就被销毁了,即它的生命周期结束了。所以在循环结束之后,想要继续使用这个变量,提示未定义该标识符。

        我们再看另一种情况:

        这一次,我们在for循环中以及外部,都声明了 i 变量,但是显然,最终所打印 i 的值仍然为0。

        虽然在循环内外都声明了同名的变量 i,但实际上这是2个独立的变量。在for循环中声明的变量,当循环结束时,它的生命周期结束,被销毁,不会影响在外层声明的变量。因此最终 i 的值仍然为0。

        通过这个例子,可以注意一下,无论是哪一种循环语句,在循环头或循环体内声明的变量,在循环结束之后,它的生命周期就结束了。

        到底要不要在循环体

练习2:计算1~100这100个数中,是3的倍数的数字之和。

3.do while循环 

3.1 do while循环的语法形式

        在循环语句中,do while语句的使用最少,它的语法形式如下:

do
    语句;
while( 表达式 );

        然而,一般情况下,循环体内会有多个语句,所以更常用的语法形式如下:

do
{
    语句1;
    语句2;
    ...
}while( 表达式 );

        while和for,这两种循环都是先判断,条件如果满足,就进入循环,执行循环语句,如果不满足就跳出循环。

        而do while循环,则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进入下一次,否则跳出循环。

        因此,在do while语句中,循环体至少执行1次。所以,一般do while使用的场景是,循环体至少被执行1次,故而被使用得较少些。 

3.2 do while循环的练习

练习:输入1个非负整数,计算这个整数是几位数?

例如:

输入:1234,输出:4

输入:12,输出:2

输入:0,输出:1

        对于这个题目,并不是非要使用do while不可。但是它比较适合使用do while,因为即使 i 是0,也是1位数,会被统计位数。 

4.break和continue语句

        在循环执行的过程中,当某些情况方式时,需要提前终止循环,这是非常常见的现象。C语言提供了break和continue这两个关键字,就是应用到循环中的。

  1. brake的作用是,永久地终止循环。只要break被执行,直接跳出循环,继续往后执行。
  2. continue的作用是,跳过本次循环中continue后边的代码。在for循环和while循环中有所差异。

4.1while循环中的break 

        请看代码:

        我们希望变量 i 从1开始,一直往后打印,当i等于5的时候,就不再打印了,该怎么做呢?在上面的代码中,在打印了1,2,3,4之后,i自增到5,遇到了break,循环就终止了,不再打印。

        如果以后我们想在某种条件下终止循环,就可以使用break来完成我们想要的效果。

4.2 while循环中的continue

        对于刚刚的代码,如果把break换成continue会怎么样呢?请看代码:

        运行代码后,在打印1,2,3,4之后,光标一直在闪烁,发生了死循环。

        因为在打印了1,2,3,4之后, i 自增为5,来到判断部分,符合i <= 10,进入循环体,符合 i == 5,于是执行continue语句,跳过了continue之后的语句,又一次来到判断部分,符合i <= 10,进入循环体,还是符合 i == 5,于是又执行continue语句,跳过了continue之后的语句,又又一次来到判断部分。显然,进入了死循环。

        到这里我们就可以分析出来,continue可以帮助我们跳过某一次循环中continue后面的代码,直接来到循环的判断部分,进行下一次循环的判断。如果循环的调整语句处于continue后面,可能会造成死循环。

4.3 for循环中的break

        其实和while循环中的break一样,在for循环中,当遇到break后,循环彻底终止。请看代码:

        同样的,如果我们希望从变量 i 从1开始,一直往后打印,直到i等于5时停止打印,就可以这样写代码。

4.4 for循环中的continue

        如果我们希望,打印1~10的数,但是又不希望打印4,该怎么做呢?请看代码:

        在while循环中,执行完continue之后,来到判断部分。

        而在for循环中,执行完continue之后,先来到调整部分,再来到判断部分。

        这是两种循环的不同之处。

4.5 do while循环中的break

        do while中break的作用,与while几乎是一模一样的。请看代码:

4.6 do while循环中的continue

        do while中continue的作用,也与while几乎是一模一样的。请看代码:

        把调整语句放在了continue的后面,故而在打印了1,2,3,4之后,光标一直在闪烁,说明进入了死循环。

5.循环的嵌套

        while、do while和for,这三种循环往往嵌套在一起,才能更好地解决问题。我们来看一个例子:

练习: 找出100~200中的素数,并且打印在屏幕上。

注:

素数又称质数,只能被1和它本身整除。

         对于这个题目,我们来分析一下。首先,需要产生100~200的数,所以需要使用循环,选择常用的for循环即可。然后,根据素数的定义,只能被1和它本身整除的数为素数,以101为例,让它依次去除以2,3,4,...,100,如果全都没有被整除,说明它只能被1和本身整除,那么101就是素数。也就是说,对于一个数i,如果2~i-1之间有数字能整除i,就说明i不是素数。显然,这个过程也需要循环,我们依旧选择for循环,将其放在第一个循环的内部,构成嵌套循环。当然了,我们也没有必要让i除以所有的数,只要发现被整除了,就已经可以说明它不是素数了,使用break退出循环即可,不需要再继续除以后面的数。另外,我们定义一个变量count,初始化为1 ,如果在第二次循环中,发现它不是素数,就赋值为0,以便后续的打印判断。

6.跳转语句:goto语句

        C语言提供了一种非常特别的语法,就是goto语句和跳转标号。goto语句可以实现在同一个函数内跳转到设置好的标号处。请看代码:

        goto语句如果使用得不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以建议能不用就尽量不去用。但goto语句也并不是一无是处,在多层循环的代码中,如果想快速跳出循环,使用goto就非常方便了。

        比如,对于一个3层循环的嵌套for循环,如果想要提前退出整个循环,需要使用break。但是 ,1个break只能退出1层循环,得使用3个break才能跳出整个循环,所以在这种情况下,使用goto语句就会更加便捷。


完结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值