2维数组和打印列和行的平均值

时间:2011-11-07 20:30:01

标签: c multidimensional-array

我仍然是C编程的初学者,我需要一点帮助为我的C编程类编写代码。

提示符为:此程序的输入是位于名为textfile94的文件中的浮点数据的二维数组。输入数组将包含3行数据,每行包含5列数据。

  • 我希望你使用动态内存的双下标方法 分配
  • 使用malloc创建一个包含指针的数组。
  • 该数组的每个元素都指向另一个数组,即数据行。
  • 在循环中使用malloc来创建行。
  • 然后你可以使用两个下标运算符[r] [c]来获取你的数据 进行程序要求的求和和求平均值。
  • 此程序要求硬编码2D阵列的高度和宽度, 提前知道(实际上是3x5)。
  • 我希望您不要在代码中写入字面数字 创建一个全局常量变量来保存这些维度,并使用 那些在您的代码中。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define int rows = 3;
#define int columns = 5;

float array[rows][columns];

int main(int argc, char* argv[]){
    FILE* fin;
    float x;
    int i,j;
    int* array;

    fin = fopen("textfile94", "r");
    fscanf(fin,"%f", &x);
    array =(int*) malloc(rows* sizeof(int*));

    for(i=0;i<rows;i++){
            for(j=0;j<columns;j++)
              array[i]=(int*)malloc(columns* sizeof(int));
    }
    printf("The Average values for the three rows are:[%f]",array[i]);
    printf("The Average values for the five columns are:[%f]", array[j]);
    return 0;
}

在文本文件中:4.33 5.33 1.11 99.00 100.00 1.0 33.3 12.5 1.1 -1000.00 22.1 11.9 2.4 8.3 8.9

该程序应输出: 三行的平均值为:41.95 -190.42 10.32 五列的平均值为:9.14 16.84 5.33 36.13 -297.7

无法正确执行此操作,任何帮助将不胜感激。我不想要我想从中学到的答案,但只是需要一些提示。谢谢。

更新代码:

#include <stdio.h>
#include <stdlib.h>

#define ROWS 3
#define COLUMNS 5

float array[ROWS][COLUMNS];

int main(int argc, char* argv[]){

FILE* fin;
int i;
float x;
float** array;

fin = fopen("textfile94", "r");
array=(float**) malloc(ROWS*sizeof(float*));
    for(i=0;i<ROWS;i++)
      array[ROWS]=(float*)malloc(COLUMNS*sizeof(float));
    for(j=0;j<COLUMNS;j++){
      fscanf(fin,"%f",&x);
      x = array[ROWS][COLUMNS];
}
printf("The Average values for the three rows are:%f", array[ROWS]);
printf("The Average values for the five columns are:%f", array[COLUMNS]);
return 0;
}

2 个答案:

答案 0 :(得分:3)

好的,我会看到我可以添加的内容。

定义不是这样写的,按惯例应该都是大写的

#define ROWS 3
#define COLUMNS 5

他希望你通过malloc动态分配数组,你现在静态地分配一个2维浮点数组,然后你尝试强制插入数组。您应该查看如何使用malloc执行多维数组。

基本上你想要的是

float **array;

现在array是指向float的指针,然后为浮点数指定数组指针数。

ROWS * sizeof(float*)

之后,你可以为每一行分配数组[row]和

COLUMNS * sizeof(float)

现在你有了你的数组[ROWS] [COLUMNS]结构

在pythonesque伪代码中读取数据的一种方法是

for(row 1..3)
    array[row] = malloc(...)
    for(col 1..5)
        fscanf(value)
        array[row][col] = value

告诉我,如果我太模糊,试图在不给出代码的情况下给出提示。

答案 1 :(得分:0)

这应该让你开始学习如何分配数组,分配和访问值,然后释放内存。为清楚起见,省略了错误检查。很可能您需要验证calloc实际上是否返回了有效指针。

要完成程序,您必须将值读入数组,然后计算平均值。

#include <stdlib.h>
#include <stdio.h>

const size_t rows = 3;
const size_t columns = 5;

int main(void)
{
    size_t i, j;
    /* allocate a two-dimensional array of zeroes */
    double **array = calloc(1, rows * sizeof(double *));
    for (i = 0; i < rows; ++i) {
        array[i] = calloc(1, columns * sizeof(double));
    }
    /* print it out - replace this by reading in values */
    for (i = 0; i < rows; ++i) {
        for (j = 0; j < columns; ++j) {
            fprintf(stdout, "%.2f", array[i][j]);
            fputc(' ', stdout);
        }
        fprintf(stdout, "\n");
    }
    /* TODO loop through the array again and average the data */
    /* free memory */
    for (i = 0; i < rows; ++i) {
        free(array[i]);
    }
    free(array);
    return EXIT_SUCCESS;
}