1.循环输出
2.求和计数
3.循环嵌套(图形输出)
4.嵌套循环(应用)
5.while循环
6.短除
7.循环综合应用
登录以参加训练计划
C++ 循环结构详解 - CSP-J 核心知识点
面向10-14岁学生,结合CSP-J考纲整理的循环结构知识点
目录
- for循环基础输出
- for循环求和与计数
- 循环嵌套(二维图形输出)
- 嵌套循环应用
- while循环详解
- 短除法应用
- 循环综合应用
1. for循环基础输出
for循环结构
for(初始化; 条件; 更新) {
// 循环体
}
基础输出示例
#include <iostream>
using namespace std;
int main() {
// 输出1到10
for(int i = 1; i <= 10; i++) {
cout << i << " ";
}
// 输出:1 2 3 4 5 6 7 8 9 10
cout << endl;
// 输出10个星号
for(int i = 0; i < 10; i++) {
cout << "*";
}
// 输出:**********
return 0;
}
for循环三要素表
部分 | 作用 | 示例 |
---|---|---|
初始化 | 设置循环变量初值 | int i = 1 |
条件 | 控制循环何时继续 | i <= 10 |
更新 | 每次循环后的操作 | i++ |
2. for循环求和与计数
求和与计数原理
#include <iostream>
using namespace std;
int main() {
// 求1-100的和
int sum = 0;
for(int i = 1; i <= 100; i++) {
sum += i; // 累加
}
cout << "1+2+...+100 = " << sum << endl;
// 统计1-100中3的倍数个数
int count = 0;
for(int i = 1; i <= 100; i++) {
if(i % 3 == 0) {
count++; // 计数
}
}
cout << "1-100中3的倍数有:" << count << "个";
return 0;
}
应用场景
- 求和:计算数列总和
- 计数:统计满足条件的元素个数
- 累乘:计算阶乘(n! = 1×2×3×...×n)
- 求平均值:先求和再除以个数
3. 循环嵌套(二维图形输出)
嵌套循环原理
外层循环控制行数,内层循环控制每行的内容
输出矩形
#include <iostream>
using namespace std;
int main() {
int rows = 5, cols = 8;
for(int i = 0; i < rows; i++) { // 控制行数
for(int j = 0; j < cols; j++) { // 控制列数
cout << "* ";
}
cout << endl; // 每行结束换行
}
return 0;
}
输出直角三角形
#include <iostream>
using namespace std;
int main() {
int n = 5;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
return 0;
}
输出数字金字塔
#include <iostream>
using namespace std;
int main() {
int n = 5;
for(int i = 1; i <= n; i++) {
// 输出空格
for(int j = 1; j <= n - i; j++) {
cout << " ";
}
// 输出数字
for(int k = 1; k <= 2*i-1; k++) {
cout << i << " ";
}
cout << endl;
}
return 0;
}
4. 嵌套循环应用
乘法口诀表
#include <iostream>
#include <iomanip> // 用于格式化输出
using namespace std;
int main() {
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
cout << j << "×" << i << "=" << setw(2) << i*j << " ";
// setw(2) 设置输出宽度为2
}
cout << endl;
}
return 0;
}
矩阵运算
#include <iostream>
using namespace std;
int main() {
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 求矩阵所有元素和
int total = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
total += matrix[i][j];
}
}
cout << "矩阵总和: " << total << endl;
// 求对角线元素和
int diagSum = 0;
for(int i = 0; i < 3; i++) {
diagSum += matrix[i][i];
}
cout << "对角线元素和: " << diagSum;
return 0;
}
5. while循环详解
while循环结构
while(条件) {
// 循环体
}
基本应用
#include <iostream>
using namespace std;
int main() {
// 计算数字位数
int num = 12345;
int digits = 0;
int temp = num;
while(temp != 0) {
temp /= 10; // 移除最后一位
digits++; // 位数计数
}
cout << num << "有" << digits << "位数";
return 0;
}
do-while循环
#include <iostream>
using namespace std;
int main() {
// 至少执行一次
int choice;
do {
cout << "1. 开始游戏\n";
cout << "2. 退出游戏\n";
cout << "请选择: ";
cin >> choice;
} while(choice != 1 && choice != 2);
cout << "你选择了: " << choice;
return 0;
}
while vs for 对比表
特性 | while循环 | for循环 |
---|---|---|
适用场景 | 不确定循环次数 | 确定循环次数 |
初始化 | 循环外部 | 循环内部 |
循环变量更新 | 循环体内 | 循环头部 |
可读性 | 条件简单时更清晰 | 循环结构完整 |
6. 短除法应用
短除法原理
短除法是分解质因数的有效方法
质因数分解代码
#include <iostream>
using namespace std;
int main() {
int n;
cout << "输入正整数: ";
cin << n;
cout << n << " = ";
int factor = 2;
while (n > 1) {
if (n % factor == 0) {
cout << factor;
n /= factor;
if (n > 1) cout << "×";
} else {
factor++;
}
}
return 0;
}
应用示例
输入:60
输出:60 = 2×2×3×5
7. 循环综合应用
判断素数
#include <iostream>
#include <cmath> // 使用sqrt函数
using namespace std;
int main() {
int n;
cout << "输入正整数: ";
cin >> n;
bool isPrime = true;
if(n < 2) isPrime = false;
else {
// 优化:只需检查到sqrt(n)
for(int i = 2; i <= sqrt(n); i++) {
if(n % i == 0) {
isPrime = false;
break; // 发现因数立即退出循环
}
}
}
cout << n << (isPrime ? "是素数" : "不是素数");
return 0;
}
斐波那契数列
#include <iostream>
using namespace std;
int main() {
int n;
cout << "输入项数: ";
cin >> n;
long long a = 0, b = 1;
cout << "斐波那契数列前" << n << "项: ";
for(int i = 0; i < n; i++) {
cout << a << " ";
long long next = a + b;
a = b;
b = next;
}
return 0;
}
百钱买百鸡问题
#include <iostream>
using namespace std;
int main() {
cout << "百钱买百鸡方案:\n";
// 公鸡5元/只,母鸡3元/只,小鸡1元/3只
for(int x = 0; x <= 20; x++) { // 公鸡数量
for(int y = 0; y <= 33; y++) { // 母鸡数量
int z = 100 - x - y; // 小鸡数量
if(z % 3 == 0 && 5*x + 3*y + z/3 == 100) {
cout << "公鸡:" << x << " 母鸡:" << y << " 小鸡:" << z << endl;
}
}
}
return 0;
}
循环结构总结表
循环类型 | 适用场景 | 关键技巧 |
---|---|---|
for循环 | 确定循环次数 | 三要素控制 |
while循环 | 不确定循环次数 | 条件控制 |
嵌套循环 | 二维结构问题 | 外层控制行,内层控制列 |
短除法 | 质因数分解 | while+for组合 |
综合应用 | 复杂问题 | 多种循环组合使用 |
学习建议:
- 每天练习2-3个循环题目
- 多画循环流程图
- 注意循环变量初始化
- 避免死循环(确保循环条件最终会变为假)
"循环是编程中的'重复魔法',掌握它就能解决大量重复性问题!"
循环调试技巧
- 添加输出语句:在循环中打印变量值
for(int i=0; i<5; i++) { cout << "i=" << i << endl; // 调试输出 // ...其他代码... }
- 使用调试器:逐步执行观察变量变化
- 边界测试:测试循环开始和结束的值
- 缩小规模:先用小数据测试循环逻辑
循环控制流程图
for循环执行流程
开始
↓
初始化循环变量
↓
检查条件 → 假 → 结束
↓真
执行循环体
↓
更新循环变量
↑______|
while循环执行流程
开始
↓
检查条件 → 假 → 结束
↓真
执行循环体
↑______|
循环嵌套执行流程
外层循环开始
↓
内层循环完整执行一次
↓
外层循环更新
↑______|
短除法流程图
开始
↓
设置除数i=2
↓
当n>1时循环:
├─ 如果n能被i整除:
│ ├─ 输出i
│ ├─ n = n/i
│ └─ 继续检查同一个i
│
├─ 否则:
│ └─ i增加1
│
└─ 重复循环
↓
结束
章节 6. 短除
开放
题目 | 尝试 | AC | 难度 |
---|---|---|---|
841 【入门】数据分析 | 19 | 8 | 7 |
P888 【基础】数值计算 | 16 | 4 | 9 |
555 【基础】“倒”数 | 8 | 5 | 10 |
930 【基础】数的统计 | 14 | 4 | 9 |
P487 【入门】数字之和为13的整数 | 10 | 7 | 9 |
644 【基础】回文数个数 | 4 | 3 | 10 |
P672 【入门】输出满足条件的整数4 | 22 | 12 | 6 |
章节 7. 循环综合应用
开放
题目 | 尝试 | AC | 难度 |
---|---|---|---|
905 【入门】人口增长问题 | 4 | 2 | 10 |
907 【入门】随机体能测试 | 2 | 2 | 10 |
917 【入门】子数整除 | 5 | 2 | 10 |
P491 【入门】将n拆成2个数的和 | 2 | 2 | 10 |
P493 【入门】将n拆成2个数的乘积 | 4 | 2 | 10 |
P497 【入门】计算分数加减表达式的值 | 5 | 2 | 10 |
574 【入门】数列求和 | 4 | 3 | 10 |
P723 【基础】同构数 | 2 | 0 | 10 |
P688 【入门】有哪些闰年 | 0 | 0 | (无) |
P889 【入门】贝贝的选择 | 6 | 2 | 10 |
1212 【基础】质因子 | 0 | 0 | (无) |
P492 【入门】将n拆成3个数的和 | 2 | 0 | 10 |
990 【基础】小青蛙回来了 | 0 | 0 | (无) |
657 【基础】三角形的个数 | 0 | 0 | (无) |
P131 【例22.3】 回文数 | 16 | 3 | 9 |
P231 【入门】求数列的第n项的值是多少? | 0 | 0 | (无) |
696 【入门】四个人的年龄求解 | 0 | 0 | (无) |
762 【入门】队形数量求解 | 0 | 0 | (无) |
778 【入门】需要举办多少场足球赛? | 0 | 0 | (无) |
798 【入门】纸盒的最大体积是多少? | 0 | 0 | (无) |
800 【入门】费马定理 | 0 | 0 | (无) |
804 【入门】门票的定价 | 0 | 0 | (无) |
805 【入门】小兔子的最大活动面积 | 0 | 0 | (无) |
929 【基础】小鱼的航程 | 0 | 0 | (无) |
P496 【基础】骑士的金币 | 0 | 0 | (无) |
- 参加人数
- 20
- 创建人