題目描述:
題目描述
根據主函數和頭文件提示,編寫子函數void matrixInput(int (*mat)[COL]);
void matrixPrint(int *mat[ROW]);
void matrixAddT(int *mat);
?
分別實現矩陣的輸入,輸出,與自身的轉置相加:void matrixInput(int (*mat)[COL]);: 輸入int類型的矩陣元素,用方陣mat存儲;
void matrixPrint(int *mat[ROW]); :輸出方陣mat中的各個元素;
void matrixAddT(int *mat); :計算方陣mat與自身轉置的和,結果存儲在mat中。
Hint:請注意三個子函數的傳入參數類型各不相同。輸入格式
輸入一個三行三列的方陣 A,每個元素均為 int 類型。輸出格式
輸出一個三行三列的方陣 B,每個元素均為 int 類型,B=A+A
T。輸入樣例1
1 2 3
4 5 6
7 8 9
?
輸出樣例1
2 6 10
6 10 14
10 14 18
?
輸入樣例2
0 1 0
1 0 0
0 0 -1
?
輸出樣例2
0 2 0
2 0 0
0 0 -2
?
算法:
思路:
利用上三角遍歷,實現矩陣轉置相加
代碼實現:
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
# include<ctype.h>
#define ROW 3
#define COL 3void matrixInput(int (*mat)[COL]){for(int i=0;i<3;i++){for(int j=0;j<3;j++){//輸入scanf("%d",&mat[i][j]);}}
}
void matrixPrint(int *mat[ROW]){ for(int i=0;i<3;i++){for(int j=0;j<3;j++){//打印輸出printf("%d ",mat[i][j]);}printf("\n");}
}
void matrixAddT(int *mat){int temp;for(int i=0;i<3;i++){for(int j=i;j<3;j++){//遍歷上三角if(i==j){//對角線上的加自身*(mat+i*3+j)+=*(mat+i*3+j);}else{temp=*(mat+i*3+j);//記錄原值*(mat+i*3+j)+=*(mat+j*3+i);//上邊的要加下邊*(mat+j*3+i)+=temp;//下邊要加上邊的}}}
}