C数组中的感叹号(单位矩阵)

C数组中的感叹号(单位矩阵),c,matrix,identity,C,Matrix,Identity,我知道有一条关于解释的线索!在C中,但我没有完全理解它,所以我们开始。从我的理解数字!对于非零数,将返回0;对于0,将返回1。我在网上看到了一些代码,为了确定矩阵是否是身份矩阵,人们使用了以下代码: for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { if (a[i][j] != 1 && a[j][i] != 0) { flag

我知道有一条关于解释的线索!在C中,但我没有完全理解它,所以我们开始。从我的理解数字!对于非零数,将返回0;对于0,将返回1。我在网上看到了一些代码,为了确定矩阵是否是身份矩阵,人们使用了以下代码:

for (i = 0; i < row; i++)
{
    for (j = 0; j < column; j++)
    {
        if (a[i][j] != 1 && a[j][i] != 0)
        {
            flag = 0;
            break;
        }
    }
}
if (flag == 1 )
    printf("It is identity matrix \n");
else
    printf("It is not a identity matrix \n");

用户输入矩阵大小和值,a为矩阵。我的问题是怎么做!如果它所能做的只是返回一个1和0的输入,请在“无论如何”中标记“帮助”,以确定它是否是一个单位矩阵。还有没有其他方法可以不用C和其他许多语言中的感叹号来表示逻辑NOT符号来识别一个单位矩阵呢。i、 e.-“!=”“不平等”。 特别是在C语言中,非零的数字将返回0,而非零的数字将返回1,因为数字也可以用作真或假符号,0=假,非零=真


希望对你有所帮助

在C和许多其他语言中,感叹号代表逻辑NOT符号。i、 e.-“!=”“不平等”。 特别是在C语言中,非零的数字将返回0,而非零的数字将返回1,因为数字也可以用作真或假符号,0=假,非零=真

希望对你有所帮助检查两个操作数的值是否相等。如果值不相等,则条件变为真。A!=如果A保持10,B保持20,则B为真。

!=检查两个操作数的值是否相等。如果值不相等,则条件变为真。A!=如果A保持10,B保持20,则B为真。

!总是返回一个int,感谢您指出,在这种情况下,它代表逻辑NOT,只是对布尔表达式进行补充,如果布尔表达式的计算结果为true,那么就说boolean ex=true!ex将解析为false,最后解析为0,这是true的补充

在比较的情况下,==用于检查相等性和!=用于检查不等式,这两个结果都会产生一个布尔值,最终计算为int。

!总是返回一个int,感谢您指出,在这种情况下,它代表逻辑NOT,只是对布尔表达式进行补充,如果布尔表达式的计算结果为true,那么就说boolean ex=true!ex将解析为false,最后解析为0,这是true的补充


在比较的情况下,==用于检查相等性和!=用于检查不等式,这两个结果都会产生一个布尔值,最终计算为int。

您的代码不会检查矩阵是否为单位矩阵。你不需要!或者,你需要做的就是检查所有的矩阵元素都是零,除了在主对角线上,当i==j时,在这种情况下元素必须是1

比较i==j返回零或一,因此您需要做的就是检查所有值i和j的元素a[i][j]是否等于比较i==j的结果:


请注意对循环的一些更改:因为break只允许您中断一个循环,所以我更改了延续条件以检查标志。

您的代码不会检查矩阵是否为单位矩阵。你不需要!或者,你需要做的就是检查所有的矩阵元素都是零,除了在主对角线上,当i==j时,在这种情况下元素必须是1

比较i==j返回零或一,因此您需要做的就是检查所有值i和j的元素a[i][j]是否等于比较i==j的结果:


请注意对循环的几个更改:因为break只允许您中断一个循环,所以我更改了继续条件以检查标志。

其他答案已经解决了这个问题!=意思是不平等,但还有其他事情没有涵盖

首先:您的代码不会检查标识矩阵

只需使用以下矩阵进行尝试:

int a[2][2] = {{1, 1}, {1, 1}};
此外,我认为任何答案都没有提到这一部分:

还有没有其他方法可以不用计算机识别身份矩阵

是的,您可以不使用!=。这可以通过多种方式实现。这里只有一个例子:

flag = 1;
for (i = 0; i < row; i++)
{
    for (j = 0; j < column; j++)
    {
        if (i == j)
        {
            if (a[i][j] == 1) continue;
        }
        else
        {
            if (a[i][j] == 0) continue;
        }

        flag = 0;
    }
}
if (flag == 1 )
    printf("It is identity matrix \n");
else
    printf("It is not a identity matrix \n");
不是很好的代码,但这是一种不用的方法=


这是一种真正酷的检查身份矩阵的方法,无需使用!=请参阅@dasblinkenlight的答案:

其他答案已经解决了这个问题!=意思是不平等,但还有其他事情没有涵盖

首先:您的代码不会检查标识矩阵

只需使用以下矩阵进行尝试:

int a[2][2] = {{1, 1}, {1, 1}};
此外,我认为任何答案都没有提到这一部分:

还有没有其他方法可以不用计算机识别身份矩阵

是的,您可以不使用!=。这可以通过多种方式实现。这里只有一个例子:

flag = 1;
for (i = 0; i < row; i++)
{
    for (j = 0; j < column; j++)
    {
        if (i == j)
        {
            if (a[i][j] == 1) continue;
        }
        else
        {
            if (a[i][j] == 0) continue;
        }

        flag = 0;
    }
}
if (flag == 1 )
    printf("It is identity matrix \n");
else
    printf("It is not a identity matrix \n");
不是很好的代码,但这是一种不用的方法=

这是一个真正酷的检查单位矩阵的方法
使用!=请参阅@dasblinkenlight的答案:

!还有!=是两个不同的操作员

!!被称为NOT运算符。此运算符反转其操作的表达式的结果。例如,如果表达式的计算结果为非零值,则应用!运算符将其结果转换为0。反之亦然,如果表达式的计算结果为零,则在应用时!运算符使其为1,一个非零值。申请后的最终结果!运算符0或1分别被视为false或true

鉴于是一个关系运算符,用于检查两个操作数已应用,但它们不相等。!=被称为不等于运算符,用于比较两个量

现在回答你的问题

if (a[i][j] != 1 && a[j][i] != 0)
    {
        flag = 0;
        break;
    }
在上述代码片段中,当且仅当[i][j]不等于1且[j][i]不等于0时,该条件才为真。如果是,将执行If中的代码。 在代码中,如果条件为true,它将计算为true的1,否则为false的0。正如你所说的,你是怎么做的!无论如何,标记帮助以确定它是否是一个单位矩阵,它不是!标记它是标记有助于识别矩阵是否为同一矩阵


希望这会有所帮助。

!还有!=是两个不同的操作员

!!被称为NOT运算符。此运算符反转其操作的表达式的结果。例如,如果表达式的计算结果为非零值,则应用!运算符将其结果转换为0。反之亦然,如果表达式的计算结果为零,则在应用时!运算符使其为1,一个非零值。申请后的最终结果!运算符0或1分别被视为false或true

鉴于是一个关系运算符,用于检查两个操作数已应用,但它们不相等。!=被称为不等于运算符,用于比较两个量

现在回答你的问题

if (a[i][j] != 1 && a[j][i] != 0)
    {
        flag = 0;
        break;
    }
在上述代码片段中,当且仅当[i][j]不等于1且[j][i]不等于0时,该条件才为真。如果是,将执行If中的代码。 在代码中,如果条件为true,它将计算为true的1,否则为false的0。正如你所说的,你是怎么做的!无论如何,标记帮助以确定它是否是一个单位矩阵,它不是!标记它是标记有助于识别矩阵是否为同一矩阵


希望这会有所帮助。

的!这是一部分内容!=运算符,表示不等于。你似乎把它误认为是逻辑否定运算符。a!=b等于!a==b.这个!这是一部分内容!=运算符,表示不等于。你似乎把它误认为是逻辑否定运算符。a!=b等于!a==b。!不返回int,:不完全正确。来自:逻辑求反运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果为int.emphasis类型mine@alk你说得对,我说的是关于!在Boolean上使用时,进行了编辑.Sry,但要确认符合上述引用的标准,请应用-运算符始终需要求值为int。您可以在任何标量类型上使用它。看看C_Bool,就像一个秩低于任何其他整数类型的1位无符号整数。偶数!42==42将计算为值为0的整数。以及42可以。但是if语句需要一个计算结果为布尔值的表达式,对吗?!不返回int,:不完全正确。来自:逻辑求反运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果为int.emphasis类型mine@alk你说得对,我说的是关于!在Boolean上使用时,进行了编辑.Sry,但要确认符合上述引用的标准,请应用-运算符始终需要求值为int。您可以在任何标量类型上使用它。看看C_Bool,就像一个秩低于任何其他整数类型的1位无符号整数。偶数!42==42将计算为值为0的整数。以及42可以。但是if语句需要一个计算结果为布尔右的表达式?0是一个数字,所以不在数字上不是一个非常成功的表达方式。您可能指的是非零数字。@unwind相当正确-修复:0是一个数字,所以不在数字上不是一个非常成功的表示方法。您可能指的是非零数字。@unwind very true-修复: