Certamen - Departamento de Ingeniería Informática y Ciencias de la
Transcripción
Certamen - Departamento de Ingeniería Informática y Ciencias de la
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 Mayo de 2012 Duración: 2 horas No se permite el uso de ningún material extra. Este certamen consiste de 4 páginas y 11 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 10 preguntas. Página 1 de 4 page 2 1. [10] Indique la salida del siguiente programa: #include <stdio.h> #include <string.h> void function(char entrada[], int valor){ if(valor%2)printf("%c\n",entrada[valor]); if(valor)function(entrada,valor-1); } int main(){ char string[]="asdfghjkl"; function(string,strlen(string)-1); return 0; } 2. [10] Considere el siguiente código, qué hace esta función?. le indica. #include <stdio.h> int misterio(int a){ if(a==0 || a == 1) return 1; return misterio(--a)+misterio(--a); } int main(){ int i; for(i=0;i<10;i+=2) printf("%d ",misterio(i)); printf("\n"); return 0; } 3. [10] Indique la salida de este programa, y explique el significado del valor de retorno de f(int a): #include <stdio.h> int f(int a){ int i; for(i=-1;a;a/=2,i++); return i; } int main(){ printf("%d %d %d %d %d\n",f(1),f(4),f(13),f(35),f(64)); return 0; } page 3 4. [10] La base para un algoritmo básico de ordenamiento basado en comparaciones es el intercambio del contenido de dos variables. El siguiente código, que busca intercambiar el contenido de dos variables, tiene UN error. Explı́quelo e indique las modificaciones que harı́a en el programa. (No se requieren librerı́as porque no se utilizan funciones que las hagan necesarias.) int main(){ char a=b, b=a; a=b; b=a; return 0; } 5. [10] Suponga que dispone de una memoria de 512 bytes. Complete la declaración de los siguientes arreglos de modo que tengan el mayor tamaño posible al ser declarados individualmente sobre dicho bloque de memoria (considere una arquitectura usual de 32 bits): • int arreglo [_____] • char string [_____] • double array [_____] • long cadena [_____] • short vector [_____] 6. [10] Dado el siguiente programa, determine su salida (hint: sizeof(x) retorna el tamao de x en bytes) #include <stdio.h> int main(){ int i,j,k,numero; numero = 0; for(i=0 ; i<sizeof(float) ; i++) for(j=0 ; j<sizeof(long) ; j++) for(k=0 ; k<sizeof(char) ; k++) numero += 1; printf("%d\n",numero); return 0; } 7. [10] Qué hace este programa? Qué tipo de números reconoce cuando el output es “YES”? page 4 #include <stdio.h> int main(){ int i,a,b,c; scanf("%d",&i); a = i%2; b = i%3; c = i%5; if(a || b || c) printf("NO\n"); else printf("YES\n"); return 0; } 8. [5] A qué corresponden los parámetros de la función main? (int main(int argc, char *argv[] 9. [5] Represente 5.2 en bits (punto flotante) 10. [20] Complete el esqueleto de código que se muestra ms abajo. Su programa debe pedir un número entre 0 y 1000. La funcin retorna 1 si el número es primo, y 0 si no. La función main debe pedir el input, e imprimir los número primos entre 0 y el número ingresado por el usuario. #include <stdio.h> int isprime(int n); int main() { // su codigo } int isprime(int n) { // su codigo } 11. [10] Bonus – No hay puntos parciales. Cree un programa que sea capaz de recibir desde teclado una palabra cualquiera con letras repetidas y devolver una versión resumida de ella. Ejemplo: si recibe eeejjemmmmpploooooo debe imprimir e3j2e1m4p2l1o6. Fin del certamen Total de páginas: 4 Total de puntos: 110