有关优化此C程序的建议?

时间:2011-03-28 19:31:55

标签: c arrays optimization nested-loops

想知道我是否有办法缩小这个程序。我不喜欢5个printf / scanf对的外观,但我想不出使用for循环缩小它的方法。将scanf调用与printf调用匹配时遇到问题。

for(i = 1; i < 6; i++)
    printf("Enter row %d", i);

这部分很简单,但是,对阵列中的scanf调用和赋值让我很困惑。

//Sums row and column
#include <stdio.h>

int main(void) {

    int a[5][5];
    int row[5] = {0}, col[5] = {0};
    int i, j;

    printf("\t--Enter a 5x5 chart--\n");
    printf("\tEnter row #1: ");
    scanf("%d %d %d %d %d", &a[0][0], &a[0][1], &a[0][2], &a[0][3], &a[0][4]);

    printf("\tEnter row #2: ");
    scanf("%d %d %d %d %d", &a[1][0], &a[1][1], &a[1][2], &a[1][3], &a[1][4]);

    printf("\tEnter row #3: ");
    scanf("%d %d %d %d %d", &a[2][0], &a[2][1], &a[2][2], &a[2][3], &a[2][4]);

    printf("\tEnter row #4: ");
    scanf("%d %d %d %d %d", &a[3][0], &a[3][1], &a[3][2], &a[3][3], &a[3][4]);

    printf("\tEnter row #5: ");
    scanf("%d %d %d %d %d", &a[4][0], &a[4][1], &a[4][2], &a[4][3], &a[4][4]);

    for(i = 0; i < 5; i++) {
            for(j = 0; j < 5; j++) {
                    row[j] += a[j][i];
                    col[j] += a[i][j];
            }
    }

    printf("\tRow sums: %d %d %d %d %d\n", row[0], row[1], row[2], row[3], row[4]);
    printf("\tColumn sums: %d %d %d %d %d\n", col[0], col[1], col[2], col[3], col[4]);

    return 0;
}

5 个答案:

答案 0 :(得分:4)

替换:

printf("\tEnter row #1: ");
scanf("%d %d %d %d %d", &a[0][0], &a[0][1], &a[0][2], &a[0][3], &a[0][4]);         
...
printf("\tEnter row #5: ");
scanf("%d %d %d %d %d", &a[4][0], &a[4][1], &a[4][2], &a[4][3], &a[4][4]);

使用:

for (i = 0; i < 5; i++) {
    printf("\tEnter row #%d: ", i+1);
    scanf("%d %d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
}

答案 1 :(得分:0)

以下内容如何阅读输入:

for (int i = 0; i < 5; ++i) {
   printf("\tEnter row #%i: ", i+1);
   scanf("%d %d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
}

答案 2 :(得分:0)

for (int i = 0; i < 5; ++i)
{
    printf ("\tEnter row #%d: ", (i+1));
    scanf("%d %d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
}

答案 3 :(得分:0)

您可以这样做:

int rowIndex;

... 

for(rowIndex = 0; rowIndex < 5; rowIndex++)
{
   printf("\tEnter row #%d: ", rowIndex+1);
    scanf("%d %d %d %d %d", &a[rowIndex][0], &a[rowIndex][1], &a[rowIndex][2], &a[rowIndex][3], &a[rowIndex][4]);
}

答案 4 :(得分:0)