1 / 35

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

プログラミング基礎 I( 再 ). 山元進. 注意事項. 1度は講義を受けたことを念頭に置いて講義 遠慮なく質問せよ 質問で授業を止めたくないならば、 TA の人を呼んで質問すると良い 前期講義の欠席者は、特に注意せよ。 4 限 座学 +5 限演習 出席をとる ( 前期同様のシステム ) 中間試験を行う。 期末試験の範囲は教科書 1-8 章. はじめに. しばらく、 Java に限らないことを話す. コンピュータ中のデータ と 2 進数. コンピュータ中のデータ = ON/OFF で表現 ON/OFF → 1/0 とすると 2 進数

patia
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 注意事項 • 1度は講義を受けたことを念頭に置いて講義 • 遠慮なく質問せよ • 質問で授業を止めたくないならば、TA の人を呼んで質問すると良い • 前期講義の欠席者は、特に注意せよ。 • 4限座学+5限演習 • 出席をとる(前期同様のシステム) • 中間試験を行う。 • 期末試験の範囲は教科書 1-8 章

  3. はじめに • しばらく、Javaに限らないことを話す

  4. コンピュータ中のデータと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 ケタ

  5. 高級言語 • コンピュータへの指令も2進数のデータとして記録されている → 機械語 • 機械語は、人間がコンピュータにさせたいことを記述するには不向き • 数字の羅列は覚えにくい! • 人間の言語体系になるべく近いように作られた言語 : 高級言語

  6. データ型 • データは全て2進数で表されているが、そのデータを文字と解釈するか、数値と解釈するか、あるいはもっと複雑なデータと解釈するか → データの型 • 数値として解釈するなら数値型 • 文字として解釈するなら文字型 • …

  7. 10進数→2進数 • 問: 2010 を2進数で表せ • … 210 = 1024, 211 = 2048 • (10進数) 2048-32-4-2 • (2進数) 100000000000 – 100110 (32+4+2) = 11111011010

  8. 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 は値が全く違うので注意!!

  9. 文字→2進数 (or 16進数) • 文字と数との対応表を事前に決めておく • ASCII コード • アルファベット、数字、記号 → 1バイト • ユニコード • 2バイトで1単位、1or2単位で1文字 • 文字を表すデータを文字型、char 型

  10. 数値→2進数 (整数) • 正の整数はそのまま扱う • ただし、ケタ数は決めておく 31 ビット分 • 負の数は2の補数表示を使う • -1 を 0xffffffff であらわす • +1 するとケタがあふれて 0x0 になるのでこう選ぶ • 一般の数 x は2の補数表示: • x を2進表示 → 0/1 反転 → 1 を足す • (符号なしの整数もある)

  11. 数値→2進数(整数以外) • 実数は全部を取り扱うのは困難 • √2=1.41421356…. • 桁数に限りがない→必要メモリも限りない • 仮数部 × 指数部 分かりやすいよう 10 進表示すると • 123.456 → 1.23456 × 102 • 倍精度実数 : double 型 • 1つのデータで8バイト • 単精度実数 : float 型 • 1つのデータで4バイト

  12. メモリとアドレス • メモリ = データを記憶する場所 • 記憶場所管理のため番号の番号 = アドレス • 通常、8 ビット (8 ケタの 2 進数) = 1 バイトごと • 1 byte = 2 ケタの 16 進数 • 0x00 = メモリの 1 バイト分 0 2進数表記なら 00000000 (8ケタ)

  13. 変数と定数 • 変数 • プログラム実行中に変更され得るデータ • 通常、メモリの特定の場所と対応している • 定数 • プログラム実行中に変更されないデータ • 通常、変数や定数には、ラベル(名前)が付く • 例: • int k; // k という名前の整数(int) 型変数

  14. ここからは Java の話

  15. Java • 高級言語のひとつ • 中間コード利用 • 仮想マシン(インタプリタ)で実行 • Java のプログラム実行まで kasu 中間コード Sample1.class Java 言語で書かれたプログラム Sample1.java コンパイル javac Sample1.java 仮想マシン上 実行結果 実行 java Sample1

  16. プログラムを書いてみる • 後でどこにサンプルを置いたかわかりやすいよう、Kiso1-1 などとディレクトリを作り、その中で作業するとよい。 mkdir Kiso1-1; cd Kiso1-1 • Sample1.java を作成して編集する emacs Sample1.java • 文字コードに注意(左下に U と出ているか?) • 書き終わったら save して終了

  17. Sample1.java class Sample1 { public static void main(String args[]) { System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); } }

  18. プログラムを書く際の注意 • {} の入れ子構造を字下げで表す。 • 対応する { と } が、同じケタに来るように。 class Sample1 { public static void main(String args[]) { System.out.println( "ようこそJavaへ!");System.out.println("Javaを始めましょう!"); } } • 上のような書き方は、Javaの文法上許されるが、私は許さない! • 提出課題などでこんなの見つけたら減点する

  19. コメントを記述する • プログラム中にコメント(註釈)を書ける • 1 行の中で, // の右はコメント • /* と */ とに囲まれた部分はコメント • コメントに何を書いても実行結果に影響なし • コメントは、コードを読む人のために書く

  20. コメントの例 class Sample1 // クラスの宣言 クラス名は Sample1 {// クラス Sample1 本体の開始 // 次行から main()メソッド(実行開始場所)の宣言 public static void main(String args[]) { // main() メソッド本体の開始 System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); } // main() メソッド定義の終了 } // クラス定義の終了 // メソッド、クラスの宣言とも、続く{}の中身が本体である // メソッドの宣言が、クラスの宣言の中に入れ子になっている // クラスの概念の詳細は、後の回の講義で行う

  21. Sample1.javaの説明 ファイル名(拡張子を除く)と同じにすること! class Sample1 // クラスの宣言 {// コメント (人間が読むときのための註) public static void main(String args[]) { // main メソッドの宣言 (仮想マシンの実行開始場所) System.out.println("ようこそJavaへ!"); System.out.println("Javaを始めましょう!"); } } // メソッド、クラスの宣言とも、続く{}の中身が本体である // メソッドの宣言が、クラスの宣言の中に入れ子になっている // クラスの概念の詳細は、後の回の講義で行う 文末のセミコロン必須(次行も同様) カッコの対応関係には意味あり。 開いたら、必ず正しい位置で閉じること (次行も同様) "(ダブルクォーテイション)は、開くときも閉じるときも同じ記号。対応関係に注意。 "と"で囲まれた部分は文字列データで、全角OK。それ以外では全角不可 特に、全角スペースが文字列データ以外の部分に混じらないように!!

  22. 重要なポイント • Java のコードは1つ以上のクラスからなりたつ • main()メソッドからプログラムの処理がはじまる • 文は原則として先頭から順番に実行される • 文の最後にはセミコロンをつける • コメントは人間がコードを理解しやすくするために書く (実行動作には関係しない) • インデントや改行を使ってコードを読みやすく

  23. プログラムのコンパイル→実行 • コンパイル javac Sample1.java • エラーなし → Sample1.class できる (lsで確認) • 実行 java Sample1 • Sample1.class が仮想マシンで実行される • Sample1 の後に .class をつけるな!! • プログラムの書き間違い、手順違い →エラー出力 読めば何を間違えたか参考になる

  24. リテラル • literal → 通常は形容詞で、「文字どおりの」 • 名詞としては、文字どおりの解釈・意味 • プログラムで値を表す文字列 • Sample1.Java 中では • "ようこそJavaへ!" • "Javaを始めましょう!" • の2つが文字列リテラル。データの内容は • ようこそJavaへ! • Javaを始めましょう!

  25. 文字リテラル,文字列リテラル • 文字リテラルの例 • 'A', 'B' • 文字列リテラルの例 • "ようこそJavaへ!" • ' と " の使い分けに注意 • ' は1文字を囲む • " は文字列を囲む

  26. 数値リテラル • 数値リテラルの例 • System.out.println(0x398); • 0x398 は数値リテラル(整数リテラル) • 920 と表示される (整数はデフォルトで10進表記) • System.out.println(3.14159265e2); • 3.14159265e2 は浮動小数点(数)リテラル • 314.159265 と表示される (3.1415926 × 102)

  27. Sample3.java class Sample3 { public static void main(String args[]) { System.out.println('A');// 文字リテラル System.out.println("ようこそJavaへ!"); System.out.println(123); // 整数リテラル } }

  28. 画面への出力 • 次のようなメソッドを使う • System.out.println() • System.out.print() • 問 : 両者の違いはなにか?次のページのSample2.java をコンパイルして動かしてみよ

  29. Sample2.java class Sample2 { public static void main(String args[]) { System.out.print("ようこそJavaへ!"); System.out.print("Javaを始めましょう!"); } } // Sample1 と Sample2 の違いは何か? // 見比べて考え、実行して確かめてみよ。

  30. エスケープシーケンス • 複数の文字で1文字を表す規則 • 画面の出力を制御する、特殊な文字など • 普通の文字で表せない • そこで、 \文字 などで表す規則になっている • タブ → 印字位置を前もって決めた場所へ移動 • 復帰→ 印字位置を行の先頭に移動 • Java プログラム中で特別な意味のある文字 • \ → \\ ' → \' " →\" など • System.out.println("\\100");// 例 • 文字コードで文字を表すのにも使える • 教科書 表2-1を参照せよ

  31. Sample4.java class Sample4 { public static void main(String args[]) { System.out.println("円記号を出力します。:\\"); System.out.println("アポストロフィを出力します。:\'"); } } // エスケープシーケンスを使うと、特殊な文字をあらわすことができる。

  32. Sample5.java class Sample5 { public static void main(String args[]) { System.out.println("8進数101の文字は\101です。"); System.out.println("16進数0061の文字は\u0061です。 "); } } // 文字コードを指定して 文字を出力することができる

  33. 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によって印字位置が移動する場所) // はどこに設定されているか考えよ。ヒント:半角文字換算

  34. 課題 • 1.自分の名前を出力するプログラムを作成せよ。 • 2.「タブ」記号を表すエスケープシーケンス(¥t)を使用し、以下例のように氏名、学籍番号、学部を出力するプログラムを記述せよ。 氏名山元進 学籍番号 c0110999 学部コンピュータサイエンス学部 文字列の開始位置 \t でそろえること!!

  35. 課題提出の注意 • 提出は 課題2 のみ • 課題2 の class 名は Report2 とせよ • 必然的に、ファイル名も決まる • 時間内にTA の許可を受けること • 許可のない提出は未提出と同じ扱い

More Related