Escuela Politécnica Superior Ingeniería Industrial EXAMEN TEÓRICO DE INFORMÁTICA APLICADA Elche, 1 de septiembre de 2007 1.- El siguiente fragmento de código C contiene errores de sintaxis. El programa debe reservar memoria para almacenar una serie de datos enteros y de coma flotante y, a continuación, los muestra por pantalla. Vuelva a escribir correctamente el código en la hoja del examen. #include<stdio.h> #define MAX=5 struct datos{ float *vec int *num }; typedef struct datos datos void RecogeDatosTeclado(struct datos *p) void ImprimeDatosPantalla(struct datos a) int main(void) { datos dat; dat->num = (int)malloc(MAX*sizeof(int)); if(dat->num==NULL) return -1; dat->vec = (float)malloc(TAM*sizeof(float)); if(dat->vec==NULL) return -1; RecogeDatosTeclado(dat); ImprimeDatosPantalla(*dat); free(dat->num); free(dat->vec); return 0; } void ImprimeDatosPantalla(datos a); { int i; for(i=0, i < TAM, i++) printf("%d\t", a->num+i); for(i=0, i < TAM, i++) printf("%f\t", a.vec[i]); void RecogeDatosTeclado(datos *b); { int i; printf("\nIntroduzca enteros:\n"); for(i=0, i < TAM, i++) scanf("%d", b.num[i]); printf("\nIntroduzca floats:\n"); i=0; while(i=<TAM-1) { scanf("%f", b.vec[i]); i+=1; } (2.0 puntos, cada error no encontrado resta 0.5 puntos) Duración del examen: 1:30 horas Escuela Politécnica Superior Ingeniería Industrial 2.- El siguiente código C lo hemos podido compilar sin problemas. El programa debe leer una serie de números desde el fichero datos.txt. El fichero datos.txt existe y su contenido se muestra a continuacion. Por cada número leído de datos.txt se debe escribir por pantalla una secuencia de números como la mostrada en la figura. Sin embargo, el funcionamiento del programa no es el deseado. Encuentre los errores de ejecución que se producen en el programa y vuelva a escribir el código, de manera que funcione correctamente. #include <stdio.h> int main(void) { FILE *fp; int *pfloat; int i; fp = fopen("datos.txt", "w"); if(fp=NULL); { printf("\nError abriendo fichero"); return -1; } fclose(fp); while(feof(fp)) { fscanf(fp, "%f", pfloat[i]); for(i=0; i < pfloat[i]; i++); printf("%d ", i); printf("\n"); } free(pfloat); } system("PAUSE"); return 0; datos.txt Salida por pantalla 1.0 5.0 3.0 6.0 10.0 3.0 01 01234 012 012345 0123456789 012 (2.0 puntos, cada error no encontrado resta 0.5 puntos) 3.- Indique la salida por pantalla del siguiente código: #include <stdio.h> int Func(int *a); int i, j; Duración del examen: 1:30 horas Escuela Politécnica Superior Ingeniería Industrial int main(void) { int i; printf("\nValor de j: %d", j); j=Func(&j); printf("\nValor de j: %d", j); i=Func(&j); printf("\nValor de i: %d", i); } system("pause"); int Func(int *a) { j=*a; i++; *a=i; j++; } return j; (1.5 puntos) 4.- Dado el siguiente fragmento de un programa: ¿Cuál de las siguientes llamadas a la función es la correcta? #include <stdio.h> struct datos{ float x; int *vector[20]; }; int RecogeTeclado(float *a, int *x); //Prototipo int main(void) { struct datos *a; int m; a = (struct datos*)malloc(sizeof(struct datos)); m=RecogeTeclado(.........); } free(a); m m m m = = = = RecogeTeclado(*(*a).x, *(*a).vector ); RecogeTeclado(a->x, a->vector); RecogeTeclado(&(a->x), (*a).vector[0]); RecogeTeclado((*a).vector[0], &m); (1.5 puntos) 5.- Indique la salida por pantalla del siguiente código: #include <stdio.h> int main(void) { int vec[3]; int *p[3]; int a=5, b=7, c=8; vec[0]=1; vec[1]=2; vec[2]=1; p[0]=&a; p[1]=&b; Duración del examen: 1:30 horas Escuela Politécnica Superior Ingeniería Industrial p[2]=&c; a++; b--; printf("%d %d %d ", *(p[0]) + *(p[1]), **(p+*vec), **p+*(vec+1)); system("PAUSE"); } (1.0 punto) 6.- Explique en qué consiste el paso por valor, paso por dirección y paso por referencia. Ponga un ejemplo de cada uno de ellos, indicando el prototipo de la función, su implementación y la llamada a la función ¿Cuál se admite en C y cuál en C++? (2.0 ptos) Duración del examen: 1:30 horas