Configuración en Visual Studio:
1. Crear un nuevo proyecto: Empty Project en C++
2. Agregar un archivo .c (Source Files → Add → New Item → C++ File, pero
guardar con extensión .c)
Ejercicio 1: Gestión de estudiantes con estructuras
Enunciado: Crear un programa que gestione información de estudiantes usando
estructuras.
#include <stdio.h>
#include <string.h>
// Definición de la estructura
struct Estudiante {
char nombre[50];
int edad;
float promedio;
};
int main() {
struct Estudiante estudiante1;
// Capturar datos
printf("Ingrese el nombre del estudiante: ");
fgets([Link], 50, stdin);
[Link][strcspn([Link], "\n")] = 0; // Eliminar salto de
línea
printf("Ingrese la edad: ");
scanf("%d", &[Link]);
printf("Ingrese el promedio: ");
scanf("%f", &[Link]);
// Mostrar datos
printf("\n--- Datos del Estudiante ---\n");
printf("Nombre: %s\n", [Link]);
printf("Edad: %d años\n", [Link]);
printf("Promedio: %.2f\n", [Link]);
return 0;
Características avanzadas:
• Uso de estructuras (struct)
• fgets para cadenas con espacios
• Manipulación de strings
Ejercicio 2: Ordenamiento de un array con funciones
Enunciado: Implementar el algoritmo de ordenamiento burbuja usando
funciones.
#include <stdio.h>
// Prototipo de funciones
void ordenarBurbuja(int arr[], int n);
void imprimirArray(int arr[], int n);
int main() {
int numeros[10];
int n, i;
printf("¿Cuántos números desea ingresar? (máx 10): ");
scanf("%d", &n);
printf("Ingrese %d números:\n", n);
for(i = 0; i < n; i++) {
printf("Número %d: ", i + 1);
scanf("%d", &numeros[i]);
printf("\nArray original: ");
imprimirArray(numeros, n);
ordenarBurbuja(numeros, n);
printf("Array ordenado: ");
imprimirArray(numeros, n);
return 0;
// Función para ordenar usando algoritmo burbuja
void ordenarBurbuja(int arr[], int n) {
int i, j, temp;
for(i = 0; i < n-1; i++) {
for(j = 0; j < n-i-1; j++) {
if(arr[j] > arr[j+1]) {
// Intercambiar elementos
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
// Función para imprimir array
void imprimirArray(int arr[], int n) {
int i;
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
printf("\n");
Características avanzadas:
• Funciones con arrays como parámetros
• Algoritmo de ordenamiento
• Modularización del código
Ejercicio 3: Gestión de inventario con arrays de estructuras
Enunciado: Sistema simple de inventario que maneje múltiples productos.
#include <stdio.h>
#include <string.h>
#define MAX_PRODUCTOS 5
struct Producto {
int codigo;
char nombre[30];
float precio;
int stock;
};
int main() {
struct Producto inventario[MAX_PRODUCTOS];
int i, cantidad;
printf("=== SISTEMA DE INVENTARIO ===\n");
// Ingresar productos
for(i = 0; i < MAX_PRODUCTOS; i++) {
printf("\nProducto %d:\n", i + 1);
inventario[i].codigo = i + 1;
printf("Nombre: ");
getchar(); // Limpiar buffer
fgets(inventario[i].nombre, 30, stdin);
inventario[i].nombre[strcspn(inventario[i].nombre, "\n")] = 0;
printf("Precio: ");
scanf("%f", &inventario[i].precio);
printf("Stock: ");
scanf("%d", &inventario[i].stock);
// Mostrar inventario
printf("\n=== INVENTARIO ACTUAL ===\n");
printf("%-5s %-20s %-10s %-5s\n", "Código", "Nombre", "Precio", "Stock");
printf("-------------------------------------------------\n");
for(i = 0; i < MAX_PRODUCTOS; i++) {
printf("%-5d %-20s $%-9.2f %-5d\n",
inventario[i].codigo,
inventario[i].nombre,
inventario[i].precio,
inventario[i].stock);
return 0;
Características avanzadas:
• Array de estructuras
• Formato de salida con printf
• Manejo de buffers de entrada
Ejercicio 4: Manejo de archivos - Registro de empleados
Enunciado: Programa que guarda y lee información de empleados desde un
archivo.
#include <stdio.h>
#include <stdlib.h>
struct Empleado {
int id;
char nombre[50];
char departamento[30];
float salario;
};
void guardarEmpleados();
void leerEmpleados();
int main() {
int opcion;
do {
printf("\n=== SISTEMA DE EMPLEADOS ===\n");
printf("1. Guardar empleados\n");
printf("2. Leer empleados\n");
printf("3. Salir\n");
printf("Seleccione una opción: ");
scanf("%d", &opcion);
switch(opcion) {
case 1:
guardarEmpleados();
break;
case 2:
leerEmpleados();
break;
case 3:
printf("Saliendo del programa...\n");
break;
default:
printf("Opción inválida!\n");
} while(opcion != 3);
return 0;
void guardarEmpleados() {
FILE *archivo;
struct Empleado emp;
int n, i;
archivo = fopen("[Link]", "wb");
if(archivo == NULL) {
printf("Error al crear el archivo!\n");
return;
}
printf("¿Cuántos empleados desea ingresar? ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
printf("\nEmpleado %d:\n", i + 1);
[Link] = i + 1;
printf("Nombre: ");
getchar();
fgets([Link], 50, stdin);
[Link][strcspn([Link], "\n")] = 0;
printf("Departamento: ");
fgets([Link], 30, stdin);
[Link][strcspn([Link], "\n")] = 0;
printf("Salario: ");
scanf("%f", &[Link]);
fwrite(&emp, sizeof(struct Empleado), 1, archivo);
fclose(archivo);
printf("Datos guardados correctamente!\n");
void leerEmpleados() {
FILE *archivo;
struct Empleado emp;
archivo = fopen("[Link]", "rb");
if(archivo == NULL) {
printf("No hay datos guardados!\n");
return;
printf("\n=== LISTA DE EMPLEADOS ===\n");
printf("%-5s %-20s %-15s %-10s\n", "ID", "Nombre", "Departamento", "Salario");
printf("--------------------------------------------------------\n");
while(fread(&emp, sizeof(struct Empleado), 1, archivo)) {
printf("%-5d %-20s %-15s $%-9.2f\n",
[Link], [Link], [Link], [Link]);
fclose(archivo);
Características avanzadas:
• Manejo de archivos binarios (fopen, fwrite, fread)
• Funciones con estructuras
• Menú interactivo
Ejercicio 5: Búsqueda binaria en array ordenado
Enunciado: Implementar búsqueda binaria con funciones recursivas.
#include <stdio.h>
// Prototipos
int busquedaBinaria(int arr[], int inicio, int fin, int objetivo);
void ordenarArray(int arr[], int n);
int main() {
int numeros[10];
int n, i, objetivo, resultado;
printf("Ingrese la cantidad de números (máx 10): ");
scanf("%d", &n);
printf("Ingrese %d números ordenados:\n", n);
for(i = 0; i < n; i++) {
printf("Número %d: ", i + 1);
scanf("%d", &numeros[i]);
// Asegurar que el array esté ordenado
ordenarArray(numeros, n);
printf("Array ordenado: ");
for(i = 0; i < n; i++) {
printf("%d ", numeros[i]);
printf("\n");
printf("Ingrese el número a buscar: ");
scanf("%d", &objetivo);
resultado = busquedaBinaria(numeros, 0, n-1, objetivo);
if(resultado != -1) {
printf("El número %d se encuentra en la posición %d\n", objetivo, resultado);
} else {
printf("El número %d no se encuentra en el array\n", objetivo);
return 0;
// Función de búsqueda binaria recursiva
int busquedaBinaria(int arr[], int inicio, int fin, int objetivo) {
if(inicio <= fin) {
int medio = inicio + (fin - inicio) / 2;
if(arr[medio] == objetivo) {
return medio;
if(arr[medio] > objetivo) {
return busquedaBinaria(arr, inicio, medio - 1, objetivo);
return busquedaBinaria(arr, medio + 1, fin, objetivo);
}
return -1; // No encontrado
// Función para ordenar (usando selección)
void ordenarArray(int arr[], int n) {
int i, j, min_idx, temp;
for(i = 0; i < n-1; i++) {
min_idx = i;
for(j = i+1; j < n; j++) {
if(arr[j] < arr[min_idx]) {
min_idx = j;
// Intercambiar
temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
Características avanzadas:
• Algoritmo de búsqueda binaria
• Recursividad
• Algoritmo de ordenamiento por selección