帮忙看看这个C语言程序

输入一个正整数n(1≤n≤6)和n 阶矩阵a 中的元素,如果a 是上三角矩阵,输出“YES”;否则,输出“NO”(上三角矩阵,即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)。

【输入形式】

从键盘输入一个正整数n和矩阵阵列。

【输入输出样例1】(下划线部分表示输入)

Input n: 3

Input array:

1 2 3

0 4 5

0 0 6

include

int main( void)
{
int n, i, j;
int a[6][6];
printf("Input n: ");
scanf("%d",&n);
printf("Input array:\n");
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
scanf("%d",&a[i][j]);}
for (i=1;i<=n;i++){
for(j=n;j>=i;j--){
if (a[i][j] =0) {printf("NO");
break;}

                    else printf("YES");

                    }
                }
            }

感觉你这个n = 6 的时候会出问题吧。。。数组下表是从0开始的呀 = = 你n = 6的时候输入就越界了。。。把循环里i,j初始化为0试一试 0.0

printf("NO")是对的,但是printf("YES")过早。你在个位子仅查到了某一个元素而已。全部查完才可以printf("YES").另外,计算机一般都是先行后列,所以你判断的j循环是不是应该从1到i-1?

这个程序,其代码还算简单。如果读代码找不出哪里逻辑错误,建议你单步调试一下。
学习编程,调试是一个重要的过程。再进一步,可以增加一个 LOG 输出,例如:将输入 YES 时的 i 和 j 打印出来,这样就可以判断出错误的原因。

我估计错误行在判断语句上if (a[i][j] =0) 应为if (a[i][j] ==0)
这是我初步判断
我上机测试一下后给你结果

还有一个原因我也怀疑,就是变量i最初赋值是不是应该是i=0啊

for(i=1; i<=n; i++)改为for(i=1; i<n; i++)