【发布时间】:2011-12-23 21:15:00
【问题描述】:
我仍然是 C 编程的初学者,我需要一些帮助来为我的 C 编程课程编写代码 . 提示是: 该程序的输入是位于名为 textfile94 的文件中的浮点数据的二维数组。输入数组将包含 3 行数据,每行 包含 5 列数据的行。
- 我希望您使用动态内存分配的双下标方法。
- 使用 malloc 创建一个包含指针的数组。
- 该数组的每个元素都指向另一个数组,即行 数据。
- 在循环中使用 malloc 来创建行。
- 然后您可以使用两个下标运算符 [r][c] 来获取您的数据 进行程序要求的求和和平均。
这个程序要求硬编码二维数组的高度和宽度,提前知道(实际上是 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("%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[rows]);
printf("The Average values for the five columns are:%f", array[columns]);
return 0;
}
【问题讨论】:
-
您不需要单独分配每个整数。您可以一次分配它们,例如:
int* array; array = malloc(x * sizeof(int));,然后使用array[i]访问每个位置。 -
为什么我在 malloc 之前不需要 int*?我不是用它作为指针吗?这也是我老师对这个问题的看法:我希望你使用动态内存分配的二下标方法。使用 malloc 创建一个包含指针的数组。该数组的每个元素都指向另一个数组,即数据行。在循环中使用 malloc 来创建行。然后,您可以使用两个下标运算符 [r][c] 来获取您的数据,以进行程序要求的求和和平均......
-
请阅读我之前在我的 cmets 中提供给您的c-Faq link,它详细解释了这一点。
-
你对我投了反对票,因为你真的不值得赞叹
标签: c multidimensional-array dynamic-memory-allocation