1. Programación en C/C++ 1.1. Introducción a la programación en C 1. La instrucción '#include ' es una instrucción para ( ) el compilador de C ( ) el compilador de C++ (x) el preprocesador de C ( ) el enlazador (linker) 2. Los paréntesis angulares <> en la instrucción '#include '... ( ) indican que el archivo stdio.h debe buscarse en la carpeta del archivo que tiene esa instrucción (x) indican que el archivo stdio.h debe buscarse en alguna subcarpeta donde está instalado el compilador ( ) indican que stdio.h no es un archivo, es un símbolo especial que viene con el preprocesador de C ( ) no tienen ningún efecto, da igual que usar comillas 3. Cuando se compila un programa ¿en qué orden se ejecutan las herramientas del compilador de C/C++? (x) preprocesador, compilador, enlazador (linker) ( ) preprocesador, enlazador (linker), compilador ( ) compilador, preprocesador, enlazador (linker) ( ) compilador, enlazador (linker), preprocesador ( ) enlazador (linker), preprocesador, compilador ( ) enlazador (linker), compilador, preprocesador 4. El preprocesador de C ( ) procesa condicionales y ciclos ( ) elimina el espaciado en blanco y los comentarios ( ) genera el ejecutable (x) procesa instrucciones iniciadas con # 5. ¿Cuál de los siguientes resultados no produce el enlazador (linker)? (x) archivos de código objeto (.o, .obj) ( ) bibliotecas estáticas (.a, .lib) ( ) bibliotecas dinámicas (.so, .dll) ( ) ejecutables en línea de comandos (CLI) ( ) ejecutables con interfaz gráfica (GUI) ( ) servicios o demonios 6. Sobre el valor retornado por la función 'int main()' ¿cuál de las siguientes proposiciones es falsa? ( ) es recibido por el sistema operativo ( ) 0 indica éxito, algo distinto significa fallo (x) 1 significa éxito, 0 significa fallo ( ) si no se indica, el compilador asume 0 7. Si se quiere generar un ejecutable en C, ¿cuál de las siguientes proposiciones es verdadera? ( ) cada archivo fuente (.c) que compone el programa debe tener una única función main() ( ) puede haber una o más funciones main() en un mismo archivo fuente (.c) (x) entre todos los archivos fuente (.c) que componen el programa sólo puede haber una función main() ( ) entre todos los archivos fuente (.c) que componen el programa puede no haber una función main() 8. La sobrecarga de funciones permite tener dos o más funciones con el mismo identificador pero diferentes parámetros ¿Cuál de las siguientes es correcta? ( ) Ni C ni C++ permiten la sobrecarga de funciones ( ) C permite sobrecarga de funciones, C++ no (x) C no permite sobrecarga de funciones, C++ sí ( ) Tanto C como C++ permiten la sobrecarga de funciones 9. ¿Cuál de las siguientes proposiciones es falsa en C? ( ) Para poder invocar una función, debe estar declarada antes ( ) Para poder invocar una función que está definida luego o en otro lugar, se necesita un prototipo antes (x) Un prototipo de una función consta del tipo de retorno, nombre de la función y su cuerpo ( ) Un prototipo de una función consta del tipo de retorno, nombre de la función y sus parámetros 10. Un comentario en C de la forma /* ... */ puede aparecer ( ) En cualquier lugar del programa (x) En cualquier lugar donde puede colocarse un espacio en blanco (o tabulador o cambio de línea) ( ) Sólo al inicio o final de un archivo fuente ( ) Sólo antes o después de una función 11. ¿Cuál de las siguientes declaraciones expresa una buena práctica de programación? ( ) double suma; ( ) double suma = 0; ( ) double suma = 0, conteo = 0; (x) double suma = 0.0; 12. La instrucción 'printf("100F = %.2lfC", 5/9*(100 - 32))' imprime en pantalla: (x) 100F = 0.00C ( ) 100F = 0C ( ) 100F = 37C ( ) 100F = 37.78C ( ) 100F = %0.2lfC 13. El condicional 'if ( -3.14 )' en C: ( ) no compila ( ) compila porque C asume 'if ( -3.14 == 0 )' ( ) compila y se evalúa como falso (x) compila y se evalúa como veradero 14. ¿Cuál de las siguientes proposiciones es falsa? La indentación de un programa en C/C++: (x) guía al compilador a decidir en caso de ambigüedades ( ) ayuda al desarrollador a comprender la estructura lógica del programa ( ) es sólo apariencia, el compilador debe retirarla para poder trabajar sobre el código fuente ( ) consta de espacios en blanco o tabuladores, pero es mala práctica mezclarlos 15. En la convención de estilo sugerida por Kernighan y Ritchie en su libro, un identificador en MAYUSCULAS se refiere a (x) una constante simbólica ( ) una función ( ) una variable global ( ) una estructura, unión o clase 16. En C/C++ la forma preferida de anular código (para que no sea compilado) es (x) condicionando el código con el preprocesador de la forma #if 0 ... #endif ( ) encerrando el código entre comentarios /* ... */ ( ) convirtiendo cada línea en un comentario iniciado con // ( ) eliminando el código del todo 17. ¿Cuál de las siguientes afirmaciones es verdadera? ( ) Un programa válido en C++ es también un programa válido en C (x) Un programa válido en C es también un programa válido en C++ ( ) Un programa válido en C++ es también un programa válido en Java ( ) Un programa válido en Objective-C es también un programa válido en C ¿Cuál de los siguientes diagramas de Venn expresa mejor la relación entre los lenguajes de programación C, C++ y Objective-C? ( ) ... ( ) ... ( ) ... ( ) ... La creación del lenguaje de programación C está asociada a la creación del siguiente sistema operativo ( ) Linux (x) Unix ( ) MS-DOS ( ) Macintosh ¿Cuál de las siguientes proposiciones es falsa? ( ) El lenguaje de programación C/C++ es un estándar internacional, no es propiedad de ninguna compañía. ( ) Cualquiera puede implmentar un compilador de C/C++, así lo hizo Microsoft, Borland, GCC, Apple y otras organizaciones. De esta forma, el compilador de C/C++ es propiedad de su autor. (x) El estándar C/C++ dice exactamente cómo implementar un compilador. Por esto, todos los compiladores soportan las mismas características del lenguaje y tienen los mismos parámetros de invocación y configuración. ( ) Cada compilador es independiente de otro. El programador debe ser cuidadoso de las características que usa, ya que su código fuente podría no ser portable de un compilador a otro. ¿Cuál de las siguientes proposiciones es falsa? ( ) Java es un lenguaje de programación orientado a objetos puro, no se puede tener funciones libres en él. (x) C++ es un lenguaje de programación orientado a objetos puro, no se puede tener funciones libres en él. ( ) C++ es un lenguaje de programación multiparadigma. Por ejemplo, se pueden tener funciones libres, variables globales, clases y objetos en un mismo programa. ( ) C es un lenguaje de programación procedimental, se pueden tener funciones libres y variables globales en un mismo programa. 1.2. Tipos, operadores y expresiones 1. x12. Después de ejecutar la asignación 'double celcius = 5/9*(100 - 32);' el valor de la variable 'celcius' será: (x) 0.00 ( ) 0 ( ) 37 ( ) 37.78 2. El tamaño de los tipos de datos primitivos en C/C++: ( ) Están definidos por el estándar, son iguales independientemente de la arquitectura y del compilador. (x) Varían de una arquitectura a otra, el lenguaje provee el operador sizeof para saber su tamaño y en algunos casos, constantes para saber sus rangos. El programador no debe asumir tamaños y utilizar estos mecanismos para hacer su código fuente portable. ( ) Varían de una arquitectura a otra, pero el estándar establece reglas que siempre se cumplen, como sizeof(short) < sizeof(int) < sizeof(long) < sizeof(long long). ( ) Varían de una arquitectura a otra, pero no es de importancia para el programador. El lenguaje expande sus tamañoa dinámicamente conforme se quiere almacenar valores más grandes. 3. El programa int x = 2, y = 4; int z = ++x * y--; equivale a (x) int x = 2, y = 4; x = x + 1; // x = 3 int z = x * y; // z = 12 y = y - 1; // y = 3 ( ) int x = 2, y = 4; y = y - 1; // y = 3 int z = x * y; // z = 6 x = x + 1; // x = 3 ( ) int x = 2, y = 4; x = x + 1; // x = 3 y = y - 1; // y = 3 int z = x * y; // z = 9 ( ) int x = 2, y = 4; int z = x * y; // z = 8 x = x + 1; // x = 3 y = y - 1; // y = 3 1.7. Entrada y salida de C ¿Cuál de las siguientes proposiciones es falsa? ( ) Un archivo es una secuencia de bytes terminada en una marca especial llamada EOF (end-of-file). ( ) Un archivo puede contener texto, datos binarios o una mezcla. (x) Todos los archivos están siempre almacenados en memoria secundaria para que no sean volátiles. ( ) La biblioteca estándar de C manipula el teclado y la pantalla como dos archivos. Las funciones para manejo de archivos en C se encuentran declaradas en el siguiente encabezado: ( ) ( ) ( ) (x) Las instrucciones en C int dia, mes, ano; scanf("%i/%i/%i", dia, mes, ano); ( ) no compilan ( ) compilan pero no enlazan (el linker reporta errores) (x) generan un ejecutable pero producen un error de ejecución ( ) generan un ejecutable y leen una fecha perfectamente ¿Cuál de las siguientes instrucciones imprime adecuadamente la variable 'unsigned long long x'? ( ) printf("x = %i", x); ( ) printf("x = %lli", x); (x) printf("x = %llu", x); ( ) printf("x = %Lu", x); ( ) printf("x = %f", &x); 1.3. Control de flujo La instrucción 'break' termina la ejecución de: ( ) la función donde se encuentra el 'break' ( ) el ciclo más cercano en el que se encuentra el 'break' ( ) un 'switch' donde se encuentra el 'break' (x) un ciclo o un 'switch', en lo que encuentre más cerca el 'break' La instrucción 'continue': ( ) termina la ejecución del ciclo donde se encuentra y pasa a la siguiente instruccion fuera del ciclo (x) termina la iteración actual del ciclo donde se encuentra y pasa a la siguiente iteración ( ) termina la ejecución del switch y pasa a la siguiente instrucción fuera del switch ( ) termina la ejecución de una función recursiva ddonde se encuentra y pasa a la siguiente recursión La instrucción for ( init; cond; incr ) prop; equivale a ( ) while ( cond ) { init; prop; incr; } (x) init; while ( cond ) { prop; incr; } ( ) init; while ( cond ) { incr; prop; } ( ) init; do { prop; incr; } while ( cond ); 1.4. Funciones y la estructura del programa 1.5. Apuntadores y arreglos ¿Cuál de las siguientes proposiciones es verdadera? (x) Un puntero es una variable entera cuyo valor es una dirección de memoria ( ) Los punteros son completamente innecesarios, dado que siempre apuntan a otro lugar de la memoria y se puede acceder a este otro lugar directamente ( ) Un puntero es un arreglo compuesto de dos datos: una dirección de memoria y un valor ( ) Un puntero puede apuntar a uno, dos, tres o más lugares de la memoria simultáneamente La proposición 'bool* x;' al ser compilada para una arquitectura de 64 bits: ( ) crea una variable booleana x de 1 byte capaz de almacenar únicamente los valores 'true' y 'false' ( ) fuerza al compilador a convertir el valor de x a un booleano ( ) crea un puntero x de 1 byte capaz de almacenar únicamente los valores 'true' y 'false' (x) crea un puntero x de 8 bytes capaz de almacenar una dirección de memoria Un programador declara dos punteros char* cp; double* dp; ¿Cuál de las siguientes proposiciones es verdadera? ( ) El puntero cp ocupa más bytes que el puntero dp, es decir sizeof(cp) > sizeof(dp) (x) El puntero cp ocupa igual cantidad de bytes que el puntero dp, es decir sizeof(cp) == sizeof(dp) ( ) El puntero cp ocupa menos bytes que el puntero dp, es decir sizeof(cp) < sizeof(dp) ( ) No se puede saber la cantidad de bytes que ocupa un puntero, es un detalle de implementación que el compilador oculta al programador 1.6. Estructuras 1.8. Clases, objetos y el paradigma OOP 1.9. Sobrecarga de operadores 1.10. Plantillas 1.11. Herencia y polimorfismo 1.12. Entrada y salida de C++ 1.13. La biblioteca estándar de C++ 1.14. Programación de interfaces gráficas