【问题标题】:C Function Unexpected ResultC 函数意外结果
【发布时间】:2021-12-20 01:00:31
【问题描述】:

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

然后当我插入超过 4 个 jumlahSiswa 时,函数 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;

【问题讨论】:

  • 注意:C 数组从 0 开始索引。声明 myArray[10] 的数组中的第一个元素是 myArray[0] 并且元素 myArray[10] 不存在,访问它是未定义的行为。跨度>
  • 谢谢你帮助我????
  • 为什么不提供适当的函数原型?你意识到在调用你的函数之前你需要声明,但你为什么停在参数列表上?

标签: arrays c loops for-loop function-definition


【解决方案1】:

如果数组包含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 类型是没有意义的,因为它被分配了一个整数,而且函数的返回类型为int。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2019-07-03
    相关资源
    最近更新 更多