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; }