Download presentation
Presentation is loading. Please wait.
1
前回のおさらい プログラムが動く順番 プログラムの一時停止 文字列の長さ,文字→数値の変換
Main() { … }の中 上から下 ()の中を先に実行 プログラムの一時停止 Thread.Sleep() メソッド 文字列の長さ,文字→数値の変換 文字数を得る: ”hoge”.Length 数値に変換する: int.Parse(”100”) Console.ReadLine() の部分は,まずユーザの入力待ちになる.入力が終わったら,入力した文字列 データに置き換わる
2
今日のテーマ: プログラムにおける イコール(=)の意味 (とても重要!!) 基礎プログラミング 第4回(2007年4月18日)
演算子,変数,データ型 今日のテーマ: プログラムにおける イコール(=)の意味 (とても重要!!)
3
演算子 データの変更・加工 演算子について詳しくは 文字列を連結する + 数値の四則演算(+,-,*,/)と剰余(%)
文字列を連結する + 数値の四則演算(+,-,*,/)と剰余(%) %は剰余(あまり) 例:int mod = 8%3; mod は「8割る3」の余り,2が入る 演算子について詳しくは
4
演算子の計算順位 演算子の強さ(優先順位) [文字列]と[数値]を+でつなぐと,数値を文字列に変換して連結する
* / % のほうが + - よりも強い 3+2*10 ⇒ 23 (3+2)*10 ⇒ 50 のように,()をつけると 弱い演算でも優先実行できる [文字列]と[数値]を+でつなぐと,数値を文字列に変換して連結する Console.WriteLine(”3+5は”+3+5+”ではない”); ⇒3+5は35ではない
5
なぜ「変数」が必要か? 前回,ユーザの入力文字列を使って, プログラムを変更せずに,いろんな名前を表示したり,待つ秒数を変えることができた
しかし,同じ名前を2回も聞くのは不親切 ユーザに入力してもらった文字列を,プログラムのいろんな所で何回も利用できるようにしたい ただ黙って待つのではなく「○秒待ちます」「○秒経過しました」と表示したい →変数を使う
6
変数を使うとなにができる? データに名前をつけて保持し・再利用できる
(データとは,入力文字列や,それを数値に変換したもの,など) 保持しておいたデータは,再度画面に表示したり,計算に使ったりすることができる
7
変数の使い方 (1)「変数」を使うことを宣言する(変数宣言) (2)=を使って,データを変数に結びつける
変数名=実際のデータ と書く(変数の初期化) (3)変数を使ってデータを参照・表示・演算 String myname; //文字列用の変数mynameを宣言 // (変数宣言:変数を使用できるようにすること) myname = ”みうら”; //文字列を変数に○結びつける // ×入れる,代入する Console.WriteLine(”私は”+myname+”です”); // ↑変数名を文字列の代わりに使って表示する
8
入力文字列を結びつける場合 Console.ReadLine() を使う 例:
String myname; //文字列変数mynameを宣言する myname = Console.ReadLine(); //キーボードからの入力文字列を変数に結びつける Console.WriteLine(”私は”+myname+”です”); // ↑変数に結びつけた「名前」を表示
9
数値(整数)を結びつける例 String inputStr; //文字列変数(入力文字列用)宣言
int waitsec; // 整数(秒数)を格納する変数を宣言 Console.WriteLine(”待つ秒数を入力してください”); inputStr = Console.ReadLine(); waitsec = int.Parse(inputStr); //入力文字列を数値に System.Threading.Thread.Sleep(waitsec * 1000); // 待つ Console.WriteLine(waitsec+” 秒待ちました”);
10
1つの変数に何度もデータを結びつける String input; //文字列変数inputを宣言する
input = Console.ReadLine(); //1回目 Console.WriteLine(input +”が入力されました”); input = Console.ReadLine(); //2回目 Console.WriteLine(”今度は”+ input +”が入力されました”); 2回目を結びつけると,1回目の入力データは どこかに漂(ただよ)い,やがて消える .NET Framework の実行環境が自動で不要なメモリを見つけ,開放してくれる(ガベージコレクション機能)
11
変数と型 変数を使う前には,かならず「変数宣言」が必要 String myname; myname = “miura”;
myname を文字列データ(String)を結びつけておくための変数として定義する String myname = “miura”; 変数宣言と,データを結びつける命令を1行で書くことができる “String” のように変数宣言の際,変数名のまえにつける,データの種類のことを「型(かた/Type)」と呼ぶ
12
型 C#における型(Type)は3種類 値型 (Value types) 参照型 (Reference types) (ポインタ型) 数値
真偽値 (bool) など 参照型 (Reference types) 文字列,オブジェクト (ポインタ型)
13
値型 (数値) int 整数値 (=Int32) float 32ビット浮動小数点数値(=Single)
値型 (数値) int 整数値 (=Int32) int year = 2007; float 32ビット浮動小数点数値(=Single) float pi = 3.14F; float taxrate = 0.05f; (小文字のfでもよい) double 64ビット浮動小数点数値(=Double) double pi = ; (何もつけないとdouble) double log2 = D; (Dをつけてもよい) decimal 128ビット数値(=Decimal) (高い精度が必要なときに使う)
14
値型 (その他) bool 真偽値,ブール値 (=Boolean) 詳細は「条件分岐」のときに説明する
値型 (その他) bool 真偽値,ブール値 (=Boolean) true(真) または false(偽)のどちらか1つ 例: bool flag = true; bool matigai = false; 詳細は「条件分岐」のときに説明する
15
参照型 (文字列,オブジェクト) String (作成したら変更できない文字列) StringBuilder (追加・変更できる文字列)
参照型 (文字列,オブジェクト) String (作成したら変更できない文字列) String name = ”名前”; // 下↓の省略表記 String name = new String(”名前”); StringBuilder (追加・変更できる文字列) StringBuilder buffer = new StringBuilder(”kisoPro”); buffer.Append(”gramming”); //append:うしろに追記 Console.WriteLine(buffer.ToString()); //文字列に変換 Random (乱数を生成するオブジェクト) Random rand = new Random(); int value = rand.Next(1,7); // サイコロ(1~6)
16
数値の演算例 (左辺:変数名)で示した変数に,(右辺:データ,式)の計算結果を代入する,という意味 (変数名)=(データ,式)
プログラミングにおけるイコール(=)は,「左辺と右辺が同じ数値」という意味ではない (変数名)=(データ,式) int price = 1000; //ある商品の値段 float tax = 0.05f; // 消費税率 int total; // 税込金額 total = price + (price * tax);
17
文字列の演算例 (左辺:変数名)で示した変数に,(右辺:データ,式)の計算結果を結びつける,という意味 (変数名)=(データ,式)
プログラミングにおけるイコール(=)は,「左辺と右辺が同じ文字列」という意味ではない (変数名)=(データ,式) String lastName = ”miura”; String firstName = ”motoki”; String name; name = lastName + ”_” + firstName;
18
値型は変数に「代入する」 参照型は変数に「結びつける」
代入(格納) 犬小屋メタファ (値型) 実データ 値型の変数 変数にデータを「代入」 結びつける 杭&リーシュメタファ (参照型) 実データ 参照型の変数 変数に実データを「結びつける」 変数に実データへの参照を格納
19
値型と参照型 値型の変数はデータを格納し、参照型の変数は実データへの参照を格納します。参照型は、オブジェクトとも呼ばれます。
マイクロソフトMSDNライブラリ
20
値型と参照型の違いを理解 値型の場合
21
値型と参照型の違いを理解 参照型の場合
22
値型と参照型の違いを理解 参照型 値型 kisoPro 19800 19800 19800 kisoPro 19800 20000
original original kisoPro 19800 original copy copy original 19800 19800 kisoPro original copy copy original 19800 20000 kisoPro gramming
23
プログラム実行ルール プログラムが動く順番 Main(){ …} の中 上から下,1行ずつ ()の中を先に計算
[△△型] [変数名]; と書かれていた場合, [変数名]を△△型の変数として使えるようにする(変数宣言) [変数名]=○○○; と書かれていた場合, =の右側を先に計算する.そして,左側の変数に代入または結びつける
24
今日の重要なポイント 値型と参照型で,「(保持すべき)データ」を割り当てるための=(イコール記号)の意味と振る舞いが大きく異なる
値型のときは,データがコピーされる 参照型のときは,左辺の変数には,右辺が示す実データへの参照(リンク)を格納するのみ (参照型のときは,「変数=実データ」 という記法で 実データを変数に結びつけている) 1つの変数が保持できる(または参照でたどっていける)データは1つのみ 再割り当てすると,前のデータはどこかへ行ってしまう なぜわざわざ2種類の概念(値型,参照型)を混在させているのか,考えてみよう!
25
提出課題 Report-B(1) 前回の提出課題Report-A(2)のプログラムを修正し, (1)ユーザに入力してもらった秒数を使って 「これから○秒待ちます」 と表示してから (2)Sleep()で実際に○秒待ったあと, (3)最後に「○秒待ちました」 と表示するようにする 注意:ユーザに秒数を入力してもらうのは1回だけにする
26
提出課題 Report-B(2) フォルダ「03Val_or_Ref」 を配布します.
ソリューションファイルは「Val_or_Ref.sln」 (#4-slide20) のプログラムを「Val_Program.cs」に, (#4-slide21) のプログラムを「Ref_Program.cs」に入力・実行し,両方正しく動くことを確認してください 余裕がある人は,(#4-slide24)の最後の質問に対する答えを[コメント]に記入 (注意) [F5]のときに起動するプログラムは スタートアッププロジェクトを切り替えて 選択してください
27
スタートアッププロジェクトの切替え方法 [デバッグ実行]を押したときに起動するプロジェクトを切り替える
Reference (またはValue)の文字上で 右クリック 「スタートアップ プロジェクトに 設定(A)」
28
提出課題 Report-B(3) Report-B(2)で作った「Ref_Program.cs」で,copyText.Append(”gramming”); を実行したら,copyTextのデータだけ変化するようにしたい. つまり,下のような画面表示にしたい original kisoPro copy kisoProgramming 緑色[の部分(copyText = originalText;)の行だけを書き換えて,元データをコピーするようにしてください ただし, originalTextを使ってください.”kisoPro”という文字列を2つ以上プログラム内に書かないこと. ヒント:文字列から新しいStringBuilderデータを作るには new StringBuilder([String]); を使います StringBuilderをStringに変換するには,[StringBuilder].ToString()を使います.
29
提出締切 4月21日(土) 23:59 までにコミットして提出 点数: Report-B(1) 2点 Report-B(2) 1点
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.