c - 被告知我的 C 程序是 "hard coded",我不明白为什么

标签 c programming-languages

我提交了在线 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/

相关文章:

c# - 语言特性 vs 框架特性

c++ - memcpy 如何处理指向数组的指针?

在 gcc 内联 x86_64 程序集中约束 r10 寄存器

programming-languages - 是否有稳定的 Web 编程编程语言?

programming-languages - Swift 中带和不带 @ 的关键字

programming-languages - 您可以使用哪些语言即时动态重写函数?

c - 从文件中读取句子

c - 在 C 编程中编辑和删除输入

c - main.c :(. text+0x324): 未定义对 `sqrt' 的引用

programming-languages - 哪种编程语言允许即时更新任何类?