Las variables de bucle C / C ++ en dos bucles for no deben ser mal utilizadas en juicio condicional

Primero explique el principio de funcionamiento de la instrucción for loop

La sintaxis de la declaración for es:

para (expresión 1; expresión 2; expresión 3)

La declaración for tiene funciones de iniciación y control de bucle. La forma de la declaración es:

 

 

Explicación de para la declaración:

  1. La expresión 1 solo se resuelve una vez durante todo el ciclo; la función es asignar valores iniciales a las variables de control del ciclo
  2. La expresión 2 es equivalente a la condición del bucle for
  3. La expresión 3 es el contenido de la ejecución repetida; generalmente una declaración que cambia el valor de la variable de control de bucle

Formato de solicitud de declaración:

for (bucle inicial; condición del bucle; control del bucle) { 
    cuerpo del bucle; 
}

Por ejemplo: Encuentra 1 + 2 + 3 +… + 100

para ( int n = 1 , suma = 0 ; n <= 100 ; n ++) suma = suma + n;

Es equivalente a

int n = 1 , suma = 0 ;
while (n <= 100 ) { 
    sum = sum + n; 
    n = n + 1 ; 
}

Omitir la expresión 1

int n = 1 , suma = 0 ;
para (; n <= 100 ; n ++) suma = suma + n;

Omitir la expresión 3

para ( int n = 1 , suma = 0 ; n <= 100 ;) suma = suma + n; n ++;

La expresión 1 y la expresión 3 se omiten.

int n = 1 , suma = 0 ;
para (; n <= 100 ;) suma = suma + n; n ++;

Por qué las variables de bucle en los dos bucles for no pueden ser mal utilizadas en la expresión de juicio condicional, es decir, la expresión 2

Supongamos que deseamos generar una matriz bidimensional y agregar condiciones de control para generar solo los elementos de matriz cuyas filas y columnas tienen valores desiguales. Entonces, ¿juzga el siguiente programa? (Función similar, no genera una matriz bidimensional, centrándose en el control de bucle)

/ * * C 和 C ++ 一样, 这里 以 C ++ 为例* / 
int main () 
{ 
    int n; 
    cin >> n;
    for ( int i = 0 ; i <n; i ++ ) {
         for ( int j = 0 ; (j <n) && (j! = i); j ++ ) { 
            cout << " 执行: " ; 
            cout << ' [ ' << i << ' ] ' << ' [ ' << j << '
        } 
        cout << endl; 
    } 
    devuelve  0 ; 
}
Tome la entrada 3 como ejemplo
 3 

Ejecute [ 1 ] [ 0 ] 
Ejecute [ 2 ] [ 0 ] Ejecute [ 2 ] [ 1 ]
 --------------- Fin del programa

 

¿Qué pasa con la salida de solo elementos de matriz con valores iguales de fila y columna?

int main () 
{ 
    int n; 
    cin >> n;
    for ( int i = 0 ; i <n; i ++ ) {
         for ( int j = 0 ; (j <n) && (j == i); j ++ ) { 
            cout << " 执行: " ; 
            cout << ' [ ' << i << ' ] ' << ' [ ' << j << ' ] ' ;<< endl; 
    } 
    devuelve  0 ; 
}
Tome la entrada 3 como ejemplo
 3 y 
ejecute [ 0 ] [ 0 ]


 --------------- fin del programa

No se logró la función que esperábamos. En el primer caso, la ejecución posterior del segundo ciclo for se omite cuando los valores de fila y columna son iguales; en el segundo caso, cuando los valores de fila y columna no son iguales Se omite la ejecución posterior del segundo e incluso el primer bucle for. Si esta declaración de juicio condicional aparece en nuestro código, es igualmente grave y no es fácil detectar el problema aquí.

Después de pensar en el orden posterior, descubrí que en este caso, las dos declaraciones de bucle for en realidad se dieron cuenta de la función de dos declaraciones de bucle while.

El primer caso

int main () 
{ 
    int n; 
    cin >> n;
    int i = 0 ;
    while (i < n) {
         int j = 0 ;
        while (j <n && j! = i) { 
            cout << " 执行 [ " << i << ' ] ' << ' [ ' << j << ' ] ' ; 
            j ++ ; 
        } 
        cout <<; 
    } 
    devuelve  0 ; 
}

Cuando los valores de fila y columna son iguales, el cuerpo del bucle no se puede ejecutar y el valor de j no aumenta, por lo que el resultado se genera

3 

Ejecutar [ 1 ] [ 0 ] 
Ejecutar [ 2 ] [ 0 ] Ejecutar [ 2 ] [ 1 ]
 --------------- Fin del programa

El segundo caso

int main () 
{ 
    int n; 
    cin >> n;
    int i = 0 ;
    while (i < n) {
         int j = 0 ;
        while (j <n && j == i) { 
            cout << " 执行 [ " << i << ' ] ' << ' [ ' << j << ' ] ' ; 
            j ++ ; 
        } 
        cout <<; 
    } 
    devuelve  0 ; 
}

Cuando los valores de fila y columna no son iguales, el cuerpo del bucle no se puede ejecutar y el valor de j no aumenta, por lo que el resultado se genera

3 
Ejecute [ 0 ] [ 0 ]


 --------------- fin del programa

 

El resumen final es

Si desea utilizar dos variables de control de bucle en el juicio de condición, puede consultar la condición de juicio en el cuerpo del bucle, como el primer caso:

for ( int i = 0 ; i <n; i ++ ) {
     for ( int j = 0 ; (j <n); j ++ ) {
         if (i == j) { 
            cout << " 执行: " ; 
            cout << ' [ ' << i << ' ] ' << ' [ ' << j << ' ] ' ; 
        } 
    } 
    cout << endl; 
}

Esto logrará la funcionalidad deseada.

 

Supongo que te gusta

Origin www.cnblogs.com/MK-XIAOYU/p/12707033.html
Recomendado
Clasificación