以前質問したプログラムについて、新たに質問です。
メインプログラムと、関数プログラムを組みました。
関数の中では、print文を使うと計算は正しく行われていて、結果が正しいことが分かりました。
でうが、メイン文の出力では、どこにも出てこない変な値が出てきてしまいます。
値の渡し方がおかしいのでしょうか?
誰か、アドバイスをお願いします。

***以下プログラムです。***

#include <stdio.h>
#include <math.h>

double gamma(double x)
{
double c[9],y,a,r,b,s,z;
int i;
a=1.;
r=1.;

c[1]=5.771916e-01;
c[2]=9.882058e-01;
c[3]=8.970569e-01;
c[4]=9.182068e-01;
c[5]=7.567040e-01;
c[6]=4.821993e-01;
c[7]=1.935278e-01;
c[8]=3.586834e-02;


printf("0 %f\n",x);

while(1){
if(x>2.){
x=x-1.;
a=a*x;
printf("1 %f %f\n",x,a);
}
else if(x<1.){
a=a/x;
x=x+1.;
printf("2 %f %f\n",x,a);
}
else{
break;
}
}
x=x-1.;
for(i=1;i<9;i++){
b=(double)(i);
s=(c[i]*((double)(pow(-1.,b)))*((double)(pow(x,b))));
printf("3 %d %f\n",i,c[i]);
r=r+s;
}
y=a*r;
printf("4 %lf\n",y);
return y;
}

main()
{
double x,y;
printf("数字を入力してください。");
scanf("%lf",&x);
printf("メインプログラム x= %lf \n",x);
y=gamma(x);
printf("x= %f y= %f\n",x,y);
}

A 回答 (4件)

読み直してみたら、大ボケな事を書いてしまった事に気づきました。


printf の %lf で正しく表示されているのですね。
失礼しました。
    • good
    • 0

motsuan さんの仰っている通りだと思います。


非常にまぎらわしいのですが、
scanf の %f は float を意味しますが、printf の %f は double を意味します。
printf の %lf が double でないコンパイラもあるので、printf 側は %f を使用するべきだと思います。
    • good
    • 0

printf("4 %lf\n",y);


printf("x= %f y= %f\n",x,y);
の%lfと%fの違い、
あるいは %lf でyの値が壊れているのではないでしょうか?
ちなみに私のVC++6.0でも正常に動作しているようです。
printf("4 %lf\n",y);
return y;

printf("4 %lf\n",y);
printf("4 again %f\n",y);
return y;
とやってみるとわかるのではないでしょうか?
ちなみに%lfって標準のfの標準のプレフィクスではないのではないでしょうか?
    • good
    • 0

質問で提示のプログラムをいくつかの環境で(*)動かして見ましたが、いずれも


4の printf() で出力した値と、main() の printf() は、同じ値が出ます。

使っているコンパイラとOSは何ですか?

  (*) unix の cc
    Windows の VC++4.2
    Windows の gcc 2.95.2
    • good
    • 0
この回答へのお礼

前回のアドバイスの通りちゃんとやってみたら、ちゃんとできてました。
次点にしてしまって申し訳ありませんでした…m(__)m
ちなみに、結局間違っていたのは配列の添え字の使い方でですか?
あと、変数の%lfと%fの問題ですか?
なんだか腑に落ちないんですけどね…次にまた同じところで引っかかってしまうのではないかと心配です。
でも、とにかくたくさんお世話になりました!!
ありがとうございます。

お礼日時:2002/03/30 16:04

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ