忽略第一个矩阵索引

时间:2018-06-04 06:24:22

标签: c matrix symmetric symmetry

我试图看看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);
}

5 个答案:

答案 0 :(得分:2)

Num不是&#34;多维&#34;数组(C没有那些),它是数组的数组。所以要获得它的一个元素你需要做,例如Num[r][c]

要解释Num[r,c]会发生什么,您需要了解the comma operator

逗号运算符计算两个子表达式,并丢弃左侧表达式的结果,结果是右侧表达式的结果。因此,r,c评估rc时,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 indexcolumn 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] rc之间有逗号运算符,逗号运算符属性是它将解决所有参数但只考虑右手操作数,因此,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;
}