OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

値の渡し方?(初心者)

  • すぐに回答を!
  • 質問No.243549
  • 閲覧数54
  • ありがとう数2
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 60% (14/23)

以前質問したプログラムについて、新たに質問です。
メインプログラムと、関数プログラムを組みました。
関数の中では、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);
}
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

質問で提示のプログラムをいくつかの環境で(*)動かして見ましたが、いずれも
4の printf() で出力した値と、main() の printf() は、同じ値が出ます。

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

  (*) unix の cc
    Windows の VC++4.2
    Windows の gcc 2.95.2
お礼コメント
acac

お礼率 60% (14/23)

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

その他の回答 (全3件)

  • 回答No.2
レベル10

ベストアンサー率 40% (54/135)

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 ...続きを読む
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の標準のプレフィクスではないのではないでしょうか?


  • 回答No.3

motsuan さんの仰っている通りだと思います。 非常にまぎらわしいのですが、 scanf の %f は float を意味しますが、printf の %f は double を意味します。 printf の %lf が double でないコンパイラもあるので、printf 側は %f を使用するべきだと思います。
motsuan さんの仰っている通りだと思います。
非常にまぎらわしいのですが、
scanf の %f は float を意味しますが、printf の %f は double を意味します。
printf の %lf が double でないコンパイラもあるので、printf 側は %f を使用するべきだと思います。
  • 回答No.4

読み直してみたら、大ボケな事を書いてしまった事に気づきました。 printf の %lf で正しく表示されているのですね。 失礼しました。
読み直してみたら、大ボケな事を書いてしまった事に気づきました。
printf の %lf で正しく表示されているのですね。
失礼しました。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ