Nombre: Apellidos: Número de matrı́cula: Firma: UNIVERSIDAD DE CONCEPCIÓN Departamento de Ingenierı́a Informática y Ciencias de la Computación Facultad de Ingenierı́a INF 503208 (Lenguaje de Programación I) Profesor: L. Ferres Certamen 1 – El Regreso Junio de 2012 Duración: 2 horas No se permite el uso de ningún material extra. Este certamen consiste de 5 páginas y 12 problemas/preguntas. Si hay discrepancias entre éstos números y lo que se le entregó efectivamente, hágaselo saber al encargado del certamen. El número entre corchetes al empezar cada pregunta/problema, es la cantidad de puntos que vale esta pregunta. Conteste todas las preguntas. Página 1 de 5 page 2 1. [10] ¿Qué valor imprimirá el siguiente programa? Por favor, muestre todos los pasos que ejecuta. El operador % es el “resto” de una división. #include <stdio.h> int main( void ) { int x=2, y=17, z=11, resultado=5; resultado -= 2 * z % 13 + y / 3 + x; printf( "%d\n", resultado ); return 0 ; } /* end main */ 2. [15] Escriba un programa completo que cuente el número de enteros pares e impares que se le pasan en la lı́nea de comando. Por ejemplo, asumiendo que su programa se llama cuente, el mismo deberı́a funcionar de la siguiente manera: % ./cuente 3 5 7 9 Número de pares: 0 Número de impares: % ./cuente 2 2 4 4 Número de pares: 4 Número de impares: % ./cuente Número de pares: 0 Número de impares: 4 5 1 0 3. [5] Considere el siguiente programa: #include <stdio.h> int main( int argc, char** argv ) { int i; for ( i=1; (i < argc); i++ ) { printf( "[%s] ", argv[i] ); } return 0; } /* end main */ a) ¿Qué imprime el programa si se lo ejecuta sin argumentos en la lı́nea de comandos? Por ejemplo, si su programa se llama prog, entonces % ./prog? Cuál es el valor de argc? b) ¿Qué imprime el programa si se lo ejecuta con los argumentos A B C 3 78.2 Medio Oriente? Cuál es el valor de argc? page 3 4. [10] ¿Qué imprime el siguiente programa? #include <stdio.h> int main( void ) { int i=0, j; while (i < 3) { for ( j=0; (j < 5); ++j ) { if (j == 2) { i++; continue; } if (i == 2) { j += 2; break; } printf( "%d %d\n", i, j ); } /* end for */ i++; printf( "%d %d\n", i, j ); } /* end while */ return 0; } /* end main */ 5. [10] ¿Qué hace el siguiente programa? Muestre en general una ejecución del mismo. #include <stdio.h> int misterio (int a, int b); int main(void) { int x; int y; printf("ingrese dos enteros:"); scanf("%d%d", &x,&y); printf("El resultado es %d\n", misterio(x,y)); return 0; } int misterio(int a, int b) { if (b==1) { return a; } else { return a+ misterio(a,b-1); } } page 4 6. [7] Marque los nombres de variables inválidos con una F, y válidos con una V. Lea cuidadosamente! [ [ [ [ [ [ [ ] ] ] ] ] ] ] primero_y_segundo caro$ 2numeros UnNumeroPar UnNumeroDivisiblePor2 EstaEsUnaVariableQueTieneUnNombreBastanteLargo If 7. [5] Asuma que inum es un entero, rnum es un real (punto flotante) y chr es un char (un caracter), y no existen otras varaibles declaradas. Para las siguientes asignaciones a variables, determine si son validas (escriba una V) o no (escriba una F). Lea cuidadosamente! [ [ [ [ [ ] ] ] ] ] chr="A1"; chr=65; inum + 1 = inum; inum = inum++; rnum = ’A’; 8. [8] Escriba un programa en C que imprima los números del 5 al 1000, de a 5 números. Es decir, la salida es 5 10 15 20 ... 1000. Use un for. 9. [5] Convierta el siguiente for loop en un while loop. for ( i = 0; i < 100; i++ ) { if ( i % 10 == 0 ) printf(\n); n += array[i]; printf(%d , n); } 10. [10] Dado main y el esqueleto de la función rev(arr,numelems), escriba la función rev tal que imprima los números de arr en orden inverso. Es decir, si arr=2, 5, 8, entonces imprima 8, 5, 2. void rev(int arr[], int numelems) { ... su código va aqui ... } page 5 int main() { int nums[9] = {13, 11, 15, 9, 7, 5, 8, 3, 1}; rev(nums, 9); } 11. [5] ¿Cuál es la representación en coma (punto) flotante de 8.24? 12. [10] ¿Cuál es el output de este programa horrible? #include <stdio.h> int f( int i ) { printf( "%d ", i ); return i; } int g( char c ) { printf( "%c ", c ); return c; } int main( void ) { char s1[]="Hello", s2[]="Hello"; int i=10, j=20, k=30, m=40; char c1=A, c2=a, c3=B; if ((f(i) < f(j)) || (f(k) >= f(m))) {} printf( "\n" ); if ((f(i) < f(k)) && (f(j) >= f(m))) {} printf( "\n" ); if ((s1 == s2) || (f(j) >= f(k)) || (g(c1) == g(c3))) {} printf( "\n" ); if ((g(c1) != g(c3)) && (g(c1) == g(c2))) {} printf( "\n" ); if ((g(c1) > g(c2)) && (g(c1) > g(c3))) {} return 0; } /* end main */ Fin del certamen Total de páginas: 5 Total de puntos: 100