如何获得c中的最小值?

问题描述 投票:0回答:1

我创建了一个代码来计算输入分数的总和、平均值、最高分和最低分。 我确保如果 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;
}
arrays c minimum
1个回答
1
投票

很好的尝试。您的问题下面的评论描述了未初始化变量的问题。

无需求助于

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
将是另一个维护点。

© www.soinside.com 2019 - 2024. All rights reserved.