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

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

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 (死循环)



目录
相关文章
|
7月前
|
C语言
(保姆级)一篇搞懂分支语句
(保姆级)一篇搞懂分支语句
117 6
|
2月前
保姆级讲解字符串函数(上篇)
保姆级讲解字符串函数(上篇)
18 1
|
2月前
保姆级讲解字符串函数(下篇)
保姆级讲解字符串函数(下篇)
15 0
|
存储 缓存 C语言
初级C语言之【循环语句】(保姆级教程)(一)
初级C语言之【循环语句】(保姆级教程)(一)
130 0
|
C语言
初级C语言之【循环语句】(保姆级教程)(二)
初级C语言之【循环语句】(保姆级教程)(二)
207 0
|
C语言
分支语句和循环语句(超详细保姆级,适合初学者)上
分支语句和循环语句(超详细保姆级,适合初学者)
81 0
分支语句和循环语句(超详细保姆级,适合初学者)下
分支语句和循环语句(超详细保姆级,适合初学者)
58 0
|
存储 算法 编译器
抽丝剥茧C语言(中阶)分支与循环练习
抽丝剥茧C语言(中阶)分支与循环练习
|
存储 算法 编译器
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
134 0
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(2)
|
存储 缓存 安全
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)
185 0
【C语言深度剖析】— 史上最全关键字(爆肝半个月、数万字详解、考试必备)(1)