C言語の関数に関する質問ですが
C言語の初心者です。よろしくお願いいたします。
授業でこのような演習が出ました。
演習:実数x を入力したときの最大値を求めるプログラムを作れ.
実数x を入力すると,x; -x; x2; xの絶対値の平方根 の中で一番大きい値を答える
プログラムを作れ(ファイル名はmax.c とする).
表示は以下のようにする.
Input x: -0.5 【Enter】
Answer is 0.707107.
#include<stdio.h>
#include<math.h>
double max(double a, double b){
if( a > b) return a;
else return b;
}
int main(void)
{
double x,y;
printf(\"Input x: \");
scanf(\"%lf\",&x);
y = max (x,-x);
y = max (y,x*x);
y = max (y,sqrt(fabs(x)));
printf(\"Answer is %f.\\n\",y);
}
このように書けばうまく実行できますが、関数の中に関数を使えないでしょうか。うまく言えないですが、たとえば、以下のように書いてみましたが、うまく実行できません。どう直したらいいでしょうか、お忙しい中教えていただけたらうれしいです。
#include <stdio.h>
#include <math.h>
int max(double a,double b)
{
if (a<b) return b;
else return a;}
int main(void)
{
double x,result;
printf(\"Input x:\");
scanf(\"%lf\",&x);
result=max(max(x,-x),max(pow(x,2),sqrt(fabs(x))));
printf(\"%.2f\",result);
return 0;
}
よろしくお願いいたします!!
お礼
アドバイスありがとうございます。 >00は恐らく∞を、0を繋げて表現している なるほど~そうっぽい感じですね。 >前者は1÷0をint型で行った後にdoubleにキャスト(変 >換)します。 >結果1.0になります。 >後者はdoubleで計算を行い結果がINFになります。 なぜ前者の結果は1を0で割っているのに1.0になるのですか? BCC32ではINFの表示なのですね。 #コンパイラはVisual C++ 6.0 #OSはWindowsXP です.
補足
>0で除算しようとして >Unix系やWindowsの場合だと、実行中にエラーを返すことはありません。 でも僕のパソコンでは0で除算するとエラーになります。 >Rossanaさんは型について意識しているでしょうか? >doubleの有効数字はせいぜい16桁です。 型を意識するようにこれから気をつけようと思います。 doubleの有効数字って具体的にはどういうことですか?? sha-girlさんの言う通り y=exp(100000000000000000000.0);やy=exp(1E+20); →1.#INFOO の結果がでました。