c
1#define _CRT_SECURE_NO_WARNINGS 2#include<stdio.h> 3float menseki(int x, int y, int z) { 4 return (x + y) * z / 2.0; 5} 6int main(void) { 7 int num1, num2, num3; 8 float kei; 9 printf("上辺を入力してください。\n"); 10 scanf("%d", &num1); 11 printf("下辺を入力してください。\n"); 12 scanf("%d", &num2); 13 printf("高さを入力してください。\n"); 14 scanf("%d", &num3); 15 16 kei=menseki(num1, num2, num3); 17 printf("台形の面積は%fです。\n", kei); 18}
上記のプログラムを実行すると、小数点以下が表示されないときがあるのですが、どこが間違っているのでしょうか?
解答お願いします。
どういうときに表示されないんでしょうか
ごめんなさい。
文章間違えました。
「(x + y) * z / 2.0」の式がint型になっているので、戻り値に正しい値が入らないと言われました。
なので、この式をfloat型に修正するにはどうしたらいいのでしょうか>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
float menseki(int x, int y, int z) {
float gokei;
gokei=(x + y) * z / 2.0;
return (gokei);
}
int main(void) {
int num1, num2, num3;
float kei;
printf("上辺を入力してください。\n");
scanf("%d", &num1);
printf("下辺を入力してください。\n");
scanf("%d", &num2);
printf("高さを入力してください。\n");
scanf("%d", &num3);
kei=menseki(num1, num2, num3);
printf("台形の面積は%fです。\n", kei);
}
このように変更してみたのですが、これだとさっきの式はfloat型になりますか?
> 「(x + y) * z / 2.0」の式がint型になっている
そんなことないと思うけど.
大学の課題でやってるのですが、僕も何故それで再提出なのかわからなくて、、、
「(x + y) * z / 2」だとint型になったりします?
> 「(x + y) * z / 2」
それならintです.
「こういう入力のときは出力はこうなるんだけど,この入力だと出力がこうなる」っていう具体的な例を示した方が話が早いと思うのですが.
> 僕も何故それで再提出なのかわからなくて、、、
もしも「小数点以下が表示されないときがある」と言っているのが提出先なのであれば,
状況把握のためにどんな入力のときにそうなるのかを知りたいから入力例を教えてくれ,と訊けばどうでしょうか.
x,y,zの大きさによってはint型の上限値を超えてしまいます。返す値がfloat型である場合は、最初の計算からfloatであった方がいいでしょう。
foat fx =x;
float fy = y;
float fz = z;
return (fx + fy) * fz / 2.0;
などとすれば、それらの懸念を払拭することができます。暗黙の型変換を考慮すると上記は
float fx = x;
return (fx + y) * z / 2;
や
return ((float)x + y) * z / 2;
でも同じです。
回答1件
あなたの回答
tips
プレビュー