Prediga la salida de los siguientes programas en C.
Pregunta 1
#include <stdio.h> int main(void) { int i; int power_of_ten[5] = { 00001, 00010, 00100, 01000, 10000, }; for (i = 0; i < 5; ++i) printf("%d ", power_of_ten[i]); printf("\n"); return 0; }
En el ejemplo anterior, hemos creado una array de 5 elementos, cuyos elementos son potencia de diez (es decir, 1, 10, 100, 1000 y 10,000) y estamos imprimiendo estos elementos usando un bucle for simple. Entonces, esperamos que la salida del programa anterior sea «1 10 100 1000 y 10000», pero el programa anterior no muestra esta salida, sino que muestra
"1 8 64 512 10000"
Analicemos el programa anterior con más detalle. Dentro de la array declaramos elementos que comienzan con «0», y esta es la representación octal del número decimal (consulte este GFact para obtener más detalles).
Es por eso que todos estos números están en representación octal. “010” es la representación octal del decimal “8”, “0100” es la representación octal del decimal “64” y así sucesivamente.
Último elemento “10000” que no empieza por “0”, por eso está en formato decimal y se imprime tal cual.
Pregunta 2
#include <stdio.h> int main(void) { https://www.geeksforgeeks.org printf("Hello, World !!!\n"); return 0; }
A primera vista, parece que el programa anterior dará un error de compilación, pero funcionará bien (pero dará una advertencia de compilación). Observe atentamente el programa anterior, en este programa «http:» se tratará como una etiqueta goto y dos barras inclinadas actuarán como un comentario de una sola línea. Es por eso que el programa funcionará correctamente.
Pregunta 3
#include <stdio.h> #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) int main(void) { int i; int arr[] = {1, 2, 3, 4, 5}; for (i = -1; i < ARRAY_SIZE(arr) - 1; ++i) printf("%d ", arr[i + 1]); printf("\n"); return 0; }
En el programa anterior, la macro «ARRAY_SIZE» sustituye la expresión para obtener el número total de elementos presentes en la array, y estamos imprimiendo estos elementos mediante un bucle for. Pero el programa no imprime nada. Veamos qué está mal con el código.
El valor devuelto por la expresión sustituida está en formato «int sin signo», y dentro del bucle for estamos comparando 5 sin signo con -1 con signo. En esta comparación, -1 se convierte en un entero sin signo. -1 en formato sin firmar se representa como todos sus bits se establecen en 1 (es decir, 0xffffffff), que es un número demasiado grande
Después de sustituir el valor de la macro, el bucle for se ve así.
for (i = -1; 0xffffffff < 5; ++i)
En el bucle anterior, de hecho, 0xffffffff no es inferior a 5, es por eso que la condición del bucle falla y el programa sale del bucle sin imprimir nada.
Este artículo fue compilado por Narendra Kangralkar . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA