第6講 配列
第5話 もとの行列・左右反転した行列・上限反転した配列・転置行列のすべての表示
を実現するプログラム例
#include<stdio.h> //prinf()を使えるようにするためにインクルード
#include<stdlib.h> //rand()を使用できるようにインクルード
#include <time.h> //time()を使用できるようにインクルード
void f();
int main() {
f();
return(0);
}
void f() {
int a[3][4], i, j; //配列aと制御変数i,jの宣言
//srand((unsigned)time(NULL)); //乱数の系列決定するシード値を現在時刻から取得
//ランダムデータ発生
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
a[i][j] = rand() % 100;
}
}
//データ表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[i][j]<10)printf(" %d ", a[i][j]);
if (a[i][j] >= 10)printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
//左右反転した行列の表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[i][3 - j]<10)printf(" %d ", a[i][3 - j]);
if (a[i][3 - j] >= 10)printf("%d ", a[i][3 - j]);
}
printf("\n");
}
printf("\n");
//上下反転した行列の表示
for (i = 0; i<3; i++) {
for (j = 0; j<4; j++) {
if (a[2-i][j]<10)printf(" %d ", a[2-i][j]);
if (a[2-i][j] >= 10)printf("%d ", a[2-i][j]);
}
printf("\n");
}
printf("\n");
//転置行列の表示
for (i = 0; i<4; i++) {
for (j = 0; j<3; j++) {
if (a[j][i]<10)printf(" %d ", a[j][i]);
if (a[j][i] >= 10)printf("%d ", a[j][i]);
}
printf("\n");
}
}
社員f()の負担が大きすぎますので、
社員f()はデータ発生のみを担当して、
もとの行列の表示・左右反転行列の表示・上限反転行列の表示・転置行列の表示
をそれぞれ異なる社員にやらせたいところですが、
配列を送る方法を学んでいない段階では仕方がありません。
第8講の関数(2)において、分業を実現しますが、
現時点で
は妥協するしかありません。
次は、3次元配列
int a[3][10][5]; //最初の添え字は学期、2番目の添え字は出席番号、3番目は各教科に対応
を利用して、成績一覧表
をつくりましょう。
データはもちろん100未満のランダムデータです。
表示位置の調整は試行錯誤するよりありません。
出席番号は1桁と2桁の場合分け、
教科得点については、1桁と2桁と3桁の場合分けをして、
if文で対応するしかありません。
3次元for文と3次元配列になり初心者には難しい課題ですが、
30分粘りましょう。
30分試行錯誤してうまくいかないときは次話をクリック!