返回 课程

信奥AC之路-第一级-A学段

0% 完成
0/0 步骤
  1. 第一课 开发环境与基础输出
    4 主题|小节
  2. 第二课 算数运算符
    6 主题|小节
  3. 第三课 输入与运算
    3 主题|小节
  4. 第四课 数值操作
    4 主题|小节
  5. 第五课 表达式与运算符
    3 主题|小节
  6. 第六课 三目运算与双分支(缺导语+本课目标)
    2 主题|小节
  7. 第七课 多分支结构(缺导语+本课目标)
    1 主题|小节
  8. 第八课 多if语句
    1 主题|小节
  9. 第九课 三种分支结构的比较
    1 主题|小节
  10. 第十课 巩固学习分支结构
    1 主题|小节
  11. 第十一课 switch与复合语句
    3 主题|小节
  12. 第十二课 while循环
    2 主题|小节
  13. 第十三课 while循环的简单条件输出
    1 主题|小节
  14. 第十四课 while循环的输入序列处理
    1 主题|小节
  15. 第十五课 while循环的复杂条件输出
    2 主题|小节
  16. 第十六课 while循环与数据统计
    1 主题|小节
  17. 第十七课 for循环结构
    3 主题|小节
  18. 第十八课 for循环的输入序列处理)
    1 主题|小节
  19. 第十九课 深入探索for循环
    2 主题|小节
  20. 第二十课 三种循环的对比
    2 主题|小节
  21. 第二十一课 程序调试(一)
    3 主题|小节
  22. 第二十二课 调试工具的使用
    2 主题|小节
  23. 第二十三课 综合复习
    2 主题|小节
  24. 第二十四课 学习评估
    1 主题|小节
课 16, 主题|小节 1
进行中

16 while循环与数据统计

2025年4月20日
课 进展
0% 完成

“接下来我们来做一些更有趣的数据统计!”

🔬 **实验24:求平均值**

“`
描述:
帮小朋友们计算一组数的平均值,输入-1表示输入结束。

输入:
一组数字,以-1结束

输出:
这组数的平均值

样例输入:
85 92 78 95 -1

样例输出:
平均值是:87.5

解题思路:
1. 用sum记录总和,count记录数字个数
2. 循环输入数字,直到输入-1
3. 每输入一个数字(不是-1):
– sum加上这个数
– count加1
4. 最后用sum除以count得到平均值
“`

“`cpp
#include
using namespace std;

int main() {
int num, count = 0;
double sum = 0;
cout << "请输入一组数(输入-1结束):" << endl; while(true) { cin >> num;
if(num == -1) break; // 输入-1时结束
sum += num; // 累加数字
count++; // 计数加1
}

if(count > 0) {
cout << "平均值是:" << sum/count << endl; } return 0; } ``` 🔬 **实验25:最大公约数** ``` 描述: 小明和小红在学习最大公约数,让我们用循环来帮他们解决这个问题! 输入: 两个正整数a和b 输出: 这两个数的最大公约数 样例输入: 24 36 样例输出: 最大公约数是:12 解题思路: 1. 使用辗转相除法(欧几里得算法) 2. 让较大的数除以较小的数 3. 如果余数为0,较小的数就是最大公约数 4. 否则,用较小的数和余数继续计算 辗转相除法(欧几里得算法)算法步骤: (1). 初始化:设两个正整数为a和b,且a > b。
(2). 除法运算:用a除以b,得到余数r(0 < r < b)。 (3). 迭代:如果r不为0,则将b的值赋给a,将r的值赋给b,返回第二步继续计算;如果r为0,则b即为两数的最大公约数。 (4). 结束:重复上述步骤,直到余数为0为止。 算法示例 例如,计算252和198的最大公约数: - 252 = 1 × 198 + 54(商为1,余数为54) - 198 = 3 × 54 + 36(商为3,余数为36) - 54 = 1 × 36 + 18(商为1,余数为18) - 36 = 2 × 18 + 0(商为2,余数为0) 因此,252和198的最大公约数是18。 ``` ```cpp #include
using namespace std;

int main() {
int a, b;
cout << "请输入两个正整数:"; cin >> a >> b;

while(b != 0) { // 当余数不为0时继续循环
int temp = b; // 保存除数
b = a % b; // 计算余数
a = temp; // 除数变为被除数
}

cout << "最大公约数是:" << a << endl; return 0; } ``` 🔬 **实验26:数字特征统计** ``` 描述: 统计一个区间内有多少个特殊的数(个位为5或8的数)。 输入: 两个正整数m和n(m < n) 输出: m到n之间个位数为5或8的数的个数 样例输入: 10 30 样例输出: 符合条件的数有:15 18 25 28 共找到4个数 解题思路: 1. 遍历m到n的每个数 2. 用取余运算判断个位数 3. 统计满足条件的数的个数 4. 同时输出这些数 ``` ```cpp #include
using namespace std;

int main() {
int m, n;
cout << "请输入两个数m和n(m < n):"; cin >> m >> n;

int count = 0;
cout << "符合条件的数有:"; int i = m; while(i <= n) { if(i % 10 == 5 || i % 10 == 8) { cout << i << " "; count++; } i++; } cout << "\n共找到" << count << "个数" << endl; return 0; } ```