Ejercicios En C
bayardo0629 de Agosto de 2014
4.977 Palabras (20 Páginas)321 Visitas
/* fichero sumaFor.c */ #include <stdio.h> void main(void) { int i, suma=0; for(i=0; i<=5; i++) suma+=i; printf("La suma de los cinco primeros numeros es: %d\n", suma); } Comentario: En este fichero se ha utilizado la equivalencia directa entre los bucles for y while. Por lo demás, este programa no tiene nada de particular.
EJERCICIO 1.8: SOLUCIÓN DE LA ECUACIÓN DE SEGUNDO GRADO.
Dada la ecuación de segundo grado 2 0 ax bx c + +=: se calcula el discriminante 2 4 discr b ac =− . Se pueden presentar tres casos distintos: – Si discr >0.0 las dos raíces son reales y distintas, y valen:
12 22 b discr b discr xx aa − + − − == – Si discr = 0.0 las dos raíces son reales e iguales, y valen: 12 2 bxx a − == – Finalmente, si discr<0.0 las dos raíces son complejas conjugadas. Las partes real e imaginaria valen:
22 b discr xr xi aa −− == Teclea y compila el siguiente programa para resolver la ecuación de segundo grado. Llámalo ecuacion2.c. Compila y ejecuta este programa cambiando los valores de a, b y c, de modo que se prueben las tres opciones del programa. Solución comentada al Ejercicio 1.8. /* fichero ecuacion2.c */ /* resolución de la ecuación de segundo grado */ #include <stdio.h> #include <math.h> /* incluye decl. de la función sqrt() */ void main(void) { double a, b, c; double discr, x1, x2, xd, xr,xi; printf("Escribe los valores de los coeficientes A, B y C\n");
Ejercicios Resueltos de Programación en ANSI C pág. 9
scanf("%lf%lf%lf", &a, &b, &c); discr=b*b-4.0*a*c; if (discr>0.0) { x1=(-b+sqrt(discr))/(2.0*a); x2=(-b-sqrt(discr))/(2.0*a); printf("\nLas dos raices reales son: %12.6e y %12.6e \n", x1, x2); } else if (discr<0.0) { xr=-b/(2.0*a); xi=sqrt(-discr)/(2.0*a); printf("\nRaices complejas:\n"); printf("(%12.6e, %12.6ei) y (%12.6e, %12.6ei)\n", xr, xi, xr, -xi); } else { x1 = -b/(2.0*a); printf("\nLas dos raices son iguales y valen: %12.6e \n", x1); } } Comentario: Incluyendo la librería math.h se pueden usar las funciones matemáticas tales como sqrt() para la raíz cuadrada; cos() para calcular el coseno de un ángulo, etc. La instrucción if...else permite hacer una bifurcación, dependiendo de la cual se realizarán diferentes actividades. Merece la pena observar la forma utilizada para partir en varias líneas las distintas llamadas a la función printf(). La idea fundamental es que, en el fichero *.c la cadena de control (lo que va entre comillas como primer argumento de la función printf()) no se puede partir entre dos o más líneas
EJERCICIO 1.9: PARA EXPERTOS. Realiza un programa en C que escriba una tabla de dos columnas para la conversión entre las temperaturas en grados Fahrenheit −comprendidas entre 0 ºF y 300 ºF, según incrementos de 20 ºF− y su equivalente en grados centígrados. Se realizarán dos versiones de este programa: una llamada temp1.c que empleará un bucle while. La otra versión se llamará temp2.c y utilizará un bucle for. La conversión entre grados Centígrados y grados Fahrenheit obedece a la fórmula: 5 * (ºF - 32) ºC = 9 siendo ºC la temperatura en grados Centígrados y ºF en grados Fahrenheit. Solución comentada al Ejercicio 1.9. /* fichero temp1.c */ #include <stdio.h> void main(void) { double gradosFahr, gradosCent; printf("grados Fahrenheit grados Centigrados\n"); printf("----------------- ------------------\n\n"); gradosFahr = 0.0; while (gradosFahr<=300.0) { gradosCent=(5*(gradosFahr-32.0))/9.0; printf("%17.2lf%17.2lf\n", gradosFahr, gradosCent); gradosFahr+=20.0; } }
/* fichero temp2.c */ #include <stdio.h>
Ejercicios Resueltos de Programación en ANSI C pág. 10
void main(void) { double gradosFahr, gradosCent; printf("grados Fahrenheit grados Centigrados\n"); printf("----------------- ----------------\n\n"); for (gradosFahr=0.0; gradosFahr<=300.0; gradosFahr+=20.0) { gradosCent = (5*(gradosFahr-32.0))/9.0; printf("%17.2lf%17.2lf\n", gradosFahr, gradosCent); } } Comentario: Como podrás observar la diferencia entre los dos programas está fundamentalmente en la forma de utilizar los bucles respectivos, a diferencia del while, en los parámetros del bucle for está incluidas todas las condiciones necesarias para su ejecución, es decir se encuentran: la inicialización, la condición a cumplir y además el incremento del contador, lo cual simplifica mucho el programa.
Ejercicios Resueltos de Programación en ANSI C pág. 11
PRÁCTICA 2.
EJERCICIO 2.1: VARIAS FORMAS DE UTILIZAR EL BUCLE FOR. En el siguiente programa se muestran distintas formas de escribir un bucle for para sumar los enteros del 1 al 5. Escribe el siguiente programa y guárdalo con el nombre sumaFor2.c. Compílalo, ejecútalo y observa los resultados. ¿Ves algo raro? Solución comentada al Ejercicio 2.1. /* fichero sumaFor2.c */ /* Programa para sumar los enteros del 1 al 5 */ #include <stdio.h> void main(void) { int i=1, suma=0; for ( ; i<=5 ; ) { /* primera forma */ suma += i; ++i; } printf("suma 1 = %d\n", suma); suma=0; /* segunda forma */ for (i=1; i<=5; ++i) suma+=i; printf("suma 2 = %d\n", suma); for(i=1, suma=0; i<=5 ; ++i, suma+=i) /* tercera forma */ ; printf("suma 3 = %d\n", suma); for(i=1, suma=0; i<=5 ; suma+=i, ++i) /* cuarta forma */ ; printf("suma 4 = %d\n", suma); } Comentario: Para definir un bucle hace falta un contador o variable de control (que casi siempre es un entero y suele nombrarse con las letras típicas de subíndices: i, j, k, ...). Esta variable de control es la que se chequea cada vez que comienza el bucle y la que permite continuar o no realizando las operaciones de dentro del bucle. Por otra parte, en C, el bucle for tiene tres componentes separadas por puntos y comas: la primera es una inicialización de la variable de control (u otras que pudieran afectar al bucle), la segunda es la sentencia de chequeo de la variable de control que siempre es necesaria (véase la primera forma); por último, la tercera son sentencias de actualización que se ejecutan al final del bucle (que también se podrían poner entre las llaves del bucle, detrás de las demás sentencias). Conociendo estas características, la forma más habitual de expresar un bucle es la segunda, ya que el bucle for contiene las instrucciones pertinentes a la variable de control. La forma primera es más asimilable a un bucle while, ya que la instrucción for contiene sólo el chequeo de la variable. La diferencia entre las formas tercera y cuarta es el orden en que se ejecutan las instrucciones: la forma tercera ejecuta antes el incremento de la variable que el chequeo y la suma, por tanto cuando i vale 6 ya se ha sumado a la variable suma y, por eso el resultado sale 20 en lugar de 15.
EJERCICIO 2.2: MÁXIMO ELEMENTO DE UN CONJUNTO DE NÚMEROS. Este programa calcula el máximo entre un conjunto de números enteros. Para ello se sigue el siguiente algoritmo: se crea una variable llamada max, a la que se da inicialmente el valor de conjunto[0]. Luego se recorren paso a paso todos los elementos del vector, comparando el valor almacenado en la posición considerada del vector con el valor de la variable max. Si el valor de la posición considerada del vector es mayor que max, entonces se copia (se sustituye el valor) en la
Ejercicios Resueltos de Programación en ANSI C pág. 12
variable max este valor. De esta forma, una vez recorrido todo el vector, la variable max contendrá el máximo valor. Guarda este programa con el nombre maximo.c. Solución comentada al Ejercicio 2.2. /* fichero maximo.c */ /* Programa para calcular el máximo de un conjunto de números */ #include <stdio.h> #define SIZE 5 void main(void) { int i, max, imax; int conjunto[SIZE]; printf("Introduce %d valores:\n", SIZE); for (i=0; i<SIZE; i++) { printf("%d: ", i+1); scanf("%d", &conjunto[i] ); printf("\n"); } max=conjunto[0]; imax=0; for (i=0; i<SIZE; i++) { if (conjunto[i]>max) { max=conjunto[i]; imax=i; } } printf("\nEl maximo valor del conjunto es: %d.\n", max); printf("\ny esta en la posicion %d.\n", imax+1); } Comentario: Este programa es muy sencillo, si se entiende el algoritmo. La variable max acabará siendo igual al elemento mayor del conjunto, e imax indicará la posición del máximo.
EJERCICIO 2.3: MÍNIMO VALOR ALGEBRAICO DE UN CONJUNTO DE NÚMEROS ENTEROS. Modifica el programa anterior maximo.c, de forma que calcule el mínimo valor del conjunto. Guárdalo con el nombre minimo.c. Solución comentada del Ejercicio 2.3. /*fichero minimo.c */ #include <stdio.h> #define SIZE 5 void main(void) { int i, min, imin; int conjunto[SIZE]; printf("Introduce %d valores:\n", SIZE); for (i=0; i<SIZE; i++) { printf("%d: ", i+1); scanf("%d", &conjunto[i] ); printf("\n"); } min=conjunto[0]; imin=0;
Ejercicios Resueltos de Programación en ANSI C pág. 13
for (i=0; i<SIZE; i++) { if (conjunto[i] < min) { min=conjunto[i];
...