- 締切済み
コンパイルした時になぜ表示されないか
バネのつり合いから,オーバーシュートとその時の時間を求めるのですが,以下のようにプログラムを作り,オーバーシュートは出せましたが,一番下の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)); }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
「古い規格」では %f しか認められていませんでしたが, 「今の規格」では %lf でも OK です>#3.
- titokani
- ベストアンサー率19% (341/1726)
printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); の前に、 printf("1+y1=%f\n",1+y1); を入れると、なんと表示されますか?
- keikyu2101
- ベストアンサー率32% (65/202)
どのコンパイラを使っておられるか情報がないので、当てはまるかどうかわかりませんが、printfでdoubleを出力する場合は、本来の規格では%fしか受け付けません。コンパイラによっては、%lfでも正常に出力される場合があります。 というわけで、printfの%lfを%fにして見て下さい。 ※scanfは、%lfと%fは、元々の規格にありますので、問題ありません。
- asuncion
- ベストアンサー率33% (2127/6289)
> 入力データとして、何を与えたときですか? これにもお答えいただけますか? 当方では、入力データの値によって、 最後まできちんと出力する場合と プログラムが異常終了する場合とがあります。
補足
ありがとうございます. 入力データとしては,(m,k,H,A,N)=(1,100,0.00001,0.025,0.5)を入力しました.ちなみに順番に重量,ばね定数,壁と物体の距離,壁に接している面積,動粘度です. 問題はオーバーシュートの値と,その時の時間tを求めるのですが,コンパイルしたとき,オーバーシュートの値は表示され,確認のために与えられた数値と一致したので,プログラム自体は正しいと思われます.ただ時間tが表示されません.『t=』すら表示されません.
- asuncion
- ベストアンサー率33% (2127/6289)
入力データとして、何を与えたときですか? 今のコードではscanf()の書式文字列にカンマが入っていますので、 1,2,3,4,5 のように入力する必要があります。この点は守っていますね?
補足
回答ありがとうございます. はい,入力のときカンマ入れています.なので, printf("\n%lf\n\n",y1-y0); の部分は出力されます.ただ, printf("t=\n%lf\n\n",(y1-y0)/(1+y1)); が出力されません.なにか追加するべきなのでしょうか?
お礼
丁寧に何度もありがとうございました.今手元にlinuxが使えるパソコンがないので,大学に行き次第やってみます.