情報処理Ⅱ 第2回 2007年10月15日(月).

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回ネットワークプログラミング 中村 修.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理Ⅱ 2007年12月10日(月).
情報処理Ⅱ 第4回 2007年10月29日(月).
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
情報処理Ⅱ 2007年11月5日(月).
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
Cプログラミング演習 第7回 メモリ内でのデータの配置.
基本骨格 #include #include : int main(void) { 変数の宣言 実行すること return 0; } #include int main(void) { int i; printf(”Hello world!\n”);
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
フロントエンドとバックエンドのインターフェース
型の compatibility とポインタ演算
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
情報処理Ⅱ 第1回 2004年10月5日(火).
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第3回 2007年10月22日(月).
コンパイラ 2012年10月29日
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
高度プログラミング演習 (11).
C言語講座 制御(選択) 2006年 計算技術研究会.
情報処理Ⅱ 2006年11月24日(金).
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
プログラミング基礎演習 第4回.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング演習I 2003年6月11日(第9回) 木村巌.
情報処理Ⅱ 第2回 2004年10月12日(火).
モバイルプログラミング第2回 C言語の基礎 (1).
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
情報処理Ⅱ 2006年10月27日(金).
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
情報処理Ⅱ 第8回:2003年12月9日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

情報処理Ⅱ 第2回 2007年10月15日(月)

授業の進め方 構造体 その他の型 2年以降で さらに学習・習熟 プリプロセッサ 指令 ライブラリ関数 ファイル入出力 配列・文字列 ポインタ 変数の 有効範囲 識別子 算術型 再帰呼び出し 制御文 演算子 プログラムの作成・ コンパイル・実行

本日学ぶこと コラッツの問題のプログラムで,変数の宣言を としたが,これ以外にどんな書き方があるのか? int x = 3; xは「識別子」 コラッツの問題のプログラムで,変数の宣言を としたが,これ以外にどんな書き方があるのか? xは「識別子」 intは「型」 int x = 3;

識別子(identifier) プログラムの中でさまざまな対象を識別するために用いられる「名前」のこと 対象の例 変数 ⇒ 本日のテーマ 関数 型定義 構造体のタグやメンバ 列挙体と列挙定数 ラベル など リp.36

識別子の命名規則(1) 最初の文字は,英字または下線記号(_) 2文字目以降は,英字,下線記号または数字 英字は大文字と小文字が区別される 例 ○ int x, variable, Variable, x_y, _, _ _; × int 0x, <variable>, x-y;

識別子の命名規則(2) 「予約語」はNG auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while 例 × int int; ○ int intchar; 入p.231 リp.42

識別子の命名規則(3) 「予約済み識別子」もNG 例 printfなど,既に定義されている名前 下線記号から始まるもの × int printf, NULL, __LINE__; ○ int Printf; リp.38

変数名の慣習 変数名は,1文字~数文字.もしくは,その用途がわかるものにする. よく使う変数名 大文字は使わない a, b, c, filename, msg よく使う変数名 ループカウンタ: i, j, k 座標: x, y 大文字は使わない 定数は大文字のみで書くのが慣例(NULL,EOFなど) 入pp.229-230

型(type) 変数や値がどのような種類の情報を持っているか 型の違いの例 C, C++, Javaなどでは,変数宣言時に型を決めなければ ならない 型の違いの例 int i = 1; (整数の「1」) double d = 1.0; (実数の「1」) char c = '1'; (文字の「1」) char *p = "1"; (文字列の「1」) 入p.222-225 リp.60

型の分類 オブジェクト型 関数型 不完全型 算術型 ⇒ 本日のテーマ 配列型 ⇒ 後日しっかり学ぶ 構造体型 ⇒ 後日しっかり学ぶ 共用体型 ポインタ型 ⇒ 後日しっかり学ぶ 関数型 不完全型 派生型 リp.62

算術型(よく使う) char : 文字,小さな範囲の整数 int : 整数 long : より大きな範囲の整数 float : 実数 語源…character int : 整数 語源…integer long : より大きな範囲の整数 語源…long integer float : 実数 語源…floating point(浮動小数点) double : より大きな範囲の実数 語源…double precision(倍精度) 入p.223 リp.64

算術型(あまり使わない) なるべく使わない たまに見かけるかも short int short long int unsigned char unsigned int unsigned long long double なるべく使わない short int long int long long long long int signed unsigned signed int char signed

整数型の範囲 整数型(char, int, longなど)のとり得る値は で決まる. nビットなら,2進数を用いて2n個の数値を表現できる. その型を何バイト(何ビット)で表現するか 符号の有無 で決まる. nビットなら,2進数を用いて2n個の数値を表現できる. どの整数型も,0を表現できる. この授業では,整数の表現として「2の補数」を前提とする. 整数の表現方法として,2の補数のほかに「1の補数」「符号ビット+絶対値」の表現方法もある. 演習室のLinux環境を含め,現実には多くの計算機環境で「2の補数」が採用されている. 入pp.131-133

signedとunsigned signed (符号あり) unsigned (符号なし) signedもunsignedも書かなかったら… 負の数をとり得る整数 最小は,-2n-1 最大は,2n-1-1 unsigned (符号なし) 負の数をとらない整数 最小は,0 最大は,2n-1 signedもunsignedも書かなかったら… int, short, longでは「符号あり」と決まっている charでは処理系に依存 1 1 1 1 1 1 1 1 n = 8 の ビットパターン 1 1 1 1 1 1 1 1 「1の補数」や「符号ビット+絶対値」で,符号ありの整数型を表現するとき, 最小値は,-(2のn-1乗)+1 = -((2のn-1乗)-1) となる. これらでは,nビットの中に0を表現する方法が二つあり,負のとりうる範囲が一つ減る. 「2の補数」のほうが,とりうる範囲が増えることになるが,一方,signed char s = -128; s = -s; としてもsは正の数にならない(-128のままである)という点には注意が必要である.

整数型の範囲の例 例1: int型が4バイト(32ビット)なら, 例2: char型は常に1バイト(8ビット) 注意 0≦unsigned int型の値≦4294967295 例2: char型は常に1バイト(8ビット) char=signed charなら,-128≦char型の値≦127 char=unsigned charなら,0≦char型の値≦255 注意 char以外の整数型のバイトサイズは処理系に依存 演習室の環境は,intとlongがともに4バイト. intが2バイトという処理系もあったりする. 範囲を超えた演算や代入は? …第4回授業で

浮動小数点とは? 科学技術計算では,602000000000000000000000 を 6.02×1023 と書く. 計算例:(6.02×1023)×10 = 6.02×1024 (符号)仮数×底指数による表現を,浮動小数点形式という. ただし1≦仮数<底,指数は整数(0や負でもよい) 「底」は「基数」とも言う. 計算例:(6×102)×(6×102) = (6×6)×102+2 = 36×104 = 3.6×105 2を底とする浮動小数点形式で表されることが多い. 例:-0.625 (=1/2+1/8)は,「-」1.01(2) * 2-1 入pp.135-137 リp.66

実数型の範囲(1) 仮数と指数をそれぞれ何ビットで表現するかによって,取り得る値が決まる. 単精度の例:符号1ビット+仮数部23ビット+指数部8ビット =32ビット(4バイト) 倍精度の例:符号1ビット+仮数部52ビット+指数部11ビット=64ビット(8バイト) ビット数の制約があるため,あらゆる実数を表すことはできない. 表現できない数の例:101000 ,√2,π

定数の表現方法 整数定数 浮動小数点定数 上記の英字は,大文字でも小文字でもよい. 123, 0123, 0x123 -123 123U, 123L, 123UL 浮動小数点定数 3.14, -3.1415926 .14, 3. 6.02E23 6.63E-34F, 6.6260693E-34L 上記の英字は,大文字でも小文字でもよい. 8進数値 16進数値 ( 0~9, a~f ) int型 double型 unsigned int型 long型 float型 long double型 unsigned long型 6.02×1023 物理定数: http://ja.wikipedia.org/wiki/%E7%89%A9%E7%90%86%E5%AE%9A%E6%95%B0 6.02E23はアボガドロ定数 6.64E-34F, 6.6260693E-34Lなどはプランク定数 constant.c 入p.130 リp.46, p.52

printfの変換指示子 int a = 123; printf("%d\n", a); unsigned int b = 123; printf("%u\n", b); long c = 123; printf("%l\n", c); double d = 3.14; printf("%f\n", d); double d2 = 3.14; printf("%g\n", d2); Manpage of PRINTF: http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html

識別子と型:まとめ 変数や関数などの名前は「識別子」と呼ばれ,そのルール(命名規則)や慣用的な使われ方がある. 「数」には,「整数」と「浮動小数点数」がある. 表現できる数値には制限がある. 「整数」といっても,いくらでも大きな整数値が使えるわけではない. 「実数」といっても,いくらでも精密な実数値が使えるわけではない.

次に学ぶこと 制御文 for, while, do~while if~else, switch~case 問題 九九の表を出力できる?

ダイクストラの構造化プログラミング プログラムは,「順接」,「反復」,「分岐」の組み合わせで表現できる. 順接 反復 分岐 入p.253 処理2 処理1 条件 処理 条件 条件を満たす ときの処理 条件を満たさ ないときの処理 構造化定理:1つの入り口と1つの出口を持つようなプログラムは、「順次・反復・分岐」の3つの基本的な論理構造によって記述できる http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 別名 順接…順次,順構造,逐次 反復…繰り返し 分岐…選択 入p.253

for 構文 最初に「条件」を満たしていな ければ,1回も「処理」をしない. for (初期化; 条件; 増分) { よく使う 入p.260  処理  } 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 初期化 条件 処理 増分 入p.260 リp.248, p.256

(for i less than or equal to 10) 0, 0.1, ..., 1.0 を出力するには ループ用の変数iは整数型にする. for文を用いて,i の値を 0, 1, ..., 10 と変えるようにする. i / 10.0 は,0, 0.1, ..., 1.0 となる. for (i = 0; i <= 10; i++) { iの初期値は0 iの値を1増やす i = i + 1 と等価 iは10まで (for i less than or equal to 10) from0to1.c 入p.261

while 構文 最初に「条件」を満たしていな ければ,1回も「処理」をしない. while (条件) { よく使う 入p.258 } 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 条件 処理 入p.258 リp.248

do~while 構文 少なくとも1回は「処理」をする. while文で記述可能 do { 処理がbreakを含む場合は やや煩雑 たまに使う 構文 do { 処理 } while (条件); 少なくとも1回は「処理」をする. while文で記述可能 処理がbreakを含む場合は やや煩雑 セミコロンを忘れずに 条件 処理 リp.248

if 構文 if (条件) { よく使う 入p.256 リp.232 条件 処理 条件 条件を満たす ときの処理 条件を満たさ } 条件を満たすときの処理 } else { 条件を満たさないときの処理 条件 処理 条件 条件を満たす ときの処理 条件を満たさ ないときの処理 入p.256 リp.232

制御文:ここまでのまとめ 反復は for,while,do~while 分岐は if,if~else