我试图看看4x4矩阵是否是对称的,以下是我到目前为止所拥有的。编译后,我收到消息:
pExam3p2.c:12:13: warning: expression result unused [-Wunused-value]
if (Num[r,c]==Num[c,r]){
^
pExam3p2.c:12:23: warning: expression result unused [-Wunused-value]
if (Num[r,c]==Num[c,r]).
我认为添加else语句可以解决此问题。但事实并非如此。非常感谢任何想法。谢谢!
#include <stdio.h>
char isSymm (int Num[][4], int rows, int cols){
int r,c, count=0;
for (r=0; r<rows; r++){
for (c=0; c<cols; c++){
if (Num[r,c]==Num[c,r]){
count=count+1;
}
else{
count=count;
}
}
}
if (count==16){
return 'y';
}
else {
return 'n';
}
}
int main (void){
int Num[4][4];
int c;
int r;
int size =4;
for (r=0;r<size; r++){
for (c=0; c<size; c++){
printf("Enter your number: ");
scanf("%d", &Num[r][c]); //NOTE THE &...
}
}
char result= isSymm(Num, 4, 4);
printf("%c", result);
}
答案 0 :(得分:2)
Num
不是&#34;多维&#34;数组(C没有那些),它是数组的数组。所以要获得它的一个元素你需要做,例如Num[r][c]
。
要解释Num[r,c]
会发生什么,您需要了解the comma operator。
逗号运算符计算两个子表达式,并丢弃左侧表达式的结果,结果是右侧表达式的结果。因此,r,c
评估r
和c
时,r
的结果将被丢弃,r,c
的结果为c
。
这意味着您的表达式Num[r,c]
确实是Num[c]
。而Num[c]
是一个数组,它衰减到指向它的第一个元素的指针,即&Num[c][0]
,你比较这两个指针。
在无关的说明中,
else{
count=count;
}
实际上毫无价值,你可以完全删除它。
答案 1 :(得分:2)
要访问数组数组,请使用
Num[r][c]
您使用的,
运算符会在,
之前评估该部分但忽略结果。运算符的结果是第二个计算表达式的值,即,
之后的值
这就是编译器告诉您忽略r
的原因。
答案 2 :(得分:0)
将 select QUERYID, (SUM(UPVOTE)+ SUM(DOWNVOTE)) as TOTAL
from MY_TABLE where QUERYID in (15, 7)
GROUP BY QUERYID;
更改为(Num[r,c]==Num[c,r])
同时删除else语句。
(Num[r][c]==Num[c][r])
答案 3 :(得分:0)
使用下标(即数组的row index
和column index
)访问二维数组中的元素。例如: -
int val = a[2][3];
上面的语句将从数组的第3行获取第4个元素。
因此,在您的函数char isSymm (int Num[][4], int rows, int cols)
中,需要进行一些更改: -
char isSymm (int Num[][4], int rows, int cols){
int r,c, count=0;
for (r=0; r<rows; r++){
for (c=0; c<cols; c++){
if (Num[r][c]==Num[c][r]){ // not Num[r,c]==Num[c,r]
count=count+1;
} // not needed count=count; else statement.
}
}
if (count==16){
return 'y';
}
else {
return 'n';
}
}
comma-operator
计算两个子表达式,并丢弃左手表达式的结果,结果是右手表达式的结果。因此,对于r,c,r和c都被评估,然后r的结果被丢弃,r,c
的结果为c
。这里Num[c]
变为Num
,因为{ import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = {'https://spreadsheets.google.com/feeds/', 'https://docs.google.com/feeds'}
credentials = ServiceAccountCredentials.from_json_keyfile_name('sheetjson.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('mcresolve').sheet
print(wks.cell(1, 2))
1}}是 2-Dimentional 数组。
答案 4 :(得分:0)
问题陈述是Num[r,c]==Num[c,r]
&amp;为什么会这样,当你将gcc -Wall -Wstrict-prototypes -Werror test.c
作为
错误:逗号表达式的左侧操作数无效 [-Werror =未使用的值]
在Num[r,c]
r
和c
之间有逗号运算符,逗号运算符属性是它将解决所有参数但只考虑右手操作数,因此,Num[r,c]
会产生Num[c]
,现在您正在比较指针Num[c]
和Num[r]
,这些指针不会产生正确的结果。
您想检查矩阵是否为symmetric
或
Num[r,c]==Num[c,r]
==&gt; Num[r][c] == Num[c][r]
因为Num
是对称矩阵。您应该计算rows
的数量,以便它适用于任何数组,而不是像size=4
这样的硬编码。
size=4;
==&gt; size = sizeof(Num)/sizeof(Num[0]);
在比较Num[r][c]
和Num[c][r]
时,else
部分无用,最好将其删除。
else{ /* not needed as if if block is false count value doesn't need to change */
count=count;
}