方陣轉置 163 PEX7-9 與求和P166 EXE7-7
輸入一個正整數n(1<=n<=6),根據下式生成n階方陣,將該方陣轉置(行列互換)后輸出。
a[i][j] = i*n+j+1
#include <stdio.h> int main() { int n; printf("輸入方陣維數: \n"); scanf("%d", &n); int a[n][n]; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { a[i][j] = i*n+j+1; } } //以上是二維數組初始化 printf("initiation:\n"); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { printf("%3d", a[i][j]); } printf("\n"); } //以上是輸出初始化的結果 int temp; for (int i=0; i<n; i++) { for (int j=0; j<i; j++) { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; } } //以上是轉置的思路與代碼 printf("\nafter transposition:\n"); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { printf("%3d", a[i][j]); } printf("\n"); } //以上是轉置后的矩陣轉出 return 0; }
運行結果:
輸入方陣維數: 5 initiation: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 after transposition: 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25
在本題的基礎上,如果需要求該矩陣除副對角線,最后一列和最后一行以外的所有元素之和:
代碼可以這樣寫:
#include <stdio.h> int main() { int n; printf("輸入方陣維數: \n"); scanf("%d", &n); int a[n][n]; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { a[i][j] = i*n+j+1; } } //以上是二維數組初始化 printf("initiation:\n"); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { printf("%3d", a[i][j]); } printf("\n"); } //以上是輸出初始化的結果 int sum = 0; for (int i=0; i<n-1; i++) { //讓i<n-1,而非i<n,可以直接不循環最后一行; for (int j=0; j<n-1; j++) { //同理,讓j<n-1,而非j<n,可以直接不循環最后一列; if (i+j != (n-1)) { //副對角線元素特點是i+j=n-1,這里的條件剛好排除副對角元素 sum += a[i][j]; } } } printf("sum = %d\n", sum);

浙公網安備 33010602011771號