//円錐の体積をもとめるプログラム
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
int main(void)
{
int r;//半径
int h;//高さ
double n;//分割
double v, V = 0;//体積
printf("円錐の体積を計算します。\n");
printf("数字を入力してください。\n");
printf("半径=");
scanf_s("%d", &r);
printf("高さ=");
scanf_s("%d", &h);
n = h / 100;
double X = (n - 1)*r / n;//1分割の円柱の半径
while (n < h) {
v = (M_PI)*pow(X,2,0)*(h / n);
n++;
V += v;
}
printf("体積は%.2lfです。",V);
return 0;
}
[\code]
これで計算するとinfになる理由がわかりません。なぜ無限大になってしまうのでしょうか。
どこが違うのか教えてください。
どこが違うのか教えてください。
Re: どこが違うのか教えてください。
ここで整数どうしの割り算をしています。したがって、hが100未満の場合、nはゼロになります。
入力したデータによっては、ここでゼロ割りが起きているのでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが違うのか教えてください。
そもそも、底面の半径と高さがわかっているのですから、
ややこしいことをしなくても
底面積 × 高さ / 3
で十分なような気がします。
もちろん、各変数の型には留意が必要です。
ややこしいことをしなくても
底面積 × 高さ / 3
で十分なような気がします。
もちろん、各変数の型には留意が必要です。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが違うのか教えてください。
C標準のpow関数は3個の引数を取りません。あゆ さんが書きました:v = (M_PI)*pow(X,2,0)*(h / n);
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)