为什么我的Matrix没有向屏幕返回任何值?

时间:2016-01-03 16:22:40

标签: c

我一直在尝试解决一个问题,其中查询是:


  1. 将主对角线的每个元素替换为其上方所有元素的总和(在同一列中)并位于其右侧(在同一行中)

  2. 将相对对角线的每个元素替换为其下方所有元素的总和(在同一列中)并位于其左侧(在同一行中)

  3. 我的问题:我不确定为什么程序在输入完成后没有显示任何内容

    阅读矩阵

    #include <stdio.h>
    int main(){
    
    int i,j,m,k,a[100][100],new_mat[100][100];
    scanf("%d%d",&m,&k); //m=rows, k=columns
    
    for (i = 0 ; i < m ; i++)
        for (j = 0 ; j < k ; j++)
            scanf("%d", &a[i][j]);
    

    // INITIAL解决方案,但它只覆盖了第一个最接近它的元素,而不是下面和上面所有元素的总和

    /*
    for(i=0;i<m;i++)
    {
        for(j=0;j<k;j++)
    
            {
         if(i==j)
            if(j+1<k && i-1>=0)
             {a[i][j]+=a[i][j+1]+a[i-1][j];}
    
         if(i+j==m-1)
            if(j-1>=0 && i+1<k)
             {a[i][j]=a[i][j-1]+a[i+1][j];}
         }
    }
    */
    

    <小时/> 因此,我尝试使用额外的循环

    来覆盖所有剩余的元素
    for(i=0;i<m;i++)
    
    {
        for(j=0;j<k;j++)
         {
               if(i==j)
                 for(;j+1<k,i-1>=0;j+1,i-1)
               {
                   a[i][j]+=a[i][j+1]+a[i-1][j];
               }
    
    
               if(i+j==m-1)
                for(;j-1>=0,i+1<k;j-1,i+1)
               {
                   a[i][j]=a[i][j-1]+a[i+1][j];}
               }
         }
    

    <小时/> 然后打印结果:

    for (i=0; i<m; i++)
        for(j=0; j<k; j++)
            printf("%d     ", a[i][j]);
        printf("\n");
     return 0;}
    

    然而,在输入矩阵时,没有任何事情发生,并且值不会返回到屏幕

1 个答案:

答案 0 :(得分:2)

我没有深入检查代码,看它是否符合您的要求。我只是看着将军。

首先:约定。请在for周围添加括号。查看代码会更容易。

       if(i+j==m-1)
       {
        for(;j-1>=0,i+1<k;j-1,i+1)
        ...
       }

第二次:两个循环都会永远运行,因为你不会改变j和i! 你的意思是?

        for(;j-1>=0,i+1<k;j--,i++)

第三次:您真的应该学会使用调试器。使用适当的调试器,您很快就会发现问题。