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

C语言自定义totalLulus、nilaiTerbesar函数返回异常问题求助

问题排查及修复方案

核心错误原因

  • 数组索引越界:C语言数组下标从0开始,长度为n的数组合法下标范围是0 ~ n-1,代码中存在两处越界问题:
    1. main函数输入分数的循环从i=1开始到i<=jumlahSiswa结束,导致nilaiUser[0]未赋值为随机垃圾值,同时写入nilaiUser[jumlahSiswa]时越界覆盖栈内存
    2. totalLulus、totalTidakLulus、nilaiTerbesar三个函数的循环条件写为i <= inputJumlahSiswa,会读取数组外的内存垃圾值,这就是全部分数低于阈值时返回1、人数超过4时返回随机大数字的直接原因
  • 函数声明不规范:顶部的函数声明未指定参数列表,存在参数传递不匹配的隐患
  • 平均值计算存在精度损失:两个整数直接相除会先截断为整数再赋值给浮点数,无法得到精确的平均结果

修复后完整代码

#include <stdio.h>

// 规范函数声明,明确参数列表
int nilaiRataRata(int inputRataRata, int inputJumlahMahasiswa);
int nilaiTerkecil(int *inputNilai, int inputJumlahMahasiswa);
int nilaiTerbesar(int *inputNilai, int inputJumlahMahasiswa);
int totalLulus(int *inputNilai, int inputJumlahSiswa);
int totalTidakLulus(int *inputNilai, int inputJumlahSiswa);

int main(){
    int i;
    int jumlahSiswa;

    printf("Masukan Jumlah Siswa : "); 
    scanf("%d", &jumlahSiswa);

    int nilaiUser[jumlahSiswa];
    int jumlahNilai = 0;

    // 修复循环下标,从0开始到<jumlahSiswa结束
    for( i = 0; i < jumlahSiswa; i++ ){
        printf("Masukan Nilai Mahasiswa Ke-%d : ", i+1); 
        scanf("%d", &nilaiUser[i]);
        jumlahNilai += nilaiUser[i];
    }

    printf("Rata Ratanya adalah : %d\n", nilaiRataRata(jumlahNilai, jumlahSiswa));
    printf("Nilai Terkecil      : %d\n", nilaiTerkecil(nilaiUser, jumlahSiswa));
    printf("Nilai Terbesar      : %d\n", nilaiTerbesar(nilaiUser, jumlahSiswa));
    printf("Total Tidak Lulus   : %d\n", totalTidakLulus(nilaiUser, jumlahSiswa));
    printf("Total Lulus         : %d\n", totalLulus(nilaiUser, jumlahSiswa));
    return 0;
}

// Function Lulus
int totalLulus(int *inputNilai, int inputJumlahSiswa){
    int i;
    const int kkm = 56; // 统一阈值,逻辑更清晰
    int totalLulus = 0;
    // 修复循环条件
    for( i = 0; i < inputJumlahSiswa; i++ ){
        if (inputNilai[i] >= kkm) {
            totalLulus++;
        } 
    }
    return totalLulus;
}

// Function Tidak Lulus
int totalTidakLulus(int *inputNilai, int inputJumlahSiswa){
    int i;
    const int kkm = 56; // 统一阈值
    int totalTidakLulus = 0;
    // 修复循环条件
    for( i = 0; i < inputJumlahSiswa; i++ ){
        if (inputNilai[i] < kkm) {
            totalTidakLulus++;
        } 
    }
    return totalTidakLulus;
}

// Function Nilai Rata - Rata
int nilaiRataRata(int inputRataRata, int inputJumlahMahasiswa){
    // 修复精度问题,先转浮点数再做除法
    float hasilRataRata = (float)inputRataRata / inputJumlahMahasiswa;
    return (int)hasilRataRata;
}

// Function Nilai Terkecil
int nilaiTerkecil(int *inputNilai, int inputJumlahMahasiswa){
    int i = 0;
    int counter = 100;
    for( i = 0; i < inputJumlahMahasiswa; i++ ){
        if (inputNilai[i] < counter) {
            counter = inputNilai[i];
        } 
    }
    return counter;
}

// Function Nilai Terbesar
int nilaiTerbesar(int *inputNilai, int inputJumlahMahasiswa){
    int i = 0;
    int counter = 0;
    // 修复循环条件
    for( i = 0; i < inputJumlahMahasiswa; i++ ){
        if (inputNilai[i] > counter) {
            counter = inputNilai[i];
        }
    }
    return counter;
}

验证说明

修复后输入测试用例即可得到预期输出:Total Lulus=2,Nilai Terbesar=88。

内容的提问来源于stack exchange,提问作者Nico A.L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:09