目录
循环结构
循环定义
当型循环的实现
直到型循环的实现
循环的嵌套
循环的应用场景
基础算法模型
break与continue
循环结构
什么是循环结构
代码在满足某种条件的前提下,重复执行,就叫循环结构
循环的分类
无限循环:其实就是死循环,程序设计中要谨慎使用。
有限循环:循环限定蓄奴按次数(for)或者终止循环的条件(while、do...while)。
循环的构成
循环条件:如果循环数或者循环的出口。
循环体:需要重复执行的代码(也就是 { } 包裹的内容)
当型循环的实现
特点:先判断,后执行,如果条件不满足,循环体一次都不执行
代表;while、for
while循环
语法:
cpp
[1] 循环变量
while ([2] 循环条件)
{
[3] 循环语句;
[4]更新循环变量;
}
/注意:如果循环语句是单语句,可以省略{}
while(循环条件) 循环单语句;
while(循环条件)
循环单语句;
/注意:有些特殊场景下,循环体语句柔和到了循环条件,所以省略掉循环体
while(循环条件);
/int i = 1; while(i++ <= 5); printf("%d\n",i);
说明:
1.循环条件的返回值必须是逻辑值(使用 非0 表示真,使用 0 表示假,C语言底层使 用 1 表示真)C99版本引入了一个 stdbool.h ,可以使用true或者false来表示真假,这里的true和false实际上就是定义的两个符号常量,true的值是1,false的值0。
- {} 包起来的内容整体称之为循环体。
- 我们要在循环体中控制循环条件的变化,也可以在循环条件中控制循环条件的变化、否则产生死循环
执行过程:

特点:先判断,后执行,循环体语句有可能一次都不执行。
案例
需求:求1~100的累加和(例如:1+2+3+4+..+100)
分析:
创建一个变量sum = 0,用来接收累加和
创建一个循环变量i,用来表示计算数,给一个默认值1,每次循环的时候 i++
在循环中,使用 sum += i(sum = sum + i),完成累加和运算
同时我们要限定循环的条件,也就是i的范围:i <= 100
第1次:sum += i = 0 + 1 = 1
第2次:sum += i = 1 + 2 = 3
第3次:sum += i = 3 + 3 = 6
......
代码:
cpp
#include<stdio.h>
//累加和
int main()
{
int sum = 0,i = 0;
while(i <=100)
{
sum += i;
i++;
}
printf("1-100 的累加和为:%d",sum);
return 0;
}
运行结果:

案例
需求:求1~100以内的偶数和
分析:
创建一个变量sum = 0,用来存储累加的偶数和
创建一个循环变量i = 2,存储参与运算的自然数(最小的偶数是2)
创建一个循环,设置循环条件 i <= 100
在循环体内,需要用一个if校验i是否是偶数,如果满足条件,就实现偶数和的计算:sum += i
在循环体的最后一行,需要更新循环变量,作用是逐渐逼近循环的出口
循环结束后,才能输出sum。
代码:
cpp
#include <stdio.h>
int main()
{
int sum = 0;
int i = 0;
while(i <= 100)
{
if(i % 2 == 0)
{
sum += i;
}
i++;
}
printf("1-100的偶数和为:%d",sum);
return 0;
运行结果:
案例:
需求:通过键盘录入一个整数,判断这个整数是否是水仙花数。
分析:
拆分一个n位的数,比如拆分为如:个位、十位、百位...
要求这个n位数的每一位的n次幂相加等于这个数本身:
比如一个三位数:
个位的3次幂 + 十位的3次幂 + 百位的3次幂 = 这个数本身
代码:
cpp
#include <stdio.h>
#include <math.h>
//什么是水仙花数
int main()
{
//定义一个数
int num ,i = 0 , sum, narcissus,digit;
while(1)
{
//控制台输入
printf("输入一个数:");
while(1)
{
if(scanf("%d",&num) == 1)
break;
else
printf("错误,重新输入!\n");
//清除缓存
while(getchar() == '\n');
}
narcissus = num;
//计算位数
while(num != 0)
{
num /= 10;
i++;
}
//恢复原值
num = narcissus;
//计算位数的次方和
while( num != 0)
{
digit = num % 10;
sum += pow(digit,i);
// 将需要拆除的位保留在个位
num /= 10;
}
if(sum == narcissus)
printf("%d是水仙花数\n",narcissus);
else
printf("%d不是水仙花数\n",narcissus);
}
return 0;
}
运行结果:

while特殊写法:
while(1)//死循环
直到型循环
特点: 先执行、后判断,不管条件是否满足,至少执行一次。
代表:do...while
do ... while 循环
语法:
cpp
[1]循环变量;
do
{
[2]循环体语句;
[3] 更新循环变量;
}while([4]循环条件);
说明:
①循环条件的返回值必须是逻辑值(0和非0(计算机返回1))
②{ }包括起来的内容称之为循环体
③ 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。
执行过程:

**特点:**先执行,后判断、不管条件是否满足、循环体语句至少执行一次。
案例:
需求:求1~100 以内的偶数和
分析:
创建一个变量,用来存储偶数和sum = 0
创建一个循环变量,i = 2
创建一个do..while循环,在循环体中,校验 i % 2 == 0,如果满足,就实现偶数和计算 sum += i
计算完成,在do..while循环体的末行,更新循环变量,使其逼近出口
限制性循环的出口:i <= 100 (i > 100 ,循环结束)
循环结束,打印输出sum的值
代码:
cpp
#include<stdio.h>
//do ... while() 实现偶数和
int main()
{
//定义一个变量,进行存储
int i = 0,sum = 0;
//循环体进求偶数和
do
{
//先执行,再循环
//就是先执行if,在执行while(i<100)
if(i % 2 == 0)
{
sum += i;
}
i++;
}while(i <= 100);
printf("1-100的偶数和为:%d",sum);
return 0;
}
案例
需求:用C语言编写简单猜数字游戏代码。游戏规则是程序随机生成一个1到100之间
的数字,玩家通过输入猜测数字,程序会提示猜测是太大还是太小,直到玩家猜中为
止。
代码:
cpp
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
//创建一个number(随机数),guess(用户猜测的数字),count(计数)
int number,guess,count = 0;
//设计随机数种子
srand(time(NULL));
//生成随机数1-100之间的随机数
number = rand() % 10 + 1;
//开始猜测
do{
printf("请输入你猜测的数字:");
while(1)
{
if(scanf("%d",&guess) == 1)
break;
else
printf("输入错误,请重新输入!");
while(getchar() != '\n');
}
count++;
if(number > guess)
{
printf("你猜测的数字小了!\n");
}
else if(number < guess)
{
printf("你猜测的数字大了!\n");
}
else
{
printf("猜测正确,恭喜恭喜!\n");
printf("你一共猜测了%d次",count);
}
}while(guess != number);
return 0;
}
运行结果:
