Tiempo disponible: 100 minutos Examen de Programación I Convocatoria de Diciembre 2006 Permutación 1 Puntuación: sobre 20 puntos - las respuestas acertadas suman 1 punto - las respuestas falladas restan 0.25 - las preguntas sin responder ni suman ni restan Datos personales que debéis rellenar en la hoja de examen: - Con letras, el cuadro superior: estudi, data, nom, cognoms, assignatura y grup (de teoría) - Marcando las casillas, y también con letras: - DNI - Centre: 337 - Assignatura: 12406 - Parcial: dejadlo en blanco - Permutació: 1 - Grup: 01 ó 02 (grupo de teoría) - En el último cuadro: el NIA, comenzando con tres ceros, por ejemplo 00012345 Cómo rellenar las respuestas : - El número de pregunta es el que aparece a la derecha de las casillas y se corresponde con un bloque con dos filas - De estas dos filas, tenéis que rellenar la primera (con un número impar). La segunda (con un número par) sirve para anular la respuesta - Recordad que debéis rellenar la casilla completa - Mejor con bolígrafo negro o lápiz oscuro (nº 1 ò 2). No uséis típex! 1. Indica cuál de las siguientes expresiones es verdadera si y sólo si un valor real x está en el intervalo cerrado [3.0,6.0]: a) (x>=3.0) (x<=6.0) b) (x>3.0) && (x<6.0) c)! ( (x<3.0) && (x>6.0) ) 2. Indica qué valor se escribe cuando se compila y ejecuta el siguiente programa: void int x=1, y=0; if (x > y) y = 4; if (y = x) y = y + 1; else y = y - 1; printf("%d",y); a) 1 b) 2 c) 3 d) 4
3. Indica cuántas iteraciones del bloque se realizan al ejecutar el siguiente bucle: for (i=1 ; i<5 ; i=i+1) for (j=i ; j<=6 ; j=j+2) /* bloque*/ a) 10 b) 12 c) 15 d) 24 4. Indica qué valores se escriben cuándo se compila y ejecuta el siguiente programa: int f1(int x) x=x*x; return x; int f2(int x, int y) y = y * y; return x * y; int x = 2, y = 3, a, b; a = f1(x); b = f2(y,a); printf("%d, %d, %d, %d", x, y, a, b); a) 2, 3, 4, 36 b) 2, 3, 4, 48 c) 4, 9, 4, 48 5. Indica qué valor se escribe cuando se compila y ejecuta el siguiente programa: int f1(int x) return x+1; int f2(int x, int y) return x + y; int x = 2, y = 5; printf("%d, %d", f2(f1(y),f1(x))); a) 7 b) 8 c) 9
6. Indica qué se escribe cuándo se compila y ejecuta el siguiente programa: #define N 10 int v [N] = 10, 20, 30, 40, 50, 60, 70, 80, 90, 100; int x = 1; while (x < N) if (v[x]%30 == 0) v[x]=0; x++; for(x=n-1; x >= 0; x--) if (v[x] == 0) v[x] = v[x+1]; printf("%d, ", v[x]); a) 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, b) 100, 100, 80, 70, 70, 50, 40, 40, 20, 10, c) 100, 0, 80, 70, 0, 50, 40, 0, 20, 10, d) Se produce un error en tiempo de ejecución 7. Indica qué se escribe cuando se compila y ejecuta el siguiente programa: #define N 6 int v1 [N] = 6, 5, 4, 3, 2, 1; int v2 [N] = 0, 1, 2, 3, 4, 5; int x; for(x=0; x < N; x++) printf("%d, ", v2[v1[x]-1]); a) 0, 1, 2, 3, 4, 5, b) 6, 5, 4, 3, 2, 1, c) 5, 4, 3, 2, 1, 0, 8. Indica qué se escribe cuando se compila y ejecuta el siguiente programa: #define N 3 int m[n][n] = 1, 2, 3, 4, 5, 6, 7, 8, 9; int x, y; for(x=1; x < N; x++) for(y=0; y < N; y++) if (m[x][y]%2==0) m[x][y] = m[x][y] + m[x-1][y]; printf("%d, %d, %d, ", m[0][0], m[0][1], m[0][2]); printf("%d, %d, %d, ", m[1][0], m[1][1], m[1][2]); printf("%d, %d, %d, ", m[2][0], m[2][1], m[2][2]); a) 1, 2, 3, 4, 5, 6, 7, 8, 9, b) 1, 2, 3, 1, 5, 3, 7, 5, 9, c) 1, 2, 3, 5, 5, 9, 7, 13, 9,
9. Indica qué se escribe cuando se compila y ejecuta el siguiente programa: #define N 3 int m[n][n] = 1, 2, 3, 4, 5, 6, 7, 8, 9; int x, y; for(x=1; x < N; x++) for(y=0; y < N; y++) if (m[x-1][y]%2==0) m[x][y] = m[x][y]*2; printf("%d, %d, %d, ", m[0][0], m[0][1], m[0][2]); printf("%d, %d, %d, ", m[1][0], m[1][1], m[1][2]); printf("%d, %d, %d, ", m[2][0], m[2][1], m[2][2]); a) 1, 2, 3, 4, 5, 6, 7, 8, 9, b) 1, 2, 3, 4, 10, 6, 14, 16, 18, c) 1, 2, 3, 4, 4, 6, 8, 8, 12, 10. Indica qué se escribe cuándo se compila y ejecuta el siguiente programa: #include <string.h> char cadena[100] = "abcdefghij"; strcpy(cadena,"aeiou"); strcat(cadena,"xyz"); cadena[strlen(cadena)/2] = '\0'; cadena[strlen(cadena)-1] = '*'; printf("%s", cadena); a) aei* b) abcdefgh* c) aeiouxy* d) aeio\0xy* 11. Dado el siguiente programa, indica la respuesta correcta: void int v[2]=5,5; int *p, *q; p = v; q = p; v[1] = *p + v[0]; *q = *q + *p; printf("%d, %d", v[1], v[0]); a) Escribe 10, 10 b) Escribe 10, 15 c) Escribe 15, 10 d) Se produce un error
12. Dado el siguiente programa, indica la respuesta correcta: #include <stdlib.h> int *a, *b, *c; a = (int *) malloc(sizeof(int)); *a = 3; b = a; *b = 2; c = b; *c = *b - *a; printf("%d, %d, %d", *a, *b, *c); a) Escribe 3, 2, 1 b) Escribe 3, 2, -1 c) Escribe 0, 0, 0 13. Dado el siguiente programa, indica la respuesta correcta: #include <stdlib.h> int *p, *q, *r; p = (int *) malloc(sizeof(int)); q = (int *) malloc(sizeof(int)); r = (int *) malloc(sizeof(int)); *p = 10; *q = *p; *q = *p * 10; *r = *q * 10; r = p; printf("%d, %d, %d", *p, *q, *r); a) Escribe 10, 100, 1000 b) Escribe 10, 100, 10 c) Escribe 100, 100, 1000 d) Escribe 100, 100, 100 14. Dado el siguiente programa, indica la respuesta correcta: int a; void f(int *x, int y) a = a * 2; *x=*x * y; int b=1; a = 1; f(&b, a); printf("%d, %d", a, b);
a) Escribe 1, 1 b) Escribe 2, 1 c) Escribe 1, 2 d) Escribe 2, 2 15. Dado el siguiente programa, indica la respuesta correcta: int f1(int *a) *a = *a * *a; return *a; void f2(int *a,int *b) *b = f1(a) * f1(b); int a=2,b=2; f2(&a,&b); printf("%d, %d",a,b); a) Escribe 2, 2 b) Escribe 2,16 c) Escribe 2, 4 d) Escribe 4, 16 16. Tenemos el siguiente programa y dos ficheros f1.txt (que contiene el texto caracola1 ) y f2.txt (que contiene el texto caracola2 ). Suponiendo que no hay ningún error abriendo los ficheros, indica la respuesta correcta: FILE *f1,*f2; char c=' '; f1=fopen("f1.txt","r"); f2=fopen("f2.txt","a"); if ((f1==null) (f2==null)) printf("error abriendo los ficheros\n"); else while (c!=eof) c=getc(f1); fprintf(f2,"%c%c", c, c); c=getc(f1); fclose(f1); fclose(f2); a) El fichero f1.txt acaba conteniendo el texto caracola1, y f2.txt el texto caracola2 b) El fichero f1.txt acaba conteniendo el texto caracola1, y f2.txt el texto caracola2ccrrccll11 c) El fichero f1.txt acaba conteniendo el texto caracola1, y f2.txt el texto ccrrccll11
17. Tenemos el siguiente programa y un fichero f.txt, cuyo contenido es caracola. Suponiendo que no hay ningún error abriendo el fichero, indica la respuesta correcta: void muestra(file *f) char c = ' '; while ((c = getc(f))!=eof) fprintf(stdout, "%c",c+2); void FILE *f; f=fopen("f.txt","r"); muestra(f); fclose(f); a) Escribe caracol por pantalla b) Escribe ectceqnc por pantalla c) Escribe caracola por pantalla d) Se produce un error al llamar a la función muestra 18. Tenemos el siguiente programa y un fichero f.txt, cuyo contenido es 123456. Suponiendo que no hay ningún error abriendo el fichero, indica la respuesta correcta: void FILE *f; char c1; int c2; f=fopen("f.txt","r"); while (!feof(f)) fscanf(f, "%c%d", &c1, &c2); printf("%c-%d", c1, c2); a) Escribe 1-2-3-4-5-6 por pantalla b) Escribe 1-23456 por pantalla c) Escribe 1-23-45-6 por pantalla
19. Dado el siguiente programa, indica la respuesta correcta: #include <stdlib.h> struct punto int x; int y; ; void struct punto *p1, *p2; p1 = (struct punto *)malloc(sizeof(struct punto)); p2 = p1; (*p1).x=10; (*p1).y=(*p1).x; printf("%d, %d", p2->x, p2->y); a) Escribe 10, 10 b) Escribe 0, 0 c) Se produce un error en la línea printf("%d, %d", p2->x, p2->y); d) Se produce un error en la línea (*p1).x=10; 20. Se necesita una función misterio que intercambie dos valores enteros y devuelva el mayor de ellos. El intercambio debe tener efecto no sólo en el contexto de la función misterio sino también en el de las funciones que le llamen. Cuál de los siguientes prototipos de función sería el adecuado? a) int misterio(int *a, int *b); b) void misterio(int *a, int *b, int *c); c) float misterio(int *a, int *b); d) int misterio(int a, int b);