Estructuras de Toma de Decisiones en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo construir estructuras de toma de decisiones en programación C. Comenzarás por entender el concepto fundamental de la declaración if, que permite a tu programa tomar decisiones basadas en condiciones específicas. Luego, explorarás los operadores de desigualdad, las declaraciones if-else encadenadas, combinarás expresiones con operadores lógicos y practicarás la lógica condicional. Al final de este laboratorio, tendrás una comprensión sólida de cómo crear estructuras de toma de decisiones en tus programas en C, lo que te permitirá escribir código más sofisticado e inteligente.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/operators -.-> lab-438255{{"Estructuras de Toma de Decisiones en C"}} c/if_else -.-> lab-438255{{"Estructuras de Toma de Decisiones en C"}} c/user_input -.-> lab-438255{{"Estructuras de Toma de Decisiones en C"}} c/output -.-> lab-438255{{"Estructuras de Toma de Decisiones en C"}} end

Comprender la Declaración If

En este paso, aprenderás sobre el concepto fundamental de las declaraciones if en programación C, que son cruciales para crear estructuras de toma de decisiones en tu código. Las declaraciones if permiten a tu programa tomar decisiones y ejecutar diferentes bloques de código basados en condiciones específicas.

Comencemos creando un simple programa en C que demuestre la sintaxis básica de la declaración if. Abre el editor VSCode y crea un nuevo archivo llamado if_statement.c en el directorio ~/project:

cd ~/project
touch if_statement.c
#include <stdio.h>

int main() {
    int temperature = 25;

    if (temperature > 30) {
        printf("It's a hot day!\n");
    }

    if (temperature <= 30) {
        printf("The temperature is comfortable.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc if_statement.c -o if_statement
./if_statement

Ejemplo de salida:

The temperature is comfortable.

Desglosemos la declaración if:

  • La palabra clave if va seguida de una condición entre paréntesis ()
  • La condición es una expresión lógica que se evalúa como verdadera o falsa
  • Si la condición es verdadera, se ejecuta el bloque de código dentro de las llaves {}
  • Si la condición es falsa, se omite el bloque de código

Ahora, creemos un ejemplo más interactivo que demuestre cómo las declaraciones if pueden tomar decisiones basadas en la entrada del usuario:

#include <stdio.h>

int main() {
    int age;

    printf("Enter your age: ");
    scanf("%d", &age);

    if (age >= 18) {
        printf("You are eligible to vote.\n");
    }

    if (age < 18) {
        printf("You are not old enough to vote.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc voting_eligibility.c -o voting_eligibility
./voting_eligibility

Ejemplo de salida:

Enter your age: 20
You are eligible to vote.

Puntos clave a recordar:

  • Las declaraciones if permiten a tu programa tomar decisiones
  • La condición se evalúa como verdadera o falsa
  • Solo se ejecutará el bloque de código para la condición verdadera
  • Puedes usar operadores de comparación como >, <, >=, <=, ==, !=

Explorar los Operadores de Desigualdad

En este paso, profundizarás en la programación en C explorando los operadores de desigualdad, que son esenciales para crear declaraciones condicionales más complejas. Los operadores de desigualdad te permiten comparar valores y tomar decisiones basadas en sus relaciones.

Creemos un nuevo archivo llamado inequality_operators.c en el directorio ~/project para demostrar diferentes operadores de desigualdad:

cd ~/project
touch inequality_operators.c
#include <stdio.h>

int main() {
    int x = 10;
    int y = 20;

    // Equal to (==) operator
    if (x == y) {
        printf("x is equal to y\n");
    } else {
        printf("x is not equal to y\n");
    }

    // Not equal to (!=) operator
    if (x!= y) {
        printf("x is different from y\n");
    }

    // Greater than (>) operator
    if (y > x) {
        printf("y is greater than x\n");
    }

    // Less than (<) operator
    if (x < y) {
        printf("x is less than y\n");
    }

    // Greater than or equal to (>=) operator
    if (y >= x) {
        printf("y is greater than or equal to x\n");
    }

    // Less than or equal to (<=) operator
    if (x <= y) {
        printf("x is less than or equal to y\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc inequality_operators.c -o inequality_operators
./inequality_operators

Ejemplo de salida:

x is not equal to y
x is different from y
y is greater than x
x is less than y
y is greater than or equal to x
x is less than or equal to y

Creemos otro ejemplo que demuestre los operadores de desigualdad con entrada del usuario:

#include <stdio.h>

int main() {
    int score;

    printf("Enter your exam score: ");
    scanf("%d", &score);

    if (score >= 90) {
        printf("Excellent! You got an A.\n");
    } else if (score >= 80) {
        printf("Good job! You got a B.\n");
    } else if (score >= 70) {
        printf("Not bad. You got a C.\n");
    } else if (score >= 60) {
        printf("You passed. You got a D.\n");
    } else {
        printf("Sorry, you failed the exam.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc grade_calculator.c -o grade_calculator
./grade_calculator

Ejemplo de salida:

Enter your exam score: 85
Good job! You got a B.

Puntos clave a recordar:

  • Los operadores de desigualdad ayudan a comparar valores
  • == verifica si los valores son iguales
  • != verifica si los valores no son iguales
  • > verifica si el valor de la izquierda es mayor que el valor de la derecha
  • < verifica si el valor de la izquierda es menor que el valor de la derecha
  • >= verifica si el valor de la izquierda es mayor o igual que el valor de la derecha
  • <= verifica si el valor de la izquierda es menor o igual que el valor de la derecha

Encadenar Declaraciones If-Else

En este paso, aprenderás cómo encadenar declaraciones if-else para crear estructuras de toma de decisiones más complejas en programación C. Encadenar declaraciones if-else te permite manejar múltiples condiciones y proporcionar rutas de código alternativas cuando las condiciones previas no se cumplen.

Creemos un archivo llamado weather_advisor.c en el directorio ~/project para demostrar declaraciones if-else encadenadas:

cd ~/project
touch weather_advisor.c
#include <stdio.h>

int main() {
    int temperature;
    char weather_type;

    printf("Enter the temperature: ");
    scanf("%d", &temperature);

    printf("Enter the weather type (S for sunny, R for rainy, C for cloudy): ");
    scanf(" %c", &weather_type);

    if (temperature > 30 && weather_type == 'S') {
        printf("It's a hot and sunny day. Stay hydrated and use sunscreen!\n");
    } else if (temperature > 30 && weather_type == 'R') {
        printf("It's hot and rainy. Be careful of potential thunderstorms.\n");
    } else if (temperature > 30 && weather_type == 'C') {
        printf("It's hot and cloudy. Wear light clothing.\n");
    } else if (temperature >= 20 && temperature <= 30) {
        printf("The temperature is comfortable.\n");
    } else if (temperature < 20) {
        printf("It's a bit cool today. Consider wearing a light jacket.\n");
    } else {
        printf("Invalid input. Please check your temperature and weather type.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc weather_advisor.c -o weather_advisor
./weather_advisor

Ejemplo de salida:

Enter the temperature: 35
Enter the weather type (S for sunny, R for rainy, C for cloudy): S
It's a hot and sunny day. Stay hydrated and use sunscreen!

Creemos otro ejemplo que demuestre un uso más práctico de declaraciones if-else encadenadas:

#include <stdio.h>

int main() {
    char category;
    double price, discount = 0.0;

    printf("Enter product category (A/B/C): ");
    scanf(" %c", &category);

    printf("Enter product price: ");
    scanf("%lf", &price);

    if (category == 'A') {
        if (price > 1000) {
            discount = 0.2;  // 20% discount for high-value A category
        } else {
            discount = 0.1;  // 10% discount for A category
        }
    } else if (category == 'B') {
        if (price > 500) {
            discount = 0.15;  // 15% discount for high-value B category
        } else {
            discount = 0.05;  // 5% discount for B category
        }
    } else if (category == 'C') {
        if (price > 200) {
            discount = 0.1;  // 10% discount for high-value C category
        } else {
            discount = 0.0;  // No discount for low-value C category
        }
    } else {
        printf("Invalid category!\n");
        return 1;
    }

    double discounted_price = price * (1 - discount);
    printf("Original price: $%.2f\n", price);
    printf("Discount: %.0f%%\n", discount * 100);
    printf("Discounted price: $%.2f\n", discounted_price);

    return 0;
}

Compila y ejecuta el programa:

gcc discount_calculator.c -o discount_calculator
./discount_calculator

Ejemplo de salida:

Enter product category (A/B/C): B
Enter product price: 600
Original price: $600.00
Discount: 15%
Discounted price: $510.00

Puntos clave a recordar:

  • Las declaraciones if-else encadenadas te permiten manejar múltiples condiciones
  • Cada condición se verifica en orden de arriba hacia abajo
  • Solo se ejecuta el bloque de código de la primera condición que coincide
  • El bloque else proporciona una acción predeterminada si ninguna de las condiciones previas se cumple
  • Puedes anidar declaraciones if-else para crear estructuras de decisión más complejas

Combinar Expresiones con Operadores Lógicos

En este paso, aprenderás cómo combinar múltiples condiciones utilizando operadores lógicos en programación C. Los operadores lógicos te permiten crear declaraciones condicionales más complejas al conectar múltiples expresiones.

Creemos un archivo llamado logical_operators.c en el directorio ~/project para demostrar los tres principales operadores lógicos: AND (&&), OR (||) y NOT (!):

cd ~/project
touch logical_operators.c
#include <stdio.h>

int main() {
    int age, income;
    char is_student;

    printf("Enter your age: ");
    scanf("%d", &age);

    printf("Enter your annual income: ");
    scanf("%d", &income);

    printf("Are you a student? (Y/N): ");
    scanf(" %c", &is_student);

    // AND (&&) operator: Both conditions must be true
    if (age >= 18 && income < 30000) {
        printf("You qualify for a basic credit card.\n");
    }

    // OR (||) operator: At least one condition must be true
    if (age < 25 || is_student == 'Y') {
        printf("You may be eligible for a student discount.\n");
    }

    // Combining multiple conditions
    if ((age >= 18 && income >= 30000) || (is_student == 'Y')) {
        printf("You qualify for a premium credit card.\n");
    }

    // NOT (!) operator: Negates the condition
    if (!(age < 18)) {
        printf("You are an adult.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc logical_operators.c -o logical_operators
./logical_operators

Ejemplo de salida:

Enter your age: 22
Enter your annual income: 25000
Are you a student? (Y/N): Y
You qualify for a basic credit card.
You may be eligible for a student discount.
You qualify for a premium credit card.
You are an adult.

Creemos otro ejemplo que demuestre condiciones lógicas más complejas:

#include <stdio.h>

int main() {
    char membership_type;
    int visits_per_month, total_spending;

    printf("Enter your membership type (B for Bronze, S for Silver, G for Gold): ");
    scanf(" %c", &membership_type);

    printf("Enter number of visits per month: ");
    scanf("%d", &visits_per_month);

    printf("Enter total monthly spending: ");
    scanf("%d", &total_spending);

    // Complex condition using multiple logical operators
    if ((membership_type == 'G') ||
        (membership_type == 'S' && visits_per_month >= 10) ||
        (membership_type == 'B' && total_spending > 500)) {
        printf("You are eligible for a special promotion!\n");
    }

    // Demonstrating NOT operator with complex conditions
    if (!(membership_type == 'B' && visits_per_month < 5)) {
        printf("You can access additional membership benefits.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc membership_conditions.c -o membership_conditions
./membership_conditions

Ejemplo de salida:

Enter your membership type (B for Bronze, S for Silver, G for Gold): S
Enter number of visits per month: 12
Enter total monthly spending: 300
You are eligible for a special promotion!
You can access additional membership benefits.

Puntos clave a recordar:

  • El operador && (AND): Ambas condiciones deben ser verdaderas
  • El operador || (OR): Al menos una condición debe ser verdadera
  • El operador ! (NOT): Niega la condición
  • Puedes combinar múltiples condiciones para crear lógica compleja
  • Los paréntesis pueden ayudar a aclarar el orden de evaluación

Practicar la Lógica Condicional

En este último paso, aplicarás todo lo que has aprendido sobre estructuras de toma de decisiones en C creando un programa integral que demuestre múltiples técnicas de lógica condicional.

Creemos un programa multipropósito llamado personal_finance_advisor.c en el directorio ~/project que ayudará a los usuarios a tomar decisiones financieras:

cd ~/project
touch personal_finance_advisor.c
#include <stdio.h>

int main() {
    double income, expenses, savings;
    char employment_status, age_group;

    // Input financial information
    printf("Enter your monthly income: $");
    scanf("%lf", &income);

    printf("Enter your monthly expenses: $");
    scanf("%lf", &expenses);

    printf("Enter your current savings: $");
    scanf("%lf", &savings);

    printf("Employment status (F for Full-time, P for Part-time, U for Unemployed): ");
    scanf(" %c", &employment_status);

    printf("Age group (Y for Young (18-35), M for Middle-aged (36-55), S for Senior (56+)): ");
    scanf(" %c", &age_group);

    // Calculate savings rate
    double savings_rate = (savings / income) * 100;
    double disposable_income = income - expenses;

    // Financial advice using complex conditional logic
    printf("\n--- Financial Analysis ---\n");

    // Savings advice
    if (savings_rate < 10) {
        printf("Warning: Your savings rate is low (%.2f%%).\n", savings_rate);
    } else if (savings_rate >= 10 && savings_rate < 20) {
        printf("Good start! Your savings rate is moderate (%.2f%%).\n", savings_rate);
    } else {
        printf("Excellent! Your savings rate is strong (%.2f%%).\n", savings_rate);
    }

    // Investment recommendations
    if ((employment_status == 'F' && disposable_income > 500) ||
        (age_group == 'Y' && savings > 5000)) {
        printf("Recommendation: Consider starting an investment portfolio.\n");
    }

    // Emergency fund advice
    if (savings < (expenses * 3)) {
        printf("Advice: Build an emergency fund covering at least 3 months of expenses.\n");
    }

    // Spending control
    if (expenses > (income * 0.7)) {
        printf("Alert: Your expenses are too high compared to your income.\n");
    }

    // Special conditions
    if ((age_group == 'Y' && employment_status == 'F') ||
        (savings > (income * 2))) {
        printf("You are in a good financial position!\n");
    }

    // Detailed financial health assessment
    if (!(disposable_income < 0)) {
        printf("Your disposable income is: $%.2f\n", disposable_income);
    } else {
        printf("Warning: Your expenses exceed your income.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc personal_finance_advisor.c -o personal_finance_advisor
./personal_finance_advisor

Ejemplo de salida:

Enter your monthly income: $5000
Enter your monthly expenses: $3500
Enter your current savings: $10000
Employment status (F for Full-time, P for Part-time, U for Unemployed): F
Age group (Y for Young (18-35), M for Middle-aged (36-55), S for Senior (56+)): Y

--- Financial Analysis ---
Good start! Your savings rate is moderate (40.00%).
Recommendation: Consider starting an investment portfolio.
You are in a good financial position!
Your disposable income is: $1500.00

Creemos un programa de desafío adicional para seguir practicando la lógica condicional:

#include <stdio.h>

int main() {
    int math_score, science_score, english_score;
    char extra_credit;

    printf("Enter Math score (0-100): ");
    scanf("%d", &math_score);

    printf("Enter Science score (0-100): ");
    scanf("%d", &science_score);

    printf("Enter English score (0-100): ");
    scanf("%d", &english_score);

    printf("Did you complete extra credit? (Y/N): ");
    scanf(" %c", &extra_credit);

    // Calculate average
    double average = (math_score + science_score + english_score) / 3.0;

    // Comprehensive grade determination
    if (average >= 90 ||
        (extra_credit == 'Y' && average >= 85)) {
        printf("Congratulations! You earned an A grade.\n");
    } else if (average >= 80 ||
               (extra_credit == 'Y' && average >= 75)) {
        printf("Great job! You earned a B grade.\n");
    } else if (average >= 70 ||
               (extra_credit == 'Y' && average >= 65)) {
        printf("You passed. You earned a C grade.\n");
    } else {
        printf("You need to improve. Consider retaking the courses.\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc grade_calculator.c -o grade_calculator
./grade_calculator

Ejemplo de salida:

Enter Math score (0-100): 85
Enter Science score (0-100): 88
Enter English score (0-100): 92
Did you complete extra credit? (Y/N): N
Great job! You earned a B grade.

Puntos clave a recordar:

  • Combina múltiples condiciones utilizando operadores lógicos
  • Utiliza declaraciones if-else anidadas para la toma de decisiones complejas
  • Considera los casos extremos y proporciona una lógica integral
  • Divide problemas complejos en condiciones más pequeñas y manejables

Resumen

En este laboratorio, aprendiste sobre el concepto fundamental de las declaraciones if en programación C, que son cruciales para crear estructuras de toma de decisiones en tu código. Exploraste cómo las declaraciones if permiten que tu programa tome decisiones y ejecute diferentes bloques de código basados en condiciones específicas. También aprendiste sobre operadores de desigualdad, encadenar declaraciones if-else, combinar expresiones con operadores lógicos y practicar la lógica condicional para construir estructuras de toma de decisiones más complejas en tus programas en C.

Los puntos clave cubiertos en este laboratorio incluyen comprender la sintaxis básica de las declaraciones if, evaluar expresiones lógicas como verdaderas o falsas y ejecutar el bloque de código adecuado según la condición. También aprendiste cómo usar declaraciones if para tomar decisiones basadas en la entrada del usuario, que es una habilidad esencial para construir aplicaciones interactivas.