需要在数组中找到最大、最小、平均数 - 没有声明大小
Need to find Max, Min, Avg number in Array - no size declared
所以我有这个数组,我需要找到最小值、最大值和平均值。我已经弄清楚如何获得 Max,我的代码看起来适合最小值,但它不起作用,所以我一定遗漏了一些东西。我还需要找到输入数字的平均值。我在这方面能找到的所有内容都只有在您设置了数组大小时才有效。我为数组设置了最大大小,但它没有被用户输入填充。我已经盯着这个看了好几天了,但还是想不通。
我知道平均来说我需要类似的东西(在顶部添加声明),但我不知道如何让它工作:
for (i = 0; i < numOfGrades; i++) {
sum += grades[i];
}
avg = (double) sum / numOfGrades;
这是我的其余代码:
#include <stdio.h>
int main(){
int grades [100];
int i = 0;
int small, big, input;
printf("Enter a series of grades. When done, enter any number above 100.\n\n");
while (i <= 100) { //while loop to set maximum for array
printf("Enter grade:");
if (scanf("%d", &input) == 1) {
if (input >= 0 && input <=100) {
grades[i] = input; //if good, add to array
i++;
}
else {
printf("\n\nExiting entry.\n");
printf("\n\nGrades entered:\n\n");
i = i - 1;
break; //exiting loop
}
}
}
int x, y;
for (x = 0; x <= i; x++) {
printf("Grade: %d\n", grades[x]); //print array
}
big = small = grades[0];
for (y = 0; y < i; y++) {
if (grades[y] > big) {
big = grades[y];
}
else if (grades[y] < small) {
small = grades[y];
}
}
printf("Highest number : %d\n", big);
printf("Smallest number: %d\n", small);
return 0;
}
在这里你做对了:
for (x = 0; x <= i; x++) {
因为x <= i
会带你从0到i
的值。然后在你的 min/max
循环中你这样做:
for (y = 0; y < i; y++) {
所以你将从 0 到 i-1
。您有 2 个选择:
- 用
y <= i
使上面的循环正确。
- Dont decrement
i
in the while
loop (Dont do this i = i - 1;
) That way, i
表示输入的数字的数量,而不是数字的数量输入 -1(您需要将 x <= i
修改为 x < i
)。
这是一个活生生的例子。 http://ideone.com/ZEaDue
要计算平均值,您做对了,您可以重新使用 i
不过:
int sum = 0, avg = 0;
for (y = 0; y < i; y++) {
sum += grades[y];
}
avg = (double) sum / i;
printf("Avg: %d\n", avg);
其实你有分数
if (scanf("%d", &input) == 1) {
if (input >= 0 && input <=100) {
grades[i] = input; //if good, add to array
i++;
}
else {
numOfGrades=i;
printf("\n\nExiting entry.\n");
printf("\n\nGrades entered:\n\n");
i = i - 1;
break; //exiting loop
}
至于最小值,你的逻辑应该是这样的:
for (y = 0; y < numOfEdges; y++) {
if (grades[y] > big) {
big = grades[y];
}
if (grades[y] < small) {
small = grades[y];
}
}
我删除的 else 语句应该可以解决问题。我也会一直使用
for(int var = 0; var < numOfEdges; var++)
在任何循环结构中。以这种方式遵循逻辑更容易:您已经计算了边的数量 (numOfEdges),但是由于您从索引 0 开始,因此您的循环仅进入 numOfEdges-1。
所以我有这个数组,我需要找到最小值、最大值和平均值。我已经弄清楚如何获得 Max,我的代码看起来适合最小值,但它不起作用,所以我一定遗漏了一些东西。我还需要找到输入数字的平均值。我在这方面能找到的所有内容都只有在您设置了数组大小时才有效。我为数组设置了最大大小,但它没有被用户输入填充。我已经盯着这个看了好几天了,但还是想不通。
我知道平均来说我需要类似的东西(在顶部添加声明),但我不知道如何让它工作:
for (i = 0; i < numOfGrades; i++) {
sum += grades[i];
}
avg = (double) sum / numOfGrades;
这是我的其余代码:
#include <stdio.h>
int main(){
int grades [100];
int i = 0;
int small, big, input;
printf("Enter a series of grades. When done, enter any number above 100.\n\n");
while (i <= 100) { //while loop to set maximum for array
printf("Enter grade:");
if (scanf("%d", &input) == 1) {
if (input >= 0 && input <=100) {
grades[i] = input; //if good, add to array
i++;
}
else {
printf("\n\nExiting entry.\n");
printf("\n\nGrades entered:\n\n");
i = i - 1;
break; //exiting loop
}
}
}
int x, y;
for (x = 0; x <= i; x++) {
printf("Grade: %d\n", grades[x]); //print array
}
big = small = grades[0];
for (y = 0; y < i; y++) {
if (grades[y] > big) {
big = grades[y];
}
else if (grades[y] < small) {
small = grades[y];
}
}
printf("Highest number : %d\n", big);
printf("Smallest number: %d\n", small);
return 0;
}
在这里你做对了:
for (x = 0; x <= i; x++) {
因为x <= i
会带你从0到i
的值。然后在你的 min/max
循环中你这样做:
for (y = 0; y < i; y++) {
所以你将从 0 到 i-1
。您有 2 个选择:
- 用
y <= i
使上面的循环正确。 - Dont decrement
i
in thewhile
loop (Dont do thisi = i - 1;
) That way,i
表示输入的数字的数量,而不是数字的数量输入 -1(您需要将x <= i
修改为x < i
)。
这是一个活生生的例子。 http://ideone.com/ZEaDue
要计算平均值,您做对了,您可以重新使用 i
不过:
int sum = 0, avg = 0;
for (y = 0; y < i; y++) {
sum += grades[y];
}
avg = (double) sum / i;
printf("Avg: %d\n", avg);
其实你有分数
if (scanf("%d", &input) == 1) {
if (input >= 0 && input <=100) {
grades[i] = input; //if good, add to array
i++;
}
else {
numOfGrades=i;
printf("\n\nExiting entry.\n");
printf("\n\nGrades entered:\n\n");
i = i - 1;
break; //exiting loop
}
至于最小值,你的逻辑应该是这样的:
for (y = 0; y < numOfEdges; y++) {
if (grades[y] > big) {
big = grades[y];
}
if (grades[y] < small) {
small = grades[y];
}
}
我删除的 else 语句应该可以解决问题。我也会一直使用
for(int var = 0; var < numOfEdges; var++)
在任何循环结构中。以这种方式遵循逻辑更容易:您已经计算了边的数量 (numOfEdges),但是由于您从索引 0 开始,因此您的循环仅进入 numOfEdges-1。