我仍然是C编程的初学者,我需要一点帮助为我的C编程类编写代码。
提示符为:此程序的输入是位于名为textfile94的文件中的浮点数据的二维数组。输入数组将包含3行数据,每行包含5列数据。
这是我的代码:
#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;
}
答案 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;
}