Número de matr´ıcula

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