Post by huangno1 on Feb 24, 2017 9:15:35 GMT -8
程式說明
日前小美利用程式幫助自己學習數學的成效非常好,使得小美決定再接再厲,繼續利用這種方法學習數學。
今天小美想要練習矩陣相乘,只是矩陣相乘對於小美來說有一點困難,因此小美希望同學可以繼續協助她完成程式。
輸入說明
1. 請依序輸入4個整數a, b, c, d,分別代表矩陣A的列、A的行、B的列、B的行
(0<a, b, c, d<=10)
2. 依序輸入A矩陣的元素(a*b個)
3. 依序輸入B矩陣的元素(c*d個)
輸出說明
1. 請輸出"矩陣A*B的結果為:",並輸出A*B的結果,A*B的結果請以欄位寬度4表示。
2. 若A的行不等於B的列,則輸出"A的行不等於B的列, 請重新輸入:",並請使用者重新輸入4個整數a, b, c, d
範例輸入
2 2 2 1
1 2 3 4
1 3
#include<stdio.h>
#include<stdlib.h>
#define row 10
#define col 10
int main()
{
/*
i, j, k: 迴圈控制變數
A, B: 欲相乘的兩個矩陣(大小預設列:10, 行:10)
ans: 記錄答案的矩陣
row_A, row_B, col_A, col_B: A, B矩陣的列與行
*/
int i, j, k, A[row][col], B[row][col], ans[row][col] ;
int row_A, col_A, row_B, col_B;
//輸入A, B矩陣的列與行
scanf("%d %d %d %d", &row_A, &col_A, &row_B, &col_B);
//若A的行與B的列不符,則要求重新輸入
while ( col_A != row_B )
{
printf ( "A的行不等於B的列, 請重新輸入:\n" ) ;
scanf ("%d %d %d %d", &row_A , &col_A , &row_B , &col_B ) ;
}
//依序輸入A, B矩陣內容
for ( i = 1 ; i <= row_A ; i ++ )
{
for ( j = 1 ; j <= col_A ; j ++ )
scanf ( "%d" , &A [ i - 1 ] [ j - 1 ] ) ;
}
for ( i = 1 ; i <= row_B ; i ++ )
{
for ( j = 1 ; j <= col_B ; j ++ )
scanf ( "%d" , &B [ i - 1 ] [ j - 1 ] ) ;
}
//將記錄答案的矩陣初始為0
for ( i = 0 ; i < row ; i ++ )
{
for ( j = 0 ; j < col ; j ++ )
ans [ i ] [ j ] = 0 ;
}
//計算A*B
for ( i = 1 ; i <= row_A ; i ++)
{
for ( j = 1 ; j <= col_B ; j ++ )
{
for ( k = 1 ; k <= col_A ; k++ )
ans [ i - 1 ] [ j - 1 ] += A [ i - 1 ] [ k - 1 ] * B [ k - 1 ] [ j - 1 ] ;
}
}
//輸出結果
printf("矩陣A*B的結果為:\n");
for ( i = 1 ; i <= row_A ; i ++ )
{
for ( j = 1 ; j <= col_B ; j ++ )
printf ( "%4d" , ans [ i - 1 ] [ j - 1 ] ) ;
printf ( "\n" ) ;
}
system("pause");
return 0;
}
日前小美利用程式幫助自己學習數學的成效非常好,使得小美決定再接再厲,繼續利用這種方法學習數學。
今天小美想要練習矩陣相乘,只是矩陣相乘對於小美來說有一點困難,因此小美希望同學可以繼續協助她完成程式。
輸入說明
1. 請依序輸入4個整數a, b, c, d,分別代表矩陣A的列、A的行、B的列、B的行
(0<a, b, c, d<=10)
2. 依序輸入A矩陣的元素(a*b個)
3. 依序輸入B矩陣的元素(c*d個)
輸出說明
1. 請輸出"矩陣A*B的結果為:",並輸出A*B的結果,A*B的結果請以欄位寬度4表示。
2. 若A的行不等於B的列,則輸出"A的行不等於B的列, 請重新輸入:",並請使用者重新輸入4個整數a, b, c, d
範例輸入
2 2 2 1
1 2 3 4
1 3
#include<stdio.h>
#include<stdlib.h>
#define row 10
#define col 10
int main()
{
/*
i, j, k: 迴圈控制變數
A, B: 欲相乘的兩個矩陣(大小預設列:10, 行:10)
ans: 記錄答案的矩陣
row_A, row_B, col_A, col_B: A, B矩陣的列與行
*/
int i, j, k, A[row][col], B[row][col], ans[row][col] ;
int row_A, col_A, row_B, col_B;
//輸入A, B矩陣的列與行
scanf("%d %d %d %d", &row_A, &col_A, &row_B, &col_B);
//若A的行與B的列不符,則要求重新輸入
while ( col_A != row_B )
{
printf ( "A的行不等於B的列, 請重新輸入:\n" ) ;
scanf ("%d %d %d %d", &row_A , &col_A , &row_B , &col_B ) ;
}
//依序輸入A, B矩陣內容
for ( i = 1 ; i <= row_A ; i ++ )
{
for ( j = 1 ; j <= col_A ; j ++ )
scanf ( "%d" , &A [ i - 1 ] [ j - 1 ] ) ;
}
for ( i = 1 ; i <= row_B ; i ++ )
{
for ( j = 1 ; j <= col_B ; j ++ )
scanf ( "%d" , &B [ i - 1 ] [ j - 1 ] ) ;
}
//將記錄答案的矩陣初始為0
for ( i = 0 ; i < row ; i ++ )
{
for ( j = 0 ; j < col ; j ++ )
ans [ i ] [ j ] = 0 ;
}
//計算A*B
for ( i = 1 ; i <= row_A ; i ++)
{
for ( j = 1 ; j <= col_B ; j ++ )
{
for ( k = 1 ; k <= col_A ; k++ )
ans [ i - 1 ] [ j - 1 ] += A [ i - 1 ] [ k - 1 ] * B [ k - 1 ] [ j - 1 ] ;
}
}
//輸出結果
printf("矩陣A*B的結果為:\n");
for ( i = 1 ; i <= row_A ; i ++ )
{
for ( j = 1 ; j <= col_B ; j ++ )
printf ( "%4d" , ans [ i - 1 ] [ j - 1 ] ) ;
printf ( "\n" ) ;
}
system("pause");
return 0;
}