sol21 2017-05-05 16:17 采纳率: 80%
浏览 1319
已采纳

C语言float二维数组无法正常传递到函数

题目

输入5个学生的数学、英语、物理和计算机4门课的成绩,调用函数计算每个学生的总分,返回最高总分和最低总分。
提示:在主函数中输入数据、显示最高总分和最低总分

我的代码

#include
#include
int max = 0, min =10000,zongfen[2] = { 0};
int f2(int a, int b);
int f1(int a, int b);
int fa(int a);
int fi(int **a);
void main()
{
int **a=0;
int i,j;
a = (int
)malloc(sizeof(int*)*3);
for (i= 0; i <=5; i++)
a[i] = (int*)malloc(sizeof(int)*5);

printf("***陈岑_Exam09_SheJi的运行结果:***\n");
for (i=0; i < 2; i++)
{
    printf("请依次输入学生的数学英语物理计算机成绩:");
    for (j = 0; j < 4; j++)
    {
        scanf("%f", &a[i][j]);
    }
}
max = fa(a);
min = fi(a);
printf("最高分是%.1f,最低分是%.1f", max, min);
 for (i= 0; i <=4; i++)
   free(a[i]);
    free(a); 

}
int f2(int a, int b)
{
return (a > b ? a : b);

}
int f1(int a, int b)
{
return (a <b ? a : b);

}
int fa(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i=0; i <2; i++)
{for (j=0; j < 4; j++)
zongfen[i] =zongfen[i]+ a[i][j];}
for (i = 0; i < 2; i++)
max = f2(max, zongfen[i]);
return max;
}
int fi(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i=0; i < 2; i++)
{for (j=0; j < 4; j++)
zongfen[i]= zongfen[i]+a[i][j];}
for (i = 0; i < 2; i++)
min = f1(min, zongfen[i]);
return min;
}

求大家帮帮忙,看了五个小时了怎么都找不出原因……谢谢!

  • 写回答

3条回答 默认 最新

  • 战在春秋 2017-05-05 23:50
    关注

    需要注意的几个地方:

    • for循环的范围和数组定义的大小要一致,否则会发生越界错误。
    • 输入输出语句的格式字符串与变量类型要一致。
    • 如果想输出浮点数格式,变量应为double或者float类型,输出格式类似%5.1f
    • 更正代码以整型数调试

    更正后的代码如下:

    #include <stdio.h>  
    #include <stdlib.h>
    
    int max = 0, min = 10000, zongfen[2] = { 0 };
    int f2(int a, int b);
    int f1(int a, int b);
    int fa(int **a);
    int fi(int **a);
    void main()
    {
        int **a = 0;
        int i, j;
        a = (int **)malloc(sizeof(int*) * 2);//此行原来代码有错误,修改为此。
        for (i = 0; i < 2; i++)
            a[i] = (int*)malloc(sizeof(int) * 4);
        printf("***陈岑_Exam09_SheJi的运行结果:***\n");
        for (i = 0; i < 2; i++)
        {
            printf("请依次输入学生的数学英语物理计算机成绩:\n");
            for (j = 0; j < 4; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
        max = fa(a);
        min = fi(a);
        printf("最高分是%d,最低分是%d", max, min);
        for (i = 0; i < 2; i++)
            free(a[i]);
        free(a);
    }
    int f2(int a, int b)
    {
        return (a > b ? a : b);
    }
    int f1(int a, int b)
    {
        return (a <b ? a : b);
    }
    int fa(int **a)
    {
        int zongfen[2] = { 0 };
        int i, j;
        for (i = 0; i <2; i++)
        {
            for (j = 0; j < 4; j++)
                zongfen[i] = zongfen[i] + a[i][j];
        }
        for (i = 0; i < 2; i++)
            max = f2(max, zongfen[i]);
        return max;
    }
    int fi(int **a)
    {
        int zongfen[2] = { 0 };
        int i, j;
        for (i = 0; i < 2; i++)
        {
            for (j = 0; j < 4; j++)
                zongfen[i] = zongfen[i] + a[i][j];
        }
        for (i = 0; i < 2; i++)
            min = f1(min, zongfen[i]);
        return min;
    }
    

    测试结果如图:

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd