プログラミング基礎 i( 再 )
DESCRIPTION
プログラミング基礎 I( 再 ). 山元進. 注意事項. 1度は講義を受けたことを念頭に置いて講義 遠慮なく質問せよ 質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い 前期講義の欠席者は、特に注意せよ。 4 限 座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章. はじめに. しばらく、 Java に限らないことを話す. コンピュータ中のデータ と 2 進数. コンピュータ中のデータ = ON/OFF で表現 ON/OFF → 1/0 とすると 2 進数 - PowerPoint PPT PresentationTRANSCRIPT
プログラミング基礎 I( 再 )
山元進
注意事項 1度は講義を受けたことを念頭に置いて
講義 遠慮なく質問せよ
質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い
前期講義の欠席者は、特に注意せよ。 4 限座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章
はじめに しばらく、 Java に限らないことを話す
コンピュータ中のデータと 2 進数 コンピュータ中のデータ = ON/OFF で表
現 ON/OFF → 1/0 とすると 2 進数 データはすべて2進数として表される 2 で繰り上がるのが 2 進数
10 で繰り上がるのが 10 進数 2 進数はケタ多い → 16 進数もよく使う
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16 進数 1 ケタ = 2 進数 4 ケタ
高級言語 コンピュータへの指令も 2 進数のデータ
として記録されている → 機械語 機械語は、人間がコンピュータにさせた
いことを記述するには不向き 数字の羅列は覚えにくい!
人間の言語体系になるべく近いように作られた言語 : 高級言語
データ型 データは全て2進数で表されているが、
そのデータを文字と解釈するか、数値と解釈するか、あるいはもっと複雑なデータと解釈するか → データの型 数値として解釈するなら数値型 文字として解釈するなら文字型 …
10 進数→ 2 進数 問 : 2010 を 2 進数で表せ
… 210 = 1024, 211 = 2048 (10 進数 ) 2048-32-4-2 (2 進数 ) 100000000000
– 100110 (32+4+2)= 11111011010
2 進数→ 16 進数 問 : 2 進表記された数 1110011000 を
16 進表記に直せ 11 1001 1000 (4 ケタずつ切る ) 398
ただ文字を並べても、位取りの意味が不明瞭 Java では、 16 進数の先頭に 0x 付加
0x398 → 10 進数なら (3×16+9)×16+8=920 16 進数 hexadecimal
類似物に 8 進数あり。先頭に 0 付加 0123 と 123 は値が全く違うので注意 !!
文字→ 2 進数 (or 16 進数 ) 文字と数との対応表を事前に決めておく
ASCII コード アルファベット、数字、記号 → 1 バイト
ユニコード 2 バイトで 1 単位、 1 or 2 単位で 1 文字
文字を表すデータを文字型、 char 型
数値→ 2 進数 ( 整数 ) 正の整数はそのまま扱う
ただし、ケタ数は決めておく 31 ビット分 負の数は2の補数表示を使う
-1 を 0xffffffff であらわす +1 するとケタがあふれて 0x0 になるので
こう選ぶ 一般の数 x は2の補数表示:
x を2進表示 → 0/1 反転 → 1 を足す ( 符号なしの整数もある )
数値→ 2 進数 ( 整数以外 ) 実数は全部を取り扱うのは困難
√2=1.41421356…. 桁数に限りがない→必要メモリも限りない
仮数部 × 指数部 分かりやすいよう 10 進表示すると
123.456 → 1.23456 × 102
倍精度実数 : double 型 1 つのデータで8バイト
単精度実数 : float 型 1 つのデータで 4 バイト
メモリとアドレス メモリ = データを記憶する場所 記憶場所管理のため番号の番号 = アド
レス 通常、 8 ビット (8 ケタの 2 進数 ) = 1 バ
イト ごと 1 byte = 2 ケタの 16 進数
0x00 = メモリの 1 バイト分 02進数表記なら 00000000 (8 ケタ )
変数と定数 変数
プログラム実行中に変更され得るデータ 通常、メモリの特定の場所と対応している
定数 プログラム実行中に変更されないデータ
通常、変数や定数には、ラベル(名前)が付く 例: int k; // k という名前の整数 (int) 型変数
ここからは Java の話
Java 高級言語のひとつ 中間コード利用
仮想マシン ( インタプリタ ) で実行 Java のプログラム実行まで
kasuJava 言語で書かれたプログラムSample1.java
中間コードSample1.clas
s
実行結果
コンパイルjavac
Sample1.java
実行java
Sample1
仮想マシン上
プログラムを書いてみる 後でどこにサンプルを置いたかわかりや
すいよう、 Kiso1-1 などとディレクトリを作り、その中で作業するとよい。mkdir Kiso1-1; cd Kiso1-1
Sample1.java を作成して編集するemacs Sample1.java 文字コードに注意 (左下に U と出ている
か? ) 書き終わったら save して終了
Sample1.javaclass Sample1{public static void main(String args[]){
System.out.println(" ようこそ Javaへ !");
System.out.println("Java を始めましょう !");}
}
プログラムを書く際の注意 {} の入れ子構造を字下げで表す。 対応する { と } が、同じケタに来るように。class Sample1{ public static void main(String args[])
{ System.out.println(
" ようこそ Java へ !");System.out.println("Javaを始めましょう !");
} }
上のような書き方は、 Java の文法上許されるが、私は許さない ! 提出課題などでこんなの見つけたら減点する
コメントを記述する プログラム中にコメント(註釈)を書け
る 1 行の中で , // の右はコメント /* と */ とに囲まれた部分はコメント コメントに何を書いても実行結果に影響な
し コメントは、コードを読む人のために書
く
コメントの例class Sample1 // クラスの宣言 クラス名は Sample1{ // クラス Sample1 本体の開始// 次行から main() メソッド ( 実行開始場所 ) の宣言public static void main(String args[]){ // main() メソッド本体の開始
System.out.println(" ようこそ Java へ !");System.out.println("Java を始めましょう !");
} // main() メソッド定義の終了} // クラス定義の終了// メソッド、クラスの宣言とも、続く {} の中身が本体である// メソッドの宣言が、クラスの宣言の中に入れ子になってい
る// クラスの概念の詳細は、後の回の講義で行う
Sample1.java の説明class Sample1 // クラスの宣言{ // コメント (人間が読むときのための註)public static void main(String args[]){ // main メソッドの宣言 ( 仮想マシンの実行開始場所 )
System.out.println(" ようこそ Java へ !");System.out.println("Java を始めましょう !");
}}// メソッド、クラスの宣言とも、続く {} の中身が本体である// メソッドの宣言が、クラスの宣言の中に入れ子になっている// クラスの概念の詳細は、後の回の講義で行う
ファイル名 (拡張子を除く ) と同じにすること!
文末のセミコロン必須 (次行も同様 )
カッコの対応関係には意味あり。開いたら、必ず正しい位置で閉じる
こと(次行も同様 )
"(ダブルクォーテイション ) は、開くときも閉じるときも同じ記号。対応関係に注意。
" と " で囲まれた部分は文字列データで、全角 OK 。それ以外では全角不可
特に、全角スペースが文字列データ以外の部分に混じらないように!!
重要なポイント Java のコードは1つ以上のクラスからなりたつ main() メソッドからプログラムの処理がはじま
る 文は原則として先頭から順番に実行される 文の最後にはセミコロンをつける
コメントは人間がコードを理解しやすくするために書く ( 実行動作には関係しない )
インデントや改行を使ってコードを読みやすく
プログラムのコンパイル→実行 コンパイル
javac Sample1.javaエラーなし → Sample1.class できる (ls で確認 )
実行java Sample1 Sample1.class が仮想マシンで実行される Sample1 の後に .class をつけるな!!
プログラムの書き間違い、手順違い→エラー出力 読めば何を間違えたか参考になる
リテラル literal → 通常は形容詞で、「文字どおり
の」 名詞としては、文字どおりの解釈・意味
プログラムで値を表す文字列 Sample1.Java 中では
" ようこそ Java へ !" "Java を始めましょう !"
の2つが文字列リテラル。データの内容は ようこそ Java へ ! Java を始めましょう !
文字リテラル,文字列リテラル 文字リテラルの例
'A', 'B' 文字列リテラルの例
" ようこそ Java へ !" ' と " の使い分けに注意
' は 1 文字を囲む " は文字列を囲む
数値リテラル 数値リテラルの例
System.out.println(0x398); 0x398 は数値リテラル ( 整数リテラル ) 920 と表示される ( 整数はデフォルトで 10 進表
記 ) System.out.println(3.14159265e2);
3.14159265e2 は浮動小数点 ( 数 ) リテラル 314.159265 と表示される (3.1415926 × 102)
Sample3.javaclass Sample3{public static void main(String args[]){
System.out.println('A'); // 文字リテラルSystem.out.println(" ようこそ Java へ !");System.out.println(123); // 整数リテラル
}}
画面への出力次のようなメソッドを使う
System.out.println() System.out.print() 問 : 両者の違いはなにか?次のページの
Sample2.java をコンパイルして動かしてみよ
Sample2.javaclass Sample2{public static void main(String args[]){
System.out.print(" ようこそ Java へ !");System.out.print("Java を始めましょ
う !");}
}// Sample1 と Sample2 の違いは何か?// 見比べて考え、実行して確かめてみよ。
エスケープシーケンス 複数の文字で 1 文字を表す規則 画面の出力を制御する、特殊な文字など
普通の文字で表せない そこで、 \ 文字 などで表す規則になっている タブ → 印字位置を前もって決めた場所へ移動 復帰→ 印字位置を行の先頭に移動
Java プログラム中で特別な意味のある文字 \ → \\ ' → \' " →\" など System.out.println("\\100"); // 例
文字コードで文字を表すのにも使える 教科書 表 2-1 を参照せよ
Sample4.javaclass Sample4{
public static void main(String args[]){
System.out.println("円記号を出力します。 :\\");System.out.println(" アポストロフィを出力しま
す。 :\'");}
}// エスケープシーケンスを使うと、特殊な文字をあらわすことができる。
Sample5.javaclass Sample5{ public static void main(String args[]) { System.out.println("8 進数 101 の文字は \101 です。 "); System.out.println("16 進数 0061 の文字は \u0061 です。
"); }}// 文字コードを指定して 文字を出力することができる
Sample6.javaclass Sample6{ public static void main(String args[]) { System.out.println("品物 \t\t 単価 \t 数量 \t金額 ");
System.out.println(" えんぴつ \t10\t2\t20"); System.out.println("消しゴム \t100\t1\t100"); }}// エスケープシーケンスを使って、画面の出力を制御できる// タブストップ( \t によって印字位置が移動する場所)// はどこに設定されているか考えよ。ヒント:半角文字換算
課題 1.自分の名前を出力するプログラムを作成せ
よ。 2.「タブ」記号を表すエスケープシーケンス
(¥t) を使用し、以下例のように氏名、学籍番号、学部を出力するプログラムを記述せよ。氏名 山元進学籍番号 c0110999学部 コンピュータサイエンス学部
文字列の開始位置 \t でそろえること!!
課題提出の注意提出は 課題 2 のみ課題 2 の class 名は Report2 とせよ
必然的に、ファイル名も決まる時間内に TA の許可を受けること
許可のない提出は未提出と同じ扱い