• 締切済み

コンパイルした時になぜ表示されないか

バネのつり合いから,オーバーシュートとその時の時間を求めるのですが,以下のようにプログラムを作り,オーバーシュートは出せましたが,一番下のprintf("t=\n%lf\n\n",(y1-y0)/(1+y1));の部分が画面に表示されません.わかる方ぜひ教えてください. #include<stdio.h> #define G 9.8 double m,K,H,A,N,t; double h=0.01; double f1(double y1,double y2){ return(y2); } double f2(double y1,double y2){ return(-K/m*y1+G-A*N/H/m*y2); } main(){ int i; double k[5][3]; double y0,y1,y2; y1=0; y2=0; printf("m,K,H,A,N="); scanf("%lf,%lf,%lf,%lf,%lf",&m,&K,&H,&A,&N); for(i=0;i<1000;i++){ k[1][1]=h*f1(y1,y2); k[1][2]=h*f2(y1,y2); k[2][1]=h*f1(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[2][2]=h*f2(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[3][1]=h*f1(y1+k[2][1]/2.0,y2+k[2][2]/2.0); k[3][2]=h*f2(y1+k[1][1]/2.0,y2+k[1][2]/2.0); k[4][1]=h*f1(y1+k[3][1],y2+k[3][2]); k[4][2]=h*f2(y1+k[3][1],y2+k[3][2]); if(k[1][1]+k[2][1]+k[3][1]+k[4][1]<0){ break; } y1=y1+k[1][1]/6.0+k[2][1]/3.0+k[3][1]/3.0+k[4][1]/6.0; y2=y2+k[1][2]/6.0+k[2][2]/3.0+k[3][2]/3.0+k[4][2]/6.0; } y0=m*G/K; printf("\n%lf\n\n",y1-y0); printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

「古い規格」では %f しか認められていませんでしたが, 「今の規格」では %lf でも OK です>#3.

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); の前に、 printf("1+y1=%f\n",1+y1); を入れると、なんと表示されますか?

回答No.3

どのコンパイラを使っておられるか情報がないので、当てはまるかどうかわかりませんが、printfでdoubleを出力する場合は、本来の規格では%fしか受け付けません。コンパイラによっては、%lfでも正常に出力される場合があります。 というわけで、printfの%lfを%fにして見て下さい。 ※scanfは、%lfと%fは、元々の規格にありますので、問題ありません。

ayashun
質問者

お礼

丁寧に何度もありがとうございました.今手元にlinuxが使えるパソコンがないので,大学に行き次第やってみます.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> 入力データとして、何を与えたときですか? これにもお答えいただけますか? 当方では、入力データの値によって、 最後まできちんと出力する場合と プログラムが異常終了する場合とがあります。

ayashun
質問者

補足

ありがとうございます. 入力データとしては,(m,k,H,A,N)=(1,100,0.00001,0.025,0.5)を入力しました.ちなみに順番に重量,ばね定数,壁と物体の距離,壁に接している面積,動粘度です. 問題はオーバーシュートの値と,その時の時間tを求めるのですが,コンパイルしたとき,オーバーシュートの値は表示され,確認のために与えられた数値と一致したので,プログラム自体は正しいと思われます.ただ時間tが表示されません.『t=』すら表示されません.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

入力データとして、何を与えたときですか? 今のコードではscanf()の書式文字列にカンマが入っていますので、 1,2,3,4,5 のように入力する必要があります。この点は守っていますね?

ayashun
質問者

補足

回答ありがとうございます. はい,入力のときカンマ入れています.なので, printf("\n%lf\n\n",y1-y0); の部分は出力されます.ただ, printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); が出力されません.なにか追加するべきなのでしょうか?

関連するQ&A