情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公 kyama@tut.jp.

Slides:



Advertisements
Similar presentations
プログラミング演習Ⅱ 第 11 回 ポインタ(2) 情報・知能工学系 山本一公
Advertisements

プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
プログラミング演習Ⅱ 第 8 回 マクロ・列挙体等 情報・知能工学系 山本一公
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
基礎プログラミングおよび演習 第9回
第5回 ディジタル回路内の数値表現 瀬戸 ディジタル回路内部で,数を表現する方法(2進数)を学ぶ 10進数⇔2進数⇔16進数の変換ができる
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
1.12 式における型変換 1.13 代入における型変換 1.14 コメント 10月31日(金) 発表者:藤井丈明
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
情報処理Ⅱ 第4回 2007年10月29日(月).
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
情報処理Ⅱ 第2回 2007年10月15日(月).
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
計算機構成 第2回 ALUと組み合わせ回路の記述
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング演習I 2003年4月30日(第3回) 木村巌.
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
情報処理Ⅱ 2005年10月28日(金).
標準入出力、変数、演算子、エスケープシーケンス
ca-9. 数の扱い (コンピュータアーキテクチャとプロセッサ)
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
情報処理Ⅱ 小テスト 2005年2月1日(火).
JavaScript    プログラミング入門 2-3 式と演算子 2006/10/12 神津 健太.
printf・scanf・変数・四則演算
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
情報処理Ⅱ 2006年10月27日(金).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公 kyama@tut.jp

課題4の採点結果から 課題4−2 2以上の数に対してのみ正しく判定できる 関数になっているものが多数 0や1、負の数が入力されても素数と判定されてしまう

前回の課題の解説・ポイント(1) 課題5-1 void intary_rcpy(int v1[], const int v2[], int no) { int i; for (i = 0; i < no; i++) { v1[i] = v2[no – i - 1]; /* 課題2-1(演習5-4)のような感じ */ /* 要素数が変数なので”-1”が必要 */ } return; /* void型なので返却値無し。この行は無くてもよい */

前回の課題の解説・ポイント(2) 課題5-2 ファイルスコープ変数か、staticを使う int a = -1; /* ファイルスコープ変数を使う例 */ int lcg_rand(void) { /* ファイルスコープ変数の代わりに、   ここで static int a = -1; としても良い */ if (a == -1) { a = W; } else { a = (X * a + Y) % (int)pow(2, Z); } return a;

今日の内容 教科書 pp.147~181 基本型と数 整数型と文字型 浮動小数点型 演算子 基本型、基数 sizeof 演算子、size_t 型、typedef 宣言 整数定数 内部表現とビット、ビット単位の論理演算、シフト演算 浮動小数点型 浮動小数点定数 “==”の危険性 演算子

基本型と数 算術型 汎整数型 (integral type) 列挙型 (enumeration type) (次回) 文字型 (character type) char 型 signed char 型 unsigned char 型 基本型 整数型 (integer type) short int 型 unsigned short 型 int 型 unsigned int 型 long int 型 unsigned long int 型 浮動小数点型 (floating type) float 型 double 型 long double 型

整数型と文字型(1) 符号付き整数と符号無し整数 signed 型指定子/unsigned 型指定子 signed/unsigned を指定しなければ、signedになる 表わせる数の範囲は処理系に依存する ⇒ <limits.h> 「最低限」だけが言語仕様で決められている p.153, Column 7-1 char short int int long int long long int intは 書かなくてもよい p.156, Table 7-1参照 signed unsigned 最近の処理系にはある

整数型と文字型(2) 文字型 char 型 signedでもunsignedでもない どちらになるかは処理系依存 文字の大小を比較する際に重要? ASCIIコードは7ビットしか使わないので、signedでもunsignedでもどっちでも良かった(次回)

sizeof 演算子・typedef 宣言 変数が使っているバイト数を調べることができる typedef 宣言 型に別の名前を与える 多くの処理系ではこうなっている typedef unsigned size_t;

基数 人間が普段使っているのは、10進数 コンピュータが理解しやすいのは、2進数 8進数 16進数 数字は0~9、10で桁上がり 0/1のみ。電圧の高低に対応する。 8進数 2進数を3桁毎にまとめたもの 数字は0~7、8で桁上がり 16進数 2進数を4桁毎にまとめたもの 数字は0~9+A~F、 (10進数の) 16で桁上がり

整数定数 10進定数 8進定数 16進定数 特別な書き方をしない今まで使ってきたもの 先頭に”0”(数字のゼロ)を付ける 012 … 8進数の12。10進数では10に相当。 16進定数 先頭に”0x”(数字のゼロと”x”)を付ける 0x12 … 16進数の12。10進数では18に相当。

整数定数の型 整数接尾語 u/U/l/L 定数が最終的に何型になるかのルール 数値の後ろに”u”か”U”を付けると符号無しになる 数値の後ろに”l”か”L”を付けると long になる 小文字だと分かりにくい(特に”l”。数字”1”と見間違う)ので、大文字を使いましょう! 定数が最終的に何型になるかのルール p.158の最後

内部表現 コンピュータの内部では全てがビット(0/1)の並びで表現されている 符号付き整数の内部表現 だいたいが「2の補数」表現 最上位ビットが符号ビット 16ビットの場合(p.161, Fig.7-10) -32768 -32767 … -3 -2 -1 0 +1 +2 +3 … +32766 +32767

ビット演算(1) ビット単位の論理演算子 論理演算子に似ているが、無関係なので注意すること! 論理積(AND) “&” 論理和(OR) “|” 排他的論理和(XOR) “^” 否定(NOT) “~” (ビット反転) 論理演算子に似ているが、無関係なので注意すること! 特に”&&”, ”||”との書き間違いに注意! コンパイル出来てしまうので

ビット演算(2) シフト演算 ビットフィールドを全体にシフト(移動)して、空いたビットを 0 か 1 で埋める 右シフトのときに、「論理シフト(0で埋める)」になるか「算術シフト(符号ビットで埋める)」になるかは処理系依存 左シフト “<<” (p.166, Fig.7-13) 右シフト “>>” (p.166, Fig.7-14) 視覚的には分かりやすい演算子 整数の掛け算の高速化……に昔は使っていた

浮動小数点型 float 型 / double 型 / long double 型 浮動小数点定数 long double は倍々精度実数 or 拡張倍精度実数 内部表現により精度が異なる 一般的には、p.172, Fig.7-16のような形 “IEEE 754 フォーマット”で調べると良い 浮動小数点定数 浮動小数点接尾語 f/F/l/L 何も付けないと、double型になる f/Fを付けると、float型になる l/Lを付けると、long double型になる

浮動小数点定数の続き “e/E”で10のべき乗を表現する 省略形 “80.0E-5” ⇒ “80.0 × 10-5” “.0” ⇒ “0.0”の意味 “10.” ⇒ “10.0”と同じ意味 ”10”と”10.0”は別の型(前者は整数型、後者は浮動小数点型)になり、別の物なので注意

“==”の罠 p.174, List 7-9もどき このプログラムは停止しない! 実数は誤差を伴っており、それが累積する! xがちょうど10.0になることがないから! 実数は誤差を伴っており、それが累積する! int main(void) { float x; for (x = 0.0; x != 10.0; x += 0.01) { printf(“x = %f\n”, x); } return 0;

演算子と型変換 演算子と優先順位 型変換 p.177, Table 7-4 数学で使う演算子の優先順位は数学の通り それ以外の演算子に注意すること 型変換 pp.178~179を読んでおくこと 基本的には「ある値を、それよりも表現できる値の範囲が大きい型に変換するとき、値は保存される」、「表現できる値の範囲が狭い型に変換するとき、値は変化する」ということ

今週の課題(1) 今使用している処理系で、char, signed char, unsigned char, signed short int, unsigned short int, signed int, unsigned int, signed long int, unsigned long int, signed long long int, unsigned long long int, float, double, long doubleがそれぞれコンピュータの内部で何バイトで表現されているかを表示するプログラムを作成せよ(プログラムそのものはあまり重要ではなく、結果を見ることが重要。List 7-4を改造すれば良い)。 p.169, 演習7-2のプログラムを作成せよ。main関数等も作成して、完成したプログラムを作成すること(main関数はList 7-7をベースに作ると良い)。

今週の課題(2) 課題6-2の考え方 全体が8ビットの場合で、3ビット右に回転 1 1 0 0 0 1 0 1 3ビット右にシフト 5ビット左にシフト 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0

レポートについて 電子メールで提出 提出先は prog2@slp.cs.tut.ac.jp Subjectを「プログラミング演習2 課題6提出 学籍番号・氏名 」とすること C言語ソースファイルを添付する メールの本文には何も書かなくて良いです ソースファイルの頭にコメントで以下の情報を入れる 学籍番号・氏名 プログラムの説明(どのように動くのか、工夫した点等) 実行結果(長い場合は一部)を貼る 提出締切は、11月21日(水) 12:00 (1週間後)

授業用Webサイト URL: http://www.slp.cs.tut.ac.jp/~kyama/programming2/ 課題のpdfファイルが置いてあります。 授業で使ったpptファイルを置いていきます。 質問メールは、以下のどちらかのアドレスまで kyama@tut.jp prog2@slp.cs.tut.ac.jp C-515へ直接質問しに来ても構いません