2016-07-29 71 views
1

所以我創建了一個程序,它生成一個隨機的4x4矩陣,其值在0到17之間。之後,它會計算並打印每行和列的總和。問題是:(1)行總和值不正確;(2)最後一個元素(即m[4][4])似乎在值上加倍,給第4列的總和也給出了不正確的值。下面是代碼:C - 矩陣上的錯誤打印值

srand(time(NULL)); 

printf("Generating matrix... "); 
getch(); 
printf("\n\n"); 

for (i = 1; i <= 4; i++) { 
    for (j = 1; j <= 4; j++) { 

     m[i][j] = rand() % 17; 
     printf("%d\t", m[i][j]); 

     if (i == 1) {       // Calculation of Row Sums 
      rSum[1] += m[i][j]; 
     } else if (i == 2) { 
      rSum[2] += m[i][j]; 
     } else if (i == 3) { 
      rSum[3] += m[i][j]; 
     } else if (i == 4) { 
      rSum[4] += m[i][j]; 
     } 

     if (j == 1) {      // Calculation of Column Sums 
      cSum[1] += m[i][j]; 
     } else if (j == 2) { 
      cSum[2] += m[i][j]; 
     } else if (j == 3) { 
      cSum[3] += m[i][j]; 
     } else if (j == 4) { 
      printf("\n"); 
      cSum[4] += m[i][j]; 
     } 
    } 
} 

getch(); 
printf("\n\n"); 

for (i = 1; i <= 4; i++) {     // Printing of Values 

    printf("Sum of Row %d: %d\n", i, rSum[i]); 
    printf("Sum of Column %d: %d\n", i, cSum[i]); 
    printf("-----------------------------------------------\n"); 
} 

return 0; 
+0

@ EruelSantos當你的問題得到解決,您應該點擊對勾,幫助你答案旁邊。 – user3386109

回答

4

陣列基於在C. 0你應該改變所有的循環迭代是這樣的:

for (i = 0; i < 4; i++) { 

,改變它,你用明確的索引你的代碼的其他部分值。這部分可以大大簡化。

陣列rSumcSum必須初始化爲0。不這樣做可能會解釋您的程序計算出的錯誤值。

這裏是一個改進版本:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int m[4][4]; 
    int rSum[4] = { 0 }; 
    int cSum[4] = { 0 }; 
    int i, j; 

    srand(time(NULL)); 

    printf("Generating matrix... "); 
    getch(); 
    printf("\n\n"); 

    for (i = 0; i < 4; i++) { 
     for (j = 0; j < 4; j++) { 
      m[i][j] = rand() % 17; 
      printf("%d\t", m[i][j]); 

      rSum[i] += m[i][j]; // Calculation of Row Sums 
      cSum[j] += m[i][j]; // Calculation of Column Sums 
     } 
     printf("\n"); 
    } 

    getch(); 
    printf("\n\n"); 

    for (i = 0; i < 4; i++) {   // Printing of Values 
     printf("Sum of Row %d: %d\n", i, rSum[i]); 
     printf("Sum of Column %d: %d\n", i, cSum[i]); 
     printf("-----------------------------------------------\n"); 
    } 

    return 0; 
} 
+0

謝謝。得到它了。 <3 –