当前位置: 首页 > web >正文

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;}}

代码执行流程:

  1. 使用 for 循环遍历从 100 到 999 的所有整数
  2. 对于每个三位数 i,分解出它的百位、十位和个位数字
  3. 计算这三个数字的和并输出

二、关键知识点讲解

  1. for 循环结构

    cpp

    运行

    for (初始化; 循环条件; 增量) { 循环体 }
    

    此处循环从 i=100 开始,当 i≤999 时继续执行,每次循环后 i 自增 1

  2. 数字分解方法

    • 百位数字 a:i / 100(整数除法,自动舍去小数部分)
    • 十位数字 b:i / 10 % 10(先除以 10 去掉个位,再对 10 取余得到十位)
    • 个位数字 c:i % 10(对 10 取余直接得到个位)
  3. 输出语句cout<<a+b+c; 输出三个数字的和

三、重点难点分析

重点

  1. for 循环的语法结构和执行流程
  2. 整数除法与取余运算在数字分解中的应用
  3. 三位数的数位分离方法

难点

  1. 理解整数除法在不同位数数字提取中的作用
  2. 掌握取余运算的特性及应用场景
  3. 理解循环变量的变化过程与数字范围的关系

考点

  1. 循环结构的执行次数计算(999-100+1=900 次)
  2. 数位分解的算法(如何提取任意位数的各位数字)
  3. 整数运算的特性(除法自动取整)
  4. 循环变量的范围控制

四、练习题

填空题(每空 2 分)

  1. 代码中循环变量 i 的初始值是______,终止条件是______。
  2. 表达式i / 100用于获取三位数 i 的______位数字。
  3. 表达式i % 10用于获取三位数 i 的______位数字。
  4. 代码中计算十位数字的表达式是______。
  5. 这段代码总共会执行______次循环体。

选择题(每题 3 分)

  1. 对于 i=123,执行i / 10 % 10的结果是:
    A. 1 B. 2 C. 3 D. 12

  2. 表达式456 % 100 / 10的结果是:
    A. 4 B. 5 C. 6 D. 45

  3. 若要获取四位数 i 的百位数字,正确的表达式是:
    A. i / 100 B. i / 100 % 10 C. i % 100 / 10 D. i % 100

  4. 以下代码中,能正确计算 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;

  5. 对于数字 i=789,代码执行后输出的结果是:
    A. 7 B. 8 C. 9 D. 24

编程题(每题 10 分)

  1. 编写程序,计算并输出所有三位数中,个位数字是 5 的数的个数。

  2. 编写程序,计算 100-999 之间所有能被 3 整除的三位数的和。

  3. 编写程序,找出 100-999 之间所有 "水仙花数"(各位数字的立方和等于该数本身的数)。

  4. 编写程序,计算并输出所有两位数(10-99)的十位数字与个位数字之差。

  5. 编写程序,统计 100-999 之间所有满足 "百位数字大于十位数字,且十位数字大于个位数字" 的三位数的个数。

五、答案及解析

填空题答案

  1. 100,i <= 999
    解析:循环从 100 开始,到 999 结束,包含 100 和 999 在内


  2. 解析:对于三位数 i,除以 100 的整数结果就是百位数字


  3. 解析:对 10 取余的结果就是该数的个位数字

  4. i / 10 % 10
    解析:先除以 10 去掉个位,再对 10 取余得到十位数字

  5. 900
    解析:999-100+1=900,包含首尾两个数

选择题答案

  1. B
    解析:123 / 10 = 12,12 % 10 = 2,得到十位数字

  2. B
    解析:456 % 100 = 56,56 / 10 = 5,得到十位数字

  3. B
    解析:以 4567 为例,4567 / 100 = 45,45 % 10 = 5,得到百位数字

  4. B
    解析:正确的范围是 1 到 100,包含 100 在内

  5. D
    解析:7+8+9=24

编程题答案及解析

  1. 计算所有个位是 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,最终输出总数。

  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 整除,若能则将该数加入总和,循环结束后输出总和。

  1. 找出所有 "水仙花数"

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;
}

解析:水仙花数是指一个数等于其各位数字的立方和。程序分解出各位数字,计算立方和并与原数比较,若相等则为水仙花数。

  1. 计算所有两位数的十位与个位数字之差

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,提取十位和个位数字后计算它们的差并输出。

  1. 统计满足特定条件的三位数的个数

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。

http://www.xdnf.cn/news/19589.html

相关文章:

  • Spring Security 6.x 功能概览与代码示例
  • 程序员独立开发直播卖产品 SOP 教程
  • arm容器启动spring-boot端口报错
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的“教育用户”模式探究
  • 谈谈对BFC的理解
  • 当代科学(范畴大辩论) 的学科分科(论据)的要素论(论点)及方法论(论证):边缘处理
  • 浅谈 SQL 窗口函数:ROW_NUMBER() 与聚合函数的妙用
  • 机器视觉opencv教程(三):形态学变换(腐蚀与膨胀)
  • 利用爬虫获取淘宝商品信息,参数解析
  • 基于单片机停车场管理系统/车位管理/智慧停车系统
  • 小迪自用web笔记22
  • Java线程池使用入门
  • uvm验证环境中struct(结构体)和class的区别与联系
  • 基于单片机老人防丢失防摔倒系统/老人健康状态检测系统
  • CMake⼯程指南-3
  • [光学原理与应用-361]:ZEMAX - 分析 - 像差分析
  • KingbaseES V009版本发布:国产数据库的新飞跃
  • 基于全参考图的质量评价均方误差MSE、峰值信噪比PSNR
  • [特殊字符] Rust概述:系统编程的革命者
  • 力扣(LeetCode) ——101. 对称二叉树(C语言)
  • Vue Router 嵌套路由与布局系统详解:理解 component = router-view 的核心概念
  • 接口测试总结-含接口测试和前端测试的区别与比较
  • Matlab自学笔记六十六:求解带参数的不等式
  • 国庆福建霞浦游
  • Linux 启动传参
  • 使用AdaLoRA 自适应权重矩阵微调大模型介绍篇
  • Docker一小时快速上手(附报错解决方式)
  • 【MLLM】具有长期记忆的多模态智能体框架M3-Agent
  • 《信息学奥林匹克辞典》中的一个谬误
  • Java异常处理完全指南:从入门到精通