在这个程序中,我应该找出矩阵有多少个主数。主导数字是比右下方的任何数字都大的数字(请忍受我的英语)。
我输入了这个:
5 (9) 2 4 1 (7) 2 4///
3 5 6 2 5 (6) 1 2///
1 3 4 7 8 (8) (3) 0///
1 3 5 6 7 8 2 1///
我圈出的应该是主要的,但它给了我6,出了什么问题?
#include <stdio.h>
#include <stdlib.h>
#define NR 4
#define NC 8
int dominants(int a[NR][NC]);
int main(int argc, char * argv[]){
int array[NR][NC];
int ndom;
int i,j;
for(i=0;i<NR;i++){
for(j=0;j<NC;j++){
scanf("%d", &array[i][j]);
}
}
printf("array entered:\n\n");
for(i=0;i<NR;i++){
printf("\n");
for(j=0;j<NC;j++){
printf("%d ", array[i][j]);
}
}
ndom=dominants(array);
printf("amount of dominant numbers:%d", ndom);
return 0;
}
int dominants(int a[NR][NC]){
int domflag;
int i,j, l, m;
int numdom=0;
for(i=0;i<NR-1;i++){
for(j=0;j<NC-1;j++){
for(l=i+1;l<NR;l++){
domflag=1;
for(m=j+1;m<NC;m++){
if(a[i][j]<=a[l][m]){
domflag=0;
}
}
}
if(domflag==1){
numdom++;
}
}
}
return numdom;
}
最佳答案
domflag = 1;
在循环内for (l = i + 1; l < NR; l++)
但应该在它之外。
减少此类错误的一个好方法是仅在需要的地方定义标识符。如果定义int domflag;
例程顶部的语句 domflag = 1;
被删除。更改为int domflag = 1;
,那么编译器稍后会给出一个错误,其中 domflag == 1
已进行测试,因为这超出了定义的范围。
关于检查二维数组中有多少个主数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60238338/