Ejercicio 06 — Leer dos enteros e intercambiarlos con una variable auxiliar

Dificultad: amarillo · Módulo 01 (Variables, tipos y entrada/salida)

Enunciado

Leer dos enteros e intercambiarlos con una variable auxiliar.

Diagrama de flujo

Diagrama de flujo del ejercicio 06

Cómo se resuelve

Intercambiar el contenido de dos variables. Parece trivial, pero esconde un problema de orden.

El intento ingenuo a = b; b = a; no funciona: en cuanto haces a = b, el valor original de a se pierde para siempre, y la segunda línea copia b sobre sí mismo. Acabas con las dos variables iguales.

La solución es una variable auxiliar que guarde el valor antes de pisarlo:

  1. int aux = a; — guardamos una copia del a original.
  2. a = b; — ahora a puede tomar el valor de b sin perder nada (lo teníamos en aux).
  3. b = aux;b recibe el a original que habíamos guardado.

Imagínalo con dos vasos llenos: para intercambiar sus líquidos necesitas un tercer vaso vacío. aux es ese tercer vaso. Este patrón del “swap con variable temporal” reaparece constantemente al ordenar listas.

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 01: Variables, tipos y entrada/salida
 * Ejercicio 06 — PRACTICA (rellena los TODO)
 * Enunciado: Leer dos enteros e intercambiarlos con una variable auxiliar.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej06_practica.c -o ej06 && ./ej06
 */
#include <stdio.h>
 
int main(void) {
    // TODO: declara dos enteros 'a' y 'b', inicializados a 0
 
    // TODO: lee 'a' del usuario (muestra "a = " antes)
 
    // TODO: lee 'b' del usuario (muestra "b = " antes)
 
    // TODO: muestra los valores ANTES del intercambio:
    //       "Antes: a = %d, b = %d\n"
 
    // TODO: intercambia a y b usando una variable auxiliar 'aux'
    //       Paso 1: aux = a        (guarda a)
    //       Paso 2: a   = b        (a recibe b)
    //       Paso 3: b   = aux      (b recibe el a original)
 
    // TODO: muestra los valores DESPUES del intercambio:
    //       "Después: a = %d, b = %d\n"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 01: Variables, tipos y entrada/salida
 * Ejercicio 06 — MODELO (resuelto)
 * Enunciado: Leer dos enteros e intercambiarlos con una variable auxiliar.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej06_modelo.c -o ej06 && ./ej06
 */
#include <stdio.h>
 
int main(void) {
    int a = 0, b = 0;
 
    printf("a = ");
    scanf("%d", &a);
    printf("b = ");
    scanf("%d", &b);
 
    printf("Antes: a = %d, b = %d\n", a, b);
 
    // Intercambio clasico con variable auxiliar
    // Si hicieramos a = b directamente, perderiamos el valor original de a
    int aux = a;   // guardamos a
    a = b;         // a toma el valor de b
    b = aux;       // b toma el valor original de a
 
    printf("Después: a = %d, b = %d\n", a, b);
 
    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