我一直在尝试解决一个问题,其中查询是:
将主对角线的每个元素替换为其上方所有元素的总和(在同一列中)并位于其右侧(在同一行中)
将相对对角线的每个元素替换为其下方所有元素的总和(在同一列中)并位于其左侧(在同一行中)
我的问题:我不确定为什么程序在输入完成后没有显示任何内容
阅读矩阵
#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;}
然而,在输入矩阵时,没有任何事情发生,并且值不会返回到屏幕
答案 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++)
第三次:您真的应该学会使用调试器。使用适当的调试器,您很快就会发现问题。