Ejercicio 03 — Funcion swap(int *a, int *b) que intercambia dos enteros por…

Dificultad: verde · Módulo 07 (Punteros)

Enunciado

Funcion swap(int *a, int *b) que intercambia dos enteros por referencia.

Diagrama de flujo

Diagrama de flujo del ejercicio 03

Cómo se resuelve

El intercambio (swap) es el ejemplo clásico del paso por referencia. Para intercambiar dos valores necesitas modificar las dos variables del llamador, y eso solo se puede si la función recibe sus direcciones.

  • swap(int *a, int *b) recibe dos punteros. Dentro trabajas siempre con *a y *b (los valores), nunca con a y b a secas (las direcciones).
  • Hace falta una variable temporal: int tmp = *a; guarda el valor de la primera antes de pisarlo. Luego *a = *b; y *b = tmp;. Sin ese tmp perderías uno de los dos valores en el primer paso.
  • En main, la llamada es swap(&x, &y); con los & para pasar las direcciones.

Trampa habitual: intentar el swap sin punteros, con void swap(int a, int b). Compila, pero solo intercambia las copias locales y x e y quedan intactas. Si la salida imprime lo mismo antes y después, casi seguro olvidaste los * en la función o los & en la llamada.

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 07: Punteros
 * Ejercicio 03 — PRACTICA (rellena los TODO)
 * Enunciado: Funcion swap(int *a, int *b) que intercambia dos enteros por referencia.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej03_practica.c -o ej03 && ./ej03
 */
 
#include <stdio.h>
 
/*
 * TODO 1: Define void swap(int *a, int *b).
 *         Necesitas una variable temporal 'tmp' para no perder un valor.
 *         Pasos: tmp = *a  |  *a = *b  |  *b = tmp
 */
 
int main(void) {
    int x = 5, y = 20;
 
    printf("Antes:   a=%d b=%d\n", x, y);
 
    // TODO 2: Llama a swap pasando las DIRECCIONES de x e y.
 
    printf("Despues: a=%d b=%d\n", x, y);
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 07: Punteros
 * Ejercicio 03 — MODELO (resuelto)
 * Enunciado: Funcion swap(int *a, int *b) que intercambia dos enteros por referencia.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej03_modelo.c -o ej03 && ./ej03
 */
 
#include <stdio.h>
 
/* Intercambia los valores de *a y *b usando una variable temporal */
void swap(int *a, int *b) {
    int tmp = *a;  // guardamos el valor de a
    *a = *b;       // a recibe el valor de b
    *b = tmp;      // b recibe el valor original de a
}
 
int main(void) {
    int x = 5, y = 20;
 
    printf("Antes:   a=%d b=%d\n", x, y);
    swap(&x, &y);
    printf("Despues: a=%d b=%d\n", x, y);
 
    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