Story Transcript
ELAI-EUITI-UPM
Fundamentos de Informática
1. Ecuación cuadrada Temas Operadores, estructura de control if-else
Enunciado Realizar un programa en C que resuelva una ecuación de segundo grado del tipo ax2+bx+c=0 siendo los parámetros a, b, y c introducidos por el usuario. Realizar la comprobación de que realmente la ecuación es cuadrada y gestionar adecuadamente soluciones dobles e imaginarias
Salida Introduzca los coeficientes a,b y c de ax2+bx+c=0, separados por espacios 2 3 -4 Ecuacion 2.000000x2+3.000000x+-4.000000=0 Soluciones 3.403124 -9.403124 Press any key to continue
O Introduzca los coeficientes a,b y c de ax2+bx+c=0, separados por espacios 2 3 4 Ecuacion 2.000000x2+3.000000x+4.000000=0 Raices complejas: -3.000000 +/- i 4.795832 Press any key to continue
O Introduzca los coeficientes a,b y c de ax2+bx+c=0, separados por espacios 0 2 4 Ecuacion 0.000000x2+2.000000x+4.000000=0 Ecuacion lineal, raiz: -2.000000 Press any key to continue
Etc.
Ejercicios resueltos de C. Diego Rodríguez-Losada
1
ELAI-EUITI-UPM
Fundamentos de Informática
Solucion /* fichero:raices.c descripcion: raices de una ecuacion de segundo grado */ #include #include //para la funcion raiz cuadrada sqrt void main(void) { float a,b,c;//coeficientes float r1,r2;//raices, soluciones printf("Introduzca los coeficientes a,b y c\n"); printf("de ax2+bx+c=0, separados por espacios\n"); scanf("%f %f %f",&a,&b,&c); printf("Ecuacion %fx2+%fx+%f=0\n",a,b,c); if(a!=0.0f) //ecuacion cuadrada { float disc;//discriminante disc=b*b-4*a*c; if(disc>0)//dos soluciones reales { r1=(-b+(float)sqrt(disc))/2*a; r2=(-b-(float)sqrt(disc))/2*a; printf("Soluciones %f %f\n",r1,r2); } else if(disc==0)//raiz doble { r1=r2=-b/2*a; printf("Raiz doble: %f\n",r1); } else//soluciones complejas { r1=-b/2*a; r2=(float)sqrt(-disc)/2*a; printf("Raices complejas: %f +/- i %f\n",r1,r2); } } else //ecuacion no cuadrada { if(b!=0.0f) { r1=-c/b; printf("Ecuacion lineal, raiz: %f\n",r1); } else printf("Error parametros\n"); } }
Ejercicios resueltos de C. Diego Rodríguez-Losada
2
ELAI-EUITI-UPM
Fundamentos de Informática
2. Calculadora Temas Control de flujo de programa
Enunciado Se desea programar una aplicación (modo consola) que funcione como calculadora capaz de realizar las cuatro operaciones básicas sobre números reales: suma, resta, multiplicación y división. El usuario introduce por orden el primer operando, el signo correspondiente a la operación y el segundo operando en una sola línea, sin espacios. El programa se ejecuta indefinidamente hasta que se pulsa Ctrl.+C
Salida 12+13.5 25.500000 34.5/2 17.250000 27-0.56 26.440000 -3.2*-12 38.400001
Notas - Los operandos tendran precision normal - Se utilizara la sentencia switch
Ejercicios resueltos de C. Diego Rodríguez-Losada
3
ELAI-EUITI-UPM
Fundamentos de Informática
Solución /* Fichero: */
calculadora.c
#include void main(void) { float a,b; //los dos operandos unsigned char operador; //la operacion float resultado; while(1) { scanf("%f%c%f",&a,&operador,&b); switch(operador) { case '+': resultado=a+b; break; case '-': resultado=a-b; break; case '*': resultado=a*b; break; case '/': resultado=a/b; break; default: printf("Operador no conocido\n"); break; } printf("%f\n",resultado); } }
Ejercicios resueltos de C. Diego Rodríguez-Losada
4
ELAI-EUITI-UPM
Fundamentos de Informática
3. Adivinar un número Temas Control de flujo de programa
Enunciado Se desea programar un juego en el que el ordenador piensa un número entero del 0 al 99, y el usuario intenta adivinarlo. El ordenador informa al jugador si su estimación es menor, mayor o si ha acertado. Cuando acierta, le informa del número de intentos que le ha costado adivinar el número.
Notas -
El programa debe resultar robusto frente a entradas de datos incorrectas. Si el usuario no introduce un numero, el programa dara un aviso. Utilizar srand(…) para inicializar la semilla aleatoria y rand() para generar los numeros aleatorios. La semilla de generacion de numeros aleatorios se inicializa solo una vez, al principio del programa. Se le pasa como parametro el tiempo actual, para que cada vez que se juega sea una semilla diferente.
#include //para srand() y rand() #include //para time() main() { ……… srand(time(NULL));//Inicializar semilla aleatoria numero=rand()%100; //generar numero aleatorio ……… }
Salida Ya he pensado Adivine. Diga Se ha pasado Adivine. Diga Se ha pasado Adivine. Diga Se ha quedado Adivine. Diga Se ha quedado Adivine. Diga Se ha quedado Adivine. Diga Se ha quedado Adivine. Diga Lo adivino en Press any key
un numero del 0 al 99 un numero: 50 un numero: 25 un numero: 12 corto un numero: 20 corto un numero: 22 corto un numero: 23 corto un numero: 24 7 intentos! to continue
Ejercicios resueltos de C. Diego Rodríguez-Losada
5
ELAI-EUITI-UPM
Fundamentos de Informática
Solucion /* Fichero: */
adivinar.c
#include #include //para srand() y rand() #include //para time() void main(void) { int numero,n; int contador_intentos=0; srand(time(NULL));//Inicializar semilla aleatoria numero=rand()%100; //generar numero aleatorio printf("Ya he pensado un numero del 0 al 99\n"); do { printf("Adivine.Diga un numero: "); scanf("%d",&n); contador_intentos++; if(nnumero) { printf("Se ha pasado\n"); } } while(numero!=n); printf("Lo adivino en %d intentos!\n",contador_intentos); }
Ejercicios resueltos de C. Diego Rodríguez-Losada
6
ELAI-EUITI-UPM
Fundamentos de Informática
4. Pensar un número Temas Sentencias de control
Enunciado Se desea programar un juego en el que el usuario piensa un numero entero del 0 al 99, y el ordenador intenta adivinarlo. El jugador informa al ordenador si su estimación es menor, mayor o si ha acertado, mediante los signos e = respectivamente. Cuando el ordenador acierta, le informa del numero de intentos que le ha costado adivinar el numero. El ordenador debe ser capaz de detectar cuando el jugador hace trampas, terminando el programa.
Notas -
El programa debe adivinar el numero con el menor numero de intentos posible, es decir, empleando la estrategia de dividir por la mitad el intervalo posible
Salida Piense un numero del 0 al 99 Yo digo el... 49 Escriba < si es menor, = si he < Me he pasado Yo digo el... 24 Escriba < si es menor, = si he > Me he quedado corto Yo digo el... 36 Escriba < si es menor, = si he < Me he pasado Yo digo el... 30 Escriba < si es menor, = si he = Lo adivine en 4 intentos! Press any key to continue
acertado y > si es mayor
acertado y > si es mayor
acertado y > si es mayor
acertado y > si es mayor
Ejercicios resueltos de C. Diego Rodríguez-Losada
7
ELAI-EUITI-UPM
Fundamentos de Informática
Solucion //fichero: pensar_numero.c #include void main(void) { int numero; //el numero que dice la maquina int lim_sup=99; int lim_inf=0; int intentos=0; char signo; printf("Piense un numero del 0 al 99\n"); while(1) { numero=(lim_sup+lim_inf)/2; //division entera printf("Yo digo el... %d\n",numero); intentos++; //entrada del jugador signo=0; printf("< si menor, = si correcto y > si mayor\n"); fflush(stdin); scanf("%c",&signo); //evaluacion de la entrada del jugador if(signo=='=') { printf("Lo adivine en %d intentos!\n",intentos); break; } if(lim_sup