22
情報基礎 第4回

情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

情報基礎第4回

Page 2: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

今日の内容:算術演算

‣ 四則演算を行う算術演算子 (2-3) ‣ 変数の中身を上書きする代入演算子 (2-3) ‣ 異なる型を含む演算・型の変換 (2-4) ‣ 文字列を扱うString型 (2-4) ‣ 本日の演習

Page 3: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

計算を行うプログラム▸ 2+3を計算して、その計算結果(5)をコンソールに表示するプログラム(教科書p.42)

▸ 算術演算子を使えば、四則演算ができる。

1. public class CalcExample { 2. public static void main (String[] args) { 3. System.out.println(2+3); 4. } 5. } 5

Page 4: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

算術演算子

๏ 注:演算子「^」はJava言語では「べき乗」の意味ではない(排他的論理和XORである)。べき乗の計算にはMathクラスのメソッドMath.pow(x,y)などを使う。

演算子 記述例 意味 使用例+ - * / %

a + b a - b a * b a / b a % b

加算 減算 乗算 除算 余り

2+3 (5を返す) 2-1 (1を返す) 3*2 (6を返す) 4/2 (2を返す) 8%3 (2を返す)

Page 5: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

算術演算の注意事項▸ 優先順位に注意する:

▸ 乗除と剰余(*と/)は、加減(+と-)に優先する。

▸ 丸カッコ( )で優先順位を変更できる。

• 2+3*5 と (2+3)*5 は結果が異なる。 2+3*5は17、(2+3)*5は25。

▸ 除算の際はデータの「型」に注意する:

• 12/5→2:int型同士の演算結果はint型になる。

• 12.0/5→2.4:一方がdouble型だったら結果はdouble型になる。

▸ double型であっても16~17桁程度しか正確に表せない。

Page 6: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

変数を使った算術演算▸ 数値を格納している変数は数値と同様に算術演算に使える。

▸ 変数 i に値(10)を格納し(3行目)、変数 i の値に2をかけた値(20)を変数 j に代入し(4行目)、変数 j の中身をコンソールに表示(5行目)するプログラム(教科書p.44)

1. public class CalcExample2 { 2. public static void main(String[] args) { 3. int i = 10; 4. int j = i * 2; 5. System.out.println("jの値は"+j); 6. }

Page 7: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

変数の値の上書き(代入)

▸ 右辺の「式」を計算し、その結果を左辺にある変数に代入する(左辺の変数のメモリに上書きする)。

▸ 右辺の「式」は(計算できるのであれば)複雑であってもよい。メソッド(<第5回に学ぶ)への呼び出しを含んでも構わない。

▸ 左辺には「変数名」一つしか書けない。

変数の値の上書きの構文:変数名 = 式;

例xValue =5; yValue = 5+2; xValue = xValue+2;

Page 8: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

代入の短縮表現(代入演算子)▸ 「=」以外の代入演算子は、左辺の現在の値と右辺の値を算術演算した結果を、左辺の変数に上書きする。

演算子 記述例 意味= += -= *= /= %=

a = b a += b a -= b a *= b a /= b a %= b

b の計算結果を a に代入 a = a + b a = a - b a = a * b a = a / b a = a % b

Page 9: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

▸ ある変数(整数型)を1増やしたり、減らす。よく使う。

▸ i++ と ++i は「i = i+1;」、i-- と --i は「i = i-1;」を意味する。

インクリメント・デクリメント演算①

変数 i のインクリメント:i++, ++i 変数 i のデクリメント:i--, --i

i++と++iは何が違う?i--と--iは何が違う?

i = i+1、i = i-1とするタイミングが異なります

Page 10: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

インクリメント・デクリメント演算②▸ 前置形(++j および --j)

▸ 先にインクリメント・デクリメント演算が実行される。

▸ j=2; i = ++j; → i, j ともに3になる。i への代入が行われる前に j = j+1 が行われる。j=2; j=j+1; i=j; と同じ。

▸ 後置形(j++ および j--)

▸ 後にインクリメント・デクリメント演算が実行される。

▸ j=2; i = j++; → i は2に、j は3になる。i への代入が行われた後に j = j+1 が行われる。j=2; i=j; j=j+1; と同じ。

Page 11: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

今回作成するプログラム【1】▸ 算術演算子、代入演算子、インクリメントを確認するプログラム(教科書p.47のCalcExample3.javaを講義用に修正したもの)

1. public class Calculation { 2. public static void main(String[] args) { 3. int i; 4. i = 11; 5. i = ++i/2; 6. System.out.println("iの値は"+i); 7. 8. int j = i; 9. j *= i; 10. System.out.println("jの値は"+j); 11. } 12. }

• 出力結果を予想してから作って、実行してみよう。

• 5行目をi++に変更したら結果はどう変わるだろう?

Calculation.java

Page 12: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

今日の内容:算術演算

‣ 四則演算を行う算術演算子 (2-3) ‣ 変数の中身を上書きする代入演算子 (2-3) ‣ 異なる型を含む演算・型の変換 (2-4) ‣ 文字列を扱うString型 (2-4) ‣ 本日の演習

Page 13: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

変数を使った演算で起こる状況▸ 型の異なる値を代入したい。

▸ double型の変数 d に対して d = 1; としてよいか?

▸ int型の変数 i に対して i = 3.2; としてよいか?

▸ 異なる型を含んだ演算をしたい。

▸ int型の i とdouble型の d を混ぜた演算(例えばi+d)は何型?

▸ 整数同士の割り算の結果を実数で返したい。

▸ 例えば int a = 5; int b = 2; に対してa/bの結果を「2」ではなく「2.5」となるようにしたい。どうすればよい?

Page 14: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

型の大小関係▸ 型には意味的な大小関係がある。

▸ 意味的に小さい型の変数の中身を大きい型の変数に代入するのは良い。逆は(そのままでは)できない。

▸ double d = 1; int i = 1; short s = 1; に対して

double > float > long > int > short > byte

int short double

整数実数

d = i はOK?→ i = d はOK?→

Page 15: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

型の大小関係▸ 型には意味的な大小関係がある。

▸ 意味的に小さい型の変数の中身を大きい型の変数に代入するのは良い。逆は(そのままでは)できない。

▸ double d = 1; int i = 1; short s = 1; に対して

double > float > long > int > short > byte

int short double

整数実数

s = i はOK?→ i = s はOK?→

Page 16: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

型変換のルール① 代入時の型変換:意味的に「小さな型」の値を「大きな型」の

変数に代入する場合、代入される値が代入先の変数の型に自動的に変換されてから代入がおこなわれる。逆は行われない。

② 演算時の自動型変換:異なる型の変数の間で演算を行う場合、意味的に「大きな型」に統一されてから演算が行われる。

③ 明示的な型変換:プログラム作成者が明示的に「小さな型に変換しろ」と指示する。キャスト演算子による強制的な変換。

キャスト演算子による型変換:(変換先の型名) 式

例 (int) 3.14 → 実数をint型に強制的に変換

Page 17: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

1. public class TypeCasting { 2. public static void main(String[] args) { 3. int a = 5; 4. int b = 2; 5. double d; 6. 7. d = a / b; 8. System.out.println("一回目のdの値は"+d); 9. d = (double)a / (double)b; 10. System.out.println("二回目のdの値は"+d); 11. } 12. }

今回作成するプログラム【2】▸ 型変換の動作を確認するプログラム(教科書p.53に掲載されているCastExample.javaを、講義用に修正したもの)

7行目と9行目のdは異なる値?

TypeCasting.java

Page 18: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

今日の内容:算術演算

‣ 四則演算を行う算術演算子 (2-3) ‣ 変数の中身を上書きする代入演算子 (2-3) ‣ 異なる型を含む演算・型の変換 (2-4) ‣ 文字列を扱うString型 (2-4) ‣ 本日の演習

Page 19: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

String型▸ 文字列を格納する変数の型はString型。char型とは全く別物。

▸ 第3回で学んだ基本型変数ではない。(第7回で学ぶ)参照型変数である。

▸ String型の変数には文字列を代入できる。

▸ 「+="追加したい文字列";」で現在格納している文字列の後ろに文字列を連結できる。

String型の変数stの宣言:String st; String型の変数stへの代入:st ="文字列";

Page 20: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

宣言と初期化の例(⑤の追加)• (1)は変数の宣言と初期化を2つの文に分けて書く場合。(2)は変数の宣言と初期化を同時に行う場合。

① 整数: (1) int i; i = 1; (2) int i = 1;

② 実数: (1) double d; d = 3.14; (2) double d = 3.14;

③ 文字: (1) char c; c = 'a'; (2) char c = 'a';

④ ブール値型: (1) boolean b; b=true; (2) boolean b = true;

⑤ 文字列:(1) String st; st = "Hello world!"; (2) String st = "Hello, world!";

๏ String型は参照型である(が、特例としてインスタンス(第6回)を生成しなくてよい)。

Page 21: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

本日の演習

▸ 【1】本スライドに登場したプログラムCalculation.javaを作成する。プログラムの途中にあるインクリメントを前置形(++i)から後置形(i++)に変更したとき、出力結果がどう変わるかを予想し、実際に確認する。

▸ 【2】本スライドに登場したプログラムTypeCasting.javaを作成する。

PCに算術演算をさせてみる。型変換による結果の違いを知る

Page 22: 情報基礎 - Takehisa Hasegawatakehisahasegawa.sci.ibaraki.ac.jp/JohoKiso/slides/slide...計算を行うプログラム 2+3を計算して、その計算結果(5)をコンソールに表示するプロ

付録:演算の優先順位優先順位 演算子1 2 3 4 5 6 7 8 9 10 11 12

( ),[ ] ++, --, +(単項), -(単項), ~, ! キャスト演算子, new *, /, % +, - <<, >>, >>> >, >=, <, <=, instanceof ==, != &, ^, | (ビット演算子) &&, ^, || ? =, +=, -=, /=, %=【注】同じ順位の場合は,式の左から右への順で実行する。