ページ 11

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

Posted: 2016年6月22日(水) 19:52
by あゆ
//円錐の体積をもとめるプログラム

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

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

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

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

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

Posted: 2016年6月27日(月) 20:47
by みけCAT
前のトピックを放置しないでください。

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

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

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

Posted: 2016年6月27日(月) 21:25
by box
NakaTaka さんが書きました:本当に申し訳ございません。
くだんのコメントは、元の質問者にあてたものです。
あなたあてではありません。

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

これを「質問者による元トピ放置」といい、この場所においては
あまりよろしくないふるまいであるとされているようです。

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

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

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

Posted: 2016年7月02日(土) 20:59
by あゆ
なおりました。ありがとうございます