Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 求方阵的最大对角元 我试图找到方阵的最大对角线元素,以2x2矩阵为例;假设n=2_C_Matrix - Fatal编程技术网

C 求方阵的最大对角元 我试图找到方阵的最大对角线元素,以2x2矩阵为例;假设n=2

C 求方阵的最大对角元 我试图找到方阵的最大对角线元素,以2x2矩阵为例;假设n=2,c,matrix,C,Matrix,我的逻辑基于将[i][i]与[i+1][i+1]对角矩阵的第一个元素与下一个对角元素进行比较 输入示例: 二, 1234 示例输出: 首先,我们打印出完整的矩阵: 1 2 34 然后我们只打印对角线元素: 对角线元素:14 最大对角线矩阵元素:4206628-这就是我不确定为什么会搞砸的地方。在这种情况下,最大对角线元素应为4 #include <stdio.h> int main() { int i, j, n, max = 0; scanf("%d", &n);

我的逻辑基于将[i][i]与[i+1][i+1]对角矩阵的第一个元素与下一个对角元素进行比较

输入示例:

二,

1234

示例输出:

首先,我们打印出完整的矩阵:

1 2

34

然后我们只打印对角线元素:

对角线元素:14

最大对角线矩阵元素:4206628-这就是我不确定为什么会搞砸的地方。在这种情况下,最大对角线元素应为4

#include <stdio.h>

int main()
{

int i, j, n, max = 0;

scanf("%d", &n);

int MAT[n][n];

for (i = 0; i < n; i++){
    for (j = 0; j < n; j++){
        scanf("%d", &MAT[i][j]);
    }
}

 for (i = 0; i < n; i++){
    for (j = 0; j < n; j++){
        printf("%d\t", MAT[i][j]);
    }
    printf("\n");
}   printf("\n");

for (i = 0; i < n; i++){

    printf("%d\t", MAT[i][i]);
    printf("\n");


    if (MAT[i][i] > MAT[i + 1][i + 1]){
        max = MAT[i][i];
    }   else max = MAT[i + 1][i + 1];

}

printf("\nMax. diagonal matrix element: %d", max);

return 0;
}

问题似乎来自else max=MAT[i+1][i+1]。由于MAT[i+1][i+1]并不总是在i=1时定义,因此超出数组长度,从内存中读取一个随机值。我解决这个问题的方法是改变条件,改变最大值


如果数组中填充了负数,则使用此代码段将不起作用,因为max初始化为0。

在后一个循环中,您将比较MAT[1][1]中的4与MAT[2][2]中的未初始化内存,因此其值未定义,在您的例子中为4206628。您没有编写正确的算法以int max=int_MIN开始;正确处理具有所有负值的数组。
if (MAT[i][i] > max) // replacing max when the current value is bigger
{
    max = MAT[i][i];
}
// else not necessary