マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第4章 if文(もしもボックス))
第9話 2次元for文
まず、体験していただき詳しくトレースしてから、
2次元for文とif文を組み合わせた様々な課題をこなしていきましょう。
VC++を起動して

if文体験選び、次のコードをコピペしてください。
#include<iostream>//インクルードファイルiostreamの読み込み
#include<conio.h>//while(!_kbhit());を使うためのお呪い
#include<string> //文字列変数を使えるようにするために組み込む
#include <iomanip> //setprecisionを使えるように組み込む
#include <cmath>//powなどを使うときに必要
#include <ctime>//time()(←現時刻発生する関数)を使うために必要
using namespace std;//coutを使うときに必要なお呪い
void 2次元for文();//横と縦の2方向を持つ2次元for文体験
int main() {//私は社長だ。
2次元for文();
while (!_kbhit());//待機させるための命令
return(0);//int main()終わるためのお呪い
}
void 2次元for文() {
//横と縦の2方向を持つ2次元for文体験
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << 3 * i + j + 1;
}
cout << endl;
}
}
実行画面

(
1 2 3
4 5 6
)
初心者には難解な2次元for文をトレースしましょう。
以下のトレースは色を対応させて読んでください。
トレース対象3 * i + j + 1
| j = 0 | あ | j = 1 | あ | j = 2 | |||||||||||||||
| i = 0 | 3 * 0 + 0 + 1 = 1 | 3 * 0 + 1 + 1 = 2 | 3 * 0 + 2 + 1 = 3 | ||||||||||||||||
| i = 1 | 3 * 1 + 0 + 1 = 4 | 3 * 1 + 1 + 1 = 5 | 3 * 1 + 2 + 1 = 6 | ||||||||||||||||
少し2次元for文() のコードを修正します。
void 2次元for文() {
//横と縦の2方向を持つ2次元for文体験
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << 3 * i + j + 1;
}
cout << endl;
}
}
実行画面

(
1 2 3
4 5 6
7 8 9
)
修正版のトレース
トレース対象3 * i + j + 1
| j = 0 | あ | j = 1 | あ | j = 2 | |||||||||||||||
| i = 0 | 3 * 0 + 0 + 1 = 1 | 3 * 0 + 1 + 1 = 2 | 3 * 0 + 2 + 1 = 3 | ||||||||||||||||
| i = 1 | 3 * 1 + 0 + 1 = 4 | 3 * 1 + 1 + 1 = 5 | 3 * 1 + 2 + 1 = 6 | ||||||||||||||||
| i = 2 | 3 * 2 + 0 + 1 = 7 | 3 * 2 + 1 + 1 = 8 | 3 * 2 + 2 + 1 = 9 |
では次話への課題です。
void 2次元for文() {
//横と縦の2方向を持つ2次元for文体験
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (4 * i + j + 1 < 10)cout << " ";
cout << ? * i + j + 1;
}
cout << endl;
}
}
実行画面

(
1 2 3 4
5 6 7 8
9 10 11 12
)
まず、?には何の数字を入れればよいでしょうか。
それから、トレースしてください。
第4章第8話へ 第4章第10話へ
本講義トップへ