Prácticas de Laboratorio de Programación en C

Práctica 1: Generación de Números Aleatorios

Código Fuente:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CANTIDAD 5

int main() {
    int valor;
    int indice;
    srand(time(NULL)); // Semilla basada en tiempo actual del sistema
    for(indice = 0; indice < CANTIDAD; ++indice) {
        valor = rand() % 100 + 1;
        printf("20490042%04d\n", valor);
    }
    return 0;
}

Respuestas a las preguntas:

  • Pregunta 1: Se generan 5 números de estudiante aleatorios en el rango 204900420001 a 204900420100
  • Pregunta 2: La función genera números aleatorios entre 1 y 100
  • Pregunta 3: El formato %04d produce un número con ancho de 4 dígitos, completando con ceros a la izquierda si es necesario
  • Pregunta 4: La semilla del generador se enicializa con el tiempo actual del sistema. Sin esta semilla, al ejeuctar múltiples veces se obtendría la misma secuencia de números

Práctica 2: Sistema de Máquina Expendedora

Código Fuente:

#include <stdio.h>
int main() {
    int opcion, cantidad;
    float precio_total = 0, monto_entregado, cambio;
    while (1) {
        printf("\nMenú de Máquina Expendedora:\n");
        printf("1. Refresco - 3 unidades\n");
        printf("2. Gaseosa - 3 unidades\n");
        printf("3. Jugo de naranja - 5 unidades\n");
        printf("4. Agua mineral - 2 unidades\n");
        printf("0. Salir\n");
        printf("Seleccione una bebida: ");
        scanf("%d", &opcion);
        if (opcion == 0)
            break;

        if (opcion < 1 || opcion > 4) {
            printf("Opción inválida. Intente de nuevo.\n");
            continue;
        }
        printf("Ingrese la cantidad: ");
        scanf("%d", &cantidad);
        if (cantidad < 0) {
            printf("La cantidad no puede ser negativa.\n");
            continue;
        }
        if(opcion == 1 || opcion == 2)
            precio_total += 3 * cantidad;
        else if(opcion == 3)
            precio_total += 5 * cantidad;
        else
            precio_total += 2 * cantidad;
        printf("Ingrese el monto a pagar: ");
        scanf("%f", &monto_entregado);
        cambio = monto_entregado - precio_total;
        printf("Total a pagar: %.2f unidades\n", precio_total);
        printf("Cambio: %.2f unidades\n", cambio);
        precio_total = 0;
    }
    printf("Gracias por su compra. ¡Hasta luego!\n");
    return 0;
}

Respuestas a las preguntas:

  • Pregunta 1: El precio total no se reinicia entre compras, se acumula para la siguiente transacción
  • Pregunta 2: La sentencia break termina inmediatamente la ejecución del ciclo actual, saltando todo el código restante y pasando a la siguiente iteración del bucle while

Práctica 3: Control de Semáforo

Código Fuente:

#include <stdio.h>

int main() {
    char color;
    
    while (scanf(" %c", &color) != EOF) {
        switch (color) {
            case 'r':
                printf("¡Alto!\n");
                break;
            case 'g':
                printf("¡Adelante, adelante!\n");
                break;
            case 'y':
                printf("Espere un momento\n");
                break;
            default:
                printf("Algo está mal...\n");
                break;
        }
    }
    return 0;
}

Práctica 4: Registro de Gastos Diarios

Código Fuente:

#include <stdio.h>

int main() {
    double gasto, suma = 0.0;
    double gasto_maximo = 0.0, gasto_minimo = 20000.0;
    int hay_datos = 0;

    printf("Ingrese los gastos del día (termine con -1):\n");

    while (1) {
        scanf("%lf", &gasto);
        
        if (gasto == -1) {
            break;
        }
        
        if (gasto <= 0 || gasto > 20000) {
            printf("¡Entrada inválida! El monto debe cumplir: 0 < monto <= 20000\n");
            continue;
        }
        
        suma += gasto;
        hay_datos = 1;

        if (gasto > gasto_maximo) {
            gasto_maximo = gasto;
        }
        if (gasto < gasto_minimo) {
            gasto_minimo = gasto;
        }
    }
    
    if (hay_datos) {
        printf("Gasto total del día: %.1f\n", suma);
        printf("Gasto máximo del día: %.1f\n", gasto_maximo);
        printf("Gasto mínimo del día: %.1f\n", gasto_minimo);
    } else {
        printf("No hay registros válidos para hoy\n");
    }

    return 0;
}

Práctica 5: Clasificación de Triángulos

Código Fuente:

#include <stdio.h>

int main() {
    int lado_a, lado_b, lado_c;
    printf("Ingrese los tres lados del triángulo (enteros), CTRL+Z para terminar:\n");

    while (scanf("%d %d %d", &lado_a, &lado_b, &lado_c) != EOF) {
        
        if (lado_a <= 0 || lado_b <= 0 || lado_c <= 0 || 
            (lado_a + lado_b <= lado_c) || 
            (lado_a + lado_c <= lado_b) || 
            (lado_b + lado_c <= lado_a)) {
            printf("No puede formar un triángulo\n");
            continue;
        }
        
        if (lado_a == lado_b && lado_b == lado_c) {
            printf("Triángulo equilátero\n");
        } else if (lado_a == lado_b || lado_a == lado_c || lado_b == lado_c) {
            printf("Triángulo isósceles\n");
        } else if ((lado_a*lado_a + lado_b*lado_b == lado_c*lado_c) || 
                   (lado_a*lado_a + lado_c*lado_c == lado_b*lado_b) || 
                   (lado_b*lado_b + lado_c*lado_c == lado_a*lado_a)) {
            printf("Triángulo rectángulo\n");
        } else {
            printf("Triángulo escaleno\n");
        }
    }

    return 0;
}

Práctica 6: Juego de Adivinanza

Código Fuente:

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

#define INTENTOS 3

int main() {
    int dia_fortunate;
    int intento;
    int contador;

    srand(time(NULL));
    dia_fortunate = rand() % 30 + 1;

    printf("Adivina cuál es tu día de suerte en abril de 2026\n\n");

    for(contador = 0; contador < INTENTOS; contador++) {
        printf("¡Empieza! Tienes %d intentos,(adivina entre 1~30): ", INTENTOS - contador);
        scanf("%d", &intento);

        if(intento < 1 || intento > 30) {
            printf("¡Entrada inválida! Ingresa un día entre 1 y 30\n");
            contador--;
            continue;
        }

        if(intento == dia_fortunate) {
            printf("¡Lo adivinaste :)\n");
            return 0;
        } else if(intento > dia_fortunate) {
            printf("Te equivocaste, tu día de suerte está antes\n");
        } else {
            printf("Te equivocaste, tu día de suerte aún no llega\n");
        }

        printf("\n");
    }

    printf("¡Se acabaron los intentos! Tu día de suerte es el %d\n", dia_fortunate);

    return 0;
}

Etiquetas: programacion-c rand srand switch while

Publicado el 6-3 23:37