【问题标题】:Function showing only one column average..?仅显示一列平均值的函数..?
【发布时间】:2019-12-10 20:06:56
【问题描述】:

一点背景故事: 我有这个作业,要求您使用函数和指针编写程序。你应该输入每个电影院整个夏天赚的钱。在某一时刻,您需要找到每个电影院的平均值,然后是每个月的平均值(例如,这会将 7 月份的所有收入相加并除以 5)。到目前为止,我做得还不错,但我被困住了……该程序运行良好,但我无法让它显示所有 3 个月的值。它只显示了第一个月的平均值 3 次.. 对我可以改变什么有什么建议吗?非常感谢您阅读本文,这是一个 cookie 和下面的代码。

#include "genlib.h"
#include <stdio.h>
#include "simpio.h"
#define row 5
#define col 3

void array(int array[row][col]);
void cinemaEarnings(int array[row][col], double *sum);
void columnEarnings(int array[row][col], int colAvg[]);


int main(){

    double sum;

    int array1[row][col];
    int array2[col];


    array(array1);

    cinemaEarnings(array1,&sum);

    columnEarnings(array1,array2);

    return 0;
}

void array(int array[row][col]){

    int i;
    int j;

    for (i=0; i<row; i++){
        printf("CINEMA HALL NUMBER %d\n", i+1);
        for (j=0; j<col; j++){
            printf("Monthly earnings for month number %d: ", j+1);
            array[j][i]=GetInteger();
        }
    }
}

void cinemaEarnings(int array[row][col], double *sum){

    int total;
    int i,j;
    *sum =0;

    for (j=0; j<row; j++){
        for (i=0; i<col; i++){
            *sum += array[i][j];
        }
        total = *sum / 3;
        printf("\nAverage earnings for hall %d: %d\n",j+1, total);
        *sum = 0;
    }
}

void columnEarnings(int array[row][col], int colAvg[]){

    int i,j;
    double sum;

    for (j=0; j<col; j++){
        sum = 0;
        for (i=0; i<row; i++){
            sum+=array[i][j];
            colAvg[j] = sum / row;
        }
    }
    for (i=0; i<col; i++){
        printf("\naverage for month number %d is : %d",i+1, colAvg[j]);
    }
}

【问题讨论】:

  • array[j][i]=GetInteger(); 我想你想要array[i][j]=GetInteger();,否则你写的超出了数组的范围。
  • colAvg[j] = sum / row; 嗯...为什么在columnEarningsinner for 循环中?
  • 如果您将row 更改为hall 并将col 更改为month - 或类似的东西,您的代码会更容易理解。另外,修复缩进。
  • @WhozCraig 它不应该在内部循环中吗?当我把它放在那个循环之外时,它与它在内部时的效果相同。如果我完全摆脱这两个循环,它就会发疯。
  • @DavidRanieri 抱歉,我忘了提到我需要“columnEarnings”方面的帮助。其余的工作正常。

标签: c arrays function pointers


【解决方案1】:

ColumnErnings 函数在索引上有一个基本错误。最后看一下 for 循环,您在索引“i”上循环,并在“colAvg[j]”上使用索引“j”。正确的函数如下:

void columnEarnings(int array[row][col], int colAvg[]){

    int i,j;
    double sum;

    for (j=0; j<col; j++){
        sum = 0;
        for (i=0; i<row; i++){
            sum+=array[i][j];
            colAvg[j] = sum / row;
        }
    }
    for (i=0; i<col; i++){
        printf("\naverage for month number %d is : %d",i+1, colAvg[i]);
    }
}

另外你可以移动“colAvg[j] = sum / row;”嵌套for外的指令是这样的:

void columnEarnings(int array[row][col], int colAvg[]){

        int i,j;
        double sum;

        for (j=0; j<col; j++){
            sum = 0;
            for (i=0; i<row; i++){
                sum+=array[i][j];                    
            }
            colAvg[j] = sum / row;
        }
        for (i=0; i<col; i++){
            printf("\naverage for month number %d is : %d",i+1, colAvg[i]);
        }
    }

这样可以避免在中间步骤更新一个没有意义的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多