Diez Ejercicios de Programación en C para Examen Final

Enunciado:
Desarrolla un programa que solicite al usuario ingresar un entero y determine si el número es positivo, negativo o cero, mostrando el mensaje correspondiente.

Ejemplo de entrada:

5

Ejemplo de salida:

positivo

Solución de referencia:

#include <stdio.h>

int main() {
    int valor;
    printf("Ingrese un entero: ");
    scanf("%d", &valor);

    if (valor > 0)
        printf("positivo\n");
    else if (valor < 0)
        printf("negativo\n");
    else
        printf("cero\n");

    return 0;
}

Ejercicio 2: Mostrar Enteros que Cumplen Condiciones Específicas (Selección + Ciclo)

Enunciado:
Escribe un programa que imprima todos los enteros entre 1 y 100 que sean divisibles por 7 pero no divisible por 5. Cada número debe estar separado por un espacio.

Ejemplo de salida:

7 14 21 28 42 49 56 63 77 84 91 98

Solución de referencia:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 100; i++) {
        if (i % 7 == 0 && i % 5 != 0) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

Ejercicio 3: Encontrar el Valor Máximo y su Índice en un Arreglo

Enunciado:
Ingresa 10 enteros y guárdalos en un arreglo. El programa debe recorrer el arreglo, encontrar el valor máximo y su posición (el índice comienza desde 0), luego mostrar el resultado.

Ejemplo de entrada:

5 7 2 9 4 3 8 0 1 6

Ejemplo de salida:

El maximo es 9, indice 3

Solución de referencia:

#include <stdio.h>
int main() {
    int datos[10], maximo, posicion = 0;
    printf("Ingrese 10 enteros: ");
    for (int i = 0; i < 10; i++) {
        scanf("%d", &datos[i]);
    }
    maximo = datos[0];
    for (int i = 1; i < 10; i++) {
        if (datos[i] > maximo) {
            maximo = datos[i];
            posicion = i;
        }
    }
    printf("El maximo es %d, indice %d\n", maximo, posicion);
    return 0;
}

Ejercicio 4: Contar Dígitos en una Cadena

Enunciado:
Escribe un programa que lea una cadena (sin espacios) yCuenta la cantidad de dígitos (0-9) que aparecen en ella, mostrando el resultado.

Ejemplo de entrada:

abc123xy7z

Ejemplo de salida:

Cantidad de digitos: 4

Solución de referencia:

#include <stdio.h>
int main() {
    char texto[100];
    int conteo = 0;
    printf("Ingrese una cadena: ");
    scanf("%s", texto);
    for (int i = 0; texto[i] != '\0'; i++) {
        if (texto[i] >= '0' && texto[i] <= '9') {
            conteo++;
        }
    }
    printf("Cantidad de digitos: %d\n", conteo);
    return 0;
}

Ejercicio 5: Función Personalizada para Calcular el MCD

Enunciado:
Define una función llamada mcd que reciba dos números enteros positivos como parámetros y devuelva su máximo común divisor. En la función principal, recibe dos enteros positivos del usuario, llama a la función y muestra el resultado.

Ejemplo de entrada:

12 18

Ejemplo de salida:

El MCD es: 6

Solución de referencia:

#include <stdio.h>
int mcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() {
    int a, b;
    printf("Ingrese dos enteros positivos: ");
    scanf("%d %d", &a, &b);
    printf("El MCD es: %d\n", mcd(a, b));
    return 0;
}

Ejercicio 6: Intercambiar Valores Usando Punteros

Enunciado:
Define una función intercambiar(int *a, int *b) que use parámetros de tipo puntero para intercambiar los valores de dos variables enteras. Prueba esta función en la función principal.

Ejemplo de salida:

Antes: a = 3, b = 8 
Despues: a = 8, b = 3

Solución de referencia:

#include <stdio.h>

void intercambiar(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a = 3, b = 8;
    printf("Antes: a = %d, b = %d\n", a, b);
    intercambia(&a, &b);
    printf("Despues: a = %d, b = %d\n", a, b);
    return 0;
}

Ejercicio 7: Invertir Cadena Usando Punteros

Enunciado:
Escribe una función void invertir(char *cadena) que use operaciones con punteros para invertir una cadena (sin usar la función strrev de la biblioteca estándar). En la función principal, ingresa una cadena, llama a la función y muestra el resultado invertido.

Ejemplo de entrada:

hola

Ejemplo de salida:

aloh

Solución de referencia:

#include <stdio.h>
#include <string.h>

void invertir(char *cadena) {
    char *inicio = cadena;
    char *fin = cadena + strlen(cadena) - 1;

    while (inicio < fin) {
        char temp = *inicio;
        *inicio = *fin;
        *fin = temp;
        inicio++;
        fin--;
    }
}

int main() {
    char cadena[100];
    printf("Ingrese una cadena: ");
    scanf("%s", cadena);
    invertir(cadena);
    printf("Invertida: %s\n", cadena);
    return 0;
}

Ejercicio 8: Arreglo de Estructuras - Buscar la Nota Más Alta

Enunciado:
Define una estructura Estudiante que contenga: número de identificación (entero), nombre (cadena) y calificación (flotante). Lee la información de 5 estudiantes ingresada por el usuario, encuentra el estudiante con la calificación más alta y muestra su información completa.

Ejemplo de entrada:

101 Juan 88.5 102 Maria 92.0 103 Pedro 76.5 104 Ana 95.0 105 Luis 90.5

Ejemplo de salida:

Mejor estudiante: ID 104, Nombre: Ana, Calificacion: 95.00

Solución de referencia:

#include <stdio.h>

struct Estudiante {
    int id;
    char nombre[20];
    float calificacion;
};

int main() {
    struct Estudiante alunos[5];
    printf("Ingrese la informacion de 5 estudiantes (ID Nombre Calificacion):\n");
    for (int i = 0; i < 5; i++) {
        scanf("%d %s %f", &alumnos[i].id, alumnos[i].nombre, &alumnos[i].calificacion);
    }

    int indiceMax = 0;
    for (int i = 1; i < 5; i++) {
        if (alumnos[i].calificacion > alunos[indiceMax].calificacion) {
            indiceMax = i;
        }
    }

    printf("Mejor estudiante: ID %d, Nombre: %s, Calificacion: %.2f\n",
           alunos[indiceMax].id, alunos[indiceMax].nombre, alunos[indiceMax].calificacion);
    return 0;
}

Ejercicio 9: Operaciones de Escritura y Lectura en Archivos

Enunciado:
Lee varias líneas de texto desde el teclado y escríbelas en un archivo de texto. Luego lee el contenido de ese archivo y muéstralo en la consola.

  • Nombre del archivo: datos.txt
  • El número de líneas es determinado por el usuario.

Solución de referencia:

#include <stdio.h>

int main() {
    FILE *archivo;
    char texto[100];
    int n;

    archivo = fopen("datos.txt", "w");
    if (!archivo) {
        printf("Error al abrir el archivo\n");
        return 1;
    }

    printf("Ingrese el numero de lineas a escribir: ");
    scanf("%d", &n);
    getchar();

    printf("Ingrese el contenido:\n");
    for (int i = 0; i < n; i++) {
        fgets(texto, sizeof(texto), stdin);
        fputs(texto, archivo);
    }
    fclose(archivo);

    archivo = fopen("datos.txt", "r");
    if (!archivo) {
        printf("Error al leer el archivo\n");
        return 1;
    }

    printf("Contenido del archivo:\n");
    while (fgets(texto, sizeof(texto), archivo)) {
        printf("%s", texto);
    }

    fclose(archivo);
    return 0;
}

Ejercicio 10: Ordenamiento de Arreglos (Método de Burbuja)

Enunciado:
Solicita al usuario un arreglo de enteros de longitud n (n no mayor a 100), usa el algoritmo de ordenamiento burbuja para ordenarlo de menor a mayor, y muestra el arreglo ordenado.

Ejemplo de entrada:

5
9 2 5 1 3

Ejemplo de salida:

1 2 3 5 9

Solución de referencia:

#include <stdio.h>

int main() {
    int numeros[100], n;
    printf("Ingrese la cantidad de elementos: ");
    scanf("%d", &n);
    printf("Ingrese %d enteros: ", n);
    for (int i = 0; i < n; i++)
        scanf("%d", &numeros[i]);

    // Ordenamiento burbuja
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (numeros[j] > numeros[j + 1]) {
                int temp = numeros[j];
                numeros[j] = numeros[j + 1];
                numeros[j + 1] = temp;
            }
        }
    }

    printf("Resultado ordenado: ");
    for (int i = 0; i < n; i++)
        printf("%d ", numeros[i]);
    printf("\n");

    return 0;
}

Publicado el 7-23 09:29