###前提・実現したいこと
引数の数が多すぎるためもっと良いコードがあったら教えて欲しいです。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
gcc twobody.c twobody.c: In function ‘main’: twobody.c:60:17: warning: too many arguments for format [-Wformat-extra-args] printf("%f %f %f %f\n",t+dt,x,y,vx,vy); ^ ---------------------------------------------- ###該当のソースコード ```C言語 #include <stdio.h> #include <stdlib.h> #include <math.h> main() { double x,y,vx,vy,t,dt,tmax,r,r3; double k0[4],k1[4],k2[4],k3[4]; double x1,y1,vx1,vy1,x2,y2,vx2,vy2; double x3,y3,vx3,vy3,x4,y4,vx4,vy4; scanf("%lf %lf %lf %lf %lf %lf",&x,&y,&vx,&vy,&dt,&tmax); for(t=0;t<tmax;t+=dt) { r =sqrt(x*x+y*y); r3=r*r*r; k0[0]=dt*vx; k0[1]=dt*vy; k0[2]=dt*(-x/r3); k0[3]=dt*(-y/r3); x1 = x+k0[0]/2.0; y1 = y+k0[1]/2.0; vx1= vx+k0[2]/2.0; vy1= vy+k0[3]/2.0; r = sqrt(x1*x1+y1*y1); r3= r*r*r; k1[0]=dt*vx1; k1[1]=dt*vy1; k1[2]=dt*(-x1/r3); k1[3]=dt*(-y1/r3); x2 = x+k1[0]/2.0; y2 = y+k1[1]/2.0; vx2= vx+k1[2]/2.0; vy2= vy+k1[3]/2.0; r = sqrt(x2*x2+y2*y2); r3= r*r*r; k2[0]=dt*vx2; k2[1]=dt*vy2; k2[2]=dt*(-x2/r3); k2[3]=dt*(-y2/r3); x3 =x+k2[0]; y3 =y+k2[1]; vx3=vx+k2[2]; vy3=vy+k2[3]; r = sqrt(x3*x3+y3*y3); r3= r*r*r; k3[0]=dt*vx3; k3[1]=dt*vy3; k3[2]=dt*(-x3/r3); k3[3]=dt*(-y3/r3); x =x +(k0[0]+2.0*k1[0]+2.0*k2[0]+k3[0])/6.0; y =y +(k0[1]+2.0*k1[1]+2.0*k2[1]+k3[1])/6.0; vx=vx+(k0[2]+2.0*k1[2]+2.0*k2[2]+k3[2])/6.0; vy=vy+(k0[3]+2.0*k1[3]+2.0*k2[3]+k3[3])/6.0; printf("%f %f %f %f\n",t+dt,x,y,vx,vy); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/25 06:32