我有一些伪代码,它在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语言编写。这是最好的方法吗,还是有更快或更普遍的方式?
答案 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)
以下是没有break
或goto
的人:)
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");