2016-07-28 93 views
1

所以我新的C,並試圖寫一個程序,增加兩個矩陣錯誤而c運算兩個矩陣的總和

程序1

#include <stdio.h> 
int main(){ 
int m,n,o,p,i,j; 
int mat1[m][n]; 
int mat2[m][n]; 
int result[m][n]; 
printf("enter the number of rows and columns for matrix "); 
scanf("%i%i",&m,&n); 
printf("enter elements of matrix one :"); 
for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     scanf("%i",&mat1[i][j]); 
    } 
} 
printf("enter the elements of matrix two:"); 
for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     scanf("%i",&mat2[i][j]); 
    } 
} 
for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     result[i][j]=mat1[i][j]+mat2[i][j]; 
    } 
} 

printf("the sum of the matrices are"); 
for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     printf("%i",result[i][j]); 
    } 
} 
return 0; 

} 

由此產生任何錯誤

方法2

當我使用的功能在輸入的值兩個矩陣,它產生以下錯誤

25 24 C:\Users\Hp\my-programs\matrix-entry-function.cpp [Error] invalid types 'int[int]' for array subscript 
25 35 C:\Users\Hp\my-programs\matrix-entry-function.cpp [Error] invalid types 'int[int]' for array subscript 

代碼:

#include <stdio.h> 

int mat_entry(int m,int n) 
{ 
    printf("enter the rows and columns of matrix "); 
    scanf("%i%i",&m,&n); 
    int mat[m][n]; 
    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      printf("\nenter the %i'th element %i'th row :",j+1,i+1); 
      scanf("%i",&mat[i][j]); 
     } 
    } 
} 

int main() 
{ 
    int a,b,c,d,e,f,m,n; 
    int res[m][n]; 
    int mat1=mat_entry(a,b); 
    int mat2=mat_entry(c,d); 

    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      res[i][j]=(mat1[i][j]+mat2[i][j]); 
     } 
    } 
} 
+0

在開始編寫這樣的代碼之前,您應該學習一些關於指針和範圍的內容...... – LPs

+1

爲什麼在編寫C代碼時使用'cpp'擴展? – MikeCAT

+0

我在Dev-C++編譯器中編寫了這個代碼 –

回答

3

你的程序1 發生不產生誤差。你不走運。您通過使用具有自動存儲持續時間的未初始化變量中的值來調用未定義行爲,這些值是不確定的。您必須聲明mat1,mat2result讀數mn

int main(){ 
int m,n,o,p,i,j; 
printf("enter the number of rows and columns for matrix "); 
scanf("%i%i",&m,&n); 
/* move these declaretions after reading number of rows and columns */ 
int mat1[m][n]; 
int mat2[m][n]; 
int result[m][n]; 
printf("enter elements of matrix one :"); 

你的程序調用2使用的函數的返回值沒有return陳述未定義行爲。還使用[]運算符和兩個具有類型int的操作數是錯誤的。 E1[E2]相當於(*((E1)+(E2)))N1570 6.5.2.1數組下標,段落2),因此它的一個操作數必須是一個指針(包括從數組轉換而來的一個)。

要返回矩陣作爲函數的返回值,請考慮使用結構併爲元素分配內存。

0

您已經使用

int mat1=mat_entry(a,b); 
int mat2=mat_entry(c,d); 

而不是發送參數從一個功能到另一個,它會工作,只有當你把變量的指針,在這裏你必須要麼使用mat1mat2爲指針,或者你有使它們成爲整數矩陣。

0

沒有一件事你做錯了我的朋友。 你甚至沒有使用動態內存分配,但仍然試圖用未定義的值聲明矩陣。試着運行你的代碼,即使你的第一個代碼不會運行。 我已經糾正了你的代碼爲您提供:

#include <stdio.h> 
int main(){ 
int m,n; 
printf("enter the number of rows and columns for matrix "); 
scanf("%i%i",&m,&n); 
int mat1[m][n]; 
int mat2[m][n]; 
int result [m][n]; 
int i,j; 

printf("enter elements of matrix one :"); 
for(i=0;i<m;i++){ 
for(j=0;j<n;j++){ 
    scanf("%d",&mat1[i][j]); 
} 
    } 
    printf("enter the elements of matrix two:"); 
for(i=0;i<m;i++){ 
for(j=0;j<n;j++){ 
    scanf("%d",&mat2[i][j]); 
} 
} 
for(i=0;i<m;i++){ 
for(j=0;j<n;j++){ 
    result[i][j]=mat1[i][j]+mat2[i][j]; 
    } 
    } 
printf("the sum of the matrices are"); 
for(i=0;i<m;i++){ 
for(j=0;j<n;j++){ 
    printf("%d",result[i][j]); 
} 
    } 
    return 0; 

} 

我不認爲這將是很難把這個功能集成到一個功能。試一試

0

除非使用動態分配(在這個階段你可能不想這麼做),否則編寫一個用戶可以提供維度的函數是不可能的。

幸運的是,你並不需要那個!由於所有你想要的是添加矩陣,他們應該有相同的尺寸,並且你只想詢問用戶一次尺寸是什麼。之後,填寫兩個矩陣,然後執行「添加」部分。

即:

int main() 
{ 
    int a,b,c,d,e,f,m,n; 
    printf("enter the rows and columns of matrix "); 
    scanf("%i%i",&m,&n); 
    int res[m][n]; 
    int mat1[m][n]; 
    int mat2[m][n]; 

    mat_entry(m, n, mat1); // fill matrix 1 
    mat_entry(m, n, mat2); // fill matrix 2 

    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      res[i][j]=(mat1[i][j]+mat2[i][j]); 
     } 
    } 
} 

功能mat_entry沒有返回值(即void),但它接收到的矩陣通過指針來填充(細節有點複雜,但語法是直接):

void mat_entry(int m,int n, int mat[m][n]) 
{ 
    ... 
} 

裏面的代碼是如你所說的一樣,減去尺寸要求:

for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      printf("\nenter the %i'th element %i'th row :",j+1,i+1); 
      scanf("%i",&mat[i][j]); 
     } 
    }