使用C语言编写程序输入n和k两个正整数,将从 1 到 n 之间的所有正整数可以分为两类:A 类数可以被 k 整除(也就是说是 k的倍数),而 B 类数不能。请分别输出这两类数的平均数,精确到小数点后3位。写出代码并给出注释并对代码作出解释
时间: 2023-03-01 08:32:58 浏览: 78
将一个正整数拆分成若干个正整数的和.zip
下面是用 C 语言编写的程序:
```
#include <stdio.h>
int main() {
int n, k;
int a_sum = 0, a_count = 0;
int b_sum = 0, b_count = 0;
float a_avg, b_avg;
// 输入 n 和 k
printf("请输入 n 和 k 的值:\n");
scanf("%d%d", &n, &k);
// 计算从 1 到 n 之间的所有正整数
for (int i = 1; i <= n; i++) {
// 如果 i 是 k 的倍数,则属于 A 类数
if (i % k == 0) {
a_sum += i;
a_count++;
} else {
b_sum += i;
b_count++;
}
}
// 计算 A 类数的平均数
a_avg = (float)a_sum / a_count;
// 计算 B 类数的平均数
b_avg = (float)b_sum / b_count;
// 输出结果
printf("A 类数的平均数:%.3f\n", a_avg);
printf("B 类数的平均数:%.3f\n", b_avg);
return 0;
}
```
解释:
- 首先定义了四个变量:`a_sum`,`a_count`,`b_sum`,`b_count`,分别存储 A 类数的和、个数、B 类数的和和个数。
- 然后使用 `scanf` 函数输入 `n` 和 `k` 的值。
- 接着,使用一个循环语句遍历从 1 到 `n` 的所有正整数。
- 在循环语句内部,使用一个 `if` 语句判断当前数字是否是 `k` 的倍数。
- 如果是,就将其加入 A 类数的总和,并统
阅读全文