如何用C语言编写一个程序,实现输入一组正整数(以0为结束标志),计算并输出每个数字与平均值的差?当数字大于平均值时,输出它们之间的差,而当数字小于或等于平均值时,输出0。请提供相应的代码示例。
时间: 2024-11-04 11:14:03 浏览: 8
你可以使用C语言编写以下程序来实现这个功能:
```c
#include <stdio.h>
#include <stdlib.h>
double calculate_average(int* arr, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
sum += arr[i];
}
}
return sum / (n - (arr[0] == 0 ? 1 : 0));
}
void print_differences(int* arr, int n) {
double average = calculate_average(arr, n);
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
double difference = arr[i] - average;
if (difference > 0) {
printf("%d - %.2f = %f\n", arr[i], average, difference);
} else {
printf("0\n");
}
}
}
}
int main() {
int input[] = {5, 7, 9, 4, 0, 3}; // 输入数组示例
int n = sizeof(input) / sizeof(input[0]);
printf("Numbers and their differences with the average:\n");
print_differences(input, n);
return 0;
}
```
这个程序首先定义了一个`calculate_average`函数,用于计算数组元素非零部分的平均值。然后,在`print_differences`函数中,遍历输入数组,对于每个非零元素,计算其与平均值的差,并根据条件输出结果。
注意,数组最后一个元素是用来判断是否需要从总数中减去1(因为0作为结束标志)。在`main`函数里,我们提供了一个简单的输入数组实例供测试。
阅读全文