x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?

Slides:



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

変数とその種類 変数とは何か? → データ ( 数値 ) を入れておく 箱 1000 変数名とは何か? → 箱に付ける名前 xy 変数名 変数の種類 ( 変数の型 ) → 入れるデータによって箱の種類が異なる int char float double その他たくさん integer (
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
初年次セミナー 第4回 整数と実数の取り扱い.
プログラミング基礎I(再) 山元進.
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
x y 復習 変数とその種類 変数名 数学の場合 未知数 「変数xに‥を代入し‥」 x = 5 x = 1.3
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
プログラムはどこに保存され,どこで実行されるのか?
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラムはどこに保存され,どこで実行されるのか?
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
第4章 double 小数型の変数;.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
情報処理Ⅱ 小テスト 2005年2月1日(火).
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

x y 2000 100 200 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か? →箱に付ける名前 変数の種類(変数の型) →入れるデータによって箱の種類が異なる  int  char  float  double その他たくさん integer (整数) floating point (浮動小数点→実数)

変数の宣言と printf()による値の表示 復習 変数の宣言と printf()による値の表示 #include <stdio.h> int main(void) { int x ; x = 15; printf(‟変数の値は%dである\n‟, x); } 変数の型 変数名 変数の宣言 値の代入 変数値の表示 変数の値は15である 変数名(識別子)のルール  → 付録スライド

復習 ソースプログラムの書式 OK! 基本的にどこで改行してもよいし,ブランク(スペース)はあっても無くてもよい #include<stdio.h> int main(void){ int x;x=15;printf(‟変数の値は%dである\n‟, x);} #include <stdio.h> int main(void) { int x ; x = 15; printf(‟変数の値は%dである\n‟, x); } 単語の途中で改行してはダメ! #include<stdio.h> int mai n(void) {   intx;   x=15;   pri ntf(‟変数の値は%dで ある\n‟, x); } intとxの間にスペースがないのでダメ! 単語の途中にスペースがあるのもダメ! ダブルクォーテーション内で改行するのもダメ!

復習 printf()関数による変数値の表示 *は乗算を表わす %d は int型変数の値を表示する float型変数の値を表示するには? x = 15; printf(‟変数の値は%dで,その2倍は%dである\n‟, x, 2*x); *は乗算を表わす 変数の値は15で,その2倍は30である %d は int型変数の値を表示する float型変数の値を表示するには? → %f %e %g などを用いる → 詳しくは,付録スライド

復習 【付録】 変換文字の例 printf中で%で始まる文字には変数の値が表示される 変換文字の例(詳細は参考文献を見よ) 【付録】 変換文字の例 printf中で%で始まる文字には変数の値が表示される 変換文字の例(詳細は参考文献を見よ) %d 整数型(int型)の変数を10進数で表示 %o 整数型(int型)の変数を8進数で表示 %x 整数型(int型)の変数を16進数で表示 %f 実数型(浮動小数点型,float型)の変数を 小数点形式(mmm.ddddddd)で表示 %lf 実数型(浮動小数点型,double型 )の変数を %e 実数型(浮動小数点型,float型,double型 )の変数を 指数形式(m.ddddddd e ±xx)で表示 %g %fと%eの形式の内,適切なほうを自動的に選択して表示 %c char型の変数を文字で表示 %s char型の配列(ポインタ)を文字列で表示

warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。 浮動小数点数の代入と表示 int型で表すことができない数値はおかしな結果になる int bb = 1300.5; printf("bb = %d\n", bb); int型に実数(浮動小数点数)を代入すると,少数以下は切り捨て bb = 1300 コンパイラからの メッセージ warning = 警告 int cc = 10.56e20; printf("cc = %d\n", cc); 1344274432 warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。 float xx = 100.56e-20, yy = 10000; printf("xx = %f, yy = %f\n", xx, yy); 変換文字%fは小数点形式で表示 xx = 0.000000, yy = 10000.000000 変換文字%eは指数形式で表示 printf("xx = %e, yy = %e\n", xx, yy); xx = 1.005600e-018, yy = 1.000000e+004 printf("xx = %g, yy = %g\n", xx, yy); 変換文字%gは適切と思われる形式を自動的に選んで表示 xx = 1.0056e-018, yy = 10000

変数の宣言いろいろ 最後はセミコロン 途中の区切りはコンマ 宣言と同時に代入 float型でも同じ int aa; int aa, bb; float xx = 1.0, yy = 2.0; 最後はセミコロン 途中の区切りはコンマ 宣言と同時に代入 float型でも同じ

いろいろな変数型(1) 1バイト = 8ビット 0000 0000 0 0000 0001 1  ~ ~ 1111 1111 255 4バイト = 32ビット 0000 0000 0000 0000 0000 0000 0000 0000 0 0000 0000 0000 0000 0000 0000 0000 0001 1  ~ ~ 1111 1111 1111 1111 1111 1111 1111 1111 4,294,967,295

【付録】 アスキーコード表

いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int 4バイト もっとも標準的な整数型 2進法で10進実数を表わすので誤差がある (有効数字8桁程度) float 4バイト 単精度実数型(単精度浮動小数点型) double 8バイト 倍精度実数型(倍精度浮動小数点型) floatより高精度(有効数字15桁程度)

計算機における計算精度の問題点 有効数字 1 3 数学 3 × = 1 計算機 3 × 0.33333333 = 0.99999999 数学 3 ×   = 1 計算機 3 × 0.33333333  = 0.99999999 2進法による小数点以下の数値の表現 2進数 1111.1111 = 15.9375 123 + 122 + 121 + 120 = 8 + 4 + 2 + 1 = 15 12-1 + 12-2 + 12-3 + 12-4 = 0.5 + 0.25 + 0.125 + 0.0625 = 0.9375

少数以下の2進数による10進数値の表現 (100)2 = 1×22 = 4 (10)2 = 1×21 = 2 (100)2 = 1×22 = 4 (10)2 = 1×21 = 2 (1)2 = 1×20 = 1 (0.1)2 = 1×2-1 = 0.5 (0.01)2 = 1×2-2 = 0.25 (0.001)2 = 1×2-3 = 0.125 (0.0001)2 = 1×2-3 = 0.0625 少数以下の10進数値には,有限桁数の2進法では表せない数値がある. 丸め誤差 問題: 10進数の 0.1 は2進数で表せるか? (0.001)2 = 1×2-3 = 0.125 大きすぎ! (0.0001)2 = 1×2-4 = 0.0625 小さすぎ! (0.00011)2 = 1×2-4 + 1×2-5 = 0.0625 + 0.03125 = 0.09375 まだ小さい! (0.000111)2 = 1×2-4 + 1×2-5 + 1×2-6 = 0.0625 + 0.03125 + 0.015625 = 0.109075 大きすぎ! (0.0001101)2 = 1×2-4 + 1×2-5 + 1×2-7 = 0.0625 + 0.03125 + 0.0078125 = 0.1015625 まだ大きい! (0.00011001)2 = 1×2-4 + 1×2-5 + 1×2-8 = 0.0625 + 0.03125 + 0.00390625 = 0.09765625 惜しい!

課題の考察 課題1-3 15.100000と100000.000000をかけると,その答えは1510000.038147だ 考察 次に述べるプログラムを作成し,ソースプログラムと実行結果を提出せよ. float型変数 aa と bb を宣言し,それぞれに15.1と1.0105の数値を代入する.代入したこれらの数値を次のように表示する 15.100000と100000.000000をかけると,その答えは1510000.038147だ 問題: 計算結果が1510000.000000とならずに端数が出るが,これは間違いではない. でも,これはなぜだろうか? どうすれば,もっと正確な答えがでるだろうか? 考察をレポートの最後に記述せよ. 考察 10進実数は2進法で完全に表わせないため誤差がある.float型変数の有効数字は8桁程度のため,より精度の高いdouble型を使用すれば改善される.

定数値の書式 文字aのアスキーコード(97) 5108 10.5610120 int aa; aa = 35605; //整数値 char ss, cc; ss = 135; //整数値 cc = ‘a’ float xx, yy; xx = 1300.5; //実数値 yy = 5e8; double zz; zz = 10.56e120; 文字aのアスキーコード(97) 5108 10.5610120

定数値でよくある間違い int aa, bb, cc = 1; aa = 1/3*30; bb = cc/3*30; 1 / 3 * 30 printf("aa = %d bb = %d\n", aa, bb); 1 / 3 * 30 = 0 * 30 = 0 どんな結果になる? 整数同士の演算なので中間結果も整数値 1÷3 = 0.333… = 0 aa = 0 bb = 0 プログラムの世界では… 1.0 浮動小数点数(double型) 1  整数 int aa; aa = 1.0/3*30; printf("aa = %d", aa); 1.0 / 3 * 30 = 0.333... * 30 = 10 aa = 10 浮動小数点数と整数の演算結果はdouble型

x 11 10 10+1 いろいろな演算子(1) 代入演算子 '='は等号ではなく代入の意味 x の解は不定??? = は ← の意味

aa++ は aa = aa+1 と同じ → aaの値を1増やす -- デクリメント演算子 いろいろな演算子(2) 算術演算子 + 足し算 - 引き算 * 掛け算 / 割り算 % 剰余算 (例) x = 5 % 3 → x=2 ++ インクリメント演算子 aa++ は aa = aa+1 と同じ → aaの値を1増やす -- デクリメント演算子 aa-- は aa = aa-1 と同じ → aaの値を1減らす aa = 10; aa++; /* aaの値は11になる */

いろいろな演算子(3) これらは授業では使わない その他の演算子 += -= *= /= %= << >> ^ , etc.... 関係演算子と論理演算子 > >= < <= == != && || ! 選択制御文(条件分岐) で学習

scanf()関数による数値の入力 整数値の入力では%dとする. 変数名の前には&をつける int x; printf("値を入力してください."); scanf("%d", &x); printf("入力された値は,%dです.\n", x); 値を入力してください. 15 入力された値は,15です. キーボードから入力 整数値の入力では%dとする. int aa; scanf(" %d ", & aa ); 変数名の前には&をつける float bb; scanf("%f", &bb );

scanf()関数の注意 ダブルクォーテーション内に%dや%f以外の文字を入れてはダメ 値はいくらですか?15 int x; scanf("値はいくらですか?%d\n", &x); \nで改行して、次の行で入力されるのでダメ int x; printf("値はいくらですか?\n"); scanf("%d\n", &x); 15 ダブルクォーテーション内に%dや%f以外の文字を入れてはダメ 値はいくらですか? 15 一つの値の入力には, 一つのscanf()を使う. (複数の変数に一気に入力することはできない) int x; printf("値はいくらですか?"); scanf("%d", &x); 値はいくらですか?15

Warning!! warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ⇒ この関数は安全でない! これは主にシステムプログラムを書くプログラマへの警告 「この関数を用いたプログラムは,プログラマがしっかりしてないとウィルスの餌食になります」 ⇒ 学習には無関係なので無視する.