(保姆级)一篇帮你搞懂循环语句

C语⾔是结构化的程序设计语言,这里的结构指的是顺序结构、分支结构、循环结构。

我们今天要讲的是循环语句while、for、do while。

目录

1.while循环语句

1.1 while 和 if的对比

1.1.1语法结构

1.1.2实例   

   

1.2 while的语法的执行流程

1.3 while循环的实践

 1.4 while和break在while语句中

1.4.1 break 在while语句中

1.4.2 while在while语句中

1.5 while语句的练习

2.for循环语句

2.1 for循环的语法形式

 2.2 for循环的执行流程

2.3 for循环实践

2.4 break和continue在for循环中

2.4.1 break在for循环中

2.4.2 continue在for循环中

2.5 for语句的循环控制变量

2.6 for 循环的变种

 2.7 一道笔试题

3.do while语句

3.1 do while的语法结构

 3.2 do while的执行流程

3.3 do while实践

3.4 do while练习


1.while循环语句

1.1 while 和 if的对比

1.1.1语法结构

if(表达式)
    语句;

while(表达式)
    语句;//如果循环体有多个语句,要有程序块{}括起来

 while表达式为真,循环执行对应语句,直到不满足限制条件

1.1.2实例   

#include <stdio.h>
int main()
{
    if(1)
        printf("hehe\n");
    //if表达式为真,结果:hehe
    return 0;
}

   

#include <stdio.h>
int main()
{
    while(1)
        printf("hehe\n");
    //while表达式为真,结果为无限循环打印hehe
    return 0;
}

1.2 while的语法的执行流程

while语句,

1.进入判断表达式,判断为真,进入循环。

2.执行语句,1通过continue进入新的一轮循环,2执行完while剩下的语句后进入新的一轮循环,3通过break可以跳出循环

3.如果判断表达式为真,进入循环,为假,跳出循环

1.3 while循环的实践

题目:在屏幕上打印1~10的值

#include <stdio.h>
int main()
{
    int i = 1;
    while(i<=10)
    {
        printf("%d\n",i);
        //每次打印完之后,i自己加上1。
        i = i + 1; 
    }
    return 0;
}

 每次打印完,i就会加1,直到 i =11的时候就会跳出循环

 


 1.4 while和break在while语句中

 while循环中,

break用于永久终止循环

continue跳过本次循环后面的代码,直接去判断部分,进行下一次的判断

1.4.1 break 在while语句中

看下面代码的运行结果?

int main()
{
    int i = 1;
    while(i<=10)
    {
        i++;
        if(5==i)
            break;
        
        printf("%d ",i);
    }
    return 0;
}

 i=1进入循环,i++就是 i=i+1 , i = 2 , 打印2

i=2进入循环,i++ , i=3,打印3

i=3进入循环,i++ , i=4,打印4

i=4进入循环,i++ , i=5,break直接跳出循环,结束。

 


1.4.2 while在while语句中

看这个代码的结果是什么:

int main()
{
    int i = 1;
    while(i<=10)
    {
        i++;
        if(5==i)
            continue;
        
        printf("%d ",i);
    }
    return 0;
}

 i=1进入循环,i++就是 i=i+1 , i = 2 , 打印2

i=2进入循环,i++ , i=3,打印3

i=3进入循环,i++ , i=4,打印4

i=4进入循环,i++ , i=5,continue跳过本次循环,判断为真,再次进入循环

i=5进入循环,i++ , i=6,打印6

i=6进入循环,i++ , i=7,打印7

i=7进入循环,i++ , i=8,打印8

i=8进入循环,i++ , i=9,打印9

i=9进入循环,i++ , i=10,打印10

i=10进入循环,i++ , i=11,打印11

i=11,表达式判断为假跳出循环。

int main()
{
    int i = 1;
    while(i<=10)
    {
        if(5==i)
            continue;
        
        printf("%d ",i);
        i++;
    }
    return 0;
}

当 i=5时,continue跳过后面的代码,进入新的一轮循环

又遇到continue,跳过后面的代码,进入新的一轮循环

所以就死循环了

 


1.5 while语句的练习

题目:输入一个正的整数,逆序打印这个整数的每一位

例如:

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

输入:521,输出:1 2 5    

解题思路:想要一位一位地打印,只要把该整数的每一位提取出来就可以了,

  • 1234提取4,1234 % 10 = 4 ,
  • 123提取3,123 % 10 = 3,
  • 12提取2,12 % 10 = 2,
  • 1提取1,1 % 10 = 1;
  • 然后我们的问题转换成了,怎么提取123,12,12,其实简单,只要把1234 / 10 =123, 123 / 10 =12, 12 / 10 =1;

 我们来看实现代码:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    while(n)
    {
        printf("%d ",n%10);
        //下面等同于n=n/10;
        n /= 10;
    }
    return 0;
}

 


2.for循环语句

2.1 for循环的语法形式

for循环的语法形式:

for(表达式1;表达式2;表达式3)
    语句;//如果循环体有多个语句,要有程序块{}括起来

表达式1 用于循环变量的初始化

表达式2 用于循环结束条件的判断

表达式3 用于循环变量的调整

表达式表达式之间用来隔开


 2.2 for循环的执行流程

表达式1 初始化

表达式2 判断,判断决定进入循环与否

表达式3 改变变量的值


2.3 for循环实践

题目:打印1~10的值

#include <stdio.h>
int main()
{
    int i = 1;
    for(i=1;i<=10;i++)
    {
        printf("%d ",i);
    }
    return 0;
}

 我们来对比一下 for 循环和 while 循环

for循环

1.初始化 i=0 ;

2.改变循环变量的值,i++ 来代替了  i = i + 1;

不变的是:

判断条件的存在: i<=10

#include <stdio.h>
int main()
{
    int i = 0;
    while(i<=10)
    {
        printf("%d\n",i);
        //每次打印完之后,i自己加上1。
        i = i + 1; 
    }
    return 0;
}

2.4 break和continue在for循环中

2.4.1 break在for循环中

break在for循环中,会直接跳出循环体

#include<stdio.h>
int main()
{
    int i=0;
    for(i =1; i<=10;i++)
    {
        if(i==5)
            break;
        
        printf("%d ",i);
    }
    return 0;

}

 当 i=5 的时候,break直接跳出循环就只打印1 2 3 4.

 


2.4.2 continue在for循环中

下面的结果是什么?

#include<stdio.h>
int main()
{
    int i=0;
    for(i =1; i<=10;i++)
    {
        if(i==5)
            continue;
        
        printf("%d ",i);
    }
    return 0;

}

 continue的作用就是跳过本次循环后面的代码,继续进入新的循环

根据for的执行流程,continue会跳过后面的printf("%d ",i),进入表达式3,对 循环变量 i 的值进行改变,然后进入表达式2判断,最后这次进入循环体。

 

总结:continue跳过本次循环,break永久跳出循环。 

2.5 for语句的循环控制变量

建议:

1.不可在for循环体内修改循环变量,防止for循环失去控制

#include<stdio.h>
int main()
{
    int i=0;
    for(i =1; i<=10;i++)
    {           
        printf("%d ",i);
        
        i = 12;
    }
    return 0;

}

 

     


2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法

int i = 0;
//前闭后开的写法
for(i=0;i<10;i++)
{}

//两边都是闭区间
for(i=0;i<=9;i++)
{}

 看下面的例子,我们看到 i<10,10为arr数组的元素个数,如果改成i<=9,9是没有任何意义的。

    int main()
    {
        int arr[10] = {1,2,3,4,5,6,7,8,9,10};
        int i=0;
1|      for(i=0;i<10;i++)
        {
            printf("%d ",arr[i])
        }

2|      for(i=0;i<=9;i++)
        {
        printf("%d ",arr[i])
        }

3|      for(i=100;i<=200;i++)
        {
            printf();
        }
        return 0;

    }

而3|循环中我们用闭区间,我们发现无论是闭区间还是开区间,其实是为了将限制条件更好地理解,哪个有意义我们就选择哪个。

2.6 for 循环的变种

 for循环中的初始化有些情况可以省略,比如:前面有 i 的初始化
int main()
{
    int i = 0;
    for(i=0;i<10;i++)
    {
        printf("hehe\n");
    }
    return 0;
}
int main()
{
    int i = 0;
    for(;i<10;i++)
    {
        printf("hehe\n");
    }
    return 0;
}

for循环中,一些情况,初始化是不能省略的,比如:下面关于变量是 j 的循环需要进行三次,必须要重新初始化才能再打印3次hehe。

int main()
{
    int i = 0;
    int j = 0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("hehe\n");
        }
    }
    return 0;
}

 

int main()
{
    int i = 0;
    int j = 0;
    for(;i<3;i++)
    {
        for(;j<3;j++)
        {
            printf("hehe\n");
        }
    }
}

C99标准才能支持的写法 :将 i 的定义写在for循环中(MSVC编译器是不支持的)

int main()
{
    for(int i=0;i<10;i++)
    {
        printf("hehe\n");
    }
    return 0;
}

 使用多余的一个变量来控制循环 

int main()
{
    int x,y;
    for(x=0,y=0;x<2 && y<5;++x,y++)
    {
        printf("hehe\n");
    }
    return 0;
}

 2.7 一道笔试题

请问循环多少次

#include<stdio.h>
int main()
{
    int i = 0;
    int k = 0;
    for(i=0,k=0;k=0;i++,k++)
        k++;
             
    return 0;
}

答案:循环0次,因为表达式2的 = 并不是判断,而是赋值,k=0是判断为假,不进入循环。

  • 在C语言中,0表示假,非零表示真。

3.do while语句

3.1 do while的语法结构

do
    循环语句;//语句多的时候我们要用程序块{}将语句括起来
while(表达式);

 3.2 do while的执行流程

与whlie不同的是:条件表达式在循环体之后,我们无论循环变量符不符合条件,我们都会先进入循环。

3.3 do while实践

题目:打印1~10的值

#include <stdio.h>
int main()
{
    int i = 1;
   do
    {
        printf("%d ",i);
        i = i + 1;
    }while(i<=10);

    return 0;
}

3.4 do while练习

下面代码的打印结果是什么呢?

#include<stdio.h>
 int main()
{
    int i = 1;
    do
    {
        i++;
        if(i==5)
            continue;

        printf("%d ",i);
    }while(i<=10);

    return 0;

}

 i=1进入循环,i++就是i=i+1,i=2,轮个打印,当 i=5 的时候,continue跳过下面的打印,进入下一次的循环,然后 i=6,7,8,9,10,11. 11打印完后进行判断才不成立,跳出循环。


下面这个代码的打印结果为多少呢? 

#include<stdio.h>
 int main()
{
    int i = 1;
    do
    {
        if(i==5)
            continue;

        printf("%d ",i);
        i++;
    }while(i<=10);

    return 0;

}

 i=1进循环,打印 1,然后再加1.

i=2进循环,打印 2,然后再加1.

i=3进循环,打印 3,然后再加1.

i=4进循环,打印 4,然后再加1.

i=5进循环,continue跳出循环

i=5进循环,continue跳出循环

i=5进循环,continue跳出循环

所以结果为1 2 3 4 (死循环)

 

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猪巴戒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值