You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言分数统计程序min值异常问题排查请求

分数统计代码中min计算错误的原因及修复方案

错误根源

你的代码里int max = score[0];和int min = score[0];这两行存在核心问题:score是局部数组,声明后未初始化,其元素值是随机垃圾值。用这种随机值作为max和min的初始值,会导致后续的比较逻辑完全失效,最终min(甚至max)的计算结果必然不正确。

修复方案

这里提供两种可靠的修复方式:

方案一:先读取第一个分数再初始化极值

先读入第一个分数,用它来初始化max、min和sum,之后再处理剩下的分数:

#include <stdio.h>
int main(){
    
    int score[5];
    int sum = 0;
    int i;
    int max, min;
    
    // 读取第一个分数,初始化sum、max、min
    scanf(" %d", &score[0]);
    sum = score[0];
    max = score[0];
    min = score[0];
    
    // 从第二个分数开始循环处理
    for(i=1; 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;
}

方案二:用类型极限值初始化极值

引入<limits.h>头文件,用INT_MIN(int类型最小值)初始化max,INT_MAX(int类型最大值)初始化min,这样第一个输入的分数必然能更新这两个值:

#include <stdio.h>
#include <limits.h>
int main(){
    
    int score[5];
    int sum = 0;
    int i;
    int max = INT_MIN;
    int min = INT_MAX;
    
    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;
}

补充说明

C语言中,局部变量(包括数组)存储在栈内存中,默认不会被自动初始化为0或其他确定值,使用未初始化的局部变量属于未定义行为,结果不可预测。所以使用局部变量前必须确保完成初始化。

内容的提问来源于stack exchange,提问作者Kim Do Kyeong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:52:53