[← 演習のページへ戻る]
サンプルプログラム 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) 成分として求めています. 例えば,
|
||||||||||||