C 函数意外结果

C Function Unexpected Result

我创建了函数 totalLulus(计算从 int kkm 传来的人数)和 nilaiTerbesar(从 nilaiUser 中查找最大数字),但是当我输入小于 56(kkm) 的数字时,函数 totalLulus 将发送输出1,但我期望为0,因为这意味着没有人从kkm经过。

然后当我插入 jumlahSiswa 超过 4 个时,函数 nilaiTerbesar 将发送输出随机数,如 1975579936,这让我直到现在都很困惑,有人能告诉我为什么吗?这是我的代码谢谢

#include <stdio.h>

int nilaiRataRata();
int nilaiTerkecil();
int nilaiTerbesar();
int totalLulus();
int totalTidakLulus();

int main(){
    int i;
    int jumlahSiswa;


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

    // Declare Array Size & More
    int nilaiUser[jumlahSiswa];
    int jumlahNilai = 0;

    // Input Nilai
    for( i = 1; i <= jumlahSiswa; i++ ){
        printf("Masukan Nilai Mahasiswa Ke-%d : ", i); 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 ));
}


// Function Lulus
int totalLulus( int *inputNilai, int inputJumlahSiswa ){
    int i;
    int kkm = 55;
    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;
    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;

    hasilRataRata = inputRataRata/inputJumlahMahasiswa;
    return 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;
}

The Result

我预计: 总卢卢斯 = 2; Nilai Terbesar = 88;

如果数组有 N 个元素,则索引的有效范围是 [0, N)

但是您在程序中使用了无效索引,例如

// Input Nilai
for( i = 1; i <= jumlahSiswa; i++ ){
    printf("Masukan Nilai Mahasiswa Ke-%d : ", i); scanf("%d", &nilaiUser[i]);
    jumlahNilai += nilaiUser[i];
}

for( i = 0; i <= inputJumlahSiswa; i++ ){
    if ( inputNilai[i] > kkm )
    {
        totalLulus++;
    } 
}

也在这个函数中

// Function Nilai Rata - Rata
int nilaiRataRata( int inputRataRata , int inputJumlahMahasiswa ){
    float hasilRataRata;

    hasilRataRata = inputRataRata/inputJumlahMahasiswa;
    return hasilRataRata;
}

将变量 hasilRataRata 声明为 float 类型是没有意义的,因为它被分配了一个整数,而且该函数具有 return 类型 int。

并使用英文单词命名标识符。