永发信息网

c语言函数返回数组

答案:4  悬赏:0  手机版
解决时间 2021-11-07 18:20
  • 提问者网友:原来太熟悉了会陌生
  • 2021-11-07 03:16
c语言函数返回数组
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-11-07 03:41
你好!
    将函数采用指针的形式返回平均值
    
 注意看后面的注释

#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 
}
全部回答
  • 1楼网友:舍身薄凉客
  • 2021-11-07 05:24

函数是无法返回数组的,只能返回指针,但返回指针的弊端是指针指向的内存不能是函数的局部变量的。所以还得用传出参数,有两个办法,一是直接用一个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;
    }
}
  • 2楼网友:猎心人
  • 2021-11-07 04:52

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

  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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯