我怎样才能得到c的最小值?

njthzxwz  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(86)

我已经创建了一个代码,可以计算输入分数的总和,平均值,最高和最低分数。我确保如果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;
}

字符串

oalqel3c

oalqel3c1#

很好的尝试。你的问题下面的注解描述了未初始化变量的问题。
在不求助于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;
}

字符串
通过关注索引而不是值,只要第一个值存储到数组中,minmax都是当前的。
这种技术的一个优点(如果您稍后将对数组值做更多的处理)是数据类型不与INT_MIN & co绑定。如果代码更改为接受unsigned char值,则INT_MIN将是另一个维护点。
最后一条评论。交换条件句:

if( score[i] > score[max] )  max = i; // new max found
        if( score[i] < score[min] )  min = i; // new min found


只是读起来更好。

相关问题