プログラミング基礎I(再) 山元進.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
初年次セミナー 第4回 整数と実数の取り扱い.
プログラミング基礎I(再) 山元進.
数値計算及び実習 第3回 プログラミングの基礎(1).
基礎プログラミングおよび演習 第9回
プログラミング基礎I(再) 山元進.
x y 復習 変数とその種類 変数名 数学の場合 未知数 「変数xに‥を代入し‥」 x = 5 x = 1.3
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
JAVA入門② 変数と型 式と演算子 制御文.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング言語入門 手続き型言語としてのJava
JAVA入門.
第二回 VB講座 電卓を作ろう.
暗号技術 ~JAVAプログラム①~ (5週目)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
第1回 プログラムの基本 他人が読めるプログラムを書く.
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
情報処理Ⅱ 第2回:2003年10月14日(火).
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
地域情報学 C言語プログラミング 第1回 導入、標準出力、変数 2017年10月13日
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
暗号技術 ~JAVAプログラム②~ (6週目)
情報処理Ⅱ 2005年10月28日(金).
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
情報処理技法(Javaプログラミング)1 第8回 同じ処理を何回も繰り返すには?
Presentation transcript:

プログラミング基礎I(再) 山元進

Lesson 3 変数

変数 変数 プログラムの中で書き変わるデータ データを記憶する場所がメモリ上にある コンピュータ内部では、記憶場所はアドレスで管理されている アドレスも数値なので人間にとっては覚えにくい 人間が管理しやすいように適当な名前をつける 識別子 名前とアドレスの対応は、コンパイラやシステムが行う

変数名→識別子 : 分かりやすい名前にすること 変数は型と名前を指定して宣言する int k; // どこかに格納される整数データと識別子 k が対応 double a; //どこかに格納される浮動小数データと識別子 a が対応 アドレス int k; double a; 78 3.1 データ格納場所の割り当ては、 コンパイラなどによって自動的に行われる 通常、プログラマが気にする必要はない 変数名→識別子 : 分かりやすい名前にすること 変数は型と名前を指定して宣言する

識別子 トークン : Java で使われる単語、記号 リテラル 先週説明した キーワード class, public, … リテラル 先週説明した キーワード class, public, … 識別子 ユーザーが付ける名前 変数同士を区別するものだから識別子 演算子 演算を表す記号 区切り子 , ( ) など

使用可能な識別子 英字・数字・アンダースコア(_) 先頭に数字は許されない 長さに制限なし キーワードは使用不可 大文字小文字は区別される $ は、許容されるが、使わない方が良い 実はUnicode文字も使えるが、使わない方が良い 先頭に数字は許されない 長さに制限なし キーワードは使用不可 大文字小文字は区別される

変数の型 Java の基本的なデータの型 (表3-1) boolean 真/偽 (条件成立/不成立) char 文字 byte 1バイト整数 short 2バイト整数 int 4バイト整数 long 8バイト整数 float 単精度浮動小数点数(4バイト) double 倍精度浮動小数点数(8バイト)

変数の利用 データの書き込み/読み出し → まとめて"アクセス" 書き込み→代入文を使う データの書き込み/読み出し          → まとめて"アクセス" 書き込み→代入文を使う 読み出し→代入文の右辺や、System.out.println ではデータの読み出し 代入文 左辺 = 右辺値 左辺に変数名を書く。左辺に右辺の値を代入 通常の文中 '=' は 代入/条件 Javaでは '=' は代入文 条件文には "==" を使う

Sample1.java class Sample1 { public static void main(String[] args) int num; //変数の宣言 num = 3; //変数への代入(最初の代入:初期化) System.out.println("変数numの値は" + num + "です。"); }

代入操作 アドレス int num; 3 一度書きこまれたれたデータは、 次に書きこまれるまで保持される

データの読み出し アドレス int num; 3 System.out.println("変数numの値は" + num + "です。");

重要な注意 基本型の変数は、まず最初に代入しなければ値を正しく参照できない。(多くの高級言語で事情は同じ) Java の場合、コンパイル時にエラーになる 最初の代入文を変数の"初期化" と呼ぶ 宣言と初期化は1文で行える int k=3; // 初期化まで行える

Sample2.java class Sample2 { public static void main(String[] args) int num; //変数の宣言 num = 3; //変数への代入(最初の代入:初期化) System.out.println("変数numの値は" + num + "です。"); num = 5; //変数の値を変更 System.out.println("変数numの値を変更しました。"); System.out.println("変数numの新しい値は" }

Sample3.java class Sample3 { public static void main(String[] args) int num1=3, num2; // num1 は初期化もする System.out.println("変数num1の値は" + num1 + "です。"); num2 = num1; // num2 に num1 の値を代入 System.out.println( "変数num1の値を変数num2に代入しました。"); System.out.println("変数num2の値は" + num2 + "です。"); }

注意すべきこと 基本的に、変数と同じ型のデータを代入 しばらく、main()メソッド本体の中で変数を宣言する int k=3.14 ; // これは許されない double a=3; // これは許されるが 3.0 の方が良い しばらく、main()メソッド本体の中で変数を宣言する 違う場所で宣言することもできる→8章で

キーボードからのデータ入力 扱うべきデータをプログラム実行中に変更 変数に代入すべきデータをキーボードからデータを読み取る いちいちコンパイルするのでは面倒 変数に代入すべきデータをキーボードからデータを読み取る BufferedReader クラスの readLine() メソッド 現時点では、おまじないのようなもの プログラミング基礎IIになると、詳しく分かる おまじないは、正確に唱えないと効果がない

Sample4.java import java.io.*; class Sample4 { public static void main(String[] args) throws IOException System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました。"); }

Sample4.javaの説明 以下の部分は、br.readLine() を使うためのおまじないと思っておく BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); プログラミング基礎IIになると、かなり分かる

Sample5.java import java.io.*; class Sample5 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); System.out.println(num + "が入力されました。"); }

Sample5.java の説明 キーボードからの入力は文字列 文字列を整数に変換するために、Integer.parseInt() を使う もし浮動小数点数に変換するならば、Double.parseDouble() を使う

Sample6.java import java.io.*; class Sample6 { public static void main(String[] args) throws IOException System.out.println("整数を2つ入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str1 = br.readLine(); String str2 = br.readLine(); int num1 = Integer.parseInt(str1); int num2 = Integer.parseInt(str2); System.out.println("最初に" + num1 + "が入力されました。"); System.out.println("次に" + num2 + "が入力されました。"); }

Sample6_1.java import java.io.*; class Sample6_1 { public static void main(String[] args) throws IOException System.out.println("整数を2つ入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int num1 = Integer.parseInt(str); str = br.readLine(); int num2 = Integer.parseInt(str); System.out.println("最初に" + num1 + "が入力されました。"); System.out.println("次に" + num2 + "が入力されました。"); }

Lesson3 まとめ 変数には,値を格納することができる. 変数は,型と名前を指定して宣言する. 変数の名前には,識別子を使う. 変数に値を代入するには,=記号を使う. 変数を初期化すると,宣言と同時に値の格納ができる. 変数に新しい値を代入すると,格納されている値が変更される. キーボードから文字列を入力することができる. 文字列を数値に変換することができる.

Lesson 4 式と演算子

演算子 演算規則に従った演算を表す記号 + (足し算) – (引き算) * (掛け算) / (割り算) % (剰余,割った余り) + (足し算) – (引き算) * (掛け算) / (割り算) % (剰余,割った余り) ++ (インクリメント), --(デクリメント) <, >, <=, >= (比較演算子) ==, != (等価, 非等価) &&, || (論理演算子) =, +=, *=, -=, /= (代入演算子) etc (cf. 表4-1)

オペランド 演算子による演算の対象 A+B → A, B がオペランド (2項演算) 単項演算子 オペランドが 1 つ operate : 作用する, 影響を及ぼす. operator : 作用するもの (作用する主体) operand : 作用される(べき)もの 単項演算子 オペランドが 1 つ 2項演算子オペランドが 2 つ 3項演算子オペランドが 3 つ A ? B : C Aが成立したら B, 非成立なら C の値

式 演算子, リテラル, 変数などからなる式が評価(実行)されると値が決まる int a=5+3; // 5+3 が評価され, a の値 8 int b=a*4; // a*4 が評価され, bの値 32 代入文も評価されると値を持つ あまり推奨できないが、上の a, b の宣言に続けて int c=(b=a); とすると、b,c の値が 8 になる

評価の順序 オペランドが先に評価される ()があれば、その内側が先に評価される a = a+1; // 最初に a+1 が評価され それが a に代入される // この式評価後の a の値は、 // この式の前までの a の値に 1 足した値 ()があれば、その内側が先に評価される *,/,% は +, - より先に評価される (cf. 表4-3) 左が先(例外もある。p.94 を見よ)

Sample7.java import java.io.*; class Sample7 // 教科書では Sample3 { public static void main(String[] args) throws IOException System.out.println("整数を2つ入力してください。"); BufferedReader br =new BufferedReader( new InputStreamReader(System.in)); String str1 = br.readLine(); String str2 = br.readLine(); int num1= Integer.parseInt(str1); int num2= Integer.parseInt(str2); System.out.println("たし算の結果は" + (num1+num2) + "です。"); }

Sample7.java の注意点 System.out.println("たし算の結果は" + (num1+num2) + "です。"); + の役割 1.数値同士を足す 2.文字列を結合する + には2つの役割があるので、上の赤字の部分の () のある/なしで結果が変わる。 どう変わるか考えてみよ。考えたら実際にプログラムを書き換えて試してみよ。考えた通りでないならば、自分の勘違いはなにか考えよ。

Sample8.java class Sample8 // 教科書では Sample4 { public static void main(String[] args) int num1 = 10; int num2 = 5; System.out.println("num1とnum2にいろいろな演算を行います。"); System.out.println("num1+num2は" + (num1+num2) + "です。"); System.out.println("num1-num2は" + (num1-num2) + "です。"); System.out.println("num1*num2は" + (num1*num2) + "です。"); System.out.println("num1/num2は" + (num1/num2) + "です。"); System.out.println("num1%num2は" + (num1%num2) + "です。"); }

インクリメント・デクリメント インクリメント (増やすこと) デクリメント(減らすこと) 前置/後置 a++; a=a+1; と同じ b = a++; // b=a; a=a+1; と同じ b = ++a; // a=a+1; b=a; と同じ

Sample9.java class Sample9 // 教科書では Sample5 { public static void main(String[] args) int a = 0; int b = 0; b = a++; System.out.println( "代入後にインクリメントしたのでbの値は" + b + "です。"); } b = ++a; とすると結果が変わる。

複合的な代入演算子 += -= *= /= %= 表4-2 を参照せよ a += b; // a=a+b と同じ

Sample10.java import java.io.*; class Sample10 // 教科書では Sample6 { public static void main(String[] args) throws IOException System.out.println("整数を3つ入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str1=br.readLine(); String str2=br.readLine(); String str3=br.readLine(); int sum=0; sum += Integer.parseInt(str1); sum += Integer.parseInt(str2); sum += Integer.parseInt(str3); System.out.println("3つの数の合計は" + sum + "です。"); }

型の変換 既出 整数 → 倍精度型 (自動的に変換) 倍精度型 → 整数 自動的に変換されない より大きなメモリを使う型への変換は自動的 String (文字列) 型 → 数値 Integer.parseInt() などを使う 整数 → String 型 (自動的に変換) 整数 → 倍精度型 (自動的に変換) double a = 3; // a は 3.0 となる 倍精度型 → 整数  自動的に変換されない int a = 3.0; // コンパイル時にエラーとなる より大きなメモリを使う型への変換は自動的 逆の変換が自動的ではないのは、精度が落ちる可能性があるから (記憶場所足りず、情報欠落) 整数型→浮動小数点数への変換は自動的

明示的な型変換 精度が落ちる可能性を承知の上で、明示的に型を変換する→キャスト演算子 int k=(int) 3.1415926535897932; 倍精度実数の 3.1415926535897932 を整数に

Sample11.java class Sample11 // 教科書では Sample8 { public static void main(String[] args) int inum= 160; System.out.println("身長は" + inum+ "センチです。"); System.out.println("double型の変数に代入します。"); double dnum= inum; // 変換は自動的 dnum+ "センチです。"); }

Sample12.java class Sample12 // 教科書では Sample9 { public static void main(String[] args) double dnum= 160.5; System.out.println("身長は" + dnum+ "センチです。"); System.out.println("int型の変数に代入します。"); int inum= dnum; inum+ "センチです。"); }

演算子と型変換 演算は、大きなメモリを必要とする型に揃えてから行われる double a = 3/5; 3+5.0 → 3.0 + 5.0 "a = " + 51 → "a=" + "51" double a = 3/5; 3/5 は2つのオペランドがともに整数 整数の範囲で計算が行われ 3/5 の値は 0 そのあと 0.0 に型変換され、結局 double a=0.0;

Lesson 4 まとめ 演算子は,オペランドと組み合わせて式をつくる. インクリメント・デクリメント演算子を使うと,変数の値を1加算または1減算できる. 複合的な代入演算子を使うと,四則演算と代入演算を組み合わせた処理を行うことができる. 値が小さなサイズの型に変換された場合,値の一部が失われることがある. キャスト演算子を使うと,型を変換できる場合がある. 代入の際に型が変換される場合がある. 四則演算などの際に型が変換される場合がある.

演習問題 テキストp.53のSample1.javaを変更し、numに学籍番号の下3ケタ部分を代入し、それを出力するプログラムを作成せよ。(3ケタの先頭の0は除去すること) double型の変数numに下3ケタ/10.0 を代入し、それを出力するプログラムを作成せよ。 テキストp.53のSample1.javaを変数の宣言と初期化を一文(いちぶん)で行う形のプログラムに変更せよ。 キーボードから2つの整数を入力し、それらの加算、減算、乗算、除算、剰余を表示するプログラムを作成せよ。 4. に加えて、入力した2つの整数を倍精度型に変換し、それらの加算、減算、乗算、除算、剰余を表示するプログラムを作成せよ。 5. に加えて、入力した2つの整数それぞれの2乗を表示するプログラムを作成せよ。2乗の計算には *= を使うこと。 全てに解答せよ。ただし、提出は 6. のソースファイルのみ。 各問の解答は、ファイル名を Report?.java とすること。? には問の番号を入れる。 提出するファイル名は Report6.java ということになる。