ページ 1 / 1
質問です
Posted: 2019年5月04日(土) 11:32
by ミヒト
下記のプログラムについて、例えば、上辺=5、下辺=4、高さ=3と入力したとき、答えが「13.500000」と表示されるはずが、「13.000000」と表示されてしまいます。
一番下のprintfに「(a+b)*c/2.0」を直接入力すると正解が表示されます。xに代入するとダメな理由を教えてください。
コード:
#include<stdio.h>
int main(void)
{
int a,b,c,x;
printf("台形の面積を求めます: ");
printf("上辺 = ");
scanf("%d",&a);
printf("下辺 = ");
scanf("%d",&b);
printf("高さ = ");
scanf("%d",&c);
x = (a+b)*c/2.0;
printf("面積は%fです。\n",(double)x);
return 0;
}
Re: 質問です
Posted: 2019年5月04日(土) 13:17
by usao
xがintだから
Re: 質問です
Posted: 2019年5月04日(土) 14:02
by ミヒト
質問に答えていただきありがとうございます。
Re: 質問です
Posted: 2019年5月04日(土) 14:03
by ミヒト
usao さんが書きました: ↑6年前
xがintだから
キャスト演算子を用いているのですが、使い方を間違えているのでしょうか?
どういったふうに使ったらよいか教えていただけないでしょうか?
Re: 質問です
Posted: 2019年5月04日(土) 14:56
by Math
整数型変数 x に 13.500000 という実数は 入りっこなく 13 がはいりますよ。
それを double にキャストしても 、「13.000000」ですよね!
実数型変数 を使わないといけません。
printf に直接書いたときは 実数にキャストされた状態(2.0があるから)問題ないですよ。
コード:
#include <stdio.h>
int main(void)
{
int a,b,c,x; // 整数型
float dx; // 実数型
printf("台形の面積を求めます: ");
printf("上辺 = ");
scanf("%d",&a);
printf("下辺 = ");
scanf("%d",&b);
printf("高さ = ");
scanf("%d",&c);
dx=( (a + b) * c )/2.0; // 左辺が実数型でないといけない!
printf("面積は%fです。\n",(double)dx);
return 0;
}
実行してみました。
エンバカデロC 使用
コード:
C:\19\19c\bcc32>"C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\bcc32" main.cpp
Embarcadero C++ 7.40 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
main.cpp:
Turbo Incremental Link 6.90 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
C:\19\19c\bcc32>dir main.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7813-6100 です
C:\19\19c\bcc32 のディレクトリ
2019/05/04 14:34 77,312 main.exe
1 個のファイル 77,312 バイト
0 個のディレクトリ 118,872,485,888 バイトの空き領域
C:\19\19c\bcc32>main.exe
台形の面積を求めます: 上辺 = 5
下辺 = 4
高さ = 3
面積は13.500000です。
C:\19\19c\bcc32>pause
続行するには何かキーを押してください . . .
Re: 質問です
Posted: 2019年5月04日(土) 15:11
by ミヒト
Math さんが書きました: ↑6年前
整数型変数 x に 13.500000 という実数は 入りっこなく 13 がはいりますよ。
それを double にキャストしても 、「13.000000」ですよね!
実数型変数 を使わないといけません。
printf に直接書いたときは 実数にキャストされた状態(2.0があるから)問題ないですよ。
コード:
#include <stdio.h>
int main(void)
{
int a,b,c,x; // 整数型
float dx; // 実数型
printf("台形の面積を求めます: ");
printf("上辺 = ");
scanf("%d",&a);
printf("下辺 = ");
scanf("%d",&b);
printf("高さ = ");
scanf("%d",&c);
dx=( (a + b) * c )/2.0; // 左辺が実数型でないといけない!
printf("面積は%fです。\n",(double)dx);
return 0;
}
実行してみました。
エンバカデロC 使用
コード:
C:\19\19c\bcc32>"C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\bcc32" main.cpp
Embarcadero C++ 7.40 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
main.cpp:
Turbo Incremental Link 6.90 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
C:\19\19c\bcc32>dir main.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7813-6100 です
C:\19\19c\bcc32 のディレクトリ
2019/05/04 14:34 77,312 main.exe
1 個のファイル 77,312 バイト
0 個のディレクトリ 118,872,485,888 バイトの空き領域
C:\19\19c\bcc32>main.exe
台形の面積を求めます: 上辺 = 5
下辺 = 4
高さ = 3
面積は13.500000です。
C:\19\19c\bcc32>pause
続行するには何かキーを押してください . . .
なるほど!
そうでしたか!
わかりやすい説明をしてくださってありがとうございます。
Re: 質問です
Posted: 2019年5月04日(土) 15:12
by Math
float、 double は精度のちがいですが どちらも荒いので 精度が必要な時は 電卓で用いられる
”2進化十進数” などを使用しますね。