Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Calculo de PI Enunciado Realizar un programa que calcule una aproximación al número PI, mediante el sumatorio de los 100.000 primeros términos de la serie (y finalmente multiplicada por 4): Nota: Utilicese un bucle for y números de precisión doble (double) Ejemplo de ejecución PI=3.141573 Solución #include<stdio.h> void main(void) { double pi=0.0; int i; int signo=1; for(i=1;i<200000;i+=2) { pi+=signo*1.0/i; signo*=-1; } pi=pi*4; printf("PI=%f\n",pi); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Divisible Enunciado Dados dos números enteros tecleados por el usuario, comprobar si el primero es divisible por el segundo, repitiendo la operación, hasta que ambos números sean negativos. Si los dos números tecleados son negativos, se termina el programa. Ejemplo de ejecución Escriba dos numeros separados por un espacio: 15 4 El 15 no es divisible por 4 Escriba dos numeros separados por un espacio: 12 -3 El 12 es divisible por -3 Escriba dos numeros separados por un espacio: -25 5 El -25 es divisible por 5 Escriba dos numeros separados por un espacio: -1 -3 El -1 no es divisible por -3 Fin del programa Solución #include<stdio.h> void main() { int num,val; do { printf ("Escriba dos numeros separados por un espacio:\n"); scanf ("%d %d",&num,&val); if (num%val==0) printf ("El %d es divisible por %d\n",num,val); else printf ("El %d no es divisible por %d\n",num,val); } while(num>0 || val>0); printf("Fin del programa\n"); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Múltiplos de 7 entre A y B Enunciado Realizar un programa que imprima los múltiplos de 7 entre A y B, ambos inclusive, donde A y B son valores enteros introducidos por el usuario desde el teclado. El programa debe garantizar que A y B son mayores que 0 y que B>A. Si el usuario introduce valores que no cumplen alguna de estas condiciones, el programa se los volverá a pedir (el programa pedirá reiteradamente los números si alguna condición no se cumple). Ejemplo de ejecución Introduzca A y B: -10 25 Introduzca A y B: 25 10 Introduzca A y B: 10 25 Los multiplos de 7 entre 10 y 25 son: 14 21 Solución #include <stdio.h> void main() { int A, B, i; do { printf("Introduzca A y B:\n"); scanf("%d %d", &A, &B); } while ((A<=0)||(B<=0)||(B<=A)); printf("Los multiplos de 7 entre %d y %d son:\n", A, B); for(i=A;i<=B;i++) if(i%7==0) printf("%d\n",i); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Notas 0-10 Enunciado Realizar un programa que acepte por el teclado un número entero. Dado ese número, el programa presenta por pantalla un nombre de nota asociado a ese número, según la tabla. El programa vuelve al principio, para que se pueda introducir otro número, hasta que se introduzca un número negativo, en cuyo caso el programa termina. Si el número no es válido, (negativo o mayor que 10), se indica con un mensaje "Número incorrecto". Número 0-1 2-4 5-6 7-8 9-10 Nombre de la nota Muy deficiente Insuficiente Suficiente Notable Sobresaliente Debe emplearse una instrucción switch-case Ejemplo de ejecución Introduzca nota: 6 Suficiente Introduzca nota: 51 Número incorrecto. Introduzca nota: -1 Número incorrecto. Solución o soluciones #include <stdio.h> void main() { int n; do { printf("Introduzca nota:"); scanf("%d",&n); switch(n) { case 0: case 1: printf("Muy deficiente"); break; case 2: case 3: case 4: printf("Insuficiente"); break; case 5: case 6: printf("Suficiente"); break; case 7: case 8: printf("Notable"); break; case 9: case 10: printf("Sobresaliente"); break; default: printf("Número incorrecto"); } } while(n>0); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Potencia de un número entero Enunciado Realizar un programa que permita calcular la potencia de un número entero, donde la base y el exponente son introducidos por el usuario. Ejemplo de ejecución BASE = 2 EXPONENTE = 3 2^3 = 8 Solución o soluciones #include <stdio.h> void main() { int i, base, expo, resu; printf("BASE = "); scanf("%d",&base); printf("EXPONENTE = "); scanf("%d",&expo); resu = base; for(i=1; i<expo; i++) resu = resu*base; printf("%d^%d = %d\n", base, expo,resu); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Multiplicación de dos números a través de la suma Enunciado Realizar un programa en el que se pida al usuario dos números enteros. Se pide realizar la multiplicación de los mismos a través de la suma. Por ejemplo: 3x4 = 3+3+3+3, o 5x10= 5+5+5+… (10 veces)…+5 La única estructura de control que puede ser utilizada es el for Ejemplo de ejecución Introduce dos numeros a multiplicar: 3 4 El resultado de multiplicar 3 x 4 es 12 Solución o soluciones #include <stdio.h> void main() { int num1, num2, mult=0, i; printf("Introduce dos numeros a multiplicar:"); scanf("%d %d",&num1,&num2); for(i=0; i<num2; i++) mult = mult +num1; printf("\n%d x %d = %d\n", num1,num2, mult); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Mitades sucesivas Enunciado Realizar un programa que acepte por el teclado un número con decimales, y nos presenta por pantalla ese número, la mitad de ese número, la mitad de la mitad, y así sucesivamente. Cuando el resultado sea menor que 1, el programa termina. Ejemplo de ejecución Introduzca n: 6.15 6.15 3.075 1.5735 Solución o soluciones #include <stdio.h> void main() { float n; printf("Introduzca n:"); scanf("%f",&n); while(n>=1) { printf("%f",n); n=n/2; } } #include <stdio.h> void main() { float n,d; d=1.0; printf("Introduzca n:"); scanf("%f",&n); while(d<=n) { printf("%f", n/d); d=2*d; } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Objeto acelerado Enunciado Se pide realizar un programa que calcule la distancia que recorre un objeto y la velocidad alcanzada en cada intervalo de 0.5 segundo durante los 3 primeros segundos de su movimiento. El objeto se mueve desde la posición cero, con velocidad inicial nula y con una aceleración constante tecleada por el usuario. Se debe utilizar un bucle para dicho cálculo. Ejemplo de ejecución Introduzca aceleracion: 3 T: 0.000000, Pos: 0.000000, Vel: 0.000000 T: 0.500000, Pos: 0.750000, Vel: 1.500000 T: 1.000000, Pos: 3.000000, Vel: 3.000000 T: 1.500000, Pos: 6.750000, Vel: 4.500000 T: 2.000000, Pos: 12.000000, Vel: 6.000000 T: 2.500000, Pos: 18.750000, Vel: 7.500000 T: 3.000000, Pos: 27.000000, Vel: 9.000000 Solución #include<stdio.h> void main(void) { float posicion=0.0f,velocidad=0.0f,aceleracion; float t; printf("Introduzca aceleracion: "); scanf("%f",&aceleracion); for(t=0.0f; t<= 3.0f; t+=0.5f) { posicion=aceleracion*t*t; velocidad=aceleracion*t; printf("T:%f, Pos:%f, Vel: %f\n",t,posicion,velocidad); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Suma de una serie Enunciado Realizar un programa que calcule la suma de la siguiente serie: n 1 1 1 1 1 = 2 + 2 + 2 + ... + 2 2 1 2 3 n i =1 i suma = ∑ El valor de n será introducido por el usuario desde el teclado. Si el usuario introduce un valor de n menor que 1, el programa se lo volverá a pedir de forma reiterada hasta que el usuario introduzca un número mayor o igual que 1. Ejemplo de ejecución Introduzca n: -1 Introduzca n: 0 Introduzca n: 100 La suma vale 1.634984 Solución o soluciones //Con bucles do-while y for //Con bucles while #include <stdio.h> #include <stdio.h> void main() { int n, i; float suma=0; void main() { int n, i; float suma=0; do { printf("Introduzca n: "); scanf("%d", &n); } while (n<1); printf("Introduzca n: "); scanf("%d", &n); while (n<1) { printf("Introduzca n: "); scanf("%d", &n); } for(i=1;i<=n;i++) suma+=1.0f/(i*i); i=1; while (i<=n) { suma+=1.0f/(i*i); i++; } printf("La suma vale %f\n", suma); } printf("La suma vale %f\n", suma); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Contando… Enunciado Realizar un programa que cuente desde 1 hasta 10. Imprima los valores en líneas sucesivas. Si el número contado es 3 imprima el siguiente mensaje: “He llegado al numero 3”. Si el número contado es 10 imprima: “He terminado de contar” Ejemplo de ejecución 1 2 He llegado al numero 3 4 5 6 7 8 9 He terminado de contar Solución o soluciones #include <stdio.h> void main() { int i; for(i=1;i<11;i++) { if(i == 3) printf("He llegado al numero 3\n"); else if (i == 10) printf("He terminado de contar\n"); else printf("%d\n",i); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Cuadrado de asteriscos Enunciado Realizar un programa que “dibuje” en la pantalla un cuadrado de asteriscos de lado “n”, siendo “n” teclado por el usuario, y pudiendo ser cualquier numero entero positivo. La única estructura de control que puede ser utilizada es el for Ejemplo de ejecución Introduzca n: 5 ***** ***** ***** ***** ***** Solución o soluciones #include <stdio.h> void main() { int n,i,j; printf("Introduzca n:"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("*"); printf("\n"); } } #include <stdio.h> void main() { int n,i; printf("Introduzca n:"); scanf("%d",&n); for(i=1;i<=n*n;i++) { printf("*"); if(i%n==0) printf("\n"); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Máximo y mínimo Enunciado Se pide realizar un programa que calcule el máximo y el mínimo de unos datos tecleados por el usuario y que deben estar en el rango [0.0 100.0]. Si se introducen datos fuera de ese rango, la introducción de datos termina y se muestra por pantalla los valores del máximo y el mínimo. Utilizar un bucle while Ejemplo de ejecución Introduzca dato: 23.4 Introduzca dato: 65.3 Introduzca dato: 22.0 Introduzca dato: -2 Maximo: 65.300003, Minimo: 22.000000 Solución #include<stdio.h> main() { float maximo=0.0f, minimo=100.0f, dato; while(1) { printf("Introduzca dato: "); scanf("%f",&dato); if(dato<0.0f || dato>100.0f) break; if(maximo<dato) maximo=dato; if(minimo>dato) minimo=dato; } printf("Maximo: %f, Minimo: %f\n",maximo, minimo); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Volúmenes de cilindros. Enunciado Escribir una tabla con los volúmenes de un cilindro cuyo radio se solicita al usuario y cuya altura varía desde 1.0 hasta 3.4 metros, cada 0.3 metros. Ejemplo de ejecución Introduzca el radio: 1.5 Tabla de volumenes: R=1.5 H=1.0 V=7.1 R=1.5 H=1.3 V=9.2 R=1.5 H=1.6 V=11.3 R=1.5 H=1.9 V=13.4 R=1.5 H=2.2 V=15.6 R=1.5 H=2.5 V=17.7 R=1.5 H=2.8 V=19.8 R=1.5 H=3.1 V=21.9 R=1.5 H=3.4 V=24.0 Solución #include<stdio.h> #define PI 3.141592 void main (void) { float radio, altura; printf("Introduzca el radio: "); scanf("%f",&radio); printf("Tabla de volumenes:\n"); for(altura=1.0f;altura<=3.4f;altura+=0.3f) { float volumen=PI*radio*radio*altura; printf ("R=%.1f H=%.1f V=%.1f\n", radio, altura, volumen); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Numero primo Enunciado Realizar un programa que solicite un número entero al usuario y le informe si dicho numero es primo o no. Ejemplos de ejecución Teclee numero: 25 El numero 25 no es primo Teclee numero: 17 El numero 17 es primo Solución #include<stdio.h> void main(void) { int numero,i; printf("Teclee numero: "); scanf("%d",&numero); for (i=2;i<numero;i++) { if (numero%i==0) break; } if (i==numero) printf("El numero %d es primo\n",numero); else printf("El numero %d no es primo\n",numero); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Contar de A a B de m en m Enunciado Hacer un programa que imprima los números enteros de A a B, contando de m en m. Los valores de A y B serán asignados dentro del programa en codigo, mediante la inicialización de las variables en su declaración. Por ejemplo, A=8 y B=19. El valor de m será introducido por el usuario desde el teclado. Si el usuario introduce un valor de m menor que 1, el programa se lo volverá a pedir de forma reiterada hasta que el usuario introduzca un número mayor o igual que 1. Ejemplo de ejecución (para A=8 y B=19) Introduzca m: -1 Introduzca m: 0 Introduzca m: 3 8 11 14 17 Solución o soluciones #include <stdio.h> void main() { int A=8, B=19, m, i; do { printf("Introduzca m: "); scanf("%d", &m); } while (m<1); for(i=A;i<=B;i+=m) printf("%d\n", i); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Tablero de ajedrez Enunciado Hacer un programa que imprima en la pantalla un tablero de ajedrez de 8x8 mediante el uso de bucles for, uno para las filas y otro para las columnas. Para representar el tablero se utilizará para la casilla negra una N y para la casilla blanca una B. La primera casilla puede ser blanca (B) o negra (N). Nota: la suma de la fila y columna de una casilla de un color es un número par y la del otro un número impar. Ejemplo de ejecución (con la primera casilla blanca) B N B N B N B N N B N B N B N B B N B N B N B N N B N B N B N B B N B N B N B N N B N B N B N B B N B N B N B N N B N B N B N B Solución o soluciones #include <stdio.h> void main() { int i,j; for(i=1;i<=8;i++) { for(j=1;j<=8;j++) { if((i+j)%2==0) printf("B "); else printf("N "); } printf("\n"); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Media de un conjunto de números Enunciado Hacer un programa que calcule la media de un número indeterminado de números enteros introducidos por el usuario desde el teclado. La introducción de números finalizará cuando el usuario introduzca un número negativo. Ejemplo de ejecución Introduzca numeros enteros y calculare la media (para terminar introduzca un numero negativo) 1 4 -3 La media vale 2.500000 Solución o soluciones #include <stdio.h> void main() { int suma=0, numero, contador=0; float media; printf("Introduzca numeros enteros y calculare la media\n"); printf("(para terminar introduzca un numero negativo)\n"); while(1) { scanf("%d", &numero); if(numero<0) break; suma+=numero; contador++; } media=(float)suma/contador; printf("La media vale %f\n", media); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Tabla de multiplicar de un número del 1 al 9 Enunciado Hacer un programa que imprima en la pantalla la tabla de multiplicar del número n que será introducido por el usuario desde el teclado y cuyo valor debe estar comprendido entre 1 y 9, ambos inclusive. Si el usuario introduce un valor fuera de ese intervalo, el programa se lo volverá a pedir de forma reiterada hasta que el usuario introduzca un número correcto. Ejemplo de ejecución Introduzca n: 0 Introduzca n: -1 Introduzca n: 7 La tabla del 7 es 7x1=7 7x2=14 7x3=21 7x4=28 7x5 =35 7x6=42 7x7=49 7x8=56 7x9=63 7x10=70 Solución o soluciones #include <stdio.h> void main() { int n, i; do { printf("Introduzca n: "); scanf("%d", &n); } while (n<1 || n>9); printf("\nLa tabla del %d es\n", n); for(i=1;i<=10;i++) printf("%dx%d=%d\n", n, i, n*i); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Aprobado o Suspenso? Enunciado Realizar un programa en el que se pida al introducir la nota de una asignatura y se indique si está aprobado (a partir de 5 puntos) o suspenso (menos de 5 puntos). Repita la operación tantas veces como el usuario desee, realizándole la pregunta si quiere continuar, cuya respuesta será un carácter ‘s’ o ‘n’. El programa debe funcionar independientemente de si dichos caracteres están en mayúsculas o minúsculas La única estructura de control que puede ser utilizada es el do-while Ejemplo de ejecución Introduzca la nota: 3.0 SUSPENSO. Desea Continuar (S/N): S Introduzca la nota: 7.5 APROBADO. Desea Continuar (S/N): N Solución o soluciones #include <stdio.h> void main() { float nota; char var; do { printf("Introduce la nota: "); scanf("%f",&nota); if(nota >= 5.0) printf("APROBADO. Desea Continuar(S/N): "); else printf("SUSPENSO. Desea Continuar(S/N): "); fflush(stdin); scanf("%c",&var); }while(var != 'N' && var != 'n'); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Año Bisiesto Enunciado Un año es bisiesto si es divisible por 4 y no por 100 o bien es divisible por 400. Hacer un programa que pida al usuario un año y muestre si es o no bisiesto. El programa se repite indefinidamente, hasta que el usuario teclea un año negativo Ejemplo de ejecución Introduce un anio: 1996 BISIESTO Introduce un anio: 1997 NO BISIESTO Introduce un anio: 1998 NO BISIESTO Introduce un anio: 2000 BISIESTO Introduce un anio: 2100 NO BISIESTO Introduce un anio: 2200 NO BISIESTO Introduce un anio: 2400 BISIESTO Introduce un anio: 1992 BISIESTO Introduce un anio: -3 Solución o soluciones #include <stdio.h> void main() { int anio, bis; do { printf("Introduce un anio: "); scanf("%d",&anio); bis=((anio%4 == 0) && (anio%100 != 0)) ||(anio%400 == 0); if(bis) printf("BISIESTO\n"); else printf("NO BISIESTO\n"); }while(anio>=0); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Calculo de una sucesión Enunciado Realizar un programa para calcular los “n” términos de la sucesión: a n = (− 1) El valor n es introducido por el usuario. Ejemplo de ejecución Introduce el valor n: 10 a1 = 0.000000 a2 = 0.600000 a3 = -1.142857 a4 = 1.666667 a5 = -2.181818 a6 = 2.692308 a7 = -3.200000 a8 = 3.705882 a9 = -4.210526 a10 = 4.714286 Solución o soluciones #include <stdio.h> void main() { int n, i; float signo = 1, an; printf("Introduce el valor n: "); scanf("%d",&n); for(i=1;i<=n;i++) { signo=(-1)*signo; an=signo*(i*i-1)/(2*i+1); printf("a%d = %f\n",i,an); } } n n2 −1 . 2n + 1 Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Positivo o negativo Enunciado Realizar un programa que pida un número de tipo entero por teclado e indique si el número es positivo o negativo. El programa termina si ese número 0. Realizar el bucle con una estructura do while Ejemplo de ejecución Introduzca n: -3 El número es negativo. Introduzca n: 7 El número es positivo. Introduzca n: 0 Solución o soluciones #include <stdio.h> void main() { int n; do { printf("Introduzca n:"); scanf("%d",&n); if(n>0) printf("El número es positivo.\n"); if(n<0) printf("El número es negativo.\n"); } while (n!=0); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Número de día de la semana Enunciado Realizar un programa que acepte por el teclado un número entero. Dado ese número, el programa presenta por pantalla el nombre de día asociado a ese número, (1 es Lunes, 2 es Martes, etc.). El programa vuelve al principio, para que se pueda introducir otro número, hasta que se introduzca un 0, en cuyo caso el programa termina. Si el número no corresponde a un mes (negativo, 0 o mayor que 7), se indica con un mensaje "Número incorrecto" Debe emplearse una instrucción switch Ejemplo de ejecución Introduzca número de día: 6 Sábado Introduzca número de día: 2 Martes Introduzca número de día: 75 Número incorrecto. Introduzca número de día: 0 Número incorrecto. Solución o soluciones #include <stdio.h> void main() { int n; do { printf("Introduzca número de día:"); scanf("%d",&n); switch(n) { case 1: printf("Lunes"); break; case 2: printf("Martes"); break; case 3: printf("Miércoles"); break; case 4: printf("Jueves"); break; case 5: printf("Viernes"); break; case 6: printf("Sábado"); break; case 7: printf("Domingo"); break; default: printf("Número incorrecto"); } } while(n!=0) ; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Notas 0-10 (con if ) Enunciado Realizar un programa que acepte por el teclado un número decimal. Dado ese número, el programa presenta por pantalla un nombre de nota asociado a ese número, según la tabla. Si el número no es válido, (negativo o mayor que 10), se indica con un mensaje "Número incorrecto". El programa se repite indefinidamente hasta que se pulsa ctrl.+C. Número 0-1 1-5 5-7 7-9 9-10 Nombre de la nota Muy deficiente Insuficiente Suficiente Notable Sobresaliente Debe emplearse únicamente la instrucción alternativa if - else if, dentro de un bucle while Ejemplos de ejecución Introduzca nota: 8.1 Notable Introduzca nota: 51.2 Número incorrecto. Introduzca nota: 4.2 Insuficiente Solución o soluciones #include <stdio.h> void main() { float n; while(1) { printf("Introduzca nota:"); scanf("%f",&n); if(n<0 || n>10) printf("Numero incorrecto\n"); else if (n<1) printf("Muy deficiente\n"); else if(n<5) printf("Insuficiente\n"); else if(n<7) printf("Suficiente\n"); else if(n<9) printf("Notable\n"); else printf("Sobresaliente\n"); } }