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循环中:
基本用法:continue在for循环中是跳过本次循环的剩余代码,跳转到表达式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循环中:
基本用法:continue在while循环中是跳过本次循环的剩余代码,跳转条件判断 正确写法:
#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 循环中的break和continue语句
-
break语句:立即终止当前循环,执行循环后面的代码。 -
continue语句:跳过本次循环剩余代码,直接进入下一次循环。
5.4 循环的嵌套
for,while,do while宝宝这三种循环往往会嵌套在一起才能更好的解决问题

603

被折叠的 条评论
为什么被折叠?



