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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [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;

}

これで計算するとinfになる理由がわかりません。なぜ無限大になってしまうのでしょうか。

NakaTaka

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

#2

投稿記事 by NakaTaka » 9年前

根本的な原因は、
n = h / 100;
の結果が0.000....になっていることだと思われます。
この部分を
n = h / 100.0;
または、
n = (double)h / 100;
のようにdouble型にするとinfにならなくなります。

参考
http://koexuka.blogspot.jp/2013/04/c.html

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

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

#3

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

前のトピックを放置しないでください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

NakaTaka

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

#4

投稿記事 by NakaTaka » 9年前

本当に申し訳ございません。
自分が記載したトピックには、何も書かれていないものだけだったのですが、
なぜか送信後、回答が記載されたトピックが現れました。
送信時にブラウザが少し固まってしまったのですが、それが原因なんでしょうか。
意図しないこととはいえ、そのまま放置してしまい。本当に申し訳ございません。

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

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

#5

投稿記事 by box » 9年前

NakaTaka さんが書きました:本当に申し訳ございません。
くだんのコメントは、元の質問者にあてたものです。
あなたあてではありません。

まあザックリいうと、Aさんという質問者に対して
「あなたさあ、つい先だって、同じような内容の質問をしたばっかでしょ。
それが解決したのかどうかマークを付けてないのに、似た質問してんじゃねーよ。
前の、似た質問への回答、ちゃんと読んでる?」ってこと。

これを「質問者による元トピ放置」といい、この場所においては
あまりよろしくないふるまいであるとされているようです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

NakaTaka

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

#6

投稿記事 by NakaTaka » 9年前

自分が送信した際に、誤って出来たものでは無かったのですね。
box さんが書きました: まあザックリいうと、Aさんという質問者に対して
「あなたさあ、つい先だって、同じような内容の質問をしたばっかでしょ。
それが解決したのかどうかマークを付けてないのに、似た質問してんじゃねーよ。」ってこと。
これを「質問者による元トピ放置」といいます。
掲示板の利用経験が少ないので、とても勉強になりました。
ありがとうございます。

あゆ

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

#7

投稿記事 by あゆ » 9年前

なおりました。ありがとうございます

閉鎖

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