La evaluación final del curso de programación en C está diseñada para poner a prueba los conocimientos y habilidades que has adquirido a lo largo de todos los módulos. Esta evaluación consistirá en una serie de ejercicios prácticos y preguntas teóricas que abarcarán los temas clave del curso. A continuación, se detallan las instrucciones y los componentes de la evaluación.
Instrucciones Generales
- Tiempo Estimado: Se recomienda dedicar al menos 3 horas para completar la evaluación.
- Formato de Entrega: Los ejercicios prácticos deben ser entregados en un archivo comprimido (.zip) que contenga todos los archivos fuente (.c) y cualquier otro archivo necesario para la compilación y ejecución de los programas.
- Criterios de Evaluación: Se evaluará la corrección, eficiencia, legibilidad y documentación del código. Además, se valorará la correcta implementación de las mejores prácticas y técnicas de optimización aprendidas.
Componentes de la Evaluación
- Preguntas Teóricas
Responde las siguientes preguntas de manera concisa y clara:
-
Tipos de Datos y Variables:
- ¿Cuál es la diferencia entre una variable y una constante en C?
- Explica la conversión de tipos implícita y explícita con ejemplos.
-
Flujo de Control:
- Describe cómo funcionan las sentencias
if-else
y proporciona un ejemplo. - ¿Cuál es la diferencia entre los bucles
for
,while
ydo-while
?
- Describe cómo funcionan las sentencias
-
Funciones:
- ¿Qué es una función recursiva? Proporciona un ejemplo.
- Explica el concepto de ámbito y vida de las variables con ejemplos.
-
Punteros:
- ¿Qué es un puntero y cómo se declara en C?
- Explica la aritmética de punteros con un ejemplo.
-
Asignación Dinámica de Memoria:
- ¿Cuál es la diferencia entre
malloc
ycalloc
? - ¿Qué es una fuga de memoria y cómo se puede evitar?
- ¿Cuál es la diferencia entre
- Ejercicios Prácticos
Implementa los siguientes programas en C:
-
Calculadora Básica:
- Crea un programa que implemente una calculadora básica que pueda realizar operaciones de suma, resta, multiplicación y división. El programa debe utilizar funciones para cada operación y manejar errores como la división por cero.
#include <stdio.h> float suma(float a, float b) { return a + b; } float resta(float a, float b) { return a - b; } float multiplicacion(float a, float b) { return a * b; } float division(float a, float b) { if (b != 0) { return a / b; } else { printf("Error: División por cero.\n"); return 0; } } int main() { float num1, num2; char operador; printf("Introduce el primer número: "); scanf("%f", &num1); printf("Introduce el operador (+, -, *, /): "); scanf(" %c", &operador); printf("Introduce el segundo número: "); scanf("%f", &num2); switch (operador) { case '+': printf("Resultado: %.2f\n", suma(num1, num2)); break; case '-': printf("Resultado: %.2f\n", resta(num1, num2)); break; case '*': printf("Resultado: %.2f\n", multiplicacion(num1, num2)); break; case '/': printf("Resultado: %.2f\n", division(num1, num2)); break; default: printf("Operador no válido.\n"); } return 0; }
-
Gestión de Memoria Dinámica:
- Escribe un programa que lea una lista de números enteros desde el usuario, los almacene en un arreglo dinámico y luego calcule y muestre la suma y el promedio de los números. Utiliza
malloc
yfree
para la gestión de memoria.
#include <stdio.h> #include <stdlib.h> int main() { int n, i; int *arr; int suma = 0; float promedio; printf("Introduce el número de elementos: "); scanf("%d", &n); arr = (int *)malloc(n * sizeof(int)); if (arr == NULL) { printf("Error de asignación de memoria.\n"); return 1; } printf("Introduce los elementos:\n"); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); suma += arr[i]; } promedio = (float)suma / n; printf("Suma: %d\n", suma); printf("Promedio: %.2f\n", promedio); free(arr); return 0; }
- Escribe un programa que lea una lista de números enteros desde el usuario, los almacene en un arreglo dinámico y luego calcule y muestre la suma y el promedio de los números. Utiliza
-
Manejo de Archivos:
- Crea un programa que lea el contenido de un archivo de texto y cuente el número de palabras en el archivo. El nombre del archivo debe ser proporcionado por el usuario.
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { FILE *file; char filename[100]; char ch; int word_count = 0; int in_word = 0; printf("Introduce el nombre del archivo: "); scanf("%s", filename); file = fopen(filename, "r"); if (file == NULL) { printf("No se puede abrir el archivo %s\n", filename); return 1; } while ((ch = fgetc(file)) != EOF) { if (isspace(ch)) { in_word = 0; } else if (in_word == 0) { in_word = 1; word_count++; } } fclose(file); printf("Número de palabras en el archivo: %d\n", word_count); return 0; }
- Proyecto Final
Desarrolla un proyecto que integre varios conceptos aprendidos en el curso. El proyecto debe ser una aplicación completa que resuelva un problema real o simulado. Aquí hay algunas ideas de proyectos:
- Sistema de Gestión de Biblioteca: Un programa que permita gestionar libros, usuarios y préstamos.
- Juego de Adivinanza de Números: Un juego interactivo donde el usuario debe adivinar un número generado aleatoriamente por el programa.
- Agenda de Contactos: Un programa que permita almacenar, buscar y eliminar contactos.
El proyecto debe incluir:
- Descripción del Proyecto: Un documento que describa el propósito del proyecto, las funcionalidades implementadas y las instrucciones para compilar y ejecutar el programa.
- Código Fuente: Todos los archivos fuente necesarios para compilar y ejecutar el programa.
- Documentación: Comentarios en el código y un archivo README que explique cómo usar el programa.
Conclusión
La evaluación final es una oportunidad para demostrar tu dominio de la programación en C. Asegúrate de revisar todos los conceptos y prácticas aprendidas a lo largo del curso. ¡Buena suerte!
Curso de Programación en C
Módulo 1: Introducción a C
- Introducción a la Programación
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
Módulo 2: Tipos de Datos y Variables
Módulo 3: Flujo de Control
Módulo 4: Funciones
- Introducción a las Funciones
- Argumentos de Función y Valores de Retorno
- Ámbito y Vida de las Variables
- Funciones Recursivas
Módulo 5: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Funciones de Arreglos y Cadenas
Módulo 6: Punteros
Módulo 7: Estructuras y Uniones
Módulo 8: Asignación Dinámica de Memoria
Módulo 9: Manejo de Archivos
- Introducción al Manejo de Archivos
- Lectura y Escritura de Archivos
- Posicionamiento de Archivos
- Manejo de Errores en Operaciones de Archivos
Módulo 10: Temas Avanzados
- Directivas del Preprocesador
- Argumentos de Línea de Comandos
- Listas de Argumentos Variables
- Multihilo en C
Módulo 11: Mejores Prácticas y Optimización
- Legibilidad del Código y Documentación
- Técnicas de Depuración
- Optimización del Rendimiento
- Consideraciones de Seguridad