我知道在C中有一个关于!
的解释的帖子,但我完全不理解,所以我们走了。根据我的理解,number!
将返回0表示非零数字,1表示0表示我在网上看到了一些代码,并确定矩阵是否是一个单位矩阵,人们使用了以下内容:
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的输入。并且还有其他方法可以在不使用?
答案 0 :(得分:2)
!
始终返回一个int(感谢alk指出),在这种情况下它代表逻辑NOT 而且只是补充布尔表达式,如果布尔表达式求值为true
,说boolean ex = true
则!ex
将解析为false
(最后为0)是true
的补充。
如果进行比较,==
用于检查相等性,!=
用于检查不等式,这两者都会产生boolean
值最终被评估为int
。
答案 1 :(得分:2)
您的代码不会检查矩阵是否是单位矩阵。你不需要!
来找出:你需要做的就是检查所有矩阵元素是否为零,除了在主对角线上,i==j
时,在这种情况下元素必须是1
。
比较i == j
返回0或1,因此您需要做的就是检查所有值i
和j
元素a[i][j]
是否等于结果比较i==j
:
int flag = 1;
for (i = 0 ; flag && i < row ; i++) {
for (j = 0; flag && j < column; j++) {
int mainDiagonal = (i==j);
flag = a[i][j] == mainDiagonal;
}
}
if (flag == 1 )
printf("It is identity matrix \n");
else
printf("It is not a identity matrix \n");
请注意循环的一些更改:由于break
允许您突破一个循环,因此我更改了连续条件以检查flag
。
答案 2 :(得分:1)
C(以及许多其他语言)中的感叹号代表逻辑“不”符号。 ie-&#39;!=&#39;是不等的&#39;。 在C中,特别是非零数字上的NOT将返回0,而0上的NOT将返回1,因为数字也可以用作TRUE或FALSE表示法(0 = FALSE,非零= TRUE)。
希望有所帮助
答案 3 :(得分:1)
!=
检查两个操作数的值是否相等。如果值不相等,则条件成立。如果A保持10而B保持20,则(A != B
)为真。
答案 4 :(得分:1)
其他答案已经解决了!=
意味着不等于,但还有其他事情未被涵盖。
首先:您的代码不会检查身份矩阵
试试这个矩阵:
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的答案:https://stackoverflow.com/a/42328490/4386427
答案 5 :(得分:0)
!和!=是两个不同的运营商。
!被称为NOT运算符。此运算符会反转其操作的表达式的结果。例如,如果表达式求值为非零值,则应用!对它的运算符结果为0.反之亦然,如果表达式求值为零则应用!运算符使它成为1,非零值。申请后的最终结果!运算符0或1分别被认为是假或真。
而!=是一个关系运算符,用于检查应用了!=的两个操作数是否相等。 !=被称为不等于运算符并用于比较两个量。
现在就你的问题
if (a[i][j] != 1 && a[j][i] != 0)
{
flag = 0;
break;
}
在上面的代码片段中,当且仅当[i] [j]不等于1并且[j] [i]不等于0时,条件才为真。如果是,则内部的代码将执行。 在代码中,如果条件为真,它将评估为1,这是真,否则0为false。正如你所说&#34;怎么做!无论如何标记帮助以确定它是否是一个单位矩阵&#34;,它不是!标记它是!=标记帮助识别矩阵是否是标识。
希望这会有所帮助。