I create function totalLulus (Counts how many people that pass from int kkm), and nilaiTerbesar (Find the highest number from nilaiUser), but when I input number less than 56(kkm), the function totalLulus will send the output 1, but I expected to 0, because it means nobody pass from the kkm.
And then when I insert jumlahSiswa more than 4, function nilaiTerbesar will send the output random number like 1975579936, it makes me confusing till now😅, can somebody tell me why?, here's my code thankyou
#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;
}
I expected : Total Lulus = 2; Nilai Terbesar = 88;
If an array has N
elements then the valid range of indices is [0, N)
.
But you are using invalid indices through the program as for example
// Input Nilai
for( i = 1; i <= jumlahSiswa; i++ ){
printf("Masukan Nilai Mahasiswa Ke-%d : ", i); scanf("%d", &nilaiUser[i]);
jumlahNilai += nilaiUser[i];
}
or
for( i = 0; i <= inputJumlahSiswa; i++ ){
if ( inputNilai[i] > kkm )
{
totalLulus++;
}
}
Also in this function
// Function Nilai Rata - Rata
int nilaiRataRata( int inputRataRata , int inputJumlahMahasiswa ){
float hasilRataRata;
hasilRataRata = inputRataRata/inputJumlahMahasiswa;
return hasilRataRata;
}
there is no sense to declare the variable hasilRataRata
as having the type float because it is assigned with an integer and moreover the function has the return type int.
And use English words for naming identifiers.