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

C语言代码:for循环内if多分支仅首个匹配条件生效问题咨询

C语言平均分等级判定逻辑异常问题分析

需求说明

希望代码能计算所有学生的平均分,并在打印每个学生的平均分后判定其等级。

原代码

#include <stdio.h>
        
int main()
{
    int stud_rlno[8], phy_marks[8], chem_marks[8], 
        bio_marks[8], CS_marks[8], average;
    int i;
    for(int i = 0; i < 1; ++i)
    {
        printf("Enter the roll number of student %d: ", i);
        scanf("%d", &stud_rlno[i]);
        printf("Enter the physics marks of student %d: ", i);
        scanf("%d", &phy_marks[i]);
        printf("Enter the chemistry marks of student %d: ", i);
        scanf("%d", &chem_marks[i]);
        printf("Enter the biology marks of student %d: ", i);
        scanf("%d", &bio_marks[i]);
        printf("Enter the CS marks of student %d: ", i);
        scanf("%d", &CS_marks[I]);
    }
    for(int i = 0; i <= 1; i++)
    {  
        average = phy_marks[i] + chem_marks[i] + bio_marks[i] + CS_marks[i];
        printf("The average of student is %d \n", average / 4);
            if(average > 90)
        {
            printf("Grade A \n");
        }   
        else if(average <= 90 && average > 82)
        {
            printf("Grade B \n");
        }
        else if(average <= 82 && average > 75)
        {
            printf("Grade C \n");
        }
        else if(average <= 75 && average > 65)
        {
            printf("Grade D \n");
        }
        else if(average <= 65)
        {
            printf("Grade E \n");
        }
        else
        {
            printf("Fail");
        }
    }
}

问题原因分析

  • 变量大小写错误:输入CS成绩的语句scanf("%d", &CS_marks[I]);中,数组下标用了大写I,但循环变量是小写i,这会导致程序读取未定义的内存地址,CS_marks[i]的值为随机垃圾值,直接破坏总分计算。
  • 循环次数不匹配:输入循环仅执行1次(i < 1),只能录入1个学生的数据;但输出循环执行2次(i <=1),第二次循环访问的是未初始化的数组元素,计算出的总分完全随机。
  • 等级判定逻辑颠倒:你用总分average做等级判断,但逻辑阈值是按平均分设定的。比如4科总分满分为400,average >90这个条件几乎所有有效成绩都会满足,导致只会触发第一个if分支,后续else if永远不会执行。正确的做法应该用平均分(average /4)来做等级判断。

修正后的代码示例

#include <stdio.h>
        
int main()
{
    const int MAX_STUDENTS = 8;
    int stud_rlno[MAX_STUDENTS], phy_marks[MAX_STUDENTS], chem_marks[MAX_STUDENTS], 
        bio_marks[MAX_STUDENTS], CS_marks[MAX_STUDENTS];
    int i, total, average;
    
    int student_count;
    printf("Enter number of students (max 8): ");
    scanf("%d", &student_count);
    if(student_count > MAX_STUDENTS) student_count = MAX_STUDENTS;

    for(i = 0; i < student_count; ++i)
    {
        printf("\nEnter details for student %d:\n", i+1);
        printf("Roll number: ");
        scanf("%d", &stud_rlno[i]);
        printf("Physics marks: ");
        scanf("%d", &phy_marks[i]);
        printf("Chemistry marks: ");
        scanf("%d", &chem_marks[i]);
        printf("Biology marks: ");
        scanf("%d", &bio_marks[i]);
        printf("CS marks: ");
        scanf("%d", &CS_marks[i]);
    }

    for(i = 0; i < student_count; i++)
    {  
        total = phy_marks[i] + chem_marks[i] + bio_marks[i] + CS_marks[i];
        average = total / 4;
        printf("\nStudent %d (Roll No: %d):\n", i+1, stud_rlno[i]);
        printf("Average marks: %d \n", average);
        
        if(average >= 90)
        {
            printf("Grade A \n");
        }   
        else if(average >= 83 && average <90)
        {
            printf("Grade B \n");
        }
        else if(average >=76 && average <83)
        {
            printf("Grade C \n");
        }
        else if(average >=66 && average <76)
        {
            printf("Grade D \n");
        }
        else if(average >=0 && average <66)
        {
            printf("Grade E \n");
        }
        else
        {
            printf("Invalid marks \n");
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者swat08

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:15:39