p.119 for文のネスト
・for文の中にif文が記述できるように、for文の中にfor文を記述できる。
・形式の中に同型の形式を置くことを入れ子・ネストという。
・回数指定のforの場合、二重繰り返しにすることで、2次元構造を表現しやすい
・for文のネストでカウンタ変数を用いる場合、名前は変えること(主に、外側から順にi、j、kとすることが多い)
・ネスト数の制限はない
for文の中でカウンタ変数の初期化するネストの例:
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 20; k++) {
Console.WriteLine("{0}年{1}組{2}番", i + 1, j + 1, k + 1); //6×5×20=600回実行
}
}
}
p.119 kuku01.cs
//p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
Console.WriteLine("{0} * {1} = {2}", i, j, i * j); //毎回実行(81回)
}
Console.WriteLine("------------"); //×9の後に実行(9回)
}
}
}
アレンジ演習:p.119 kuku01.cs
・下記のような九九表にしよう 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 ヒント ・81回繰返す文はWriteLineではなくWriteにする ・表示はi * jのみで、3桁にしよう(p.29) ・9回繰返す文は改行のみのWriteLineにする
作成例
//p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
アレンジ演習:p.119 kuku01.cs つづき
・下記のような段数までの九九表にしよう 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81
作成例① ムダが大きいバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
if (j <= i) { //段数までなら
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
作成例② 無駄を省いたバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
if (j > i) { //段数を超えたら
break; //内側の繰り返しは終了
}
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
作成例③ 最も無駄のないバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= i; j++) { //×1から×iについて繰返す
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
p.121(Math.PIフィールド)
・C#が提供する定数(p.39)の1つがMath.PIで、Mathクラスに含まれる(クラスは7章で後述) ・Math.PIには適当な精度の円周率が格納されている
p.121 Math.Sinメソッド
・C#が提供するメソッド(p.19)の1つがMath.Sinで、三角関数サインの機能 ・ただし、受け取る値(引数)の単位は度ではなくラジアン値 ・ラジアン値は180度を円周率とする値。つまり180度はMath.PI、360度はMath.PI×2 ・受け取る値(引数)はdouble型で得られる結果もdouble型 ・例:Console.WriteLine(Math.Sin(Math.PI)) ⇒ 0.0
p.122 Math.Roundメソッド
・C#が提供するメソッド(p.19)の1つがMath.Roundで、四捨五入の機能 ・受け取る値(引数)はdouble型で得られる結果もdouble型 ・例:Console.WriteLine(Math.Round(2.56)) ⇒ 3.0
p.121 sin01.cs
//p.121 sin01.cs
using System;
class sin01 {
public static void Main() {
double s; //計算用(角度ごとのsin値を格納する)
//0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
s = Math.Sin(a); //サイン値を得る
Console.Write("{0,7:#.#####}:", s); //小数点以下5桁まで全7桁でサイン値を表示
//サイン値が1の時に50回になるように繰返す
for (int i = 1; i <= Math.Round(s * 50); i++) {
Console.Write("*"); //サイン値に比例する数だけ"*"を表示
}
Console.WriteLine(); //最期の"*"後に改行
}
}
}
アレンジ演習:p.121 sin01.cs
・1行目の「0.0」が表示されず、小数点の位置がずれていることを改善しよう ・小数点以下を5桁固定で末尾の0を省略しないようにしよう
作成例
//アレンジ演習:p.121 sin01.cs
using System;
class sin01 {
public static void Main() {
double s; //計算用(角度ごとのsin値を格納する)
//0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
s = Math.Sin(a); //サイン値を得る
Console.Write("{0,7:#.00000}:", s); //小数点以下5桁まで全7桁でサイン値を表示
//サイン値が1の時に50回になるように繰返す
for (int i = 1; i <= Math.Round(s * 50); i++) {
Console.Write("*"); //サイン値に比例する数だけ"*"を表示
}
Console.WriteLine(); //最期の"*"後に改行
}
}
}
提出:アレンジ演習:p.121 sin01.cs