Ejemplo examen integrador (martes 2012)

Anuncio
1. Indicar salida por pantalla al ejecutar cada uno de los siguientes programas, los
cuales no tienen errores de compilación ni de ejecución.
b.
c.
d.
e.
f.
a. #include <stdio.h>
void foo(int x){
++x;
}
int main(){
int x = 3;
foo(x);
printf("%d", x);
return 0;
}
Respuesta:
#include <stdio.h>
void foo(int x[]){
x[0]=7;
}
int main(){
int x[] = {1,2};
foo(x);
printf("%d", x[0]);
return 0;
}
Respuesta:
#include <stdio.h>
#include <string.h>
void foo(char s[]){
strcpy(s, "goodbye");
}
int main(){
char s[100] = "hello";
foo(s);
printf("%s", s);
return 0;
}
Respuesta:
#include <stdio.h>
int main(){
int i,j;
i=0; j=400;
while (i < j){
--j; ++i;
}
printf("%d", i-j);
return 0;
}
Respuesta:
#include <stdio.h>
int main(){
int i;
for (i=0; i<100; ++i)
if(i) break;
printf("%d", i);
return 0;
}
Respuesta:
#include <stdio.h>
int main(){
int i;
for (i=0; i<100; ++i){
if(i) continue;
break;
}
printf("%d", i);
return 0;
}
Respuesta:
g. ¿Cuál/cuáles de los siguientes programas (suponer que se incluyeron los
archivos de cabecera necesarios) comparan correctamente 2 palabras?
Nota: la función strcmp() compara dos cadenas y retorna 0 si son iguales
Respuesta:
2. Indique los dos errores que contiene el siguiente programa:
#include <stdio.h>
int main ()
{
int i, j, k = 10, m, n;
scanf ("%d%d" ,&i ,&j);
if(i > j);
printf ("%d",k);
else
printf ("%d",l);
return 0;
}
Respuesta:
3. Circular la opción correcta para indicar qué ocurre al ejecutar cada uno de los
siguientes trozos de código (suponer que están dentro de una función main y tienen
incluídos los archivos de cabecera necesarios):
a. int x = 1;
int *xp;
xp = &x;
printf("%d", *xp);
Respuesta: i. Falla la compilación ii. Se genera un error al ejecutarlo iii. Se
imprime 1 por pantalla iv. Se ejecuta e imprime una dirección de memoria
b. int *xp;
xp = (int*) malloc(sizeof(int));
printf("%d", *xp);
Respuesta: i. Falla la compilación ii. Se genera un error al ejecutarlo iii. Se
imprime 0 por pantalla iv. Se ejecuta e imprime cualquier valor (“basura”)
c. int *xp;
printf("%p", &xp);
Respuesta: i. Falla la compilación ii. Se genera un error al ejecutarlo iii. Se
imprime un valor significativo iv. Se ejecuta e imprime una dirección válida
d. int arr[2] = {3,4};
printf("%d", *(arr + 2));
Respuesta: i. Falla la compilación ii. Se genera un error al ejecutarlo iii. Se
ejecuta e imprime 4 iv. Se ejecuta e imprime 5
e. char a[3] ={1,2,3};
char *ap;
ap = a; ++ap[0];
printf("%d", a[0]);
Respuesta: i. Falla la compilación ii. Se genera un error al ejecutarlo iii. Se
ejecuta e imprime 1 iv. Se ejecuta e imprime 2
4. Completar las cabeceras de las funciones f1 y f2. Indicar qué se imprime por
pantalla como resultado de la ejecución (aprovechar el espacio al costado del
código):
#include <stdio.h>
….. f2( ………………………………………… )
{
a='z';
*m=*m+1;
printf("%d\t",*m);
return(a);
}
…… f1(…………………………………………. )
{
char c='a',d;
d = f2(p,c);
w[6-*p] = d;
w[*p] = c;
}
int main()
{
int i,j=0;
char v[6];
for(i=0;i<3;i++)
{
f1(&j,v);
printf("%c\n",v[i+1]);
}
for(j=3;j<6;j++) printf("%d\t%c\n",j,v[j]);
return 0;
}
5. Rellene las cabeceras incompletas de f1 y main e indique la correspondiente para f2:
#include <stdio.h>
typedef char cadena[100];
typedef struct
{
int a;
char b;
cadena c;
} T;
//Agregar debajo prototipo de f2?, no interesa lo que haga y retorne
………. f1(…………………….,…………………..){
return (f2(a->b, a->c));
}
............... main()
{
T a={1,'a',"Hola Juan que tal!"};
a.b = f1(&a, a.c[10]);
}
6. Circule la opción correcta para indicar qué se muestra por pantalla al ejecutar el
siguiente código?:
#include <stdio.h>
struct Foo{
unsigned int x:1;
unsigned int y:2;};
void main()
{
struct Foo obj;
obj.x = 5;//101
printf(“%d\n”, obj.x);
}
Respuesta: i.1 ii:2 iii.5 iv. No definido
b.-Dada una secuencia
de 8 bits (b7b6b5b4b3b2b1b0) se quiere contabilizar la
cantidad de unos que hay en las posiciones 0, 1, 3 y 6. Por ejemplo, si la secuencia
es 01010110 la función cuya cabecera es: int contabilizar(unsigned char secuencia),
debe retornar el valor 2. Escribir la definición de contabilizar, para simplificar puede
usar el código visto en clase para contar unos en un byte:
/* bitcount: cuenta bits 1 en x */
int bitcount(unsigned char x){
//unsigned para que al >> se completa por izquierda con 0s
int b;
for (b = 0; x != 0; x >>= 1)
if (x & 0x01)//0x01=00000001
b++;
return b;}
Ayuda: Si quiere armar una máscara para la función, recuerde que para
representar cualquier número binario en hexadecimal debía hacer grupos de 4
bits desde la derecha y sustituir cada uno de ellos por el valor en
hexadecimal.Escriba el código al costado o detrás de la hoja, en este último
caso indique dónde encontrar el código.
7. Suponga que tiene un archivo output.txt que contienelos siguientes datos:
abc 0 3 4
¿Cuál de las siguientes secuencias de código habrá generado este archivo?
a. FILE *fp;
int x = 0, y = 3, z = 4;
char str[10] = "abc";
fp = fopen("output.txt", "r");
scanf("%s %d %d %d", str, &x, &y, &z);
fclose(fp);
b. FILE *fp;
int x = 0, y = 3, z = 4;
char str[10] = "abc";
fp = fopen("output.txt", "w");
fprintf(fp, "%s ", str);
fprintf(fp, "%d %d %d\n", x, y, z);
fclose(fp);
c. FILE *fp;
int x = 0, y = 3, z = 4;
char str[10] = "abc";
fp = fopen("output.txt", "w");
fwrite(str, x, y, z);
fclose(fp);
d. int x = 0, y = 3, z = 4;
char str[10] = "abc";
printf("%s %d %d %d\n", str, x, y, z);
8. Suponga que en un programa tiene declarado este array: double arr[20];
¿Cuál de los siguientes trozos de código leerá correctamente el contenido de dicho
array de un archivo?
a. FILE *fp = fopen("input.txt", "r");
fscanf(fp, "%lf", arr);
b. FILE *fp = fopen("input.txt", "r");
fread(fp, sizeof(double), 20, arr);
c. FILE *fp = fopen("input.txt", "r");
fread(arr, sizeof(double), 20, fp);
d. FILE *fp = fopen("input.txt", "r");
fwrite(arr, sizeof(double), 20, fp);
9. Use la siguiente declaración de clase para responder a las siguientes preguntas:
class Time {
public:
Time( int, int, int );
void setHour( int );
void setMinute( int );
//establece el valor de la hora entre 1 y 12
//Establece valor minutos entre 0 y 59
void setSecond( int ); //Establece valor segundos entre 0 y 59
int getHour();
int getMinute();
int getSecond(); //retorna el valor actual de second
//Imprime los datos de un objeto Time en el formato:hour:minute:second
void printTime();
private:
int hour, minute, second;
};
a. Escriba el código del constructor de la clase de forma tal que inicialice cada uno
de los campos hour, minute y second; para ello se encargará de invocar (con los
argumentos convenientes) a los métodos setHour, SetMinute y SetSecond, de
forma tal de realizar esta carrera adecuadamente
b. Escriba la definición del método setHour, de forma tal que con el argumento
modifique el campo hour si dicho argumento tiene un valor entre 1 y 12
inclusive y sino lo inicialice en 12.
c. Escriba el código del método de acceso getSecond()
d. Escriba el método printTime de tal forma que imprima por pantalla los datos de
los campos hora,minuto,segundo en el formato indicado en el comentario. Para
los campos minutos y segundos, si los valores son menores a 10 añade un 0
adelante del valor mostrado
e. Suponiendo que tiene un archivo con una función main() indique cómo
instanciaría un objeto de tipo Time llamado time1 que tenga los siguientes
valores: hour=10, minute=3, second=28. Posteriormente indique cómo invocaría
a printTime para time1, finalmente añada una línea de código donde indique
cómo mostraria por pantalla el valor del campo hour para time1.
10. Considere el siguiente segmento de código:
class baseClass
{
public:
baseClass()
{ cout << "In base class constructor" << endl; }
˜baseClass()
{ cout << "In base class destructor" << endl; }
virtual void f1()
{ cout << "In base class f1" << endl; }
void f2() { cout << "In base class f2" << endl; }
};
class derivedClass
{
public:
derivedClass()
{ cout << "In derived class constructor" << endl; }
˜derivedClass()
{ cout << "In derived class destructor" << endl; }
void f1() { cout << "In derived class f1" << endl; }
void f2() { cout << "In derived class f2" << endl; }
};
¿Cuál es la salida por pantalla cuando se ejecuta el siguiente programa? Indicar la
respuesta al costado del código o detrás de la hoja, en este último caso aclare donde
se encuentra la respuesta.
int main(void){
baseClass x;
derivedClass y;
baseClass *z = new derivedClass;
x.f1();
x.f2();
y.f1();
y.f2();
z->f1();
z->f2();
return 0;
}
Descargar