m0_46269880 2022-05-22 22:47 采纳率: 100%
浏览 77
已结题

c语言 for循环 出现无限循环的问题

问题遇到的现象和发生背景

无限循环 最终结果在最外层从0到144无限循环

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <math.h>
 
int main() 
{
    double v[108];//网格二维数组储存慢度
    double v1[108];//初始化 
    double A3[144][108];//存放时间
    double A_1[144][108];
    double k[12][12];//斜向直线斜率
    double b[12][12];//斜向直线截距
    double r_1[144];//残差
    double k2[144];
    double b2[144];//将斜率和截距的二维数组转换为一维数组
    double x[108];//确定x横坐标值
    double y[144][108];//确定每一点对应的y值
    double pd[12];//存放炮点
    double jsd[12];//存放接收点
    double sum_1[144];//计算每条曲线的时间 
    double b_1[144];//计算每条曲线的时间---自定义初始值 
    double sum_2[144];//计算每条曲线的长度平方和 
    double delta_x[144]={0.0};/////修正值 
    int i, j;
    int m, n;
    int m1=0;////计算迭代次数 
    int a;//设置选择的炮点
    int a1;//设置相应的接收点
    FILE *f1 = fopen("慢度数组.txt", "w");
    FILE *f2 = fopen("y坐标.txt", "w");
    FILE *f3 = fopen("每条曲线时间.txt", "w");
    FILE *f4 = fopen("每个方格的距离.txt", "w");
    //////存放慢度
    for(i=0;i<108;i++)
    {
        v[i]=3.0;
    }
    for(i=0;i<108;i++)
    {
        v1[i]=0.1;
    }
    v[20]=v[29]=5.0;
    v[43]=v[52]=4.0;
    v[77]=v[78]=2.0;
    v[82]=v[91]=6.0;//速度赋值
    for (i = 0; i < 12; i++) 
    {
        for (j = 0; j < 9; j++) 
        {
            fprintf(f1, "%lf\t", v[12*i+9]);
        }
        fprintf(f1, "%\n");
    }

    printf("请选择炮点:1 2 3 4\n");
    scanf("%d", &a);
    printf("请选择接受点:1 2 3 4\n");
    scanf("%d", &a1);
    if (a1 == 1) 
    {
        printf("please input the right one!");
    }

    if (a == 1 && a1 == 3)
     {
        /////////求出横向激发每条曲线方程

        printf("请输入迭代次数:");
        scanf("%d",&m1); 
        for (i = 0; i < 12; i++) 
        {                                         //确定炮点与检波点的坐标
            pd[i] = 2 * i * 10 + 10;
            jsd[i] = 2 * i * 10 + 10;
        }
        for (i = 0; i < 12; i++) 
        {
            for (j = 0; j < 12; j++) 
            {
                k[i][j] = (jsd[j] - jsd[i]) / 108; //存储的从头开始每个炮点对应的12个接收点的斜率
                //    printf("k[%d][%d]=%lf\n",i,j,k[i][j]);
            }
        }
        //////确定横向曲线截距
        for (i = 0; i < 12; i++) 
        {
            for (j = 0; j < 12; j++) 
            {
                b[i][j] = pd[i];
            }
        }
        for (i = 0; i < 12; i++) 
        { /////将二维数组斜率以及截距存入一维数组中
            for (j = 0; j < 12; j++) 
            {
                b2[12 * i + j] = b[i][j];
                k2[12 * i + j] = k[i][j];
                  //printf("%lf\t%lf\n",b2[12*i+j],k2[12*i+j]);
            }
        }
        ////计算每条线x、y的坐标 
        for (i = 0; i < 144; i++) 
        {
            for (j = 0; j < 108; j++) 
            {
                x[j] = j;
                y[i][j] = k2[i] * x[j] + b2[i];
                fprintf(f2,"y[%d][%d]=%lf\n", i, j, y[i][j]);

            }
            fprintf(f2,"\n");
        }
        
        
        
        
        
        /////////////////////////ART///////////////////////////////////////////////////////////////////////////////////////////
       

        //////////////////////////////分格处理//////////////////
        double X[9];//定义方格中心点 
        double Y[12];
        double d_1[144][108];
        double x_1[144][108];
        double y_1[144][108];/////定义交点 
        double x_2[144][108];
        double y_2[144][108];
        FILE *rp=fopen("距离.txt","w");
        
        for(j=0;j<12;j++)
        {
            Y[j]=20*j+10;
            //printf("%lf\n",Y[j]);
        }
        for(i=0;i<9;i++)
        {
            X[i]=12*i+6;
            //printf("%lf\n",X[i]);
        }
    
         
        for(m=0;m<144;m++)
        {
            for(i=0;i<12;i++)
            {
                for(j=0;j<9;j++)
                {
                    if(Y[i]>(20*i)&&(Y[i]<(20*(i+1)))&&(X[j]>(12*j))&&(X[j]<(12*(j+1))))
                    {
                        if((12*j-1<0))
                        {
                            y_1[m][12*i+j]=y[m][12*i+j];
                            x_1[m][12*i+j]=(y_1[m][12*i+j]-b2[m])/k2[m];
                            printf("%d\t%lf\n",i,y_1[m][12*i+j]);
                        }
                        if(12*i-1<0)
                        {
                        x_1[m][12*i+j]=x[0];
                        y_1[m][12*i+j]=k2[m]*x_1[m][12*i+j]+b2[m];     
                        }
                
                        if(int(y[m][12*j-1])%20==0)
                        {
                            y_1[m][12*i+j]=y[m][12*j-1];
                            x_1[m][12*i+j]=(y_1[m][12*i+j]-b2[m])/k2[m];
                            //printf("%lf\t%lf\n",x_1[m][12*i+j],y_1[m][12*i+j]);
                        }
                        else if(int(y[m][12*j-1])%20!=0)
                        {
                            y_1[m][12*i+j]=0;
                            x_1[m][12*i+j]=0;
                        }
                        if(int(y[m][12*(j+1)-1])%20==0)
                        {
                            y_2[m][12*i+j]=y[m][12*(j+1)-1];
                            x_2[m][12*i+j]=(y_2[i][12*i+j]-b2[m])/k2[m];
                        }
                        else if(int(y[m][12*(j+1)-1])%20!=0)
                        {
                            y_2[m][12*i+j]=0;
                            x_2[m][12*i+j]=0;
                        }
                        if(int(x[12*i-1])%12==0)
                        {
                            x_1[m][12*i+j]=x[(12*i-1)];
                            y_1[m][12*i+j]=k2[m]*x_1[m][12*i+j]+b2[m]; 
                        }
                        else if(int(x[12*i-1])%12!=0)
                        {
                            y_1[m][12*i+j]=0;
                            x_1[m][12*i+j]=0;
                        }
                            if(int(x[12*(i+1)-1])%12==0)
                        {
                            x_2[m][12*i+j]=x[12*(i+1)];
                            y_2[m][12*i+j]=k2[m]*x_2[m][12*i+j]+b2[m]; 
                        }
                        else if(int(x[12*(i+1)-1])%12!=0)
                        {
                            y_2[m][12*i+j]=0;
                            x_2[m][12*i+j]=0;
                        }
                    
                        d_1[m][12*i+j]=sqrt(pow((x_1[m][12*i+j]-x_2[m][12*i+j]),2)+pow(y_2[m][12*i+j]-y_1[m][12*i+j],2));
                        //printf("d[%d][%d]=%lf\n",m,12*i+j,d_1[m][12*i+j]);
                    
                    }
                }
            }
         } 
         for(m=0;m<144;i++)
         {
             for(i=0;i<12;j++)
             {
                 for(j=0;j<9;j++)
                 {
                     fprintf(rp,"%lf",d_1[m][12*i+j]);
                 }
                 fprintf(rp,"\n");
             }
             fprintf(rp,"%d\n",m);
         }
    }
    return 0;
}
运行结果及报错内容

无报错

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 张世争 2022-05-23 08:19
    关注

    把代码贴完整吧,变量的定义、数组的定义,或许栈溢出了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 修改了问题 5月23日
  • 创建了问题 5月22日

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题