350 likes | 452 Views
プログラミング基礎 I( 再 ). 山元進. 注意事項. 1度は講義を受けたことを念頭に置いて講義 遠慮なく質問せよ 質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い 前期講義の欠席者は、特に注意せよ。 4 限 座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章. はじめに. しばらく、 Java に限らないことを話す. コンピュータ中のデータ と 2 進数. コンピュータ中のデータ = ON/OFF で表現 ON/OFF → 1/0 とすると 2 進数
E N D
プログラミング基礎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単位、1or2単位で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 バイト分 0 2進数表記なら 00000000 (8ケタ)
変数と定数 • 変数 • プログラム実行中に変更され得るデータ • 通常、メモリの特定の場所と対応している • 定数 • プログラム実行中に変更されないデータ • 通常、変数や定数には、ラベル(名前)が付く • 例: • int k; // k という名前の整数(int) 型変数
Java • 高級言語のひとつ • 中間コード利用 • 仮想マシン(インタプリタ)で実行 • Java のプログラム実行まで kasu 中間コード Sample1.class Java 言語で書かれたプログラム Sample1.java コンパイル javac Sample1.java 仮想マシン上 実行結果 実行 java Sample1
プログラムを書いてみる • 後でどこにサンプルを置いたかわかりやすいよう、Kiso1-1 などとディレクトリを作り、その中で作業するとよい。 mkdir Kiso1-1; cd Kiso1-1 • Sample1.java を作成して編集する emacs Sample1.java • 文字コードに注意(左下に U と出ているか?) • 書き終わったら save して終了
Sample1.java class 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.java class 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.java class 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.java class Sample4 { public static void main(String args[]) { System.out.println("円記号を出力します。:\\"); System.out.println("アポストロフィを出力します。:\'"); } } // エスケープシーケンスを使うと、特殊な文字をあらわすことができる。
Sample5.java class Sample5 { public static void main(String args[]) { System.out.println("8進数101の文字は\101です。"); System.out.println("16進数0061の文字は\u0061です。 "); } } // 文字コードを指定して 文字を出力することができる
Sample6.java class 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 の許可を受けること • 許可のない提出は未提出と同じ扱い