我创建了一个代码来计算输入分数的总和、平均值、最高分和最低分。 我确保如果 Score[i] 大于 max,则 socre[i] 变为 max,如果小于 min,则 socre[i] 变为 min。 我认为我正确设置了初始值并正确设置了条件表达式,但是 min 的值不正确。没有语法错误。 你能告诉我错误的地方吗?
#include <stdio.h>
int main(){
int score[5];
int sum = 0;
int i,j;
int max = score[0];
int min = score[0];
for(i=0; i<5; i++){
scanf(" %d", &score[i]);
sum += score[i];
if (max < score[i]){
max = score[i];
}
if (min > score[i]){
min = score[i];
}
}
printf("total = %d\nmean = %.2f\nmax = %d\nmin = %d\n%s\n", sum, (float)sum/5.0, max, min, sum<100 ? "Fail." : "Pass." );
return 0;
}
很好的尝试。您的问题下面的评论描述了未初始化变量的问题。
无需求助于
INT_MIN
及其兄弟,还有另一种方法可以实现您的目标:
#include <stdio.h>
#define N 5 // Use tokens. Don't repeat magic numbers in code
int main( void ){
int score[ N ] = { 0 }; // initialise the array
int sum = 0;
int max = 0;
int min = 0;
for( int i = 0; i < N; i++ ) {
scanf(" %d", &score[i]); // ToDo: validate scanf return value
sum += score[i];
if( score[max] < score[i] ) // assign the INDEX, not the VALUE
max = i;
if( score[min] > score[i] ) // and again.
min = i;
}
printf(
"total = %d\n"
"mean = %.2f\n"
"max = %d\n"
"min = %d\n"
"%s\n",
sum,
(float)sum/N,
score[max], // retrieve value
score[min],
sum < 100 ? "Fail." : "Pass."
);
return 0;
}
通过关注索引而不是值,一旦第一个值存储到数组中,
min
和max
都是当前的。
此技术的一个优点(如果您稍后将对数组值进行更多操作)是数据类型不依赖于
INT_MIN
& co。如果代码更改为接受 unsigned char
值,INT_MIN
将是另一个维护点。