#include
#include
int main()
{
int Vf=20,Vb=17,T=1;
double Yf[100],Xf[100],D[100],Yb[100],Xb[100];
Xf[0]=50,Yf[0]=0,D[0]=15;
for(int t=0;t<12;t++)
{
Xf[t+1]=Xf[t]+Vf*((Yb[t]-Yf[t])*1.0/D[t]);
Yf[t+1]=Yf[t]+Vf*((Xb[t]-Xf[t]*1.0)/D[t]);
D[t]=sqrt((Yb[t]-Yf[t])*(Yb[t]-Yf[t])-(Xb[t]-Xf[t])*(Xb[t]-Xf[t]));
if(D[t]<=10)
printf("%d,%lf",t,D[t]);
else
{
if(t>12)
printf("打印目标脱离");
else
T=T+1;
}
}
}
把每一次D[t]的值打印出来看看,应该不满足小于10
这段代码没有输出是因为在 if(D[t]<=10) printf("%d,%lf",t,D[t]) 这个语句中,缺少了换行符
,导致输出内容被缓存而没有立即显示在屏幕上。
此外,在循环内部对变量D[t]进行修改后,应该在计算下一次循环之前更新它的值,否则会导致后续的计算出现错误。
以下是修改后的代码:
#include <stdio.h>
#include <math.h>
int main()
{
int Vf=20,Vb=17,T=1;
double Yf[100],Xf[100],D[100],Yb[100],Xb[100];
Xf[0]=50,Yf[0]=0,D[0]=15;
for(int t=0;t<12;t++)
{
Xf[t+1]=Xf[t]+Vf*((Yb[t]-Yf[t])*1.0/D[t]);
Yf[t+1]=Yf[t]+Vf*((Xb[t]-Xf[t]*1.0)/D[t]);
D[t+1]=sqrt((Yb[t]-Yf[t+1])*(Yb[t]-Yf[t+1])+(Xb[t]-Xf[t+1])*(Xb[t]-Xf[t+1])); // 更新D数组
if(D[t+1]<=10)
printf("%d,%.2lf
",t,D[t+1]); // 输出结果,并添加换行符
else {
if(t>=11)
printf("打印目标脱离
"); // 输出结果,并添加换行符
else
T=T+1;
}
}
return 0;
}
修改后的代码中,将 D[t] 的赋值从循环开始移动到了循环内部计算的后面,并改为赋值给 D[t+1],这样就保证了每次循环使用的是上一次计算出来的正确值。同时,在printf函数中添加了换行符
,使输出内容可以即时刷新到屏幕上。
**