两机追击问题,按照图片所示思路来的,为什么没有输出

img

img

img

img


#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;        
      }    
    }    
}

img

把每一次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函数中添加了换行符
,使输出内容可以即时刷新到屏幕上。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632