Nombre: Apellidos: Número de matr´ıcula: Firma: UNIVERSIDAD DE

Anuncio
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
Descargar