実数を含む計算式の計算結果を整数値で表示する方法を学んでみましょう。統合開発環境EAZY IDECが必要となりますがコンパイル結果は全て記載していますので無理にインストールする必要はありません。

☆お話はどこまですすんでいたでしょうか?ソーラーとぐっジョブCのなかよしコンビといっしよにおさらいしてみましょう。


       ☆お話はどこまですすんでいたでしょうか?☆


☆ソーラーとぐっジョブCのなかよしコンビといっしよにおさらいしてみましょう☆



ソーラー 「ふうぅ~~~~~~~~~。」


すがすがしい笑顔のソーラー。


ソーラー 

「やったね。やっと


直接printf関数の第2引数に


数値入力したとき


そのまま正確にprintf出力表示できる整数値の最大値の正確な値が


2147483647とわかったねえ~~」


るんるんのソーラー。


ぐっジョブC


「ほんとだね~。まさかここで解決するとは


おもわなかったよ~」


ソーラー

「ぐっジョブC、君がいたからこそ解けたんだ。


ありがとう。」


ぐっジョブC 

「いやあ、えへへ。」


ソーラー

「さあ、今日は踊りあかそうじゃないか。」


ぐっジョブCの手をとるソーラー。


るんたった るんたった るんたった

るんたった るんたった るんたった


優雅にぐっジョブCとダンスを踊りだす。


るんたった るんたった るんたった

るんたった るんたった るんたった


だんだん調子よくなってくる。


たんたかたん たんたかたん

たんたかたん たんたかたん


はげしくステップを踏むソーラー。


ソーラー

「ふぉーう」


思わず叫ぶ。


「だれだ、そこにいるのは?」


ふいに銀行システム管理室の木製の扉が開き


銀行経営者のカールトンがはいってくる。


さっと すばやくパソコン画面にもどり


サイトになりすます ぐっジョブC。


ソーラー 「ふぉっ ふぉーうぅ。」


突然のことに体が固まるソーラー。


あたりを見渡すカールトン。


パソコン画面に目がとまる。


ぐっジョブCは擬態に成功しているようだ。


ソーラー 「にゃーん。\(^^)/」


ソーラーの方は猫に擬態している。


カールトン 「なんだ猫か。気のせいか・・・ふむ・・・」


ソーラー 「にゃーん。\(^^)/」


カールトン 「どうかな。システムは直りそうか?ソーラー?」


笑顔でソーラーに向き直る。


ソーラー 「お,おぅ YE~S~ まかせてください。


順調に進んでいます。」


カールトン 「たのんだぞ ソーラー。」


銀行システム管理室をでていくカールトン。


ソーラー 「ふう~。あぶなかった~。」


ほっとため息をつくソーラー。


ぐっジョブC 「いや~突然、はいってくるんだもんなあ。


あぶない、あぶない。


よいしょっと。」


パソコン画面から体をはみだしながら


出てくるぐっジョブC。


ソーラー 「そういえば、どこまですすんだっけな?」


ソーラー「ちょっと 話が脱線しすぎちゃったかも・・・」



ぐっジョブC 「確か いまはカールトンさんに


以下のプログラム

👇

#include <stdio.h>


int main(void)

{

int a;

a = 1.05;


printf("あなたの預金額はただいま%d円です。\n", 10000 * a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10000円です




プログラムの実行結果(Visual Studioの場合)


プログラムをデバッグなしで実行すると


いったん


警告 C4244 '=': 'double' から 'int' への変換です。データが失われる可能性があります。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 6


と表示されますが


これまた


あなたの預金額はただいま10000円です


が表示されます。

👆


このプログラムを修正して


プログラムの実行結果が


あなたの預金額はただいま10500円です。


となるように表示させてほしいって


たのまれていたんだったよね。


たしか10000円に500円の利息を付けるって話じゃなかったっけ?」


画面の中のプログラムを指し示す。


ソーラー 

「そう そこで 次にやったことは


変数aは実数の値1.05を格納するから、


(プログラムの世界で実数とは


小数点以下の項がふくまれているものをいいます。


普通の整数は実数ではありません


             solarplexussより)


変数aはint型(整数のいれもの)ではなく


float 型(実数のいれもの)にしようということで


このプログラムのintのところを


次のプログラムのようにfloatに変更したんだったよね。」

👇

#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%d円です。\n",10000*a);

return 0;

}


ぐっジョブC「そうだったそう、そう、そう」


ソーラー「そこで 僕は次のように考えたんだ😝



10000*aは10000かける1.05となり10500となる


%dは整数値をprintf出力表示させる出力変換指定子だから


10500を出力させるには%dのままでOK!


ってね💖 へへ・・・


あとはこのプログラムを


エレガントにコンパイルすれば


あなたの預金額はただいま10500円です。


とでてくるはずなんだ~~。


簡単だったね。


とおもったところ


実際にプログラムをコンパイルしたら


#include <stdio.h>


int main(void)

{

float a,

a=1.05;


printf("あなたの預金額はただいま%d円です。\n",10000*a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま-262144000円です。



プログラムの実行結果(Visual Studioの場合)


プログラムをデバッグなしで実行すると


いったん


C4305 '=': 'double' から 'float' へ切り詰めます。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 6

警告 C4477 'printf' : 書式文字列 '%d' には、型 'int' の引数が必要ですが、可変個引数 1 は型 'double' です Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 8


と表示されますが


あなたの預金額はただいま0円です。


と表示されます。


このような


予想外のプログラムの実行結果がでてきたわけなんだ。」


ぐっジョブC「あなたの預金額はただいま-262144000円です


って 借りたお金ってならない?」



ソーラー


「わあ そうなっちゃうね


こまっちゃうな


このプログラムの間違っているところは


printf("あなたの預金額はただいま%d円です。\n",10000*a);


で%d出力変換指定子をつかっているところなんだ。


ほんとは%f出力変換指定子をつかって


printf("あなたの預金額はただいま%f円です。\n",10000*a);


と記述しなくちゃいけないんだ


変数aは実数値を格納しているので


それに 10000*aと整数値10000をかけあわせようとすると


そのままでは


整数の型に格納されている数値10000×実数の型(変数a)に格納されている数値


の関係となります


コンピュータは同じ型同士の計算しかできないので


実数の型に格納されている数値×実数の型に格納されている数値


となるよう


整数値10000も実数の型に格納しなおされ実数値となります。


そうして


整数の型に格納されている数値10000×実数の型(変数a)に格納されている数値



実数の型に格納されている数値×実数の型(変数a)に格納されている数値へと


変換されます


そして


実数の型に格納されている数値×実数の型(変数a)に格納されている数値


の計算結果も実数の型に格納された実数となります。


つまり


10000*a


の計算結果も実数の型に格納された実数となります。


となると


10000*aをprintf出力表示するには


整数値をprintf出力表示する%d出力変換指定子でなく


実数値をprintf出力表示する%f出力変換指定子が


用いられなければいけないというわけですね。


そのようなわけで


プログラムの%d出力変換指定子を%f出力変換指定子にかえて


プログラムを書き換えコンパイルすると


#include <stdio.h>


int main(void)

{

float a,

a=1.05;


printf("あなたの預金額はただいま%f円です。\n",10000*a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10499.999523円です。


がprintf出力表示されます。


プログラムの実行結果(Visual Studioの場合)


プログラムをデバッグなしで実行すると


いったん

C4305 '=': 'double' から 'float' へ切り詰めます。 Project6 c:\users\solarplexuss\source\repos\project6\project6\source.cpp 6

が表示されますが



あなたの預金額は10500.000000円です。


がprintf出力表示されます。




って ところまでたどりついたわけなんだ


ぐっジョブC

なぜ 

プログラムの実行結果(EAZY IDECの場合)

あなたの預金額はただいま10500.000000円です。

でなく

あなたの預金額はただいま10499.999523円です。


となるのか


ふつうに


10500.000000と表示すればいいのに


10499.999523と表示するのはなんかコンピュータにとっても難しくない?」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る