2016-04-21 78 views
-1

我已经编写了一个程序来显示一个二维数组并计算列和行的总数。最初在编译时,我得到了total1total2的错误“未初始化本地错误”。然后我将这两个值设置为0,然后总数也变为零。我附上了下面的代码。任何帮助,将不胜感激。先谢谢你。列和行不计算

int main() 
{ 

#define NUMROWS 5 
#define NUMCOLS 5 
    int val[NUMROWS][NUMCOLS] = { 8,3,9,0,10, 
           3,5,17,1,1, 
           2,8,6,23,1, 
           15,7,3,2,9, 
           6,14,2,6,0 }; 

    int total1, total2, sumrow1, sumrow2, sumrow3, sumrow4, sumrow5, sumcol1, sumcol2, sumcol3, sumcol4, sumcol5; 
    total1 = 0; 
    total2 = 0; 

    printf("\n Enter row 1: %2d %2d %2d %2d %2d", val[0][0], val[0][1], val[0][2], val[0][3], val[0][4]); 
    printf("\n Enter row 2: %2d %2d %2d %2d %2d", val[1][0], val[1][1], val[1][2], val[1][3], val[1][4]); 
    printf("\n Enter row 3: %2d %2d %2d %2d %2d", val[2][0], val[2][1], val[2][2], val[2][3], val[2][4]); 
    printf("\n Enter row 4: %2d %2d %2d %2d %2d", val[3][0], val[3][1], val[3][2], val[3][3], val[3][4]); 
    printf("\n Enter row 5: %2d %2d %2d %2d %2d", val[4][0], val[4][1], val[4][2], val[4][3], val[4][4]); 

    printf("\n Row totals: %2d", total1); 

    sumrow1 = val[0][0] + val[0][1] + val[0][2] + val[0][3] + val[0][4]; 
    sumrow2 = val[1][0] + val[1][1] + val[1][2] + val[1][3] + val[1][4]; 
    sumrow3 = val[2][0] + val[2][1] + val[2][2] + val[2][3] + val[2][4]; 
    sumrow4 = val[3][0] + val[3][1] + val[3][2] + val[3][3] + val[3][4]; 
    sumrow5 = val[4][0] + val[4][1] + val[4][2] + val[4][3] + val[4][4]; 

    total1 = total1 + sumrow1 + sumrow2 + sumrow3 +sumrow4 + sumrow5; 

    printf("\n Colum totals: %2d", total2); 

    sumcol1 = val[0][0] + val[0][1] + val[0][2] + val[0][3] + val[0][4]; 
    sumcol2 = val[1][0] + val[1][1] + val[1][2] + val[1][3] + val[1][4]; 
    sumcol3 = val[2][0] + val[2][1] + val[2][2] + val[2][3] + val[2][4]; 
    sumcol4 = val[3][0] + val[3][1] + val[3][2] + val[3][3] + val[3][4]; 
    sumcol5 = val[4][0] + val[4][1] + val[4][2] + val[4][3] + val[4][4]; 

    total2 = total2 + sumcol1 + sumcol2 + sumcol3 + sumcol4 + sumcol5; 

    return 0; 
} 
+4

看看那里您的printf电话是相对于你正在做数学题。首先添加,然后打印。 –

+0

首先您需要添加,然后您可以打印其当前值。执行添加后保留你的'printf'行。 – Himanshu

+0

现在我感觉有点傻了。谢谢您的帮助。 –

回答

1

你的这部分代码:

printf("\n Row totals: %2d", total1); 

sumrow1 = val[0][0] + val[0][1] + val[0][2] + val[0][3] + val[0][4]; 
sumrow2 = val[1][0] + val[1][1] + val[1][2] + val[1][3] + val[1][4]; 
sumrow3 = val[2][0] + val[2][1] + val[2][2] + val[2][3] + val[2][4]; 
sumrow4 = val[3][0] + val[3][1] + val[3][2] + val[3][3] + val[3][4]; 
sumrow5 = val[4][0] + val[4][1] + val[4][2] + val[4][3] + val[4][4]; 

total1 = total1 + sumrow1 + sumrow2 + sumrow3 +sumrow4 + sumrow5; 

实际打印total1第一,然后再计算它。只要您将其初始化为0,它将打印zero

如果你要打印的total1新值,添加printf声明下面你的计算,像这样:

sumrow1 = val[0][0] + val[0][1] + val[0][2] + val[0][3] + val[0][4]; 
sumrow2 = val[1][0] + val[1][1] + val[1][2] + val[1][3] + val[1][4]; 
sumrow3 = val[2][0] + val[2][1] + val[2][2] + val[2][3] + val[2][4]; 
sumrow4 = val[3][0] + val[3][1] + val[3][2] + val[3][3] + val[3][4]; 
sumrow5 = val[4][0] + val[4][1] + val[4][2] + val[4][3] + val[4][4]; 

total1 = total1 + sumrow1 + sumrow2 + sumrow3 +sumrow4 + sumrow5; 
printf("\n Row totals: %2d", total1); 

这同样适用于total2为好。

0

可能,这可能是有用的

#include<stdio.h> 
#define NUMROWS 5 
#define NUMCOLS 5 

int main() 
{ 

    int i,j,a=0; 
    int total1=0,total2=0; 

    int val[NUMROWS][NUMCOLS] = { 8,3,9,0,10, 
          3,5,17,1,1, 
          2,8,6,23,1, 
          15,7,3,2,9, 
          6,14,2,6,0 }; 

    printf("Given Matrix:\n"); 
    for(i=0;i<NUMROWS;i++) 
    { 
     printf("\n"); 
     for(j=0;j<NUMCOLS;j++) 
      printf("%3d",val[i][j]); 
    } 

    printf("\n\nSum of Coloums:\n"); 

    for(i=0;i<NUMROWS;i++) 
    { 
     printf("\n"); 
     for(j=0;j<NUMCOLS;j++) 
      a=a+ val[i][j]; 

     total1=total1 + a; 
     printf("sumrow%d=%3d",i+1,a); 
     a=0; 
    } 

    printf("\n\nSum of Rows:\n"); 

    for(i=0;i<NUMROWS;i++) 
    { 
     printf("\n"); 
     for(j=0;j<NUMCOLS;j++) 
      a=a+ val[j][i]; 

     total2=total2 +a; 
     printf("sumcol%d=%3d",i+1,a); 
     a=0; 
    } 

    printf("\n\ntotal1:%d",total1); 
    printf("\n\ntotal2:%d",total2); 
    getchar(); 
    return 0; 

} 
0

的问题 - 如已经提到的 - 是您要访问一个尚未初始化的变量的值。为了解决这个问题,初始化变量。在你的情况下,你在计算价值之前进行了打印。为了在编译时看到这些错误,告诉你的编译器你想看到每一个警告。对于gcc,你可以通过添加-Wall参数来实现。如果要编译main.c,则应该执行类似gcc -Wall main.c的操作。

除此之外,我强烈建议使用for循环与数组结合使用。这减少了您必须编写的代码量,并使代码更加通用。假设您想要使用6x6阵列而不是5x5阵列。那么你将不得不修改迄今为止编写的所有代码。当使用for循环时,情况并非如此。

我修改了你的程序,打印出2D数组的值,计算出每行和每列的总和并打印出来。这已使用for循环实现。我增加了尽可能多的评论,因为我认为是必要的;如果你不明白的某一部分只问:)

#include<stdio.h> // include this to use printf 

#define NUMROWS 5 
#define NUMCOLS 5 


int main(void) 
{ 
    int val[NUMROWS][NUMCOLS] = { // initialize a 2D-array this way {{row1}, {row2}, ..} 
     {8,3,9,0,10}, 
     {3,5,17,1,1}, 
     {2,8,6,23,1}, 
     {15,7,3,2,9}, 
     {6,14,2,6,0} 
    }; 

    int sumRow[NUMROWS] = { 0 }; // initialize with 0 
    int sumCol[NUMCOLS] = { 0 }; // initialize with 0 

    int i; // i = row 
    int j; // j = col 
    for(i = 0; i < NUMROWS; i++) { // iterate through the array and print out the values and generate the sumRow and sumCol 
     printf("Enter row %d:", i+1); 
     for(j = 0; j < NUMCOLS; j++) { // loop through a row 
      sumRow[i] += val[i][j]; // update the sumRow value for this row 
      sumCol[j] += val[i][j]; // update the sumCol value for this col 
      printf(" %2d", val[i][j]); // print out the current value of row i and col j 
     } 
     printf(" => %2d\n", sumRow[i]); // print the sumRow for the current row 
    } 
    printf("   "); 
    for(j = 0; j < NUMCOLS; j++) { // loop through the col 
     printf(" %2d", sumCol[j]); // print the sumCol for the current col 
    } 

    return (0); 
} 

生成的控制台输出

Enter row 1: 8 3 9 0 10 => 30 
Enter row 2: 3 5 17 1 1 => 27 
Enter row 3: 2 8 6 23 1 => 40 
Enter row 4: 15 7 3 2 9 => 36 
Enter row 5: 6 14 2 6 0 => 28 
      34 37 37 32 21