講義メモ ・p.22「変数を使ってみる」から p.22 変数を使ってみる ・変数:「変わることが可能な」の意味で、記憶域(メモリ)を必要な分だけ確保して名前(変数名)を付けたもの ・変数のデータ型:変数の用途・特性を示す情報で、記憶域の確保量や利用法が決まる ・データ型の例: int「イント」と読み「インテジャー(整数)」の略。整数用で1個32ビット、-2,147,483,648から2,147,483,647まで数値格納用 ・変数の宣言:C/C++/Java/C#などでは、変数を事前に用意する=宣言する必要がある ・変数の宣言の書式: データ型 変数名;  例: int hp; //モンスターのHP用 ・複数の変数の宣言:同じ型の変数はまとめて宣言できる。変数名をカンマつなぎで指定すればOK  例: int hp, mp; //モンスターのHPとMP用 ・代入:変数にデータを格納することで、すでに格納されているデータがあれば上書きされる ・代入演算子:「=」記号で代入が可能で「変数など = データなど;」という書式で動作する  ※ C/C++/Java/C#などでは、「等しい」という意味は無いので注意  例: hp = 50; //モンスターのHPを50にする ・変数の型と代入:型と一致しないデータの代入は文法エラー  例: hp = 50.2; //モンスターのHPはint型なので整数専用だから、小数点数の代入はできないのでエラー ・初期化:変数の宣言とデータの代入を同時に行う事 ・初期化の書式: データ型 変数名 = 値;  例: int hp = 50; //モンスターのHPを50に初期化 ・変数名のルール:英大文字、英小文字、数字、アンダースコア「_」、2バイト文字(漢字やひらがな等)が利用可能。  ただし、先頭文字には数字は使えない。  また、ほとんどの業務では2バイト文字は非推奨や禁止が多い。チームルールを決めていることが多い。  (例:変数名は小文字で開始し、2つの単語を繋いでいるときは2つ目の単語の先頭を大文字にする。「_」不要  例えば、maxHp、monsterName) ・キーワード:予約語ともいい、C#側で文法上用いるため、変数などには使えない単語のこと。小文字の単語のみ  p.17 myname01.csに登場したキーワード: using、class public、static、void ・キーワードに関するルール:キーワードを大文字にしたものは利用可能(例:Class)だが、チームルールで禁止されていることが多い ・加算演算子:「+」記号で加算が可能で、加算結果を変数に代入できる。加算の対象は値でも変数でもOK ・減算演算子:「+」記号で減算が可能で、減算結果を変数に代入できる。減算の対象は値でも変数でもOK  例:  int a = 10, b = 5, c; //整数の変数aを10で初期化、bを5で初期化、cは宣言のみ  c = a + b; //aに格納されている10と、bに格納されている5を加算し、結果の15をcに代入 p.25 変数のデータを表示する ・Console.WriteLine(変数名); とすると、変数の値が表示される  例:上の例の後に、 Console.WriteLine(c); とすれば15が表示される ・なお「+」記号は前後のどちらかが文字列の場合、加算ではなく連結になる  例: "私は" + 15 // "私は15"になる ・このことを利用して、変数のデータを表示する時は、説明文字列と変数を「+」で連結して表示すると良い  例:上の例の後に、 Console.WriteLine("私は" + c); とすれば"私は15"が表示される  例:上の例の後に、 Console.WriteLine("HPは" + 50 + "です"); とすれば"HPは50です"が表示される p.25 text01.cs //p.25 text01.cs using System; //System名前空間の利用を宣言 class text01 //クラスtext01の定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int a = 10, b = 20, total; //int型の変数a、bの初期化とtotalの宣言 total = a + b; //変数aとbの値の話をtotalに代入 Console.WriteLine(a + " + " + b + " = " + total); //変数値と文字列を連結して表示 } //メソッド定義の終了 } //クラス定義の終了 アレンジ演習 p.25 text01.cs ・実行して動作を確認したら、下記の機能を追加しよう  ① int型の変数diffの宣言  ② 変数aから変数bの値を引いた結果を変数diffに代入  ③ 変数a、b、diffの値を用いて「10 - 20 = -10」と表示 作成例 //アレンジ演習 p.25 text01.cs using System; //System名前空間の利用を宣言 class text01 //クラスtext01の定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int a = 10, b = 20, total; //int型の変数a、bの初期化とtotalの宣言 total = a + b; //変数aとbの値の話をtotalに代入 Console.WriteLine(a + " + " + b + " = " + total); //変数値と文字列を連結して表示 int diff; //【以下追加】int型の変数diffの宣言 diff = a - b; //変数aから変数bの値を引いた結果を変数diffに代入 Console.WriteLine(a + " - " + b + " = " + diff); //変数値と文字列を連結して表示 } //メソッド定義の終了 } //クラス定義の終了 p.26 変数のデータを表示する(続き) ・Console.WriteLine(計算式); とすると、ここで計算を行って、計算結果を表示できる  例: Console.WriteLine(10 + 20); //「30」が表示される ・なお、複数の「+」が並んでいる場合、左から右へ順に加算か連結が行われる  例: a + " + " + b + " = " + total の場合:  ①「a + " + "」で "10 + "になる  ②「① + b」で "10 + 20"になる  ③「② + " = "」で "10 + 20 = "になる  ④「③ + total」で "10 + 20 = 30"になり完成 ・この順序は()をつけることで変更でき、()内が先に扱われる。 ・例: "和は" + (10 + 20) とすると、先に加算が行われるので、"和は30"になる  ※()が無いと、"和は" + 10 + 20 は "和は1020"となってしまう(どちらも連結になる) p.25 text02.cs //p.25 text02.cs using System; //System名前空間の利用を宣言 class text02 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int a = 10, b = 20; //int型の変数a、bの初期化 Console.WriteLine(a + " + " + b + " = " + (a + b)); //変数値と文字列を連結して表示 } //メソッド定義の終了 } //クラス定義の終了 アレンジ演習 p.26 text02.cs ・p.26に説明があるように、「(a + b)」を「a + b」にしたものを追加して、結果を比較しよう 作成例 //アレンジ演習p.25 text02.cs using System; //System名前空間の利用を宣言 class text02 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int a = 10, b = 20; //int型の変数a、bの初期化 Console.WriteLine(a + " + " + b + " = " + (a + b)); //変数値と文字列を連結して表示 Console.WriteLine(a + " + " + b + " = " + a + b); //【追加】変数値と文字列を連結して表示 } //メソッド定義の終了 } //クラス定義の終了 p.27 WriteLineメソッドとWriteメソッド ・WriteLineメソッドは()内の式を処理して結果をコンソールに出力(表示)するとともに、末尾に改行コードを付加する ・改行が不要であれば、代わりにWriteメソッドを用いると良い ・改行のみを行うには()内を空にして「Console.WriteLine();」とすればよい p.27 test03.cs //p.27 test03.cs using System; //System名前空間の利用を宣言 class Test03 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 Console.Write("あ"); //文字列を表示(改行しない) Console.Write("い"); //文字列を表示(改行しない) Console.Write("う"); //文字列を表示(改行しない) Console.Write("え"); //文字列を表示(改行しない) Console.Write("お"); //文字列を表示(改行しない) Console.WriteLine(); //改行のみ } //メソッド定義の終了 } //クラス定義の終了 アレンジ演習 p.27 text03.cs ・「あいうえお(改行)」を「あい(改行)うえお(改行)」にしよう 作成例① //アレンジ演習p.27 test03.cs using System; //System名前空間の利用を宣言 class Test03 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 Console.Write("あ"); //文字列を表示(改行しない) Console.Write("い"); //文字列を表示(改行しない) Console.WriteLine(); //【追加】改行のみ Console.Write("う"); //文字列を表示(改行しない) Console.Write("え"); //文字列を表示(改行しない) Console.Write("お"); //文字列を表示(改行しない) Console.WriteLine(); //改行のみ } //メソッド定義の終了 } //クラス定義の終了 作成例② //アレンジ演習p.27 test03.cs using System; //System名前空間の利用を宣言 class Test03 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 Console.Write("あ"); //文字列を表示(改行しない) Console.WriteLine("い"); //【変更】文字列を表示(改行) Console.Write("う"); //文字列を表示(改行しない) Console.Write("え"); //文字列を表示(改行しない) Console.Write("お"); //文字列を表示(改行しない) Console.WriteLine(); //改行のみ } //メソッド定義の終了 } //クラス定義の終了 p.28 フォーマット指定子を使った変数の表示 ・文字列と変数を連結する手法はミスしやすく、連結結果が分かりづらい ・そこで、文字列に埋め込み位置を指定して、後に変数を指定して、その値を順に埋め込んでもらうのがフォーマット指定子 ・フォーマット指定子は文字列の中に「{0}」「{1}」「{2}」…と順に埋め込み位置を指定するもの(※必ず0からの連番)  例: Console.WriteLine("{0}倍速い!", 3); //「3倍速い!」と表示  例: int n = 3; Console.WriteLine("{0}倍速い!", n); //「3倍速い!」と表示 ・フォーマット指定子を複数指定する場合、変数や式をカンマつなぎで記述する  例: int a = 1, b = 2; Console.WriteLine("{0} + {1}", a, b); //「1 + 2」と表示  例: int a = 1, b = 2; Console.WriteLine("{0} + {1} = {2}", a, b, a + b); //「1 + 2 = 3」と表示 ・同じ番号のフォーマット指定子を複数記述でき、同じ値を再利用できる  例: int n = 3; Console.WriteLine("{0}倍速いので{0}倍強い!", n); //「3倍速いので3倍強い!」と表示 p.28 text04.cs 解説 ・「*」は積算演算子で、左右に数値があると、掛け算した結果を返す  例: int x = 10, y; y = x * 3; //xに3を掛けた結果をyに代入 ・なお、算数と同様で、積算演算子「*」は加算、減算より優先される  例: int x = 10, y; y = 10 + x * 3; //xに3を掛けた結果を10に加算してyに代入 ※掛け算優先 p.28 text04.cs //p.28 text04.cs using System; //System名前空間の利用を宣言 class Text04 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int x = 10; Console.WriteLine("x = {0}", x); //「x = 10」を表示 Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10); Console.WriteLine("{0}は{1}ですが,{2}は{1}ではありません", "猫", "哺乳類", "トカゲ"); } //メソッド定義の終了 } //クラス定義の終了 アレンジ演習 p.28 text04.cs ・int型の変数hpを追加し、30で初期化する ・文字列"HP"と、変数hpを用いて、「現在のHPは30で、HPを回復すると倍の60になる」と表示しよう 作成例 //アレンジ演習 p.28 text04.cs using System; //System名前空間の利用を宣言 class Text04 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int x = 10; Console.WriteLine("x = {0}", x); //「x = 10」を表示 Console.WriteLine("x = {0}, xの10倍は{1}です", x, x * 10); Console.WriteLine("{0}は{1}ですが,{2}は{1}ではありません", "猫", "哺乳類", "トカゲ"); int hp = 30; //【以下追加】 Console.WriteLine("現在の{0}は{1}で、{0}を回復すると倍の{2}になる", "HP", hp, hp * 2); } //メソッド定義の終了 } //クラス定義の終了 p.29 桁数の指定 ・フォーマット指定子に最小表示桁数を指定できる ・書式:{番号, 桁数} ・この桁数は「少なくともこの桁数で」という意味でスペースの確保になり、値の桁数がこれを超える場合、指定は無視される  例: Console.WriteLine("{0, 5}", 89); //「 89」となる(8の前に3桁空く)  例: Console.WriteLine("x = {0, 5}", 89); //「x = 89」となる  例: Console.WriteLine("{0, 5}", 123456); //「123456」となる(5桁という指定は無視される) ・桁数の前に「-」をつけると、左揃えになって、値の右側に空白が付く  例: Console.WriteLine("{0, -5}", 89); //「89 」となる(9の後に3桁空く) p.30 text05.cs //p.30 text05.cs using System; //System名前空間の利用を宣言 class Text05 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int x = 10, y = 123456789; Console.WriteLine("1234567890123456789012345678990"); //目盛りを表示 Console.WriteLine("{0, 10}", "abc"); //" abc"(前に空き7個) Console.WriteLine("{0, 5}", "def"); //" def"(前に空き2個) Console.WriteLine("{0, 0}", "ghi"); //"ghi"(桁数指定は無視) Console.WriteLine("{0, 10}{1, 10}", "あ", "い"); //" あ い" Console.WriteLine("{0, -10}{1, -10}", "あ", "い"); //"あ い " Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 10, y = 123456789" } //メソッド定義の終了 } //クラス定義の終了 アレンジ演習 p.30 text05.cs ・最後のWriteLineの後で、xの値を100、yの値を1に変更して、再度、同じ書式で表示しよう ・それから、xの値を1000、yの値を10に変更して、再度、同じ書式で表示しよう ・また、xの値を10000、yの値を100に変更して、再度、同じ書式で表示しよう 作成例 //アレンジ演習p.30 text05.cs using System; //System名前空間の利用を宣言 class Text05 //クラスの定義 { //クラス定義の開始 public static void Main() //開始時に動作するメソッドMain { //メソッド定義の開始 int x = 10, y = 123456789; Console.WriteLine("1234567890123456789012345678990"); //目盛りを表示 Console.WriteLine("{0, 10}", "abc"); //" abc"(前に空き7個) Console.WriteLine("{0, 5}", "def"); //" def"(前に空き2個) Console.WriteLine("{0, 0}", "ghi"); //"ghi"(桁数指定は無視) Console.WriteLine("{0, 10}{1, 10}", "あ", "い"); //" あ い" Console.WriteLine("{0, -10}{1, -10}", "あ", "い"); //"あ い " Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 10, y = 123456789" x = 100; y = 1; //【以下追加】 Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 100, y = 1" x = 1000; y = 10; Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 1000, y = 10" x = 10000; y = 100; Console.WriteLine("x = {0, 5}, y = {1, 3}", x, y); //"x = 10000, y = 100" } //メソッド定義の終了 } //クラス定義の終了 提出課題:アレンジ演習 p.30 text05.cs 改良 ・アレンジ演習で追加した部分を掛け算を用いて下記のように改良しよう  ・最後のWriteLineの後で、xの値を100、yの値を1に変更して、再度、同じ書式で表示しよう  ・xの値の10倍、yの値の10倍を、再度、同じ書式で表示しよう  ・xの値の100倍、yの値の100倍を、再度、同じ書式で表示しよう 次回予告:p.30「標準書式指定文字を使った書式の指定」から