ELAI-EUITI-UPM Fundamentos de Informática 1. Cuestiones Enunciado Febrero 04. Ejercicio Tercero. (2 puntos – 30 minutos) Resolver los siguientes problemas indicando, en la parte inferior, cual es el resultado de cada programa. En caso de que el programa en cuestión tenga errores, sugerir la solución correcta. //a) #include <stdio.h> main( ) { int x = 0, y = 0; for(x = 6; x > 0; x -= 2) for(y = 0; y < 2; y++) printf("%d", x-y); } //b) #include <stdio.h> void fnx(int x) { if (x) printf("%d", x); } main( ) { int i, a = 1234; for(i = 0; i < 4; i++) fnx(a = a/10); } //c) #include <stdio.h> //d) #include <stdio.h> main( ) { int a[5] = {1, 2, 3, 4, 5}; int i = 0; for (i = 0; i <= 5; i++) printf("%d", a[i]); } main( ) { double d = 1024.77; int *p, a = 0; p = &d; a = *p; printf("%d\n", a); } //e) #include <stdio.h> typedef union { int a; float b; } tdato; main() { tdato s; s.a = 5; printf("%d %g\n", s.a, s.b); } Ejercicios resueltos de C. Diego Rodríguez-Losada 1 ELAI-EUITI-UPM Fundamentos de Informática Soluciones a) b) c) d) e) 654321 123121 12345(error) Cambiar <= por < Basura, error con tipos de punteros 5 Basura Ejercicios resueltos de C. Diego Rodríguez-Losada 2 ELAI-EUITI-UPM Fundamentos de Informática 2. Cuestiones Enunciado. Sept 05 Ejercicio 2 2 puntos-20 minutos Resolver los siguientes problemas, indicando cuál es el resultado del programa en cada caso o si imprime basura o si se produce un error de compilación o de ejecución. Si es el caso indicar la línea en la cual está localizada la sentencia que da error y su corrección de forma breve y concisa. 1. #include <stdio.h> int main() { int vector[5]={10, 20, 30, 40, 50}; printf ("%d",*(vector+4)); } 2. #include <stdio.h> int main() { int cont=0; char *ptr="antivirus"; while (*ptr++!='i'); printf ("%c",*ptr); } 3. #include <stdio.h> int main() { int a=2,b=3,mayor; mayor=2>3?2:3; if (mayor=2) printf ("%d",1); printf ("%d",0); } 4. #include <stdio.h> int main() { int u=4%2; switch(u) { case 0: printf ("%d",u); case 2: printf ("%d",u); } } 5. #include <stdio.h> int main() { int cont1=0,cont2=0; for (cont1=-1;cont1>-5;cont1--); for (cont2=1;cont2<=1;cont2=cont2+2) printf ("%d",cont1+cont2); } Ejercicios resueltos de C. Diego Rodríguez-Losada 3 ELAI-EUITI-UPM Fundamentos de Informática Soluciones a) b) c) d) e) 50 v 10 00 -4 Ejercicios resueltos de C. Diego Rodríguez-Losada 4 ELAI-EUITI-UPM Fundamentos de Informática 3. Cuestiones Junio 05. Ejercicio Segundo. (30 minutos - 3 puntos) Resolver los siguientes problemas, indicando cual es el resultado del programa en cada caso o si imprime basura o si se produce un error de compilación o de ejecución. Si es el caso indicar la línea en la cual está localizada la sentencia que da error y su corrección de forma breve y concisa. 2/ 1/ #include <stdio.h> void main(void) { int x; char tipo[]="CAMIONES"; for (x=1;x<5;++x) printf("%c",*(tipo+x)+3); #include <stdio.h> void main(void) { int x; char tex[]="OLIMPIA"; for (x=1; x<9;++x) printf ("%c", tex[x]+x); } } 4/ 3/ #include <stdio.h> typedef struct { int a; float b; } tdato; #include <stdio.h> main() { int x = 1; switch (x) { case 1: x++; case 2: x+=5; } printf("%d\n" , x); } 5/ main() { tdato s; printf("%d %d\n", s.a, s.b); } 6/ #include <stdio.h> main() { int x=0; for(x='a';x<='z';x+=10) { printf("%c\n",x); } #include <stdio.h> main() { int a[5] ={ 10, 20, 30, 40, 50 }; int *p = a; printf("%d\n", *(p)+2); } } Ejercicios resueltos de C. Diego Rodríguez-Losada 5 ELAI-EUITI-UPM Fundamentos de Informática Soluciones a) b) c) d) e) MKPTNG y basura DPLR 7 basura a k u f) 12 Ejercicios resueltos de C. Diego Rodríguez-Losada 6 ELAI-EUITI-UPM Fundamentos de Informática 4. Ejercicio Ejercicio Cuarto Junio 05.- (40 minutos - 3 puntos) Dado un fichero de nombre variable, que contiene en cada registro dos valores enteros separados por un espacio en blanco, obtener otro fichero (de nombre variable también) en el que los valores se separen por una coma y se hayan eliminado los registros que tuviesen simultáneamente los dos valores negativos. Presentar, asimismo, un informe con el número de registros grabados y el de eliminados. #include <stdio.h> Solucion main() { char nombre_fich_ent[100]; char nombre_fich_sal[100]; FILE* f_ent; FILE* f_sal; int cont=0; printf("Introduzca fichero de entrada: "); scanf("%s",nombre_fich_ent);//gets(nombre_fich_ent); printf("Introduzca fichero de salida: "); scanf("%s",nombre_fich_sal);//gets(nombre_fich_sal); f_ent=fopen(nombre_fich_ent,"r"); f_sal=fopen(nombre_fich_sal,"w"); while(1) { int a,b,r; r=fscanf(f_ent,"%d %d",&a,&b); if(r!=2) break; if(a>0 || b >0) fprintf(f_sal,"%d,%d\n",a,b); else cont++; } printf("Se han eliminado %d\n",cont); fclose(f_ent); fclose(f_sal); } Ejercicios resueltos de C. Diego Rodríguez-Losada 7 ELAI-EUITI-UPM Fundamentos de Informática 5. Ejercicio Ejercicio Tercero Sept 05 (2 puntos – 30 minutos) El objetivo del ejercicio es desarrollar un programa en C que realice las siguientes operaciones de forma secuencial y en el mismo orden que se indica: a) Solicitar al usuario 10 caracteres. b) Solicitar al usuario 1 caracter que se encuentre en la lista anterior. c) Buscar el número de veces que aparece el caracter del apartado 2 en el grupo de números del apartado 1 y mostrar en pantalla este número de apariciones. d) Sustituir en la lista del apartado 1, todas las apariciones del caracter del apartado 2, por el caracter ‘?’ y mostrar la lista en pantalla. e) Crear una nueva lista en la que se deben incluir, en el mismo orden, todos los caracteres de la lista inicial exceptuando los de tipo ‘?’. Los huecos que queden al final deberán rellenarse con un ‘.’. Mostrar la nueva lista en pantalla Ejemplo: a) Introduzca la lista de números: asaecraeto b) Introduzca el caracter a identificar: a c) Se han detectado 3 apariciones d) Esta es la lista ahora: ?s?ecr?eto d) Esta es la lista nueva: secreto... Completar el código que se proporciona a continuación para la ejecución del programa especificado. int ContarNumApariciones(char lista[10], char carElegido) { … } void main() { int numApariciones; char lista[10]; char nuevaLista[10]; … … … … printf("Se han detectado %d apariciones \n\n",numApariciones); … … … printf("Esta es la lista ahora: \n\n"); … … … printf("\n \n Esta es la lista nueva: \n\n"); … … … } Ejercicios resueltos de C. Diego Rodríguez-Losada 8 ELAI-EUITI-UPM Fundamentos de Informática Solucion #include <stdio.h> #include <stdlib.h> #include <conio.h> int ContarNumApariciones(char lista[10],char carElegido) { int num=0; int i=0; while(lista[i]!=0) { if(lista[i]==carElegido) num++; i++; } return num; } main() { int num; char car; char lista[10]; int i=0; printf("Introduzca lista: "); gets(lista); printf("Introduzca car: "); car=getchar(); num=ContarNumApariciones(lista,car); printf("Se han det %d\n",num); while(lista[i]!=0) { if(lista[i]==car) lista[i]='?'; i++; } printf("Esta es la lista ahora: %s\n",lista); } Ejercicios resueltos de C. Diego Rodríguez-Losada 9