在C中查找第一行零和n n数组

时间:2013-04-04 20:10:33

标签: c multidimensional-array goto zero

我有一些伪代码,它在nxm矩阵中找到第一个全零行:

int first_zero_row = -1; /* none */
int i, j;
for(i=0; i<n; i++) {
    for (j=0; j<n; j++) {
       if (A[i][j]) goto next;
    }
    first_zero_row = i;
    break;
next: ;
}

虽然这应该有用,但我不认为使用goto语句是最好的方法。我对C不是很熟悉,但我的目标是让代码尽可能用C语言编写。这是最好的方法吗,还是有更快或更普遍的方式?

4 个答案:

答案 0 :(得分:1)

只有在内部循环运行完成时才设置first_zero_row

int first_zero_row = -1; /* none */
int i, j;
for(i=0; i<n; i++) {
    for (j=0; j<n; j++) {
       if (A[i][j]) break;
    }
    if (j == n) {
        first_zero_row = i;
        break;
    }
}

如果您想避开goto

答案 1 :(得分:0)

放置break;语句而不是goto语句。设置一个布尔标志并检查标志,如果该标志为真,则再次从外部for循环中断。像这样的东西 -

bool nonZeroFlag = true;

for(i=0; i<n; i++) {
   for (j=0; j<n; j++) {
     if (A[i][j]){
        nonZeroFlag = false;
        break;
     }
   }
  if (nonZeroFlag) {
     first_zero_row = i;
     break;
  }
  nonZeroFlag = true;
}

答案 2 :(得分:0)

int first_zero_row = -1; /* none */
int i, j;
for(i=0; i<n; i++) {
    for (j=0; j<n; j++) {
       if (A[i][j] != 0){
           first_zero_row = i;
       } 
    }
    break;
next: ;
}

怎么样?

答案 3 :(得分:0)

以下是没有breakgoto的人:)

int zero_count = -1; /* none */
i = j = 0;
for(i=0; i < n && (zero_count != n); i++) {
    for (j=0; j < n && (A[i][j] == 0); j++) {
       zero_count = j + 1;
    }
}

if(i < 10)
   printf("First Zero row is %d\n",i);
else
   printf("Nop! Not today!\n");