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

35 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

全文

(1)
(2)

1度は講義を受けたことを念頭に置いて講義

遠慮なく質問せよ

質問で授業を止めたくないならば、

TA の人を呼

んで質問すると良い

前期講義の欠席者は、特に注意せよ。

4限座学+5限演習

出席をとる

(前期同様のシステム)

中間試験を行う。

期末試験の範囲は教科書

1-8 章

(3)
(4)

コンピュータ中のデータ

= 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)

: 2010 を2進数で表せ

… 2

10

= 1024, 2

11

= 2048

(10進数) 2048-32-4-2

(2進数)

100000000000

100110 (32+4+2)

=

11111011010

(8)

: 2 進表記された数 1110011000 を 16 進

表記に直せ

11 1001 1000 (4ケタずつ切る)

398

ただ文字を並べても、位取りの意味が不明瞭

Java では、16進数の先頭に 0x 付加

 0x398 → 10進数なら (3×16+9)×16+8=920 

16 進数 he

x

adecimal

類似物に

8 進数あり。先頭に 0 付加

0123 と 123 は値が全く違うので注意!!

(9)

文字と数との対応表を事前に決めておく

ASCII コード

 アルファベット、数字、記号 → 1バイト 

ユニコード

 2バイトで1単位、1 or 2単位で1文字 

文字を表すデータを文字型、

char 型

(10)

正の整数はそのまま扱う

ただし、ケタ数は決めておく

31 ビット分

負の数は2の補数表示を使う

-1 を 0xffffffff であらわす

+1 するとケタがあふれて 0x0 になるのでこう選ぶ

一般の数

x は2の補数表示:

 x を2進表示 → 0/1 反転 → 1 を足す 

(符号なしの整数もある)

(11)

実数は全部を取り扱うのは困難

√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)
(15)

高級言語のひとつ

中間コード利用

仮想マシン

(インタプリタ)で実行

Java のプログラム実行まで

kasu

Java 言語で書か れたプログラム Sample1.java 中間コード Sample1.class 実行結果 コンパイル javac Sample1.java 実行 java Sample1 仮想マシン上

(16)

後でどこにサンプルを置いたかわかりやすい

よう、

Kiso1-1 などとディレクトリを作り、その中

で作業するとよい。

mkdir Kiso1-1; cd Kiso1-1

Sample1.java を作成して編集する

emacs Sample1.java

文字コードに注意

(左下に U と出ているか?)

(17)

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)

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)

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()

: 両者の違いはなにか?次のページの

(29)

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)

class Sample4 {

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

(32)

class Sample5 {

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

(33)

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 の許可を受けること

Updating...

参照

Updating...