C中的平均,最大和最小程序
所以我用C编码,我需要提出一些代码,它将从用户那里获取n个数字,并找到它们的最小值,最大值,平均值和平方和。 到目前为止,我有平均和平方和部分,但最小值和最大值是咬我的。
请记住,我处于一个非常基本的水平,我还没有到达arrays。 我所知道的只是逻辑运算符,函数,循环以及stdlib.h,math.h和stdio.h库的使用。
这就是我到目前为止所拥有的。 当我在编译期间尝试将float和double放在一起时,平均函数给了我很多问题,因此将它乘以1.0固定。 我拥有一切,只有最小和最大。 我一直把最后一个条目作为最大值,最小值为0。
#include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); while(countmax) max=num; if(num<min) min=num; scanf_s("%d",&num); sum = sum+num; squaresum = squaresum + (num*num); count++; } average = 1.0*sum/n; printf("Your average is %.2f\n",average); printf("The sum of your squares is %d\n",squaresum); printf("Your maximum number is %d\n",max); printf("Your minimum number is %d\n",min); return(0); }
你的算法不太正确。 以下是正确的实现:
#include #include #include int main(void) { float average; int n, num, count = 0, sum = 0, squaresum = 0; int min = INT_MAX, max = INT_MIN; bool gotAnswer = false; /* Don't Let User Enter Wrong Input */ while(!gotAnswer) { printf("Please enter the number of numbers you wish to evaluate: "); if(scanf_s("%d", &n) != 1) { /* User Entered Wrong Input; Clean Up stdin Stream*/ while(getchar() != '\n') { continue; } } else { /* User Input Was Good */ gotAnswer = true; } } /* Clear stdin Stream Just In Case */ while(getchar() != '\n') continue; while(count < n) { /* Don't Let User Enter Wrong Input */ gotAnswer = false; printf("Enter number %d: ", count + 1); if(scanf_s("%d", &num) != 1) { /* User Entered Wrong Input; Clean Up stdin Stream */ while(getchar() != '\n') continue; /* Let User Try Again */ continue; } else { /* User Input Was Correct */ gotAnswer = true; /* Clear stdin Stream Just In Case */ while(getchar() != '\n') continue; } if(num > max) max = num; if(num < min) min = num; sum += num; squaresum += num * num; count++; } average = 1.0 * sum / n; printf("Your average is %.2f\n", average); printf("The sum of your squares is %d\n", squaresum); printf("Your maximum number is %d\n", max); printf("Your minimum number is %d\n", min); system("pause"); return 0; }
我添加了错误检查和恢复。 如果您对逻辑有任何疑问,请询问。
你的代码当前的编写方式, min
必须以高值(而不是0)开始,否则代码将无效。 选择的最佳值是int
的最大可能值。
您还应该考虑是否要在每次循环时重置这些变量。
输入循环外的第一个num
并将其分配给max
min
scanf("%d",&num); max = min = num;
将while循环更改为无限循环
while(1) {...}
现在检查计数器count
是否等于n
的条件是否从无限循环中break
if(count == n) break;
修改后的完整代码:
#include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); scanf_s("%d",&num); max = min = num; while(1) { if(num>max) max=num; if(num
假设列表中的第一个数字为最小值和最大值。 将每个下一个字符与当前最小值和当前最大值进行比较并相应地更新。
你的while循环应该是这样的
min=3; max=0; while(countmax) max=num; if(num
我同意罗伯特哈维♦ .. 你必须设定min
添加一个布尔值,移动给出值min,max 0是循环的开始
#include int main() { float average; int i, n, count=0, sum=0, squaresum=0, num, min, max; bool first = true; printf("Please enter the number of numbers you wish to evaluate\n"); scanf_s("%d",&n); printf("Please enter %d numbers\n",n); min=0; max=0; while(countmax) max=num; if(num
还应该考虑检查scanf的返回值
您的代码中存在一些问题:
- 在哪里读取
num
? 你应该在min
和max
之前做 - 当while循环 第一次执行时,您应该只将
num
分配给max
和min
。
像这样的东西:
int min = 0; int max = 0; // If your compiler supports C99 standard you can put // bool first_time = true; int first_time = 1; while (count < n) { printf("Please, enter the next number\n"); scanf_s("%d", &num); // If your compiler supports C99 you can put it easier: // if (first_time) { if (first_time == 1) { first_time = 0; max = num; min = num; } else { if(num > max) max = num; if(num < min) min = num; } ...