Ejercicio 04 — Lee una nota entera (0-10) e imprime la letra

Dificultad: amarillo · Módulo 02 (Condicionales)

Enunciado

Lee una nota entera (0-10) e imprime la letra: 9-10 A, 7-8 B, 5-6 C, 3-4 D, 0-2 F.

Diagrama de flujo

Diagrama de flujo del ejercicio 04

Cómo se resuelve

El programa lee una nota entera de 0 a 10 y la traduce a una letra (A, B, C, D o F). Combina dos ideas: validar la entrada y clasificar por rangos con if / else if / else.

  1. Validación: antes de clasificar, if (nota < 0 || nota > 10) comprueba que la nota está en el rango permitido. El operador lógico || (OR) es verdadero si cualquiera de las dos comparaciones lo es. Si la nota es inválida, se imprime un error y return 1 termina el programa con un código distinto de cero (convención de “algo salió mal”).
  2. Clasificación: usamos una variable char letra y una cadena if-else if en orden descendente (>= 9, luego >= 7, etc.). La clave es que cada rama solo se alcanza si todas las anteriores fallaron. Cuando llegamos a else if (nota >= 7), ya sabemos que la nota es menor que 9, así que ese >= 7 cubre exactamente el tramo 7-8 sin necesidad de escribir nota >= 7 && nota <= 8.

Trampa habitual: comprobar los rangos de menor a mayor. Si empezaras por if (nota >= 3), un 10 entraría ahí y recibiría una D, porque 10 también es >= 3. Al ir de mayor a menor, cada nota cae en su tramo correcto en la primera condición que cumple. También conviene no olvidar la validación: sin ella, una nota como 15 recibiría una A silenciosamente.

Para practicar — cópialo en Dev-C++

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
  Curso de C — Modulo 02: Condicionales
  Ejercicio 04 — PRACTICA (rellena los TODO)
  Enunciado: Lee una nota entera (0-10) e imprime la letra:
             9-10 -> A, 7-8 -> B, 5-6 -> C, 3-4 -> D, 0-2 -> F.
  Dificultad: amarillo
  Compilar: gcc -std=c11 -Wall ej04_practica.c -o ej04 && ./ej04
*/
 
#include <stdio.h>
 
int main(void) {
    int nota;
 
    // TODO: pide la nota al usuario y leela con scanf
 
    // TODO: valida que la nota esta entre 0 y 10 (usa ||)
    //       si no es valida, imprime error y haz return 1
 
    char letra;
 
    // TODO: asigna a 'letra' el caracter correcto usando if / else if / else:
    //   nota >= 9        -> 'A'
    //   nota >= 7        -> 'B'
    //   nota >= 5        -> 'C'
    //   nota >= 3        -> 'D'
    //   resto (0-2)      -> 'F'
    // Consejo: comprueba de mayor a menor para evitar solapamientos.
 
    // TODO: imprime "Nota: <letra>"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
  Curso de C — Modulo 02: Condicionales
  Ejercicio 04 — MODELO (resuelto)
  Enunciado: Lee una nota entera (0-10) e imprime la letra:
             9-10 -> A, 7-8 -> B, 5-6 -> C, 3-4 -> D, 0-2 -> F.
  Dificultad: amarillo
  Compilar: gcc -std=c11 -Wall ej04_modelo.c -o ej04 && ./ej04
*/
 
#include <stdio.h>
 
int main(void) {
    int nota;
    printf("Introduce la nota (0-10): ");
    scanf("%d", &nota);
 
    // Validacion: la nota debe estar en rango valido
    if (nota < 0 || nota > 10) {
        printf("Nota fuera de rango (0-10)\n");
        return 1;  // codigo de error distinto de 0
    }
 
    // Convertimos la nota entera a letra con if-else if en orden descendente.
    // El orden importa: comprobamos el rango mas alto primero.
    char letra;
    if (nota >= 9) {
        letra = 'A';
    } else if (nota >= 7) {
        letra = 'B';
    } else if (nota >= 5) {
        letra = 'C';
    } else if (nota >= 3) {
        letra = 'D';
    } else {
        letra = 'F';
    }
 
    printf("Nota: %c\n", letra);
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones