C++ 枚举算法详细利用与数字分解教学教案
一、代码功能解析
这段 C++ 代码的主要功能是计算并输出所有三位数(从 100 到 999)的各位数字之和。
#include <iostream>
using namespace std;
int main() {for (int i = 100; i <= 999; i++) {int a = i / 100, b = i / 10 % 10, c = i % 10;cout<<a+b+c;}}
代码执行流程:
- 使用 for 循环遍历从 100 到 999 的所有整数
- 对于每个三位数 i,分解出它的百位、十位和个位数字
- 计算这三个数字的和并输出
二、关键知识点讲解
for 循环结构:
cpp
运行
for (初始化; 循环条件; 增量) { 循环体 }
此处循环从 i=100 开始,当 i≤999 时继续执行,每次循环后 i 自增 1
数字分解方法:
- 百位数字 a:
i / 100
(整数除法,自动舍去小数部分) - 十位数字 b:
i / 10 % 10
(先除以 10 去掉个位,再对 10 取余得到十位) - 个位数字 c:
i % 10
(对 10 取余直接得到个位)
- 百位数字 a:
输出语句:
cout<<a+b+c;
输出三个数字的和
三、重点难点分析
重点
- for 循环的语法结构和执行流程
- 整数除法与取余运算在数字分解中的应用
- 三位数的数位分离方法
难点
- 理解整数除法在不同位数数字提取中的作用
- 掌握取余运算的特性及应用场景
- 理解循环变量的变化过程与数字范围的关系
考点
- 循环结构的执行次数计算(999-100+1=900 次)
- 数位分解的算法(如何提取任意位数的各位数字)
- 整数运算的特性(除法自动取整)
- 循环变量的范围控制
四、练习题
填空题(每空 2 分)
- 代码中循环变量 i 的初始值是______,终止条件是______。
- 表达式
i / 100
用于获取三位数 i 的______位数字。 - 表达式
i % 10
用于获取三位数 i 的______位数字。 - 代码中计算十位数字的表达式是______。
- 这段代码总共会执行______次循环体。
选择题(每题 3 分)
对于 i=123,执行
i / 10 % 10
的结果是:
A. 1 B. 2 C. 3 D. 12表达式
456 % 100 / 10
的结果是:
A. 4 B. 5 C. 6 D. 45若要获取四位数 i 的百位数字,正确的表达式是:
A. i / 100 B. i / 100 % 10 C. i % 100 / 10 D. i % 100以下代码中,能正确计算 1-100 所有整数之和的是:
A.int sum=0; for(int i=1;i<100;i++) sum+=i;
B.int sum=0; for(int i=1;i<=100;i++) sum+=i;
C.int sum=0; for(int i=0;i<=100;i++) sum+=i;
D.int sum=0; for(int i=1;i>=100;i++) sum+=i;
对于数字 i=789,代码执行后输出的结果是:
A. 7 B. 8 C. 9 D. 24
编程题(每题 10 分)
编写程序,计算并输出所有三位数中,个位数字是 5 的数的个数。
编写程序,计算 100-999 之间所有能被 3 整除的三位数的和。
编写程序,找出 100-999 之间所有 "水仙花数"(各位数字的立方和等于该数本身的数)。
编写程序,计算并输出所有两位数(10-99)的十位数字与个位数字之差。
编写程序,统计 100-999 之间所有满足 "百位数字大于十位数字,且十位数字大于个位数字" 的三位数的个数。
五、答案及解析
填空题答案
100,i <= 999
解析:循环从 100 开始,到 999 结束,包含 100 和 999 在内百
解析:对于三位数 i,除以 100 的整数结果就是百位数字个
解析:对 10 取余的结果就是该数的个位数字i / 10 % 10
解析:先除以 10 去掉个位,再对 10 取余得到十位数字900
解析:999-100+1=900,包含首尾两个数
选择题答案
B
解析:123 / 10 = 12,12 % 10 = 2,得到十位数字B
解析:456 % 100 = 56,56 / 10 = 5,得到十位数字B
解析:以 4567 为例,4567 / 100 = 45,45 % 10 = 5,得到百位数字B
解析:正确的范围是 1 到 100,包含 100 在内D
解析:7+8+9=24
编程题答案及解析
- 计算所有个位是 5 的三位数的个数
cpp
运行
#include <iostream>
using namespace std;int main() {int count = 0;for (int i = 100; i <= 999; i++) {// 检查个位数字是否为5if (i % 10 == 5) {count++;}}cout << "个位数字是5的三位数有 " << count << " 个" << endl;return 0;
}
解析:通过 i%10 获取个位数字,判断是否等于 5,若是则计数器加 1,最终输出总数。
- 计算 100-999 之间所有能被 3 整除的三位数的和
cpp
运行
#include <iostream>
using namespace std;int main() {int sum = 0;for (int i = 100; i <= 999; i++) {// 检查是否能被3整除if (i % 3 == 0) {sum += i;}}cout << "能被3整除的三位数的和为: " << sum << endl;return 0;
}
解析:使用 i%3 == 0 判断能否被 3 整除,若能则将该数加入总和,循环结束后输出总和。
- 找出所有 "水仙花数"
cpp
运行
#include <iostream>
using namespace std;int main() {cout << "100-999之间的水仙花数有: ";for (int i = 100; i <= 999; i++) {int a = i / 100; // 百位int b = i / 10 % 10; // 十位int c = i % 10; // 个位// 计算各位数字的立方和int cubeSum = a*a*a + b*b*b + c*c*c;// 判断是否为水仙花数if (cubeSum == i) {cout << i << " ";}}cout << endl;return 0;
}
解析:水仙花数是指一个数等于其各位数字的立方和。程序分解出各位数字,计算立方和并与原数比较,若相等则为水仙花数。
- 计算所有两位数的十位与个位数字之差
cpp
运行
#include <iostream>
using namespace std;int main() {for (int i = 10; i <= 99; i++) {int tens = i / 10; // 十位数字int units = i % 10; // 个位数字int diff = tens - units; // 十位减个位cout << i << "的十位与个位之差是: " << diff << endl;}return 0;
}
解析:将循环范围改为 10-99,提取十位和个位数字后计算它们的差并输出。
- 统计满足特定条件的三位数的个数
cpp
运行
#include <iostream>
using namespace std;int main() {int count = 0;for (int i = 100; i <= 999; i++) {int a = i / 100; // 百位int b = i / 10 % 10; // 十位int c = i % 10; // 个位// 检查条件:百位>十位>个位if (a > b && b > c) {count++;}}cout << "满足条件的三位数有 " << count << " 个" << endl;return 0;
}
解析:分解出各位数字后,使用逻辑与 (&&) 运算符检查 "百位 > 十位" 且 "十位 > 个位" 的条件,满足则计数器加 1。