Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Lenguaje C para respuestas y análisis. ¡Gracias!

Lenguaje C para respuestas y análisis. ¡Gracias!

La respuesta es la primera i vacía o a[i], la segunda a[i] vacía y la tercera 0 vacía;

En este programa, su lógica de implementación es para completar primero el valor de esta matriz a, que es esta oración

for(i = 2; i lt; = n; i)

a[i] = i;

Después de eso, desde el valor inicial 2, el primer ciclo es cambiar 2 y los múltiplos de 2 a 0, eliminando así indirectamente 2 y los múltiplos de 2. El efecto está funcionando, la pregunta es, ¿cómo date cuenta de que 2 y múltiplos de 2 son iguales a 0, así es como se usa este bucle

for(j = a[i] * 2; j lt; = n; j = a[i])

a[j] = 0;

Primero deje que el valor inicial sea 2, es decir, esta oración j = a[i] * 2, y 2 Para múltiplos, simplemente sume 2 cada vez. Aquí i y a[i] son ​​ambos iguales a 2 (los valores dados al asignar valores a la matriz anteriormente), así que aquí dejemos que j agregue i o a[i] cada vez.

Después de ejecutar esta oración, sea i. En este momento, i es igual a 3. Como se mencionó anteriormente, la operación de 3 y múltiplos de 3 continuará.

Si simplemente haces esto, habrá un problema, es decir, cuando borre múltiplos de 2 a 0, las posiciones correspondientes se convertirán en 0, como a[4], en este momento se convierte 0, y luego cuando su bucle se ejecuta a 4 y múltiplos de 4, encontrará que su bucle for se convierte en un bucle infinito, porque j siempre sumará 0 a sí mismo, nunca será mayor que n, que debe ser un bucle infinito. , entonces existe la siguiente oración while (a[i] == 0) i; significa que si a[4] es igual a 0, las operaciones de 4 y múltiplos de 4 no se realizarán directamente a operaciones en múltiplos. de 5.

El último espacio vacío es para imprimir. Solo desea imprimir números primos, pero todavía tienen algunos ceros, por lo que si encuentran ceros, no se imprimirán. serán impresos.

Probablemente sea eso. Si no lo entiendes, ¡sigue preguntando!