新手必看!C语言循环语句宝宝级讲解,看完直接懂

1. 循环语句

宝宝们在学循环语句之前我们首先要搞明白什么是循环语句。 首先循环语句是用于重复执行某条语句(循环体)的语句,它包含三个部分:

  • 初始化部分

  • 判断部分

  • 调整循环部分

举个例子:

只要宝宝们坚持找对象或者直接选择相亲最终都会结婚,图片中的黑线就是我们一直循环的部分,红线蓝线就是终止循环的条件。一个完整的循环语句不仅要有循环判断条件表达式,还要有循环语句。

2. 三种循环语句

宝宝们在C语言中提供了3中循环语句,分别为for语句、while语句、do while语句,下面我就来一一讲解这三种语句。

2.1 for循环

宝宝们for循环是三种循环中使用最多的

2.1.1 for循环的语法和用法
for(表达式1; 表达式2; 表达式3)//这里面的表达式1,2,3都可以不写,表达式2不写默认为1(真),但是';'要写
                           //for( ; ; ) 等价于 for( ; 1; )
                           //表达式2一直为真循环将会是死循环
     循环语句;//如果循环体想包含更多的语句,可以加上大括号
 表达式1:准备工作,循环变量的初始化,可以提前做,在循环前面初始化,只执行一次
 表达式2:循环的心脏,决定继续还是退出,循环结构条件的判断
 表达式3:收尾工作,循环变量的调整
 ​
 执行:表达式1:初始化 --> 表达式2:判断 --> 语句(表达式2为真) | 结束(表达式2为假) --> 表达式3:调整(表达式2为真的情况下)

下面使用for循环来打印1-10的数字,代码如下:

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

宝宝们也能这样写:

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

宝宝们也可以用多个变量来控制for循环,例如:

 #include <stdio.h>
 ​
 int main()
 {
     int i = 0;
     int j = 0;
     
     for (i = 1, j = 1; i < 2 && j < 5; ++i, j++)
     //可能这样写:
     //for (int i = 1, j = 1; i < 2 && j < 5; ++i, j++)
         printf("嘻嘻\n小宝\n");
     
     
     return 0;
 }

2.2 while循环

宝宝们while循环是三种循环中使用第二多的

2.2.1 while循环的语法和用法
 while(表达式)
     循环语句;//表达式为真时才进入,如果循环体想包含更多的语句,可以加上大括号

下面使用while循环来打印1-10的数字,代码如下:

 #include <stdio.h>
 ​
 int main()
 {
     int i = 1;
     while (i <= 10)
         printf("%d ", i++);
     
     return 0;
 }
2.2.1 while循环与if语句的对比

if语句和while语句的语法:

 // if 语句
 if (条件) 
     执行体;//条件为真,执行一次,然后继续往下走
 ​
 // while 循环
 while (条件) 
     执行体;//条件为真,执行完回头再判断,反复执行

对比if语句和while语句:

对比维度if 语句while 循环
本质条件判断条件循环
执行次数最多 1 次0 到 N 次
条件为真执行一次后继续下面的代码反复执行直到为假
条件为假跳过执行体直接退出循环
死循环风险有(条件永远为真)
2.2.2 while循环与for循环的对比
对比维度for 循环while 循环
本质计数/迭代循环条件驱动循环
适用场景已知循环次数未知循环次数
初始化位置在循环头部在循环外部
结构紧凑性高(三要素集中一起)低(分散在各处)
可读性强(一眼看出次数)一般(需找条件)
语义执行n只要满足条件就执行

执行:宝宝们用while循环能实现的代码用for循环也能实现

2.3 do while循环

do while循环是三种循环中使用最少的,基本不用的宝宝们

2.3.1 do while循环的语法和用法
 do 
 {
     循环语句;//宝宝们该循环语句至少被执行一次
 } while (表达式);

下面使用do while循环来打印1-10的数字,代码如下:

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

3. 循环中的break语句和continue语句

3.1 break语句

break语句:立即终止当前循环,执行循环后面的代码。就如同猴子吃桃子这个行为一直循环,break就像是一个毒桃子,猴子吃到这个break的桃子,寄了,那猴子吃桃子这个行为的循环就直接停止了

基本用法:

 #include <stdio.h>
 ​
 int main()
 {
     for (int i = 1; i <= 10; i++)
     {
         if (i == 5)//i == 5 时立即退出循环
             break;
        printf("%d ", i);
     }
     //输出:1 2 3 4 循环结束
     //i == 5 时break后面的 6 7 8 9 10 不会执行
     
     
     return 0;
 }

宝宝们在while循环中用法是一样的

#include <stdio.h>

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

3.2 continue语句

continue语句:跳过本次循环剩余代码,直接进入下一次循环。也像是猴子吃桃子这个行为一直循环,continue是个坏桃子,猴子吃到这个continue的桃子,发现是个坏桃子,就不吃这个桃子了,继续吃后面的桃子

3.2.1 for循环中:

基本用法:continuefor循环中是跳过本次循环的剩余代码,跳转到表达式3(这里的表达式3是i++)
正确写法:

 #include <stdio.h>
 ​
 int main()
 {
     for (int i = 1; i <= 10; i++)
     {
         if (i == 5)
             continue;
         printf("%d ", i);
         //写到下面没有效果,因为在这一次循环中下面已经没有代码了
         //if (i == 5)
         //    continue;
     }
     //输出:1 2 3 4 6 7 8 9 10,i == 5的时候跳过下面的代码,直接进入下一次循环
     
     return 0;
 }

死循环写法:

 #include <stdio.h>
 ​
 int main()
 {
     for (int i = 1; i <= 10; )
     {
         if (i == 5)
             continue;
         printf("%d ", i++);
     }
     //输出:1 2 3 4,循环没有结束,这是一个死循环,一直卡在 i == 5 的时候
     
     return 0;
 }
3.2.1 在whlie循环中:

基本用法:continuewhile循环中是跳过本次循环的剩余代码,跳转条件判断 正确写法:

 #include <stdio.h>
 ​
 int main()
 {
     int i = 1;
     while (i <= 10)
     {
         if (i == 5)
         {
             i++;//宝宝们这个必须要写在continue之前,防止i一直卡在5
             continue;
         }
         printf("%d ", i++);
     }
     //输出:1 2 3 4 6 7 8 9 10
     
     return 0;
 }

死循环:

 #include <stdio.h>
 ​
 int main()
 {
     int i = 1;
     while (i <= 10)
     {
         if (i == 5)
             continue;
         printf("%d ", i++);
     }
     //宝宝们这样写会一直卡在i == 5的时候
     
     return 0;
 }

4. 循环的嵌套

宝宝们我们之前学习了三种循环for,while,do while,这三种循环往往会嵌套在一起才能更好的解决问题,下面我们用两个简单的例子来了解一下循环嵌套

例子1:打印99乘法表

 #include <stdio.h>
 ​
 int main()
 {
     for (int i = 1; i <= 9; i++)//生成第一个乘数
     {
         for (int j = 1; j <= i; j++)//生成第二个乘数
         {
             printf("%d*%d=%d ", j, i, i * j);
         }
         printf("\n");//换行
     }
     
     return 0;
 }

例子2:打印100-200之间的所有质数(注:质数是只能被1和自己整除的数字) 解法1:

 #include <stdio.h>
 ​
 int main()
 {
     for (int i = 100; i <= 200; i++)//生成100-200之间的数字
     {
         int flag = 1;//计数器
         for (int j = 2; j <= i - 1; j++)//排除1和自己本身
         {
             if (i % j == 0)//不是质数
             {
                 flag = 0;
                 break;
             }
         }
         if (flag == 1)//如果是质数
             printf("%d ", i);//输出
     }
     
     return 0;
 }

解法2:

当然有很多细心的宝宝发现了这第二种解法,这种解法运行速率更快

 #include <stdio.h>
 ​
 int main()
 {
    //因为在100-200之间的偶数不可能是质数,所以直接不生成100-200之间的偶数
     for (int i = 101; i <= 200; i += 2)
     {
         int flag = 1;//计数器
         
         //如果i = j_1*j_2,那么j_1和j_2中至少要一个数字<=根号i
         for (int j = 2; j * j <= i; j++)
         {
             if (i % j == 0)//不是质数
             {
                 flag = 0;
                 break;
             }
         }
         if (flag == 1)
             printf("%d ", i);//输出
     }
     
     return 0;
 }

5. 总结

宝宝们让我们来总结一下:

5.1 三种循环语句的优先级:for > while > do while(一般不用)
5.2 三种循环的结构:
 1. for:
 for(表达式1; 表达式2; 表达式3)
     循环体;
     
 2. while
 while(表达式)
     循环体;
     
 3. do while
 do
 {
     循环语句;//宝宝们该循环语句至少被执行一次
 } while (表达式);
5.3 循环中的breakcontinue语句
  1. break语句:立即终止当前循环,执行循环后面的代码。

  2. continue语句:跳过本次循环剩余代码,直接进入下一次循环。

5.4 循环的嵌套

for,while,do while宝宝这三种循环往往会嵌套在一起才能更好的解决问题

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值