2016-04-21 40 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