変数とその種類 変数とは何か? → データ ( 数値 ) を入れておく 箱 1000 変数名とは何か? → 箱に付ける名前 200300 xy 変数名 変数の種類 ( 変数の型 ) → 入れるデータによって箱の種類が異なる int char float double その他たくさん integer (

Slides:



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

第 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.関数と分割コンパイル
プログラミング言語としてのR 情報知能学科 白井 英俊.
初年次セミナー 第4回 整数と実数の取り扱い.
プログラミング基礎I(再) 山元進.
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
数値計算及び実習 第3回 プログラミングの基礎(1).
演算、整数型と浮動小数点型 第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回 導入 情報工学科 篠埜 功.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング演習 バージョン1 担当教員:綴木 馴.
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
プログラムはどこに保存され,どこで実行されるのか?
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラムはどこに保存され,どこで実行されるのか?
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?
復習 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・・・・
情報処理Ⅱ 2005年10月28日(金).
標準入出力、変数、演算子、エスケープシーケンス
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

変数とその種類 変数とは何か? → データ ( 数値 ) を入れておく 箱 1000 変数名とは何か? → 箱に付ける名前 xy 変数名 変数の種類 ( 変数の型 ) → 入れるデータによって箱の種類が異なる int char float double その他たくさん integer ( 整数 ) floating point ( 浮動小数点 → 実数 ) 数学の場合 未知数 「変数 x に‥ を代入し ‥」 x = 5 x = 1.3 x = 5/10 復習

変数の宣言と printf() による値の表示 #include int main(void) { int x ; x = 15; printf( ‟変数の値は %d である \n ‟, x); } 変数の値は 15 である 変数宣言 値の代入 ( 変数の使用 ) 変数名 ( 識別子 ) のルール → 変数名は 1 文字とは限らない. x, y, aa, xx, xy, aa1 → 本スライド末尾 変数値の表示 ( 変数の使用 ) 大原則 変数は,それを使用する前 にまず宣言しなければなら ない. → 変数宣言 ①②③①②③ 復習

#include int mai n(void) { intx; x=15; pri ntf( ‟変数の値は %d で ある \n ‟, x); } #include int main(void){ int x;x=15;printf( ‟変数の値は %d である \n ‟, x);} #include int main(void) { int x ; x = 15; printf( ‟変数の値は %d である \n ‟, x); } ソースプログラムの書式 OK! 基本的にどこで改 行してもよいし, ブランク ( スペース ) はあっても無くて もよい 単語の途中で改行してはダメ! int と x の間にスペースがないのでダ メ! 単語の途中にスペースがあるのもダ メ! ダブルクォーテーション 内で改行するのもダメ! 大原則 プログラム本体内では (i) 上の行から順に, (ii) 行内では左から右へ 命令文が実行される 復習

計算式の書き方 float x1, x2, y; x1 = 2e5; x2 = 20.0; y = x1 * x2 / 4.0; printf( ‟答えは %f だ \n ‟, y); 答えは だ 2e5 は 2x10 5 を意味す る ○e △ ⇔ ○x10 △ 指数表示 問題 実数 3.5  10 5 のプログラム中の表現で正しいのはどれか? (A)3.5*10e5 (B)3.5e5 (C) 解答 (B) と (C) 解説 e5 → 10 5 であるので, 3.5*10e5 と書くと, 3.5  10  10 5 の意味 になる. *は乗算, / は割り算の意味 復習

printf() 関数による変数値の表示 int x = 15; printf( ‟変数の値は %d で,その 2 倍は %d である \n ‟, x, 2*x); 変数の値は 15 で,その 2 倍は 30 である %d は int 型変数の値を表示する float 型変数の値を表示するには? → %f %e %g などを用いる → 詳しくは,本スライド末尾 printf( ‟変数の値は %d で,その 2 倍は %d である \n ‟ ); printf( ‟変数の値は %d で,その 2 倍は %d である \n ‟, x, 2*x, 3*x); 表示する べき変数 ( 値 ) が不明 表示するべ き変数 ( 値 ) と %d の数 が不一致 これらはコンパイルエラーにはならないが,表示がおかしくなる 復習

printf() 関数で変数値を表示する際の文法 printf( ‟変数の値は %d で,その 2 倍は %d である \n ‟, x, 2*x); メッセージ部分変数や式の並び メッセージはダブルクォートで囲む メッセージ部分と変数 ( 式 ) の並び部分の区切り や,変数 ( 式 ) 同士の区切りとしてコンマを入れ る

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

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

いろいろな変数型 (1) 1バイト = 8 ビット ~~ バイト = 32 ビット ~~ ,294,967,295

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

計算機における計算精度の問題点 数学3 × = 1 1313 計算機3 × = 1111. 1111 1     2 0 = = 15 1     2 -4 = = 有効数字 2進法による小数点以下の数値の表現 2進数=

少数以下の 2 進数による 10 進数値の表現 (100) 2 = 1×2 2 = 4 (10) 2 = 1×2 1 = 2 (1) 2 = 1×2 0 = 1 (0.1) 2 = 1×2 -1 = 0.5 (0.01) 2 = 1×2 -2 = 0.25 (0.001) 2 = 1×2 -3 = (0.0001) 2 = 1×2 -3 = 問題 : 10 進数の 0.1 は 2 進数で正確に表せるか? (0.001) 2 = 1×2 -3 = 大きすぎ! (0.0001) 2 = 1×2 -4 = 小さすぎ! ( ) 2 = 1× ×2 -5 = = まだ小さい! ( ) 2 = 1× × ×2 -6 = = 大きすぎ! ( ) 2 = 1× × ×2 -7 = = まだ大きい! ( ) 2 = 1× × ×2 -8 = = 惜しい! 少数以下の 10 進数値 には,有限桁数の2 進法では表せない数 値がある. 丸め誤差

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

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

いろいろな演算子 (1) 代入演算子 x = 10; x = x + 1; x の解は不定??? = は ← の意味 x = x + 1; x ← x + 1 変数 ( 箱 ) x から値を取り出して,1を足して変数 x に代入する '=' は等号ではな く代入の意味 x

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

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

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

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

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. ⇒ この関数は安全でない! これは主にシステムプログラムを書くプ ログラマへの警告 要するに言いたいことは・・・ 「この関数を用いたプログラムは,プロ グラマがしっかりしてないとウィルスの 餌食になるかもしれません」 ⇒ 学習には無関係なので無視する. 警告 C4996: 'scanf' : この関数または変数は安全ではないかもしれません. 代わりに scanf_s を用いることを検討してください.この異議を無効にす るためには _CRT_SECURE_NO_WARNINGS を用いてください.詳細は オンラインヘルプを参照してください. Visual Studio 2010 では無視 できるが, Visual Studio 2013 ではエラーになるため, 無視できない!

scanf() 関数がエラーになる場合の対処方法 対処方法1 scanf() 関数の代わりに scanf_s() 関数を用いる 推奨できません! 理由: scanf_s() 関数はマイクロソフト独自仕様なので、他のシステ ムやコンパイラでは使えない! 対処方法2 ソースプログラムの 1 行目に次の行を書いておく #define _CRT_SECURE_NO_WARNINGS #include ・・・・ scanf( ・・・ ); 資格試験(情報処理技術者 試験等)でもバツになるか も! Visual Studio 以外のコ ンパイラではこの行は 無視される scanf() 関数がエラーにならな い!