永发信息网

c语言函数返回数组

答案:4  悬赏:0  手机版
解决时间 2021-11-07 18:20
c语言函数返回数组
最佳答案
你好!
    将函数采用指针的形式返回平均值
    
 注意看后面的注释

#include
int main()
{
float *student_aver(float array[3][3]);   // 改成指针的形式输出 
float score[3][3];
float *a;
int i,j;
printf("请输入学生各科的成绩:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
printf("每个学生的平均成绩分别为:");

a=student_aver(score);                // 指针 a 接收函数的返回值 
for(i=0;i<3;i++)                      // 打印出平均值 
printf("%.2f ",a[i]);
return 0;
}
float *student_aver(float array[3][3])    // 改成指针的形式输出
{
int i,j;
float sum,a[3];
for(i=0;i<3;i++)
{
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
a[i]=sum/3;
   }
return a;                             // 输出数组 a 
}
全部回答

函数是无法返回数组的,只能返回指针,但返回指针的弊端是指针指向的内存不能是函数的局部变量的。所以还得用传出参数,有两个办法,一是直接用一个array就搞定,另它的每一行的最后一列是计算出来的平均值;另一个方法就是再传入进去一个指针,返回平均数。第一种可以不修改当前接口直接改,但如果无所谓还是第二种比较好,代码如下:

void student_aver(float array[3][3], float average[3]) {
    int i, j;
    float sum;
    for (i = 0; i < 3; i++) {
        sum = 0;
        for(j=0;j<3;j++)
    sum=sum+array[i][j];
average[i] = sum/3;
    }
}

方法有不少,这里给出两种:

  1. 把需要返回结果的数组作为一个参数传入,函数在运算过程中填写这个数组的各个项的值,函数执行完后这个数组中的内容就是需要的内容了,这是第一种做法。

  2. 把需要返回的数组malloc出来,返回后再试用完成后再free

第一种

#include
int main()
{
    void student_aver(float score[3][3], float averge[3]);
    float score[3][3];
    float average[3];
    int i,j;
    printf("请输入学生各科的成绩:");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf("%f",&score[i][j]);
    printf("每个学生的平均成绩分别为:");
    student_aver(score, average);
    for(i=0;i<3;i++)
        printf("%.2f ",average[i]);
    return 0;
}
void student_aver(float score[3][3], float average[3])
{
    int i,j;
    float sum;
    for(i=0;i<3;i++)
    {
        sum=0;
        for(j=0;j<3;j++)
            sum=sum+score[i][j];
        average[i]=sum/3;
   }
}

第二种:

#include
#include
int main()
{
    float* student_aver(float score[3][3]);
    float score[3][3];
    float *average;
    int i,j;
    printf("请输入学生各科的成绩:");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf("%f",&score[i][j]);
    printf("每个学生的平均成绩分别为:");
    average = student_aver(score);
    for(i=0;i<3;i++)
        printf("%.2f ",average[i]);

    free(average);
    return 0;
}
float* student_aver(float score[3][3])
{
    float *average = (float*)malloc(sizeof(float) * 3);
    int i,j;
    float sum;
    for(i=0;i<3;i++)
    {
        sum=0;
        for(j=0;j<3;j++)
            sum=sum+score[i][j];
        average[i]=sum/3;
   }

    return average;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
崇恩不动产这个地址在什么地方,我要处理点事
指头背鼓起来咋么回事
公布一个骗子的微信
疾风之刃风狐浮游营地黄昏怎么进?前置条件是
被困浮冰逃生记的阅读答案
麦仁的做法大全,麦仁怎么做好吃
请问诈骗八万零五百元,要退赃交罚金判刑多少
Wphone7 教程中Bob Tabor老师背景墙壁的超级
为什么目前的家庭很少人用凹面电磁炉
飞信必须要加好友才能发信息吗
厶怎么读音是什么
陇上羊归塞草烟的“塞”是读sai(四声)、sai
27.8岁一多长时间正常
airserver for mac 破解版怎么用
求急不求穷是什么意思?
推荐资讯
重机绣花机271和391有什么区别
八点钟发的信息十点钟才回之后就没说是正常的
钟祥那个理发店最好?
星尘传说里面的魔法材料是干什么用的?
有没有人买过老北京糖画机,或者糖画机。用,
奔驰s280发动机型号是多少
舞蹈跪下腰前软翻翻歪是怎么回事
厨房地面长是42分米,宽是36分米,如果用正方型
牛耳教育怎么样?
从宝琳港铁站到福田口岸怎么坐公交车,最快需
26岁的男人应该做什么?
11.5万公顷等于多少平方公里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?