整数データと浮動小数データ.

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.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
初年次セミナー 第4回 整数と実数の取り扱い.
第2章 数値の入力と変数 scanfと変数をやります.
数値計算及び実習 第3回 プログラミングの基礎(1).
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
x y 復習 変数とその種類 変数名 数学の場合 未知数 「変数xに‥を代入し‥」 x = 5 x = 1.3
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
第2回 Microsoft Visual Studio C++ を使ってみよう
整数データと浮動小数データ 整数データと浮動小数データの違い.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
第二回 VB講座 電卓を作ろう.
繰り返し計算 while文, for文.
第4回簡単な計算・プリプロセッサ.
第10回関数 Ⅱ (ローカル変数とスコープ).
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
高度プログラミング演習 (03).
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
今までの練習問題の復習.
知能情報工学演習I 第9回(後半第3回) 課題の回答
第7回 条件による繰り返し.
知能情報工学演習I 第8回( C言語第2回) 課題の回答
Cの実行モデル.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
疑似乱数, モンテカルロ法によるシミュレーション
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
1.Scheme の式とプログラム.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
第4章 double 小数型の変数;.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
第3回簡単なデータの入出力.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

整数データと浮動小数データ

本日の内容 例題1.単純な金種計算 例題2.硬貨の金種計算 整数の変数 浮動小数と整数の違い 例題3.複利計算 整数の変数と,浮動小数の変数を混在させるときに気を付けねばならないこと

今日の到達目標 プログラムでの「整数データ」と「浮動小数データ」の違いについて理解する 目的に応じて,整数の変数,浮動小数の変数を正しく使い分けることができるようになる

例題1.単純な金種計算 金額を読み込んで,適切な紙幣と小銭の枚数を求め,表示するプログラムを作る. 例) 金額が1050円のとき, 千円札: 1枚 1円玉: 50枚 例題では,簡単のため,紙幣は千円札のみ,小銭の種別は考えない(1円玉のみ)ということにする. 金額,千円札の枚数,1円玉の枚数を扱うために,整数の変数を使う

#include <stdio.h> int main() { int kingaku; int en; int sen; printf("kingaku="); scanf("%d", &kingaku); sen = kingaku/1000; en = kingaku%1000; printf("senensatsu: %d mai\n", sen); printf("kozeni: %d en\n", en); return 0; } 入力部分 計算部分 出力部分

実行結果例 kingaku=13500 senensatsu: 13 mai kozeni: 500 en

プログラム実行順 メッセージ「kingaku=」を表示 printf("kingaku="); (出力文) 整数データを読み込み (入力文) scanf("%d", &kingaku); sen = kingaku/1000; en = kingaku%1000; 千円札と1円玉の数 を計算 printf("senensatsu: %d mai\n", sen); printf("kozeni: %d en\n", en); 計算結果を表示 (出力文) return 0; 終わり

プログラムとデータ メモリ ② ① kingaku scanf("%d", &kingaku); 整数データを読み込み ③ en sen sen = kingaku/1000; en = kingaku%1000; 整数データを読み込み ③ en 千円札と1円玉の数 を計算 printf("senensatsu: %d mai\n", sen); printf("kozeni: %d en\n", en); sen 計算結果を表示 データの集まり

整数データと浮動小数データ 浮動小数データ 整数データ 小数付きの数も可 整数 およそ10桁まで およそ4桁まで 例) 割り算では小数点以下切り捨て 例) 0 3 28 4778 -1 -10 -1250 浮動小数データ 小数付きの数も可 およそ10桁まで 例) 0 3 28 4778 -1 -10 -1250 1278748623  ー4563759398 2.190872 0.000178

整数データと浮動小数データの精度 整数データ(int) 浮動小数データ(double) -32767から+32767までの範囲の数 数学での「整数」では無い 浮動小数データ(double) 精度が10桁で,10の-37乗から10の+37乗までの正と負の範囲数 数学での「実数」とは違う

整数データと浮動小数データの違い 整数データ 浮動小数データ 変数宣言 入力 出力 四則演算 剰余 int kingaku; int en; double teihen; double takasa; 入力 scanf("%d", &kingaku); scanf("%lf", &takasa); 出力 printf("kozeni: %d en\n", en); printf("takasa: %f \n", takasa); 四則演算 四則演算には,+, -, *, / を使う 剰余 en = kingaku%1000; z = fmod(x,y);

変数 変数には,名前と型(型とはデータの種類のこと)がある 変数宣言では,名前と型を書く 「型」の例 整数データ int 浮動小数データ double

整数データの算術演算子 + 和 - 差 * 積 / 商 % 剰余(整数データの場合) +  和 -  差 *   積 /   商 %   剰余(整数データの場合)  → 浮動小数データの剰余は    fmod(x,y)を使うこと

入力文と出力文の機能 printf の機能 scanf の機能 メッセージの表示 整数データの表示 浮動小数データの表示 整数データの読み込み 浮動小数データの読み込み

入力文 scanf("%d", &kingaku); 書式 & 読み込むべき変数名 入力文とは,データを読み込むための文 「書式」と読み込むべき変数名を書く 書式の書き方 %d: 整数データ キーボードから読み込まれる数字を10進の整数データとし て解釈 %lf : 浮動小数データ キーボードから読み込まれる数字,小数点などを10進の浮 動小数データとして解釈 変数名の前には「&」を付けること

出力文 printf("kozeni: %d en\n", en); 書式 表示すべき変数名 データとメッセージを表示するための文 「書式」と読み込むべき変数名を書く 書式の書き方 %d: 整数データ 10進数の数字に直してこの位置(表示文字列の一部)に置 け,という指示 %f : 浮動小数データ 10進数の数字に直してこの位置(表示文字列の一部)に置 け,という指示 変数名の前には「&」は付けない

整数データの読み込みと表示 (1/3) n=?100 n=100 #include <stdio.h> int main() { int n; printf( "n=?" ); scanf( "%d", &n ); printf( "n=%d\n", n ); return 0; } プログラム例 n=?100 n=100 実行結果例

正しくは「%d」 整数データの読み込みと表示 (2/3) n=?100 #include <stdio.h> int main() { int n; printf( "n=?" ); scanf( "%lf", &n ); printf( "n=%d\n", n ); return 0; } 正しくは「%d」 プログラム例 n=?100 実行結果例 読み込もうとすると, エラーが現れて, 結局読み込めない

正しくは「%d」 整数データの読み込みと表示 (3/3) n=?100 #include <stdio.h> int main() { int n; printf( "n=?" ); scanf( "%d", &n ); printf( "n=%f\n", n ); return 0; } 正しくは「%d」 プログラム例 n=?100 実行結果例 表示しようとすると, エラーが現れて, 結局表示されない

例題2.硬貨の金種計算 金額を読み込んで,適切な小銭の枚数を求め,表示するプログラムを作る. 例) 金額が768円のとき, 500円玉: 1枚 100円玉: 2枚  50円玉: 1枚  10円玉: 1枚   5円玉: 1枚   1円玉: 3枚 例題では,簡単のため,紙幣は考えない(硬貨のみ)ということにする 各硬貨の枚数を扱うために,整数データの変数を使う

入力部分 計算部分 出力部分 #include <stdio.h> int main() { int kingaku; int gohyaku, hyaku, gojyu, jyu, go, ichi; printf("kingaku="); scanf("%d", &kingaku); gohyaku = ( kingaku % 1000 ) / 500; hyaku = ( kingaku % 500 ) / 100; gojyu = ( kingaku % 100 ) / 50; jyu = ( kingaku % 50 ) / 10; go = ( kingaku % 10 ) / 5; ichi = kingaku % 5; printf( "五百円 = %d\n", gohyaku ); printf( "百円 = %d\n", hyaku ); printf( "五十円 = %d\n", gojyu ); printf( "十円 = %d\n", jyu ); printf( "五円 = %d\n", go ); printf( "一円 = %d\n", ichi ); return 0; } 入力部分 計算部分 出力部分

実行結果例 kingaku=768 五百円 = 1 百円 = 2 五十円 = 1 十円 = 1 五円 = 1 一円 = 3

課題1.金種計算 紙幣:1万円札,5千円札,千円札 硬貨:500円,100円,50円,10円,5円,1円 金額を読み込んで,適切な紙幣と小銭の枚数を求め,表示するプログラム(金種計算)を作りなさい. 但し,すべての種類の紙幣と硬貨を考えること. 紙幣:1万円札,5千円札,千円札 硬貨:500円,100円,50円,10円,5円,1円 例) 金額が13,486円のとき, 1万円札: 1 500円: 0 5千円札: 0 100円: 4 千円札: 3 50円: 1     10円: 3     5円: 1     1円: 1

課題1の実行結果例 kingaku=13486 一万円= 1 五千円 = 0 千円 = 3 五百円 = 0 百円 = 4 五十円 = 1 十円 = 3 五円 = 1 一円 = 1

課題1のヒント 1000円札の枚数は 「(金額) を5000円で割った余り」 /1000 例えば,17,600円のとき 「(金額) を5000円で割った余り」 /1000 例えば,17,600円のとき 1万円札: 17,600/10,000 = 1 5千円札: (17,600 % 10,000)/5000 = 1 1千円札: (17,600 % 5,000)/1000 = 2 17,600を10,000で割った余りのこと(値は7,600) 17,600を5,000で割った余りのこと(値は2,600)

課題2.時間の換算 秒数 x を読み込んで,h 時,m 分,s 秒を計算するプログラムを作りなさい. 例) x=3723 のとき,

例題3.複利計算 元金 gankin 円を年利 nenri (パーセント)で nensu 年運用したときの利息を求めるプログラムを作る 単利計算では,年数に比例. 複利計算では,利息が利息を生む. 複利計算を行うために,pow関数を使う 年数は整数データ,利息は浮動小数データ

計算部分 #include <stdio.h> #include <math.h> int main() { int gankin, nensu, ganri; double nenri, r; printf("gankin="); scanf("%d", &gankin); printf("nenri="); scanf("%lf", &nenri); printf("nensu="); scanf("%d", &nensu); r = 1 + nenri * 0.01; ganri = (int)(gankin*pow(r, nensu)); printf("risoku = %d\n", ganri - gankin); return 0; } 計算部分

複利の計算 ganri = (int)(gankin*pow(r, nensu)); 複利の公式: べき乗 xy の計算のために,ライブラリ関数 pow(x,y) を使用する ganri = (int)(gankin*pow(r, nensu));

(int) の意味 ganri = (int)(gankin*pow(r, nensu)); 右辺は浮動小数の精度で計算される 整数 整数 浮動小数 整数 右辺は浮動小数の精度で計算される (int) の意味: 結果の小数点以下を切り捨てて,整数部だけを ganri に代入. (int) は,変数 ganri への代入時に,「データの精度が落ちてもかまわない」ことをコンピュータに教える

(int) が必要な場合 ganri = (int)(gankin*pow(r, nensu)); 左辺が整数の変数,右辺が浮動小数を含む式 このとき、右辺は、浮動小数の精度で計算され,最後に,左辺の変数の代入される

1/2 の値は 0 #include <stdio.h> int main() { double r; r = 1 / 2; printf("r = %f\n ", r ); } このプログラムの実行結果は,直感とは一致しない かも知れない r = 0.000000 右辺に整数の変数しか登場しないので,右辺は整数 の精度で計算される

1.0/2.0 の値は 0.5 #include <stdio.h> int main() { double r; printf("r = %f\n ", r ); } 「 1 / 2 」 と 「 1.0 / 2.0 」 は,意味が違う r = 0.500000 右辺に浮動小数の変数が登場するので,右辺は浮動小数 の精度で計算される

1/2 と 1.0/2.0 の違い 1/2 は,整数と整数の割り算 1.0/2.0 は,浮動小数と浮動小数の割り算 文法的には 「2000/30 (値は66) 」と書くのと同じ 1/2 の値は 0 (やはり整数) 1.0/2.0 は,浮動小数と浮動小数の割り算 1.0/2.0 の値は 0.5 (浮動小数)