c - 求 C 中停止在 0 的数组的最大、最小、总和和平均值
问题描述
所以基本上我必须找到零终止数组的最大、最小、总和、平均值。
我已经得到了平均值和总和,但没有找到最大的最小值,正数和负数的平均值。输入时数组停止0
。
#include <stdio.h>
int main() {
int c = 0, n, array[100], large, small;
float sum = 0;
//for (c = 0; c < n; n++) {
do {
c++;
printf("\nEnter number:");
scanf("%d", &array[c]);
sum += array[c];
} while (array[c] != 0);
if (array[c] > large) { large = array[c]; }
if (array[c] < small) { small = array[c]; }
if (array[c] == 0) {
printf("\n Sum = %.2f\n", sum);
printf("\n Average = %.2f", sum / (c - 1));
printf("\n Largest %d", large);
}
return 0;
}
解决方案
您的代码中有多个问题:
- 数组索引从 C 开始,在存储值之前
0
不应递增。c
- 您实际上并不需要存储一个值,只需计算它们就足够了
- 您应该初始化
large
并small
从读取的第一个值开始。 - 您应该测试的返回值
scanf()
以检测无效输入并避免未定义的行为
这是一个更正的版本:
#include <stdio.h>
int main() {
int c, n, large, small;
double sum = 0;
for (c = 0;; c++) {
printf("Enter number: ");
if (scanf("%d", &n) != 1 || n == 0)
break;
sum += n;
if (c == 0 || n > large) {
large = n;
}
if (c == 0 || n < small) {
small = n;
}
}
if (c == 0) {
printf("no numbers\n");
} else {
printf("Smallest: %d\n", small);
printf("Largest: %d\n", large);
printf("Sum = %f\n", sum);
printf("Average = %.2f\n", sum / c);
}
return 0;
}
为了说明上面的代码在没有本地数组的情况下是如何工作的,这里有一个带有数组的中间版本并附上注释:
#include <stdio.h>
int main() {
int c, n, i, array[100], large, small;
double sum;
for (c = 0; c < 100; c++) { // loop reading into array, stop at array size
printf("Enter number: ");
if (scanf("%d", &n) != 1) // read a number, stop on failure
break;
if (n == 0) // stop when reading a 0
break;
array[c] = n;
}
if (c == 0) {
printf("no numbers\n");
return 0;
}
// initialize variables from first entry
sum = array[0];
large = small = array[0];
// loop over remaining entries and update variables
for (i = 1; i < c; i++) {
sum += array[i];
if (large < array[i]) {
large = array[i];
}
if (small > array[i]) {
small = array[i];
}
}
printf("Smallest: %d\n", small);
printf("Largest: %d\n", large);
printf("Sum = %f\n", sum);
printf("Average = %.2f\n", sum / c);
return 0;
}
推荐阅读
- python - pyqt按需加载graphicsspixmapitem
- c# - 在客户端计算机上运行的 Crystal Reports(没有 CRRuntime)
- delphi - 安装 Delphi 包会导致错误丢失 BDS.INI
- ibm-cloud-infrastructure - 如何在 SoftLayer 票证上设置附加设备的密码
- node.js - package-lock.json 会阻止更新吗?
- ruby-on-rails - Ruby on Rails 5 Action Mailer 的错误
- java - 将数据从 kotlin 活动传递到 java DialogFragment
- python - Pandas:使用 python map() 意外输出数据类型
- angular - angular-file-uploader 附加参数
- xamarin.forms - 如何为 Azure AD 形成正确的租户 URL