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。
并使用英文单词命名标识符。
我创建了函数 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。
并使用英文单词命名标识符。