講義メモ ・p.25「変数のデータを表示する」から アレンジ演習フォロー: 「p.25 変数のデータを表示する」の3~4行目 ① 新たに「a25.cs」を作って「sample.cs」の内容をコピーする ② Console.WriteLine(…)の1行を、「p.25 変数のデータを表示する」の3~4行目で置き換える ③ 実行結果を確認 作成例 //a25.cs アレンジ演習 「p.25 変数のデータを表示する」の3~4行目 using System; class a25 { public static void Main() { int age = 20; //32ビット整数型変数ageを20で初期化(宣言と同時に初期値を代入) Console.WriteLine("私の年齢は" + age + "歳です"); //文字列と変数の整数値と文字列を連結して表示 } } p.25 変数のデータを表示する(つづき) ・宣言済の変数は代入の左辺(代入先)に用いるのであれば、初期化は不要(代入によって初期値が決まる) ・初期化や代入がされていない(値が格納されていない)変数は代入の右辺などには使えない(文法エラーになる) p.25 text01.cs //p.25 text01.cs using System; class Text01 { public static void Main() { int a = 10, b = 20, total; //32ビット整数型変数a、bを初期化、totalを宣言 total = a + b; //aに格納されている値とbに格納されている値の和を得てtotalに代入 Console.WriteLine(a + " + " + b + " = " + total); //変数の整数値と文字列を順に連結して表示 } } アレンジ演習:p.25 text01.cs(書換) ・32ビット整数型変数cを追加し、30で初期化しよう ・これも含めて合計値を計算し「10 + 20 + 30 = 60」と表示されるようにしよう 作成例 //アレンジ演習:p.25 text01.cs using System; class Text01 { public static void Main() { int a = 10, b = 20, c = 30, total; //32ビット整数型変数a、b、cを初期化、totalを宣言 total = a + b + c; //a、b、cに格納されている値の和を得てtotalに代入 Console.WriteLine(a + " + " + b + " + " + c + " = " + total); //変数の整数値と文字列を順に連結して表示 } } アレンジ演習:p.25 text01.cs:続き ・変数の初期化には値を用いるが、初期化済の変数を使う式も指定できる ・このことを利用して、プログラムを1行減らそう 作成例 //アレンジ演習:p.25 text01.cs using System; class Text01 { public static void Main() { int a = 10, b = 20, c = 30, total = a + b + c; //32ビット整数型変数a、b、c、totalを初期化 Console.WriteLine(a + " + " + b + " + " + c + " = " + total); //変数の整数値と文字列を順に連結して表示 } } p.26 変数のデータを表示する:計算を表示において行う ・単純な計算であれば、表示において行えば、中間的な(作業用の)変数は不用になる ・処理効率も上がるので理解を ・ただし、表示で連結を行う場合、優先順位の変更に留意しよう p.26 text02.cs //p.26 text02.cs using System; class Text02 { public static void Main() { int a = 10, b = 20; //32ビット整数型変数a、bを初期化 Console.WriteLine(a + " + " + b + " = " + (a + b)); //カッコ内を計算後、連結して表示 } } アレンジ演習:p.26 text02.cs ・テキストp.26の通り「(a + b)」のカッコを消すと「10 + 20 = 1020」となることを確認しよう 作成例 //アレンジ演習:p.26 text02.cs using System; class Text02 { public static void Main() { int a = 10, b = 20; //32ビット整数型変数a、bを初期化 Console.WriteLine(a + " + " + b + " = " + a + b); //連結して表示 } } p.26 変数のデータを表示する:式の評価順序 ・式の内容を実行することを評価といい、実行結果を評価値(または評価)という ・例えば、式「1 + 2」の評価値は 3 となる ・例えば、式「1 + 2 + 4」は「1 + 2」の評価値の 3 に、4を加えた結果、全体の評価値は7となる ・式の評価は基本的に左から行うが、カッコ内を優先する ・式「a + " + " + b + " = " + (a + b)」の評価順序:  ① 式「(a + b)」と変数a、bの値により評価(両方が数値なので加算)が行われ評価値は整数「30」  ② 式「a + " + "」と変数aの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + "」  ③ 式「"10 + " + b」と変数bの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + 20"」  ④ 式「"10 + 20" + " = "」により評価(両方が文字列なので連結)が行われ評価値は文字列「"10 + 20 = "」  ⑤ 式「"10 + 20" + ①の評価値」により評価((片方が文字列なので連結)が行われ評価値は文字列「"10 + 20 = 30"」 ・式「a + " + " + b + " = " + a + b」の評価順序:  ① 式「a + " + "」と変数aの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + "」  ② 式「"10 + " + b」と変数bの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + 20"」  ③ 式「"10 + 20" + " = "」により評価(両方が文字列なので連結)が行われ評価値は文字列「"10 + 20 = "」  ④ 式「"10 + 20 = " + a」と変数aの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + 20 = 10"」  ⑤ 式「"10 + 20 = 10" + b」と変数bの値により評価(片方が文字列なので連結)が行われ評価値は文字列「"10 + 20 = 1020"」 アレンジ演習:p.26 text02.cs ・テキストp.26の通り「(a + b)」のカッコを戻してから「(a - b)」とすると動作することを確認しよう ・また、カッコをはずすとエラーになることを確認しよう(2項-演算子には文字列は左辺右辺共に指定できないので) 作成例 //アレンジ演習:p.26 text02.cs using System; class Text02 { public static void Main() { int a = 10, b = 20; //32ビット整数型変数a、bを初期化 Console.WriteLine(a + " + " + b + " = " + a - b); //エラーになる(「文字列 - 整数」になるので) } } p.27 WriteLineメソッドとWriteメソッド ・Console.WriteLineメソッドはカッコないの値または式の評価値をコンソールに出力し、末尾に改行コードを付加する ・よって「表示して改行」することになる ・表示のみで改行せず、次の表示を続きにしたければ、WriteLineの代わりにWriteメソッドを用いると良い ・なお「Console.WriteLine()」とすると、改行のみを行うことができる p.27 text03.cs //p.27 text03.cs using System; class Text03 { public static void Main() { Console.Write("あ"); //文字列を表示(改行しない) Console.Write("い"); //文字列を表示(改行しない) Console.Write("う"); //文字列を表示(改行しない) Console.Write("え"); //文字列を表示(改行しない) Console.Write("お"); //文字列を表示(改行しない) Console.WriteLine(); //改行のみを行う } } p.28 フォーマット指定子を使った変数の表示 ・文字列と変数の連結による表示には、以下の欠点がある  ・出来上がりのイメージがつかみづらい  ・同じ変数を複数回連結すると読みづらくなる ・そこで、変数値を当てはめるフォーマット指定子{0}{1}{2}…を文字列に埋め込んでConsole.WriteLine/Writeに変数と共に渡すことができる 例: int a = 10; Console.WriteLine("aは{0}", a); ⇒ 「aは10」と表示 ・なお、変数値ではなくリテラルや式でもOK 例: Console.WriteLine("{0}は3倍速い", "シャア"); ⇒ 「シャアは3倍速い」と表示 例: Console.WriteLine("1 + 2 = {0}", 1 + 2); ⇒ 「1 + 2 = 3」と表示 ・{1}{2}…を用いることで、複数の変数値やリテラルや式を指定できる 例: Console.WriteLine("{0}は{1}倍速い", "シャア", 3); ⇒ 「シャアは3倍速い」と表示 例: Console.WriteLine("{0} + {1} = {2}", 1, 2, 1 + 2); ⇒ 「1 + 2 = 3」と表示 例: Console.WriteLine("HISCORE : {0}", hiscore); ⇒ hiscoreの値が12345なら「HISCORE : 12345」と表示 ・同じフォーマット指定子を複数回利用できる 例: Console.WriteLine("{0}は3倍速いので{0}は脅威", "シャア"); ⇒ 「シャアは3倍速いのでシャアは脅威」と表示 例: int a = 10; Console.WriteLine("{0} + {0} = {1}", a, a + a); ⇒ 「10 + 10 = 20」と表示 p.28 text04.cs //p.28 text04.cs using System; class Text04 { public static void Main() { int x = 10; //32ビット整数型変数xを初期化 Console.WriteLine("x = {0}", x); //"x = 10"を表示 Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10); //"x = 10, xの10倍は100です"を表示 Console.WriteLine("{0}は{1}ですが、{2}は{1}ではありません", "猫", "ほ乳類", "トカゲ"); //"猫はほ乳類ですが、トカゲはほ乳類ではありません"を表示 } } ミニ演習 mini029a.cs ・p.26 Text02.csをフォーマット指定子を利用して改良しよう(連結は行わないようにしよう) 作成例 //ミニ演習 mini029a.cs using System; class Text02 { public static void Main() { int a = 10, b = 20; //32ビット整数型変数a、bを初期化 Console.WriteLine("{0} + {1} = {2}", a, b, a + b); //改良 } } p.29 桁数の指定 ・フォーマット指定子の拡張機能として、桁数と表示フォーマットを指定できる ・桁数のみを指定するには「{番号, 桁数}」とすれば良い ・この桁数は表示の制限ではなく、確保する大きさで、大きさを値が上回る場合、桁数指定は無視される ・例えば、"ABC"を4桁で表示すると、"A"の前に1つ空白が入る ・例えば、"ABCDE"を4桁で表示すると、"ABCDE"のままになり、桁数指定は無視される ・よって、複数のデータの表示を揃えたり、見やすくするための技法になっている ・なお、前に空白を入れることを右揃えともいう ・また、桁数の前に「-」を指定すると(見かけ上、負の数にすると)後ろに空白を入れる左揃えになる 活用例: int a = 12, b = 345, c = 6789; Console.WriteLine("{0, 5}", a); //「 12」と表示 Console.WriteLine("{0, 5}", b); //「 345」と表示 Console.WriteLine("{0, 5}", c); //「 6789」と表示 p.30 text05.cs // text05.cs using System; class text05 { public static void Main() { int x = 10, y = 123456789; Console.WriteLine("12345678901234567890123456789"); Console.WriteLine("{0, 10}", "abc"); //前に7個空白 Console.WriteLine("{0, 5}", "def"); //前に2個空白 Console.WriteLine("{0, 0}", "ghi"); //前に0個空白 Console.WriteLine("{0, 10}{1, 10}", "あ", "い"); //前に9個空白、前に9個空白、 Console.WriteLine("{0, -10}{1, -10}", "あ", "い"); //後に9個空白、後に9個空白 Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //前に3個空白、桁数指定無視 } } p.30 標準書式指定文字を使った書式の指定 ・C#が定める標準書式指定文字を桁数指定と主に用いると表示形式の編集が効率化される ・なお、表2.1の中にはあまり使われてないものもあるので丸暗記は不用 ・便利なのは「C」の通貨形式(前に\をつけて3桁カンマ区切り)や「P」のパーセント形式(小数値からパーセンテージにする) ・16進数に変換して表示する「X」、小数点以下桁数を指定して四捨五入できる「Fn」も便利(nは小数点以下桁数) p.31 text06.cs //p.31 text06.cs using System; class text06 { public static void Main() { Console.WriteLine("D{0, 10:D}", 123); //前に7個空白 Console.WriteLine("X{0, 10:X}", 123); //16進数7Bに変換、前に8個空白 Console.WriteLine("E{0, 10:E}", 123.456); //1.234560E+002 指数表記 Console.WriteLine("F{0, 10:F}", 123.456); //123.46 小数点以下2桁に丸める Console.WriteLine("F{0, 10:F5}", 123.456); //123.45600 小数点以下5桁 Console.WriteLine("C{0, 10:C}", 123456); //¥123,456 通貨形式 Console.WriteLine("N{0, 10:N}", 1234.4568); //1,234.46 カンマ区切り Console.WriteLine("P{0, 10:P}", 0.05); //5% パーセント表記 Console.WriteLine("G{0, 10:G}", 123.456); //この場合、Fn表記と同様 } } 提出:ミニ演習 mini029a.cs 次回予告:p.32「カスタム書式指定文字を使った書式の指定」から