Ejercicios de programación en lenguaje C
Hace un tiempo conseguí un listado de hojas de ejercicios de programación en lenguaje C correspondientes a la asignatura de informática de los alumnos matriculados en el Grado de Matemáticas de la Universidad de Cádiz.
He ido resolviendo cada uno de esos ejercicios y aquí publico las soluciones de 20 de ellos para todo aquél que esté interesado. Por supuesto un mismo ejercicio puede tener distintos enfoques a la hora de ser solucionado a través de un programa, por lo que he intentado buscar soluciones que sean fáciles de comprender, sobre otras que pudieran ser más eficientes pero menos entendibles.
En este listado de 20 ejercicios se mezclan algunos muy sencillos con otros más complejos, aunque en general son ejercicios fáciles. En próximas entradas seguiré publicando otros bloques de ejercicios resueltos de más dificultad.
Si te interesa conseguir el listado de ejercicios C en formato PDF puedes escribir a info@ejerciciosmesa.com
Listado de ejercicios de lenguaje C (ejercicios 1 a 20)
Ejercicio 1.
Escribe un programa en C que escriba en la pantalla:
Hola mundo
Solución Ejercicio 1.
#include <stdio.h>
int main(void) {
printf("Hola mundo");
return 0;
}
Ejercicio 2.
Escribe un programa en C que escriba en la pantalla:
Hola mundo
esto es maravilloso
Solución Ejercicio 2.
#include <stdio.h>
int main(void) {
printf("Hola mundo,\nesto es maravilloso");
return 0;
}
Ejercicio 3.
Escribir un programa en C que escriba un rectángulo de 4 x 9 asteriscos, utilizando el carácter asterisco (*), como se indica en la figura:
********* * * * * *********
Solución Ejercicio 3.
#include <stdio.h>
int main(void) {
printf("*********\n");
printf("* *\n");
printf("* *\n");
printf("*********\n");
return 0;
}
Ejercicio 4.
Escribe un programa que le pida al usuario un número y lo muestre por pantalla.
Solución Ejercicio 4.
#include <stdio.h>
int main(void) {
int n;
printf("Introduzca un número entero: ");
scanf("%d",&n);
printf("El número introducido es el %d\n",n);
return 0;
}
Ejercicio 5.
Escribir un programa en C que acepte el valor de un ángulo, medido en grados, e imprima su valor en radianes (Nota: PI radianes = 180 grados) Defina para ello la constante PI como 3.1416
Solución Ejercicio 5.
#include <stdio.h>
#define PI 3.1416 /* constante PI */
int main(void) {
float grados,radianes;
printf("Introduzca grados: ");
scanf("%f",&grados);
radianes = (grados * PI) / 180.0;
printf("%.4f grados son equivalentes a %.4f radidanes\n",grados,radianes);
/* %.4f visualiza 4 decimales */
return 0;
}
Ejercicio 6.
El volumen de la esfera es igual a (4/3)∙π∙(r^3) Escribir un programa que solicite un radio e imprima el valor del volumen de la esfera correspondiente.
Solución Ejercicio 6.
#include <stdio.h>
#define PI 3.1416 /* constante PI */
int main(void) {
float radio,volumen;
printf("Introduzca radio de la esfera: ");
scanf("%f",&radio);
volumen = (4.0/3.0) * PI * (radio*radio*radio);
printf("El volumen de la esfera es: %.2f\n",volumen);
/* %.2f visualiza 2 decimales */
return 0;
}
Ejercicio 7.
El área de un círculo es π∙(r^2) , y la longitud de la circunferencia es 2∙π∙r Escribir un programa que solicite un radio e imprima el valor del área y la longitud de la circunferencia asociadas.
Solución Ejercicio 7.
#include <stdio.h>
#define PI 3.1416 /* constante PI */
int main(void) {
float radio,area,longcir;
printf("Introduzca radio del círculo: ");
scanf("%f",&radio);
area = PI * (radio*radio);
longcir = 2 * PI * radio;
printf("El área del círculo es: %.2f\n",area);
printf("La longitud de la circunferencia es: %.2f\n",longcir);
return 0;
}
Ejercicio 8.
El área de un triángulo viene dada por la fórmula indicada en la siguiente figura, donde s es el semiperímetro del triángulo y a, b y c son las longitudes de los lados. Realizar un programa que calcule S, dados a, b y c.
Solución Ejercicio 8.
#include <stdio.h>
#include <math.h> /* necesario para la función sqrt */
int main(void) {
float a,b,c,s,S;
printf("Introduzca longitud lado a del triángulo: ");
scanf("%f",&a);
printf("Introduzca longitud lado b del triángulo: ");
scanf("%f",&b);
printf("Introduzca longitud lado c del triángulo: ");
scanf("%f",&c);
s = (a + b + c) / 2.0;
/* el semiperímetro es la suma de los lados entre 2 */
S = sqrt(s * (s - a) * (s - b) * (s - c));
/* sqrt calcula la raiz cuadrada */
printf("El área del triángulo es %.2f\n",S);
return 0;
}
Ejercicio 9.
Escribir un programa dirigido por menús que solicite el peso de una persona, y escriba por pantalla su peso en cualquier planeta del Sistema Solar. Las equivalencias son las siguientes:
Solución Ejercicio 9.
#include <stdio.h>
/* constantes de conversión de peso en cada planeta */
#define MERCURIO 0.38
#define VENUS 0.91
#define TIERRA 1.00
#define MARTE 0.38
#define JUPITER 2.53
#define SATURNO 1.06
#define URANO 0.92
#define NEPTUNO 1.20
#define PLUTON 0.57
int main(void) {
float peso, pesoplanet;
int op; /* opción */
printf("Introduzca su peso: ");
scanf("%f",&peso);
printf("\n\nPLANETAS\n1 - Mercurio\n2 - Venus\n3 - La Tierra\n");
printf("4 - Marte\n5 - Júpiter\n6 - Saturno\n");
printf("7 - Urano\n8 - Neptuno\n9 - Plutón\n");
printf("Elija planeta (1-9): ");
scanf("%d",&op);
switch(op) { /* segun la opción */
case 1:
pesoplanet = peso * MERCURIO;
printf("Su peso en Mercurio es %.2f\n",pesoplanet);
break;
case 2:
pesoplanet = peso * VENUS;
printf("Su peso en Venus es %.2f\n",pesoplanet);
break;
case 3:
pesoplanet = peso * TIERRA;
printf("Su peso en La Tierra es %.2f\n",pesoplanet);
break;
case 4:
pesoplanet = peso * MARTE;
printf("Su peso en Marte es %.2f\n",pesoplanet);
break;
case 5:
pesoplanet = peso * JUPITER;
printf("Su peso en Júpiter es %.2f\n",pesoplanet);
break;
case 6:
pesoplanet = peso * SATURNO;
printf("Su peso en Saturno es %.2f\n",pesoplanet);
break;
case 7:
pesoplanet = peso * URANO;
printf("Su peso en Urano es %.2f\n",pesoplanet);
break;
case 8:
pesoplanet = peso * NEPTUNO;
printf("Su peso en Neptuno es %.2f\n",pesoplanet);
break;
case 9:
pesoplanet = peso * PLUTON;
printf("Su peso en Plutón es %.2f\n",pesoplanet);
break;
default: /* en cualquier otro caso */
printf("Opción no válida. Introduzca un número entre 1 y 9\n.");
}
return 0;
}
Ejercicio 10.
Realizar un programa que calcule la distancia del punto (x0, y0) a la recta Ax + By + C = 0, que viene dada por:
Solución Ejercicio 10.
#include <stdio.h>
#include <math.h>
int main(void) {
float x0,y0; /* coordenadas del punto */
float A, B, C; /* valores de la recta */
float d; /* distancia del punto a la recta */
printf("Introduzca x0,y0 separados por comas: ");
scanf("%f,%f",&x0,&y0);
printf("Introduzca A, B, C separados por comas: ");
scanf("%f,%f,%f",&A,&B,&C);
d = abs(A*x0+B*y0+C) / sqrt(pow(A,2)+pow(B,2));
/* abs calcula el valor absoluto / sqrt - raiz cuadrada / pow - potencia */
printf("La distancia de (%.2f,%.2f) a la recta es: %.2f\n",x0,y0,d);
return 0;
}
Ejercicio 11.
Numerosos lenguajes no poseen el operador para calcular potencias (es decir, elevar un número real (a) a otro (b) ) Sin embargo, y por medio de las funciones logaritmo neperiano ln(x) y la exponenciación e^x (e elevado a x) se pueden realizar. Escribir un programa que pida al usuario dos números a y b, e imprima el valor de ab.
Solución Ejercicio 11.
Planteamiento del problema
Sea x = a^b (a elevado a b). Se cumple: ln(x) = ln(a^b) y por tanto ln(x) = b ln(a)
Así pues, se calcula primero b ln(a), que es igual a ln(x), usando la función log que viene incluida en la librería math.h. Y como:
e^(ln(x)) = x
Solo habría que calcular la exponenciación de ln(x) usando la función exp de la librería math.h, con lo que obtendríamos finalmente x.
#include <stdio.h>
#include <math.h>
int main(void) {
float a,b,x; /* se quiere calcular x = a^b (a elevado a b) */
float lnx; /* logaritmo de x */
printf("Introduzca base: ");
scanf("%f",&a);
printf("Introduzca exponente: ");
scanf("%f",&b);
lnx = b * log(a);
/* log - función logaritmo neperiano */
x = exp(lnx);
/* exp - función exponencial e elevado a exponente*/
printf("%.2f elevado a %.2f es: %.2f\n",a,b,x);
return 0;
}
Ejercicio 12.
Crear un programa que calcule la caída de potencial producida por una resistencia según la ley de Ohm
V = I * R
a partir de la resistencia y la intensidad que pasa a su través.
Nota: El programa no debe aceptar resistencias negativas, dado que no tienen sentido físico, ni resistencias mayores que 1000 Ω (requerimiento adicional del problema). En ambos casos el programa debe escribir un mensaje de error en pantalla diciendo que el valor de la resistencia está fuera de límites aceptables indicando la causa por la que dicho valor para la resistencia.
Solución Ejercicio 12.
#include <stdio.h>
int main(void) {
float I,R,V;
printf("Introduzca Intensidad: ");
scanf("%f",&I);
printf("Introduzca Resistencia: ");
scanf("%f",&R);
if(R<0) {
printf("La resistencia introducida está fuera de rango (menor que 0).\n");
} else if(R>1000) {
printf("La resistencia introducida está fuera de rango (mayor de 1000).\n");
} else {
V = I * R;
printf("La caida de potencial es: %.2f\n",V);
}
return 0;
}
Ejercicio 13.
Sea un sistema de ecuaciones de la forma:
a x + b y = c
d x + e y = f
que puede resolverse usando las siguientes fórmulas:
x = (ce-bf)/(ae-bd)
y = (af-cd)/(ae-bd)
Escribir un programa que lea los coeficientes (a, b, c, d, e, f) y resuelva el sistema. El programa deberá indicar los casos en los que el sistema de ecuaciones no tenga solución.
NOTA: Si el divisor (ae-bd) es cero, el sistema no tendrá solución.
Solución Ejercicio 13.
#include <stdio.h>
int main(void) {
float a,b,c,d,e,f;
float x,y;
float di;
printf("Introduzca coeficientes (a,b,c,d,e,f): ");
scanf("%f,%f,%f,%f,%f,%f",&a,&b,&c,&d,&e,&f);
di = a*e-b*d;
if(di==0) {
printf("El sistema de ecuaciones no tiene solución.\n");
} else {
x = (c*e-b*f)/di;
y = (a*f-c*d)/di;
printf("Las soluciones son: x=%.2f y=%.2f\n",x,y);
}
return 0;
}
Ejercicio 14.
Escribir un programa que calcule las raíces, bien reales o imaginarias, de una ecuación de segundo grado.
Solución Ejercicio 14.
#include <stdio.h>
#include <math.h>
int main(void) {
float a,b,c;
float x1,x2;
float rad;
float real, imag; /* parte real, parte imaginaria */
printf("Introduzca coeficientes (a,b,c): ");
scanf("%f,%f,%f",&a,&b,&c);
rad = b*b - 4*a*c;
if(rad==0) {
x1 = -b/(2*a);
printf("La ecuación tiene una sola solución: %.2f\n",x1);
} else if(rad>0) {
x1 = (-b+sqrt(rad))/(2*a);
x2 = (-b-sqrt(rad))/(2*a);
printf("La ecuación tiene dos soluciones:\n");
printf("x1 = %.2f x2 = %.2f\n",x1,x2);
} else if(rad<0) {
real = (-b/(2*a));
imag = sqrt(-rad)/(2*a);
printf("La ecuación tiene dos raíces imaginarias:\n");
printf("x1 = %.2f + %.2fi x2 = %.2f – %.2fi\n",real,imag,real,imag);
}
return 0;
}
Ejercicio 15.
Escribir un programa que pida un año y diga si es bisiesto o no.
Nota: Un año es bisiesto si es múltiplo de 4 salvo el caso en que sea múltiplo de 100, que no es bisiesto, y no sea múltiplo de 400. Por ejemplo, el año 1900 no fue bisiesto, el 2000 sí y el 2100 no lo es.
Solución Ejercicio 15.
#include <stdio.h>
int main(void) {
int a;
printf("Introduzca un año: ");
scanf("%d",&a);
if( (a%4==0 && a%100!=0) || a%400==0)
printf("El año %d es bisiesto.\n",a);
else
printf("El año %d no es bisiesto.\n",a);
return 0;
}
Ejercicio 16.
La fecha de cualquier Domingo de Pascua se calcula de la siguiente forma:
- Sea X el año para el que se quiere calcular la fecha.
- Sea A el resto de la división de X entre 19 Sea B el resto de la división de X entre 4 Sea C el resto de la división de X entre 7
- Sea D el resto de la división de (19 * A + 24) entre 30
- Sea E el resto de la división de (2 * B + 4 * C + 6 * D + 5) entre 7
La fecha para el Domingo de Pascua es el día (22 + D + E) de Marzo (obsérvese que puede dar una fecha en mes de Abril)
Escribir un programa que pida como entrada un año y saque por pantalla la fecha del Domingo de Pascua para ese año.
Solución Ejercicio 16.
#include <stdio.h>
int main(void) {
int x; /* año */
int A,B,C,D,E;
int dia;
printf("Introduzca un año: ");
scanf("%d",&x);
A = x % 19;
B = x % 4;
C = x % 7;
D = (19 * A + 24) % 30;
E = (2*B + 4*C + 6*D + 5) % 7;
dia = 22 + D + E;
if(dia>31) {
dia-=31;
printf("Domingo de Pascua: %d de Abril\n",dia);
} else {
printf("Domingo de Pascua: %d de Marzo\n",dia);
}
return 0;
}
Ejercicio 17.
Hacer un programa que lea un punto del espacio (x,y) e indique en qué cuadrante está, si está en uno de los ejes, o si es el origen de coordenadas.
Solución Ejercicio 17.
#include <stdio.h>
int main(void) {
float x,y; /* coordenadas del punto */
printf("Introduzca el punto x,y: ");
scanf("%f,%f",&x,&y);
if(x==0 && y==0) {
printf("El punto es el origen de coordenadas.\n");
} else if(x==0 && y!=0) {
printf("El punto está sobre el eje y\n");
} else if(x!=0 && y==0) {
printf("El punto está sobre el eje x\n");
} else if(x>0 && y>0) {
printf("El punto está sobre el cuadrante 1 (superior derecho)\n");
} else if(x<0 && y>0) {
printf("El punto está sobre el cuadrante 2 (superior izquierdo)\n");
} else if(x<0 && y<0) {
printf("El punto está sobre el cuadrante 3 (inferior izquierdo)\n");
} else if(x>0 && y<0) {
printf("El punto está sobre el cuadrante 4 (inferior derecho)\n");
}
return 0;
}
Ejercicio 18.
Escribir un programa que lea la nota numérica de un alumno, y escriba SOBRESALIENTE, NOTABLE, APROBADO, SUSPENSO convenientemente.
Solución Ejercicio 18.
int main(void) {
float nota;
printf("Introduzca la nota del alumno (0-10): ");
scanf("%f",¬a);
/*
Se considerará:
SUSPENSO: [0,5)
APROBADO: [5,7)
NOTABLE: [7,9)
SOBRESALIENTE: [9,10]
*/
if(nota>=0 && nota<5) {
printf("El alumno obtuvo un SUSPENSO.\n");
} else if(nota>=5 && nota<7) {
printf("El alumno obtuvo un APROBADO.\n");
} else if(nota>=7 && nota<9) {
printf("El alumno obtuvo un NOTABLE.\n");
} else if(nota>=9 && nota<=10) {
printf("El alumno obtuvo un SOBRESALIENTE.\n");
} else {
printf("La nota introducida es errónea.\n");
printf("Debe ser un número entre 0 y 10.\n");
}
return 0;
}
Ejercicio 19.
Escribir un programa que lea 2 números reales, y los escriba por pantalla ordenados ascendentemente si son diferentes, o lo escriba una sola vez si son iguales.
Solución Ejercicio 19.
#include <stdio.h>
int main(void) {
float a,b; /*dos números reales */
printf("Introduzca dos números separados por comas: ");
scanf("%f,%f",&a,&b);
if(a<b) {
printf("%f < %f\n",a,b);
} else if(b<a) {
printf("%f < %f\n",b,a);
} else {
printf("%f\n",a); /* en este caso a y b son iguales */
}
return 0;
}
Ejercicio 20.
Escribir un programa que lea 3 números reales, y los escriba por pantalla ordenados ascendentemente.
Solución Ejercicio 20.
#include <stdio.h>
int main(void) {
float a,b,c; /*tres números reales */
printf("Introduzca tres números separados por comas: ");
scanf("%f,%f,%f",&a,&b,&c);
if(a<b && a<c) { /* a es el menor */
printf("%f < ",a);
if(b<c) {
printf("%f < %f\n",b,c);
} else {
printf("%f < %f\n",c,b);
}
} else if(b<a && b<c) { /* b es el menor */
printf("%f < ",b);
if(a<c) {
printf("%f < %f\n",a,c);
} else {
printf("%f < %f\n",c,a);
}
} else { /* c es el menor */
printf("%f < ",c);
if(a<b) {
printf("%f < %f\n",a,b);
} else {
printf("%f < %f\n",b,a);
}
}
return 0;
}
Puedes conseguir el listado de los ejercicios 21 a 40 en la siguiente entrada:
Listado ejercicios programación C 21 a 40
Puedes acceder a más recursos formativos, ejercicios resueltos de programación, test de informática, etc., en ejerciciosmesa.com. También tienes disponibles juegos de lógica e interactivos en mesagames.es.