岩村雅一 masa@cs.osakafu-u.ac.jp 知能情報工学演習I 第8回(後半第2回) 岩村雅一 masa@cs.osakafu-u.ac.jp.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
初年次セミナー 第4回 整数と実数の取り扱い.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
知能情報工学演習I 第7回( C言語第1回) 課題の回答
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
知能情報工学演習I 第7回( C言語第1回) 課題の回答
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラミング応用 printfと変数.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
知能情報工学演習I 第12回(後半第6回) 課題の回答
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
知能情報工学演習I 第9回(後半第3回) 課題の回答
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
知能情報工学演習I 第8回( C言語第2回) 課題の回答
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第7回( C言語第1回) 課題の回答
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング演習I 2003年4月30日(第3回) 木村巌.
地域情報学 C言語プログラミング 第1回 導入、標準出力、変数 2017年10月13日
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
知能情報工学演習I 第7回(後半第1回) 課題の回答
知能情報工学演習I 第11回( C言語第5回) 課題の回答
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 2005年10月28日(金).
知能情報工学演習I 第8回(後半第2回) 課題の回答
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
printf・scanf・変数・四則演算
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

岩村雅一 masa@cs.osakafu-u.ac.jp 知能情報工学演習I 第8回(後半第2回) 岩村雅一 masa@cs.osakafu-u.ac.jp

前回の課題 変数aにあながた生まれた月、変数bに生まれた日を代入して、a+bとa-bを計算して出力するプログラムを作成しなさい ただし、レポートはLaTeXで作成し、DVIファイル(.dvi)とCのソース(.c)をメールで送ること レポートには名前、学籍番号、授業に対するコメント(任意)を書く Cのソースは\begin{verbatim}と\end{verbatim}で囲む(5月11日の資料の6.1を参照)

回答例 #include <stdio.h> printf("a = %d\n", a); 現時点ではお約束 #include <stdio.h> int main(void) { char a, b; char plus, minus; a = 5; b = 19; plus = a+b; minus = a-b; printf("a = %d\n", a); printf("b = %d\n", b); printf("a + b = %d\n", plus); printf("a - b = %d\n", minus); return(0); } 出力 変数の宣言 データ型(intでもよい) 変数の初期化 計算

提出された解答について Cのソースをコンパイルできない 事前にコンパイルできることを確認する Cのソースではなく、実行形式、LaTeXのソースなどを提出 事前にコンパイルできることを確認する DVIファイルではなく、LaTeXのソースなどを提出

コメントに対して 「難しい」、「よくわからない」 そのうち慣れるはず(今は意味を考えても全てがわかるわけではない) 「わかりにくいところがあった」 聞いて 「タイピングが遅いので心配」 練習すれば速くなる 「1コマは辛い」 お互い様

後半の予定 6月1日 プログラミング環境(テキスト1,2章) 6月8日 変数とデータ型(3章) 、演算子(4章) 6月1日 プログラミング環境(テキスト1,2章) 6月8日 変数とデータ型(3章) 、演算子(4章) 6月15日 コンソール入出力(6章) 、配列(3章) 6月22日 制御文1 (テキスト5章) 6月29日 制御文2(テキスト5章) 7月13日 関数1(テキスト7章) 7月20日 配列(3章) 、応用プログラム

本日のメニュー 変数のデータ型 データ型 ビットとバイト 演算子 算術演算子 インクリメント演算子、デクリメント演算子 キャスト演算子

変数のデータ型 データ型を決める要因 整数か小数か 符号の有無(マイナスを扱えるか) 精度

主なデータ型(テキストP.51) データ型 表現範囲 char 1 unsigned char short int 2 バイト 表現範囲 char 1 -128~127 unsigned char 0~255 short int 2 -32768 ~ 32767 unsigned short int 0~65535 int 4 -2147483648~2147483647 unsigned int 0 ~ 4294967295 long int unsigned long int float 有効6桁 double 8 有効15桁 符号の 有無 精度 unsigned 整数 unsigned unsigned unsigned 小数

ビットとバイト ビット 1 バイト 1 1 = 9 1 = -1 0か1の2通り 8ビット 符号なし:0から255まで表現可能 符号あり:-128~127まで表現可能 1 または 1 8 1 1 = 9 x x x x x x x x 128 64 32 16 8 4 2 1 詳細は省略 0なら正、1なら負 1 = -1 符号 64 32 16 8 4 2 1

参考:符号つき2進数と符号なし2進数 符号なし2進数 符号つき2進数 11111111 = 255 11111110 = 254 … 10000001 = 128 01111111 = 127 00000100 = 4 00000011 = 3 00000010 = 2 00000001 = 1 00000000 = 0 符号つき2進数 01111111 = 127 … 00000010 = 2 00000001 = 1 00000000 = 0 11111111 = -1 11111110 = -2 11111101 = -3 11111100 = -4 10000000 = -128

算術演算子 四則演算と、余りの5種類 可算・・・+ 減算・・・- 乗算・・・* 除算・・・/ 剰余・・・% 100%30  10 7%3  1

演算の優先順位 演算の優先順位は数学と同じ 括弧で囲む:(, ) かけ算、割り算、余り: *, /, % 足し算、引き算:+, - 優先順位が同じならば左から処理される 例: 1+2*3-4  1+6-4  7-4  3

インクリメント、デクリメント演算子 インクリメント演算子 デクリメント演算子 変数の値を1加算する 記述例: a++; または ++a; 変数の値を1減算する 記述例: a--;または --a; a = a + 1;と等価 a = a - 1;と等価

インクリメント、デクリメント演算子 a++; と ++a; の違いは? いつ加算するかが違う b=a++; b=a; a++; b=++a;

サンプルプログラム1 (インクリメント演算子) j=j+iを実行してから i++を実行 #include <stdio.h> int main(void){ int i, j; i = 1; j = 10; printf("1: i=%d, j=%d\n", i,j); i++; printf("2: i=%d, j=%d\n", i,j); ++i; printf("3: i=%d, j=%d\n", i,j); j = j + i++; printf("4: i=%d, j=%d\n", i,j); j = j + ++i; printf("5: i=%d, j=%d\n", i,j); return(0); } i = 4, j = 13 i = 5, j = 18 i = 1, j = 10 i = 2, j = 10 ++iを実行してから j=j+iを実行 i = 3, j = 10

整数の演算と小数の演算 割り算は注意が必要 例えば、10/3はいくつになる? 3.33333333… になるような気がするけど、実際は?

サンプルプログラム2 (出力されるデータ型) #include <stdio.h> int main(void){ int i1, i2; float f1, f2; i1 = 10; i2 = 3; f1 = 10; f2 = 3; printf("i1/i2=%d\n", i1/i2); printf("f1/f2=%f\n", f1/f2); return(0); } 整数 小数 printfの書式 %d は整数を出力する %f は小数を出力する

出力されるデータ型 整数の場合 整数 / 整数 = 整数 int i1, i2; i1 = 10; i2 = 3; printf("i1/i2=%d\n", i1/i2); ソース int / int 整数 出力 i1/i2=3 つまり、 整数 / 整数 = 整数

出力されるデータ型 小数の場合 小数 / 小数 = 小数 float f1, f2; f1 = 10; f2 = 3; printf("f1/f2=%f\n", f1/f2); ソース float / float 小数 出力 f1/f2=3.333333 つまり、 小数 / 小数 = 小数

データ型の自動変換 表現力の大きいほうに自動的に変数の型を合わせる 整数 / = 整数 小数 / = 整数 小数 / = 小数 / =

整数 / = 小数 整数 / = 整数 小数 / = 整数 小数 / = 小数 / = では、 にしたいときは? 整数を小数に変換すればいいんじゃない?

サンプルプログラム3(キャスト) int / int float / float #include <stdio.h> int main(void){ int i1, i2; i1 = 10; i2 = 3; printf("i1/i2=%d\n", i1/i2); printf("(float)i1/(float)i2=%f\n", (float)i1/(float)i2); return(0); } int / int float / float

キャスト演算子 データの型を変換する 書式:(変換する型)変数 例: int i; float f; 整数を小数にキャストするときは問題なし 小数を整数にキャストするときは、小数点以下切り捨て int i; float f; i = 10; f = (float)i;