Número de matr´ıcula - Departamento de Ingeniería Informática y

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 503201 (Lenguaje de Programación)
Profesor: L. Ferres
Certámen 1
Junio de 2010
Duration: 3 horas
No se permite el uso de ningún material extra.
Este certámen consiste de 5 páginas y 11 problemas/preguntas. Si hay discrepancias entre
éstos números y lo que se le entregó efectivatmente, hágaselo saber al encargado del certámen.
El número entre corchetes al empezar cada pregunta/problema, es la cantidad de puntos que
vale esta pregunta.
Conteste las 10 primeras las preguntas.
El bonus da 10 puntos más a contar para el otro certámen.
Página 1 de 5
page 2
1. [20] Escriba un programa en ANSI C, que calcule el Interés Compuesto de un Préstamo.
Para esto, el programa debe obtener desde la entrada estándar, dos reales y un entero;
el primero es la cantidad prestada(P), el segundo es el Interés Compuesto por mes(I),
y el tercero es la cantidad de meses(T) en la que se pagará el prestamo.
El programa deberá imprimir en pantalla, y en una lı́nea para cada uno, el monto total
a pagar(M), el total acumulado del interés, y la diferencia entre el monto total a pagar
y el préstamo.
Recuerde que la fórmula del Interes Compuesto es la siguiente:
M = P ∗ (1 + I)T
(1)
use la función pow(double,double) que está en math.h.
2. [10] Escriba un programa en C, que incluya una función que imprima en pantalla un
texto (el de su elección), exactamente 1000 (mil) veces, sin usar while, do-while, ni
for.
3. [5] Por qué el siguiente programa da el siguiente error al compilar: ex2.c:10:warning:
implicit declaration of function printf
#include <math.h>
int main( ) {
int a=5;
float x;
x=log10(a);
printf("log base %i de %i\n",10,a);
printf("x: %f\n",x);
return 0;
}
4. [10] Considere el siguiente programa:
#include <stdio.h>
unsigned int g(unsigned int x) {
if (x==0 || x==1) return x;
else return g(x-1) + g(x-2);
}
int
main (int argc, char *argv[])
{
page 3
unsigned int n;
int i;
scanf ("%u", &n);
for (i=0; i<=n; i++)
printf("%u\n", g(i));
return 0;
}
(a) Cuál es la salida del programa, si al ejecutarlo se ingresa por la entrada estándar
stdin el número 10?
(b) Cuál es el nombre que recibe la sucesión de números impresa? (Hint: vista en dos
sesiones de laboratorio)
5. [10] Cuál es la salida del siguiente programa?
#include <stdio.h>
int almacen(int);
int dato[2] = {0, 0};
int main (int argc, char *argv[]) {
int valores[] = {999, 888, 777, 666, 555};
int tam = 5;
int x;
int i;
for (i=0; i<tam; i++) {
x = almacen( valores[i] );
printf("%d\n", x);
}
return 0;
}
int almacen (int entrada) {
int salida;
salida = dato[1];
dato[1] = dato[0];
dato[0] = entrada;
return salida;
}
6. [10] Describa la diferencia entre una variable global y una variable local. Dé un ejemplo
de cada una.
7. [10] El siguiente programa contiene 4 errores, identifı́quelos y corrı́jalos para que el
código haga lo que debe. El programa deberı́a imprimir YES cuando un string es
page 4
simétrico (por ejemplo: aba, abba, 1001, anitalabbalatina), y NO en caso contrario.
Ojo, la función int strlen( char[] ) devuelve el largo de un string.
#include <stdio.h>
#include <string.h> //Incluida para utilizar la funcion strlen()
int main (int argc, char *argv[]) {
int i;
int n;
int simetrico = 0;
char s[100];
scanf("%s",s);
n = strlen(s);
for(i=0; i<n/2; i++){
if ( s[i] != s[n-i] )
simetrico = 1;
}
if ( simetrico = 1 )
printf("YES\n");
else
printf("NO\n");
return 0;
}
8. [10] El siguiente código imprime los primeros N números primos, donde N > 0. Encuentre los errores de manera que el código cumpla su propósito. Sugerencia: existen
3 errores.
void PrintNPrimeNumbers(int n){
int Quantity=1;
int ActualNumber=3, Divisor=2;
printf("2\n");
while(Quantity<n){
int IsPrime = 0;
for(Divisor=2;Divisor<ActualNumber;Divisor++){
if((ActualNumber%Divisor)==0){
IsPrime = 1;
break;
}
}
if(IsPrime){
printf("%d\n",&ActualNumber);
Quantity++;
page 5
}
ActualNumber+=ActualNumber;
}
}
9. [5] Qué sucede si no establece las condiciones de detención en una función recursiva?
(ejemplifique)
10. [10] Cree una pequeña funcion, que imprima un string de derecha a izquierda, utilizando
recursion. Sugerencia: el largo del string es conocido. Se puede obtener el tamaño de
un string utilizando la división: sizeof(input)/sizeof(char), donde sizeof es una
función estándar definida en stdio.h). (otro hint: hay algo útil en otro lado de este
certámen)
11. [10] BONUS! Escriba un programa que imprima las partes importantes de un string,
ignorando los espacios y tabs existentes al comienzo y al final de este. Por ejemplo:
Input: "\t \t Hola mundo\t !\t" output(impreso): "Hola mundo\t !".
Fin del certámen
Total de páginas: 5
Total de puntos: 110
Descargar