🔄 C语言循环结构综合应用篇(详细案例讲解)
🧠 一、为什么要做循环综合练习?
循环是C语言最重要的逻辑结构之一。
不管你是在做"九九乘法表"、求平均成绩,还是在物联网项目中采集传感器数据、控制设备动作------
循环都是必不可少的"自动执行器"。
今天,我们通过五个详细案例,让循环逻辑真正"活"起来。
🌟 案例1:右上三角九九乘法表
📋 案例说明
常见的九九表是左下三角,但有时我们希望排成右上格式,让数据更直观。
这就要掌握双层循环 + 控制列数的技巧。
✅ 完整代码
c
#include <stdio.h>
int main() {
printf("=== 右上三角九九乘法表 ===\n");
for (int i = 1; i <= 9; i++) {
for (int j = i; j <= 9; j++) {
printf("%d×%d=%-2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
🧩 运行结果(节选)
1×1=1 1×2=2 1×3=3 ... 1×9=9
2×2=4 2×3=6 ... 2×9=18
...
9×9=81
💬 思路解析
- 外层循环控制"行"(从1到9)
- 内层循环控制"列",从
i开始 %-2d表示左对齐,占2个字符宽度,表格整齐\n控制换行
📌 技能点总结:
- 双重循环嵌套
- 内外层变量配合输出
- 格式化输出排版技巧
🌟 案例2:累加与累乘对比
📋 案例说明
输入一个整数 n,计算:
- 1~n 的累加和(sum)
- 1~n 的累乘积(product)
✅ 完整代码
c
#include <stdio.h>
int main() {
int n;
long long sum = 0, product = 1; // 注意类型
printf("请输入一个正整数n:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
sum += i;
product *= i;
printf("第%d次:sum=%lld, product=%lld\n", i, sum, product);
}
printf("最终结果:\n");
printf("1~%d的和 = %lld\n", n, sum);
printf("1~%d的积 = %lld\n", n, product);
return 0;
}
🧩 运行示例
请输入一个正整数n:5
第1次:sum=1, product=1
第2次:sum=3, product=2
第3次:sum=6, product=6
第4次:sum=10, product=24
第5次:sum=15, product=120
最终结果:
1~5的和 = 15
1~5的积 = 120
💬 思路解析
sum += i表示"每次加上 i"product *= i表示"每次乘以 i"- 循环执行 n 次后,得到结果
long long防止整数溢出
📌 技能点总结:
- 累加与累乘的区别
- 变量类型选择(防溢出)
- 循环中的动态输出观察过程
🌟 案例3:斐波那契数列(Fibonacci)
📋 案例说明
数学定义:
F₁=1,F₂=1,Fₙ=Fₙ₋₁+Fₙ₋₂
这是经典的循环生成型问题。
✅ 完整代码
c
#include <stdio.h>
int main() {
int n;
printf("请输入项数n:");
scanf("%d", &n);
int a = 1, b = 1, c;
printf("前%d项斐波那契数列为:\n", n);
printf("%d %d ", a, b);
for (int i = 3; i <= n; i++) {
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
printf("\n");
return 0;
}
🧩 运行结果(n=10)
前10项斐波那契数列为:
1 1 2 3 5 8 13 21 34 55
💬 思路解析
a和b保存前两项- 每次循环生成新项
c = a + b - 滚动更新:
a=b,b=c - 初始两项单独打印
📌 技能点总结:
- 序列递推模型
- 循环变量滚动更新
- for循环的逻辑积累思维
🌟 案例4:猜数字游戏(while + break)
📋 案例说明
- 系统随机生成一个1~100的数字
- 用户不断输入猜测
- 程序提示"太大"或"太小",直到猜中
✅ 完整代码
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(0)); // 随机种子
int target = rand() % 100 + 1;
int guess, count = 0;
printf("🎮 猜数字游戏开始!(范围1~100)\n");
while (1) {
printf("请输入你的猜测:");
scanf("%d", &guess);
count++;
if (guess == target) {
printf("✅ 恭喜你猜对了!共用了%d次。\n", count);
break;
} else if (guess > target) {
printf("太大了!\n");
} else {
printf("太小了!\n");
}
}
printf("游戏结束,答案是:%d\n", target);
return 0;
}
🧩 示例输出
🎮 猜数字游戏开始!(范围1~100)
请输入你的猜测:50
太大了!
请输入你的猜测:30
太小了!
请输入你的猜测:40
✅ 恭喜你猜对了!共用了3次。
游戏结束,答案是:40
💬 思路解析
- 无限循环
while(1) - 用
break结束游戏 rand() % 100 + 1生成随机数srand(time(0))保证每次不同
📌 技能点总结:
- 循环 + 条件判断 + 随机函数综合应用
- 实用项目模型(如传感器阈值检测)
🌟 案例5:传感器采样模拟(do-while + continue)
📋 案例说明
模拟物联网设备采样:
连续输入传感器值,过滤掉异常(负数)数据,输入 -1 时结束并计算平均值。
✅ 完整代码
c
#include <stdio.h>
int main() {
float data, sum = 0;
int count = 0;
do {
printf("请输入第%d次采样值(输入-1结束):", count + 1);
scanf("%f", &data);
if (data < 0 && data != -1) {
printf("⚠️ 无效数据(负值),跳过!\n");
continue;
}
if (data != -1) {
sum += data;
count++;
}
} while (data != -1);
if (count > 0)
printf("有效采样%d次,平均值:%.2f\n", count, sum / count);
else
printf("未采集到有效数据。\n");
return 0;
}
🧩 运行示例
请输入第1次采样值(输入-1结束):10
请输入第2次采样值(输入-1结束):-5
⚠️ 无效数据(负值),跳过!
请输入第3次采样值(输入-1结束):20
请输入第4次采样值(输入-1结束):-1
有效采样2次,平均值:15.00
💬 思路解析
do-while保证至少执行一次- 负数检测与过滤
continue - 平均值计算需计数器
count - 典型IoT循环采样模型
🧮 六、循环结构一览表
| 类型 | 判断位置 | 是否至少执行一次 | 适用场景 |
|---|---|---|---|
| for | 先判断 | 否 | 次数已知 |
| while | 先判断 | 否 | 条件驱动 |
| do-while | 后判断 | ✅ 是 | 至少执行一次的任务 |
📌 口诀:
for管次数,while管条件,do-while至少执行一次。
✅ 七、小结
你现在已经学会:
- 多层循环(如九九乘法表)
- 动态数据处理与输入控制
- 随机数与条件判断结合
- break 与 continue 的灵活使用
- 实战模拟 IoT 场景
🎯 循环掌握得好,自动化思维就有了!
🔜 下一篇预告
📘 C语言数组入门篇------一次存多个数据!
- 数组定义与初始化
- for循环遍历数组
- 成绩统计与平均计算
- 数组最大值与最小值