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

C语言数组查找最小值函数运行异常及传参问题求助

报错原因说明

你修改后的nilaiTerkecil函数中使用了inputNilai[i]的下标访问写法,但参数声明为int inputNilai是单个整型变量,并非数组/指针类型,无法执行下标运算,因此编译器会提示需要指针类型的参数。

数组作为参数传入自定义函数的方法

C语言中数组传入函数时,本质传递的是数组首元素的内存地址,形参有两种等价的声明方式:

  • 指针形式声明:int nilaiTerkecil(int *inputNilai, int inputJumlahMahasiswa)
  • 数组形式声明:int nilaiTerkecil(int inputNilai[], int inputJumlahMahasiswa)
    调用时直接传递数组名即可,不需要加下标,示例调用写法:kecil = nilaiTerkecil(nilaiUser, jumlahSiswa);
原有代码其他导致结果错误的问题
  1. 数组下标访问错误:C语言数组下标从0开始计数,你输入循环中i从1遍历到jumlahSiswa,会越界访问nilaiUser[jumlahSiswa],触发未定义行为。
  2. 最小值函数逻辑错误:原有nilaiTerkecil函数在循环第一次判断时就会执行return,不会遍历完整数组,无法正确比对所有元素得到最小值。
  3. 函数调用时机错误:你将nilaiTerkecil的调用放在输入循环内部,每次输入一个值就调用一次,最终kecil存储的是最后一次输入(65)的调用结果,和预期逻辑不符,应该在所有值输入完成后再调用一次最小值函数即可。
  4. 函数声明不匹配:原有头部的函数声明没有指定参数列表,和后续定义的参数不匹配,需要同步修改。
  5. 平均值函数精度问题:两个int类型做除法会自动截断小数部分,如果需要保留小数可以将返回值改为float类型。
修正后的完整代码
#include <stdio.h>
    
// 修正函数声明,匹配后续定义的参数列表
float nilaiRataRata(int inputRataRata , int inputJumlahMahasiswa);
int nilaiTerkecil(int inputNilai[], int inputJumlahMahasiswa);
int nilaiTerbesar();
int totalLulus();
int totalTidakLulus();
    
int main(){
    int i;
    int jumlahSiswa;

    printf("Masukan Jumlah Siswa : "); 
    scanf("%d", &jumlahSiswa);
    
    // 声明数组
    int nilaiUser[jumlahSiswa];
    int jumlahNilai = 0;
    int kecil;
    
    // 输入所有值,下标从0开始
    for(i = 0; i < jumlahSiswa; i++ ){
        printf("Masukan Nilai Mahasiswa Ke-%d : ", i+1); 
        scanf("%d", &nilaiUser[i]);
        jumlahNilai += nilaiUser[i];
    }
    // 所有值输入完成后再调用最小值函数
    kecil = nilaiTerkecil(nilaiUser, jumlahSiswa);
    
    printf("Rata Ratanya adalah : %.2f\n", nilaiRataRata(jumlahNilai, jumlahSiswa));
    printf("Kecil : %d ", kecil);
    return 0;
}
    
// 平均值函数修改返回值为float保留小数
float nilaiRataRata(int inputRataRata , int inputJumlahMahasiswa ){
    return (float)inputRataRata / inputJumlahMahasiswa;
}
    
// 修正后的最小值函数
int nilaiTerkecil(int inputNilai[], int inputJumlahMahasiswa ){
    int i;
    // 初始值设为数组第一个元素,避免预设100大于所有元素的异常情况
    int counter = inputNilai[0];
    for(i = 1; i < inputJumlahMahasiswa; i++ ){
        if (inputNilai[i] < counter) {
            counter = inputNilai[i];
        }
    }
    // 遍历完全部元素后再返回结果
    return counter;
}

内容的提问来源于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.28 01:54:03