Fundamentos de Ramificación y Bucles en C: Aplicaciones Prácticas

Genera 5 enteros aleatorios entre 1 y 100, y los muestra con el prefijo 20240042 para formar identificaciones de estudiantes.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define TOTAL_IDS 5

int main() {
    int num_aleatorio;
    int iter = 0;
    srand(time(NULL));
    
    while (iter < TOTAL_IDS) {
        num_aleatorio = 1 + rand() % 100;
        printf("20240042%04d\n", num_aleatorio);
        iter++;
    }
    
    return 0;
}

Expliccaiones:

  • La línea 13 genera un entero aleatorio en el rango de 1 a 100.
  • %04d formatea la salida a 4 dígitos, rellenando con ceros a la izquierda si es necesario.
  • srand(time(NULL)) establece la semilla aleatoria con el tiempo actual, garantizando variabilidad entre ejecuciones; sin esto, la secuencia de números aleatorios sería idéntica cada vez.

Implementa una máquina expendedora de bebidas con un menú interactivo para múltiples compras.

#include <stdio.h>

int main() {
    int seleccion, cantidad;
    float costo_total, dinero_ingreso, devolucion;
    int activo = 1;

    while (activo) {
        printf("\nMenú de Máquina Expendedora:\n");
        printf("1. Bebida cola - 3 unidades/botella\n");
        printf("2. Bebida limón - 3 unidades/botella\n");
        printf("3. Jugo de naranja - 5 unidades/botella\n");
        printf("4. Agua pura - 2 unidades/botella\n");
        printf("0. Finalizar compra\n");
        printf("Ingrese código de bebida: ");
        scanf("%d", &seleccion);

        if (seleccion == 0) {
            activo = 0;
            continue;
        }

        if (seleccion < 1 || seleccion > 4) {
            printf("Código no válido, intente de nuevo.\n");
            continue;
        }

        printf("Ingrese cantidad deseada: ");
        scanf("%d", &cantidad);

        if (cantidad <= 0) {
            printf("Cantidad inválida, ingrese un valor positivo.\n");
            continue;
        }

        switch (seleccion) {
            case 1:
            case 2:
                costo_total = 3.0 * cantidad;
                break;
            case 3:
                costo_total = 5.0 * cantidad;
                break;
            case 4:
                costo_total = 2.0 * cantidad;
                break;
        }

        printf("Ingrese monto a pagar: ");
        scanf("%f", &dinero_ingreso);

        devolucion = dinero_ingreso - costo_total;
        printf("Costo total: %.2f unidades\n", costo_total);
        printf("Cambio: %.2f unidades\n", devolucion);
    }

    printf("Gracias por su compra, hasta luego!\n");
    return 0;
}

Preguntas:

  • Problema 1: Al eliminar costo_total = 0;, en compras sucesivas el costo se acumularía incorrectamente, ya que no se reinicia entre iteraciones.
  • Problema 2: La instrucción continue salta el resto del cuerpo del bucle y avanza a la siguiente iteración, útil para manejar entradas inválidas y repetir el proceso.

Simula un semáforo basado en la entrada de un carácter de color.

#include <stdio.h>

int main() {
    char color;
    while (scanf(" %c", &color) != EOF) {
        switch (color) {
            case 'r':
            case 'R':
                printf("¡Alto!\n");
                break;
            case 'v':
            case 'V':
                printf("Avanzar, avanzar, avanzar\n");
                break;
            case 'a':
            case 'A':
                printf("Esperar un momento\n");
                break;
            default:
                if (color != '\n') {
                    printf("Algo anda mal...\n");
                }
                break;
        }
    }
    return 0;
}

Rastrea los gastos diarios ingresados por el usuario hasta que se introduzca -1.

#include <stdio.h>

int main() {
    double gasto, max_gasto = 0.0, min_gasto = 1000000.0, total = 0.0;
    int num_gastos = 0;
    printf("Ingrese gastos del día (-1 para terminar):\n");
    
    while (1) {
        scanf("%lf", &gasto);
        if (gasto == -1.0) break;
        if (gasto <= 0.0 || gasto > 20000.0) continue;
        total += gasto;
        if (gasto > max_gasto) max_gasto = gasto;
        if (gasto < min_gasto) min_gasto = gasto;
        num_gastos++;
    }
    
    if (num_gastos > 0) {
        printf("Total gastado hoy: %.1f\n", total);
        printf("Gasto máximo: %.1f\n", max_gasto);
        printf("Gasto mínimo: %.1f\n", min_gasto);
    }
    return 0;
}

Clifica triángulos según las longitudes de sus lados ingresadas por el usuario.

#include <stdio.h>

int main() {
    int a, b, c;
    while (scanf("%d%d%d", &a, &b, &c) != EOF) {
        if (a + b <= c || a + c <= b || b + c <= a) {
            printf("No es un triángulo válido\n");
            continue;
        }
        if (a == b && b == c) {
            printf("Triángulo equilátero\n");
        } else if (a == b || a == c || b == c) {
            printf("Triángulo isósceles\n");
        } else if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) {
            printf("Triángulo rectángulo\n");
        } else {
            printf("Triángulo escaleno\n");
        }
    }
    return 0;
}

Juego de adivinanza para determinar un día de suerte en abril con pistas.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(NULL));
    int dia_magico = rand() % 30 + 1;
    int intento, restantes = 3;
    printf("Adivina tu día de suerte en abril de 2026\n");
    printf("Tienes 3 intentos, ingresa un número (1-30): ");
    
    while (restantes > 0) {
        scanf("%d", &intento);
        restantes--;
        
        if (intento == dia_magico) {
            printf("¡Correcto! :)\n");
            break;
        } else if (intento > dia_magico && restantes > 0) {
            printf("Demasiado tarde, tu día está antes. Intenta de nuevo (1-30): ");
        } else if (intento < dia_magico && restantes > 0) {
            printf("Demasiado temprano, tu día aún no llega. Intenta de nuevo (1-30): ");
        }
    }
    
    if (restantes == 0 && intento != dia_magico) {
        printf("Sin oportunidades. Tu día de suerte es el %d de abril.\n", dia_magico);
    }
    return 0;
}

Etiquetas: C ramificación bucles aleatorios Condicionales

Publicado el 7-23 02:41