我提交了在线 C 编程类(class)的作业,但由于我的程序是“硬编码的”这一事实而被停靠了很多,而且我看不出它如何被视为“硬编码”,因为我要求用户输入。以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define IMAX 3
#define JMAX 4
int main()
{
float a[IMAX][JMAX];
float avgrow[5];
float avgcol[5];
int i,j;
char c;
printf ("This program will allow you to enter numbers for 3 rows and 4 columns from left to right then filling down, and take the averages of the rows and columns and list them next to the row and under the columns. You may use decimals but only 2 will display in the results. Press enter!\n");
scanf ("%c",&c);
printf("Enter 12 numbers here for your rows and columns:\n");
for(i = 0; i < IMAX; i++)
{
for(j = 0; j < JMAX; j++)
{
scanf("%f",&a[i][j]);
}
}
for(j = 0; j < JMAX; j++)
{
avgrow[0] = (a[0][0]+a[0][1]+a[0][2]+a[0][3])/JMAX;
avgrow[1] = (a[1][0]+a[1][1]+a[1][2]+a[1][3])/JMAX;
avgrow[2] = (a[2][0]+a[2][1]+a[2][2]+a[2][3])/JMAX;
}
for(i=0; i < IMAX; i++)
{
avgcol[0] = (a[0][0]+a[1][0]+a[2][0])/IMAX;
avgcol[1] = (a[0][1]+a[1][1]+a[2][1])/IMAX;
avgcol[2] = (a[0][2]+a[1][2]+a[2][2])/IMAX;
avgcol[3] = (a[0][3]+a[1][3]+a[2][3])/IMAX;
}
printf(" Column1 Column2 Column3 Column4 Row Average\n\n");
printf("%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\n",a[0][0],a[0][1],a[0][2],a[0][3],avgrow[0]);
printf("%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\n",a[1][0],a[1][1],a[1][2],a[1][3],avgrow[1]);
printf("%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\n",a[2][0],a[2][1],a[2][2],a[2][3],avgrow[2]);
printf("\n");
printf("%8.2f\t%8.2f\t%8.2f\t%8.2f\t\n",avgcol[0],avgcol[1],avgcol[2],avgcol[3]);
return 0;
}
所有它应该做的是制作一个 3 行和 4 列的二维数组,然后取行的平均值并将其显示在表格中的行旁边。比取列的平均值并将它们显示在表格中的列下方。
这是他对我的作业的评论“好吧,你得到了正确的答案,但是在处理二维数组时,你应该使用嵌套的 for 循环。不是一个 for 循环,然后是很多“硬编码”值进入程序。”
任何破译这个的帮助将不胜感激,因为我直到现在才终于理解编程。
最佳答案
首先,谈论一个程序是否被硬编码是没有意义的。相反,人们会谈论被硬编码的特定值。这意味着您将它们的值直接写入代码,而不是将它们放在可以轻松更改的常量或变量中。
在这种情况下,您硬编码的值是行数和列数。你确实有这些常量,但你并没有始终如一地使用它们。也就是说,如果您更改常量以将数组转换为 5x5 数组,您的代码现在会中断,因为部分代码仍然像 3x4 数组一样工作。
具体而言,您的代码中有两个循环,您通过明确拼出该范围内的每个索引而不是使用循环来访问索引 [0][0] 到 [2][3]。这意味着如果您更改 IMAX 和 JMAX,它仍将使用那些不再正确的相同索引。
因此您的数组索引是硬编码的,更改数组维度会破坏您的程序。
关于c - 被告知我的 C 程序是 "hard coded",我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684729/