Programación en C: Ejercicios Resueltos con Estructuras de Control, Vectores, Cadenas y Conversión de Unidades

Informática11,25 KB

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");
}

Descargar

PDF Word HTML