[← 演習のページへ戻る]
サンプルプログラム 5 の内容SIZE × SIZE の行列 A, B を読み込み,A+B を別の行列 C として格納する.その後に,A, B, C の内容を表示する. なお,SIZE はマクロとして定義する. 1: #include <stdio.h> 2: 3: #define SIZE 2 4: 5: int main(void){ 6: int a[SIZE][SIZE], b[SIZE][SIZE], c[SIZE][SIZE]; 7: int i, j; 8: 9: printf("行列 A の各要素を入力してください:\n"); 10: for ( i = 0; i < SIZE; i++ ){ 11: for ( j = 0; j < SIZE; j++ ){ 12: scanf("%d", &a[i][j]); 13: } 14: } 15: 16: printf("行列 B の各要素を入力してください:\n"); 17: for ( i = 0; i < SIZE; i++ ){ 18: for ( j = 0; j < SIZE; j++ ){ 19: scanf("%d", &b[i][j]); 20: } 21: } 22: 23: for ( i = 0; i < SIZE; i++ ){ 24: for ( j = 0; j < SIZE; j++ ){ 25: c[i][j] = a[i][j] + b[i][j]; 26: } 27: } 28: 29: printf("\n"); 30: printf("A = \n"); 31: for ( i = 0; i < SIZE; i++ ){ 32: for ( j = 0; j < SIZE; j++ ){ 33: printf("%3d", a[i][j]); 34: } 35: printf("\n"); 36: } 37: 38: printf("\n"); 39: printf("B = \n"); 40: for ( i = 0; i < SIZE; i++ ){ 41: for ( j = 0; j < SIZE; j++ ){ 42: printf("%3d", b[i][j]); 43: } 44: printf("\n"); 45: } 46: 47: printf("\n"); 48: printf("A + B = \n"); 49: for ( i = 0; i < SIZE; i++ ){ 50: for ( j = 0; j < SIZE; j++ ){ 51: printf("%3d", c[i][j]); 52: } 53: printf("\n"); 54: } 55: 56: return 0; 57: } プログラムの基本的な流れこのプログラムでは,(数学でいうところの)行列を 2 次元配列を使って表現しています. 例えば,
9-14 行目: printf("...."); for ( i = 0; i < SIZE; i++ ){ ... }8: 9: printf("行列 A の各要素を入力してください:\n"); 10: for ( i = 0; i < SIZE; i++ ){ 11: for ( j = 0; j < SIZE; j++ ){ 12: scanf("%d", &a[i][j]); 13: } 14: } 15:行列 A の内容を二重の for 文を使って読み込んでいます. 外側の for 文(制御変数 i )が行列の「行」に対応し, 内側の for 文(制御変数 j )が行列の「列」に対応します. したがって,for 文の繰り返しによって, a[0][0], a[0][1], a[1][0], a[1][1] の順に scanf で読み込みが行われます. 例えば,
23-27 行目: for ( i = 0; i < SIZE; i++ ){ ... }22: 23: for ( i = 0; i < SIZE; i++ ){ 24: for ( j = 0; j < SIZE; j++ ){ 25: c[i][j] = a[i][j] + b[i][j]; 26: } 27: } 28:ここでは行列 A と B の足し算を実現しています. 内容は単純で,A の (i,j) 成分と B の (i,j) 成分を足したものを C の (i,j) 成分として求めています. 例えば,
|