どこが違うのか教えてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あゆ

どこが違うのか教えてください。

#1

投稿記事 by あゆ » 9年前

コード:

//円錐の体積をもとめるプログラム

#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になる理由がわかりません。なぜ無限大になってしまうのでしょうか。

box
記事: 2002
登録日時: 14年前

Re: どこが違うのか教えてください。

#2

投稿記事 by box » 9年前

あゆ さんが書きました:

コード:

	n = h / 100;
ここで整数どうしの割り算をしています。したがって、hが100未満の場合、nはゼロになります。
あゆ さんが書きました:

コード:

	double X = (n - 1)*r / n;//1分割の円柱の半径
入力したデータによっては、ここでゼロ割りが起きているのでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: どこが違うのか教えてください。

#3

投稿記事 by box » 9年前

そもそも、底面の半径と高さがわかっているのですから、
ややこしいことをしなくても
底面積 × 高さ / 3
で十分なような気がします。
もちろん、各変数の型には留意が必要です。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: どこが違うのか教えてください。

#4

投稿記事 by みけCAT » 9年前

あゆ さんが書きました:v = (M_PI)*pow(X,2,0)*(h / n);
C標準のpow関数は3個の引数を取りません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る