Programación en C: Ejercicios Resueltos con Estructuras de Control, Vectores, Cadenas y Conversión de Unidades
Ejercicios resueltos de programación en C
Ejercicio 9: Suma y diferencia de cantidades en libras, chelines y peniques
CONTINUACIÓN 9
else {
if (che1 >= 20) {
printf("\nNúmero de chelines de la primera cantidad incorrecto");
}
}
} while ((che1 < 0) || (che1 >= 20));
do {
printf("\nIndicar peniques de la primera cantidad: ");
scanf("%d", &pen1);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (pen1 < 0) {
printf("\nNúmero de peniques de la primera cantidad no puede ser inferior a cero");
}
else {
if (pen1 >= 12) {
printf("\nNúmero de peniques de la primera cantidad incorrecto");
}
}
} while ((pen1 < 0) || (pen1 >= 12));
printf("\nDatos para la segunda cantidad: ");
COPIAR LO DE ARRIBA
tot1 = (lib1 * 20 * 12) + (che1 * 12) + pen1;
tot2 = (lib2 * 20 * 12) + (che2 * 12) + pen2;
printf("\n");
printf("\nLa suma de las dos cantidades es .....: ");
pintarLibChePen(tot1 + tot2);
printf("\nLa diferencia de las dos cantidades es: ");
if (tot1 > tot2) {
pintarLibChePen(tot1 - tot2);
}
else {
pintarLibChePen(tot2 - tot1);
};
printf("\nFin del programa"); }
Ejercicio 10: Tabla de equivalencias entre kilómetros y millas náuticas
EJ10) Tabla de equivalencias entre km y millas náuticas.
#define CAMBIO 1.852
int main() {
setlocale(0, "");
int i = 0;
int desde = 0;
int hasta = 0;
int paso = 0;
do {
printf("\nIndicar el desde: ");
scanf("%d", &desde);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (desde < 0) {
printf("\nEl desde debe ser positivo");
};
} while (desde < 0);
do {
printf("\nIndicar el hasta: ");
scanf("%d", &hasta);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (hasta < desde) {
printf("\nEl hasta debe ser posterior o igual al desde");
};
} while (hasta < desde);
do {
printf("\nIndicar el paso: ");
scanf("%d", &paso);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (paso <= 0) {
printf("\nEl paso debe ser positivo y mayor de cero");
};
} while (paso <= 0);
printf("\nTabla de Equivalencias");
for (i = desde; i <= hasta; i += paso) {
printf("\n Para %5d Kilómetros su equivalencia es %g millas", i, (i / CAMBIO));
}
printf("\nFin del programa");
}
Ejercicio 11: Producto escalar de dos vectores
EJ11) El producto escalar de dos vectores.
#define MAX 100
int main() {
setlocale(0, "");
int vector1[MAX] = { 0 };
int vector2[MAX] = { 0 };
int i, j, tam = 0;
int resul = 0;
do {
printf("\nIndicar número de elementos de los vectores: ");
scanf("%d", &tam);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (tam <= 0) {
printf("\nNúmero de elementos de los vectores debe ser positivo y mayor de cero");
}
else {
if (tam > MAX) {
printf("\nNúmero de elementos de los vectores NO puede ser superior a %d", MAX);
}
}
} while ((tam <= 0) || (tam > MAX));
printf("\n\nRellenado de datos del Vector 1\n");
for (i = 0; i < tam; i++) {
printf("\nIndicar el valor del %dº elemento: ", (i + 1));
scanf("%d", &vector1[i]);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
}
printf("\n\nRellenado de datos del Vector 2\n");
for (i = 0; i < tam; i++) {
printf("\nIndicar el valor del %dº elemento: ", (i + 1));
scanf("%d", &vector2[i]);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
}
Ejercicio 11.2: Pintado de vectores y cálculo del producto escalar
printf("\n\nPintado del contenido del Vector 1\n");
for (i = 0; i < tam; i++) {
printf("\nEl valor del vector1 en el %dº elemento es: %d", (i + 1), vector1[i]);
}
printf("\n\nPintado del contenido del Vector 2\n");
for (i = 0; i < tam; i++) {
printf("\nEl valor del vector2 en el %dº elemento es: %d", (i + 1), vector2[i]);
}
for (i = 0; i < tam; i++) {
resul += (vector1[i] * vector2[i]);
}
printf("\n\nEl resultado del producto escalar es: %d", resul);
printf("\nFin del programa");
}
Ejercicio 12: Insertar un carácter tras cada aparición de otro en una cadena
EJ12) Dada una cadena de caracteres (con un tamaño máximo fijado por el programa) y dos caracteres, mostrar por pantalla la misma cadena pero agregando el segundo carácter solicitado a continuación del primero allí donde este aparezca.
#define MAX 100
int main() {
setlocale(0, "");
int i = 0;
int j = 0;
int tam = 0;
char* p;
char cadena[MAX];
char destino[MAX * 2]; // Suponiendo que la cadena esté entera y todos sus caracteres sean el primer carácter
char caracter1 = ' ';
char caracter2 = ' ';
do {
printf("\nIntroducir frase en formato libre: ");
p = fgets(cadena, MAX, stdin);
if (p != NULL) {
tam = strlen(cadena);
if (tam > 0 && cadena[tam - 1] == '\n')
cadena[tam - 1] = '\0';
}
tam = strlen(cadena);
if (tam == 0) {
printf("\nDebe introducir algo en la frase.");
}
} while (tam == 0);
printf("\n");
do {
printf("\nIntroducir carácter a buscar: ");
caracter1 = getchar();
if (caracter1 == EOF) {
printf("\nDebe introducir un carácter.");
}
while (getchar() != '\n');
} while (caracter1 == EOF);
Ejercicio 12.2: Lectura del segundo carácter y generación del resultado
do {
printf("\nIntroducir carácter a añadir: ");
caracter2 = getchar();
if (caracter2 == EOF) {
printf("\nDebe introducir un carácter.");
}
while (getchar() != '\n');
} while (caracter2 == EOF);
printf("\n");
printf("\nLa cadena en formato original es: %s", cadena);
printf("\nLa cadena añadiendo el segundo carácter es : ");
for (i = 0; i < tam; i++) {
putchar(cadena[i]); // Esta sentencia es la misma que: printf("%c", cadena[i]);
if (cadena[i] == caracter1) {
putchar(caracter2); // Esta sentencia es la misma que: printf("%c", caracter2);
}
}
printf("\nFin del programa");
}
Ejercicio 13: Suma y resta de horas en formato HH:MM:SS
EJ13) Sumar y restar horas expresadas en el formato HH:MM:SS.
void pintarHorMinSeg(int segundos) {
int hor = 0, min = 0, seg = 0;
min = segundos / 60;
seg = segundos % 60;
hor = min / 60;
min = min % 60;
printf("%5d Horas\t%2d Minutos\t%2d Segundos", hor, min, seg);
}
int main() {
setlocale(0, "");
int nVar = 0;
int valido = 0;
int Hor1, Min1, Seg1 = 0;
int Hor2, Min2, Seg2 = 0;
int tot1, tot2 = 0;
printf("\nDatos para la primera cantidad: ");
do {
nVar = 0;
valido = 0;
printf("\nIndicar primera hora en formato (hh:mm:ss): ");
nVar = scanf("%d:%d:%d", &Hor1, &Min1, &Seg1);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (nVar == 3) {
if (Hor1 >= 0) {
if ((Min1 >= 0) && (Min1 < 60)) {
if ((Seg1 >= 0) && (Seg1 < 60)) {
valido = 1;
}
}
}
}
if (!valido) {
printf("\nEl contenido de la primera hora no es correcta. Revisa formato y contenidos");
}
} while (!valido);
Ejercicio 13.2: Lectura de la segunda hora y operaciones
do {
nVar = 0;
valido = 0;
printf("\nIndicar segunda hora en formato (hh:mm:ss): ");
nVar = scanf("%d:%d:%d", &Hor2, &Min2, &Seg2);
while (getchar() != '\n'); // Para quitar el intro que hay en el buffer del teclado
if (nVar == 3) {
if (Hor2 >= 0) {
if ((Min2 >= 0) && (Min2 < 60)) {
if ((Seg2 >= 0) && (Seg2 < 60)) {
valido = 1;
}
}
}
}
if (!valido) {
printf("\nEl contenido de la segunda hora no es correcta. Revisa formato y contenidos");
}
} while (!valido);
tot1 = (Hor1 * 60 * 60) + (Min1 * 60) + Seg1;
tot2 = (Hor2 * 60 * 60) + (Min2 * 60) + Seg2;
printf("\n");
printf("\nLa suma de las dos horas es .....: ");
pintarHorMinSeg(tot1 + tot2);
printf("\nLa diferencia de las dos Horas es: ");
if (tot1 > tot2) {
pintarHorMinSeg(tot1 - tot2);
}
else {
pintarHorMinSeg(tot2 - tot1);
}
printf("\n");
printf("\nFin del programa");
printf("\n");
}
Ejercicio 14: Cambio de mayúsculas a minúsculas y viceversa
EJ14) Cambiar las letras minúsculas en mayúsculas y viceversa.
#define MAX 100
int main() {
setlocale(0, "");
int i = 0;
int j = 0;
int tam = 0;
char* p;
char cadena[MAX];
char destino[MAX];
do {
printf("\nIntroducir frase en formato libre: ");
p = fgets(cadena, MAX, stdin);
if (p != NULL) {
tam = strlen(cadena);
if (tam > 0 && cadena[tam - 1] == '\n')
cadena[tam - 1] = '\0';
}
tam = strlen(cadena);
if (tam == 0) {
printf("\nDebe introducir algo en la frase.");
}
} while (tam == 0);
printf("\n");
printf("\nLa cadena en formato original es: %s", cadena);
printf("\nLa cadena cambiando letras es ..: ");
for (i = 0; i < tam; i++) {
if ((cadena[i] >= 'A') && (cadena[i] <= 'Z')) {
printf("%c", cadena[i] + ('a' - 'A'));
}
else {
if ((cadena[i] >= 'a') && (cadena[i] <= 'z')) {
printf("%c", cadena[i] - ('a' - 'A'));
}
else {
printf("%c", cadena[i]);
}
}
}
printf("\n");
printf("\nFin del programa");
}