講義メモ ・p.32「カスタム書式指定文字を使った書式の指定」から p.32 カスタム書式指定文字を使った書式の指定 ・書式のパターンの表記法の一つがプレースホルダ ・プレースホルダには、ゼロプレースホルダと、桁プレースホルダがある ・ゼロプレースホルダは指定したゼロの数より値が短いときに、ゼロで埋める形式  例:「0000.00」と指定して、1.2を渡すと「0001.20」となる ・桁プレースホルダは指定した#の数より値が短いときに、スペースで埋める形式  例:「####.##」と指定して、1.2を渡すと「 1.2 」となる ・上記は混在が可能で、全体の桁数を指定することも可能 ・どちらも、値が指定より長い場合は、プレースホルダにはならない ・なお、整数部でプレースホルダとプレースホルダの間にカンマを入れることで3桁カンマ区切りになる ・また、書式指定文字ではない文字を混在させて埋め込んだり、シングルコーテーションで囲むことで書式指定文字を通常文字にすることもできる p.34 テキスト正誤 ・実行結果の1行目の「0001.20」は10桁右詰めになる(左詰めになっているのは誤り) p.33 text07.cs //p.33 text07.cs using System; class Text07 { public static void Main() { Console.WriteLine("{0, 10:0000.00}", 1.2); //「 0001.20」となる Console.WriteLine("{0, 10:####.##}", 1.2); //「 1.2」となる Console.WriteLine(); Console.WriteLine("{0, 10:0,0}", 123456); //「 123,456」となる Console.WriteLine("{0, 10:#,#}", 123456); //「 123,456」となる Console.WriteLine(); Console.WriteLine("{0, 10:0,00000000.00}", 123456); //「000,123,456.00」となる Console.WriteLine("{0, 10:#,########.##}", 123456); //「 123,456 」となる Console.WriteLine(); Console.WriteLine("{0:(000)####-####}", 1132104566); //「011)3210-4566」となる Console.WriteLine("{0, 20:'##'0.00}", 123456); //「 ##123456.00」となる } } p.34 ユーザの入力を知る ・Console.WriteLineの反対がConsole.ReadLineで、コンソールからの実行中の文字列入力が可能 ・「Console.ReadLine()」が実行されると、プログラムは一時停止してコンソールからの入力待ちになる ・そしてEnterキーが押されるまで先にすすまない ・Enterキーの前に入力された文字列がプログラムに渡されて、Console.ReadLine()メソッドの戻り値になる ・この戻り値のデータ型はstring(文字列)型なので、string型の変数を用いて受け取ると良い 例: string ans; //受け取りに用いるstring(文字列)型の変数の宣言 ans = Console.ReadLine(); //入力された文字列が得られたら、ansに代入 ・このまま実行すると真っ黒なコンソールが表示されるだけになり、分かりづらいので、通常「Console.ReadLine();」の実行前に「Console.Write("案内の文字列");」を実行することが多い 例: string ans; //受け取りに用いるstring(文字列)型の変数の宣言 Console.Write("お名前:"); //「お名前:」と表示(改行しない) ans = Console.ReadLine(); //入力された文字列が得られたら、ansに代入 アレンジ演習:p.35 readline01.cs ・実行結果が下記のようになるよう拡張しよう あなたのファーストネームは:Amuro あなたのセカンドネームは:Ray あなたが Amuro Ray さんですね。 ・変数nameをファーストネームのfnameと、セカンドネームのsnameの2つにすると良い 作成例 //アレンジ演習:p.34 readline01.cs using System; class readline01 { public static void Main() { string fname, sname; //【変更】文字列型の2変数の宣言 Console.Write("あなたのファーストネームは何ですか--- "); //【変更】改行しない fname = Console.ReadLine(); //【変更】入力待ちになりEnterを押すと文字列が得られるので代入 Console.Write("あなたのセカンドネームは何ですか--- "); //【変更】改行しない sname = Console.ReadLine(); //【変更】入力待ちになりEnterを押すと文字列が得られるので代入 Console.WriteLine("あなたのお名前は{0} {1}さんですか", fname, sname); //【変更】代入された文字列と表示 } } p.36 練習問題 ex02.cs ヒント ・p.34 readline01.cs をシンプルにすれば良い 作成例(通常版) //p.36 練習問題 ex02.cs using System; class ex02 { public static void Main() { string s; //文字列型の変数の宣言 s = Console.ReadLine(); //入力を得る Console.WriteLine(s); //入力された文字列をそのまま表示 } } 作成例(ややシンプルバージョン:入力文字列で初期化) //p.36 練習問題 ex02.cs using System; class ex02 { public static void Main() { string s = Console.ReadLine(); //入力された文字列で初期化 Console.WriteLine(s); //入力された文字列をそのまま表示 } } 作成例(超シンプルバージョン:入力内容をそのまま表示) //p.36 練習問題 ex02.cs using System; class ex02 { public static void Main() { Console.WriteLine(Console.ReadLine()); //入力された文字列をそのまま表示 } } 第3章 変数とデータ型 p.37 変数の初期化 ・すでに説明した通り、変数の宣言時に初期値を代入することを(変数の)初期化という ・初期化では値や式(定義済の変数を含む)、値を返す処理(メソッド)を記述できる ・初期化に用いられた値を初期値という 例: ① string a = "ABC"; //値"ABC"で初期化。初期値は"ABC" ② string b = a + "DEF"; //aの値"ABC"に"DEF"を連結する式で初期化。初期値は"ABCDEF" ③ string c = Console.ReadLine(); //入力された文字列で初期化。初期値は実行時に確定 p.38(組み込み型とユーザ定義型) ・string、intなどはC#が提供するデータで、予めシステムに組み込まれているので、組み込み型という  例: int a; //組み込み型 ・対して、後述するクラスの定義によって、自由にデータ型をプログラミングでき、これをユーザ定義型という  例: Slime surarin; //ユーザ定義型 p.38(ローカル変数) ・Main()などのメソッドの中において定義した変数をローカル変数という ・ローカル変数の値は宣言時には未定なので、ゴミが入っているとみなされ、そのまま用いるとエラーになる ・よって、ローカル変数の値を用いるには、初期化または値の代入後であること 例: int i; Console.WriteLine(i); //エラーになる p.39 定数 ・変数の初期化において「const」を前置すると、値を変更できない変数になる。これを定数という。 ・書式: const データ型 定数名 = 値または式; ・定数は主に値に名前を付けて使いまわしたい場合に用いる ・例えば、プログラム中に税込み金額を用いる処理が複数ある時、毎回「* 1.1」してしまうと:  ①「1.1」が何を意味するかわからない  ② 税率が変わったら、全ての「* 1.1」を探して変更せねばならない  ③ 式によっては「* 1.1」だったり「+ ● * 0.1」だったりすることがある ・上記を改善するために、税率を定数で定義しておくと良い 例:  const int TAX = 10; //税率10%  int price1 = 500 + (500 * TAX / 100);  Console.WriteLine("税率{0}%だと500円は{1}円になる", TAX, price1); ・なお、定数は初期化が必須になる ・定数に対する代入はエラーになる ・開発チームルールによっては、定数は大文字で表記することがある ミニ演習 mini039.cs ・上の例を参考に、定数を用いるプログラムを作ろう ・また、定数の定義時に初期化しないとエラーになることを確認しよう(確認後、コメントアウト) ・加えて、定数に対する代入がエラーになることを確認しよう(同上) 作成例 //ミニ演習 mini039.cs using System; class mini039 { public static void Main() { const int TAX = 10; //税率10% int price1 = 500 + (500 * TAX / 100); //500円に税を加算 Console.WriteLine("税率{0}%だと500円は{1}円になる", TAX, price1); // const string msg; //初期化していないのでエラー // TAX = 8; //定数には代入できない(値を変更できない)のでエラー } } p.40 値型と参照型 ・変数にはint型などのように大きさが確定しており、宣言で確保した領域に値を格納できるもの(値型)と、そうでない参照型がある ・参照型の代表例がstring型で、宣言で確保した領域とは別の場所に値が置かれ、その位置情報(C言語でいうアドレス)が宣言で確保した領域に格納される 例: string a = "ABC"; はどう処理されるか  ① 文字列"ABC"が記憶域のどこかに置かれる  ② 位置情報の格納に必要な大きさを持つ領域が確保され、変数名aとなる  ③ ①の位置情報が②に格納される(結果的に変数aにより文字列"ABC"が得られるようになる) ・なお、ユーザ定義型の変数も全て参照型になる ・値型と参照型では処理によっては動作が異なることがあるので注意(具体例は後述) p.41 データ型(値型) ・値型には数値用の数値型、文字用の文字型、論理値用の論理型がある ・値型にはC言語から引き継がれた小文字の型名が付けられているが、C#では.NETフレームワークで厳密に定義されている.NET型が用いられている ・プログラマはどちらを用いても良いが、C#が返してくるメッセージやエラーメッセージでは.NET型が使われる ・.NET型は「System.」を前置した名称だが「using System;」があれば省略可能。  ※開発チームルールによっては「using System;」の指定が推奨されない場合がある ・数値型は、整数型、実数型に分けられ、実数型には浮動小数点数型と10進データ型がある p.43 整数型 ・整数はもっと利用頻度が多く、大量のデータを扱うことが多い型なので、格納効率を考えて8種類ある ・1変数の大きさのビット数が4種類あり、2のビット数乗の範囲の数値を格納できる ・また、それぞれにおいて負の数の有無を選択できるので、4種類×有無で8種類。 ・負の数がない型は範囲の全てを0と正の数で利用できる  例: int型は32ビットの負の数有りなので -2,147,483,648~2,147,483,647 が扱える  例:uint型は32ビットの負の数無しなので 0~4,294,967,295 が扱える ・よって、必要に応じて使い分けると良い  ・ 8ビットの負の数有り: sbyte型(System.SByte) -128~127  ・ 8ビットの負の数無し: byte型(System.Byte) 0~255  ・16ビットの負の数有り: short型(System.Int16) -32768~32767  ・16ビットの負の数無し:ushort型(System.UInt16) 0~65535  ・32ビットの負の数有り: int型(System.Int32) -2147483648~2147483647  ・32ビットの負の数無し: uint型(System.UInt32) 0~4294967295  ・64ビットの負の数有り: long型(System.Int64) -9223372036854775808~9223372036854775807  ・64ビットの負の数無し: ulong型(System.UInt64) 0~18446744073709551615 ・なお「u」は「unsigned(符号無し)」の略、「S」は「signed(符号有り)」の略 ・C#システムの内部ではint(Int32)型が標準なので、特に必要がなければint型にすると最も効率が良い ・また、整数リテラルはint型として扱われる(uint型、long型、ulong型にすることも可能:後述) p.44 整数型(MinValueとMaxValue) ・型の値の範囲(最大値、最小値)はプログラム内で用いることがあるので、C#から型名.MinValueと型名.MaxValueとして提供されている ・例えば、int型の最大値は、int.MaxValueで得られる  ※内部的には.NET型の構造体(11章で後述)の中に保持している p.44 type01.cs //p.44 type01.cs using System; class type01 { public static void Main() { Console.WriteLine("sbyte: {0}~{1}", sbyte.MinValue, sbyte.MaxValue); Console.WriteLine("short: {0}~{1}", short.MinValue, short.MaxValue); Console.WriteLine("int: {0}~{1}", int.MinValue, int.MaxValue); Console.WriteLine("long: {0}~{1}",long.MinValue, long.MaxValue); Console.WriteLine(); Console.WriteLine("byte: {0}~{1}", byte.MinValue, byte.MaxValue); Console.WriteLine("ushort:{0}~{1}", ushort.MinValue, ushort.MaxValue); Console.WriteLine("uint: {0}~{1}", uint.MinValue, uint.MaxValue); Console.WriteLine("ulong: {0}~{1}", ulong.MinValue, ulong.MaxValue); } } p.45 整数型(Parse) ・文字列型で与えられた数字列を、特定の整数型に変換できるメソッドとして「整数型.Parse(文字列)」が提供されている 例:  string s = "123456";  int i = int.Parse(s); //iは整数値123456で初期化される ・これは、Console.ReadLine等のように、返す型の型は文字列であるメソッドとペアで用いられる ・Parseで整数化すれば、計算などの整数処理に利用できるようになる ・なお、整数化できないような文字列が与えられてしまうと、実行時点で異常終了する(回避可能:後述) ・また、変換結果の値が型の範囲を超えた場合も、実行時点で異常終了する(〃) p.46 type02.cs //p.46 type02.cs using System; class type02 { public static void Main() { Console.Write("整数を入力してください---"); int x = int.Parse(Console.ReadLine()); //文字列として入力し整数化した値で初期化 Console.WriteLine("今の数字を2倍すると{0}ですね。", x * 2); //整数化したので積算可 Console.Write("あなたの年齢を入力してください---"); ushort age = ushort.Parse(Console.ReadLine()); //文字列として入力し整数化した値で初期化 Console.WriteLine("あと{0}年で100歳ですね", 100 - age); //整数化したので減算可 } } p.47 整数型(変換処理の簡略化) ・type02.csの「int x = int.Parse(Console.ReadLine());」は下記の3行を1行で行っている ① int x; //整数用変数の宣言 ② string s = Console.ReadLine(); //コンソールから数字列を読み込んで文字列型変数を初期化 ③ x = int.Parse(s); //文字列型変数の内容を整数化して代入 p.47 整数型(Convert.To型) ・文字列型で与えられた数字列を、特定の整数型に変換できるメソッドとして「Convert.To整数型(文字列)」も提供されている ・この整数型は.NET型を用いる事 例:  string s = "123456";  int i = Convert.ToInt32(s); //iは整数値123456で初期化される ・テキストでは「int x = Convert.ToInt32(Console.ReadLine());」となっているが、Convert.To型を用いるのであれば、.NET型に統一することが推奨されることがある  例: Int32 x = Convert.ToInt32(Console.ReadLine()); ミニ演習 mini046.cs ・p.46 type02.cs を元にして、下記の仕様のプログラムを作成しよう  ①コンソールから整数A、Bを入力  ②AとBの和、差、積、商、平均値を表示する  ※商と平均値は小数点以下切り捨てでOK 提出:ミニ演習 mini046.cs 次回予告:p.48「浮動小数点数型」から再開します