Download Ejercicios 1.

Document related concepts
Transcript
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");
}
}