【发布时间】:2020-10-23 02:49:12
【问题描述】:
我想创建一个函数来计算数组包含多少“显性”数字。占主导地位的意思是一个数字比它自己右边的任何东西都大。我创建了 main 来测试它是否有效,但程序只是崩溃了。有什么建议吗?
#include <stdio.h>
#include <stdlib.h>
#define NR 4
#define NC 8
int dominants(int arr[NR][NC]);
int main(int argc,const char *argv[]){
int n;
int array[NR][NC]={{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}};
n=dominants(array);
printf("there are %d dominants", n);
return 0;
}
int dominants(int arr[NR][NC]){
int i, j, k, l;
int flag, num;
num=0;
flag=0;
for(i=0;i<NC;i++){
for(j=0;j<NR;j++){
for(k=i+1;j<NC;k++){
for(l=k+1;l<NR;l++){
if(arr[j][i]<=arr[l][k]){
flag=1;
}
}
}
}
if(flag==1)
num++;
}
return num;
}
【问题讨论】:
-
是:使用调试器确定崩溃的位置并从那里跟踪/打印变量。
-
是的,在
k=i+1;j<NC;k++中,将j更改为k。 -
您显然还应该在某个时候将
flag重置回0(可能在增加num之后立即)。 -
最后,除了最外层的
for循环之外,你还不如在循环条件中添加&& flag == 0。 -
谢谢@goodvibration,但我不明白为什么 && 标志==0,是出于效率原因还是有其他原因?
标签: c function for-loop multidimensional-array