Saltar al contenido
Portada » C/C++ » 2. Fundamentos del Lenguaje C

2. Fundamentos del Lenguaje C

Fundamentos del Lenguaje C. En este capítulo estudiaremos los fundamentos esenciales del lenguaje C, aquellos conceptos básicos sin los cuales no podrías escribir un programa funcional. Aprenderás cuáles son los tipos de datos primitivos disponibles —como int, float, char y double— y cómo se utilizan para representar diferentes tipos de información dentro de un programa. Veremos cómo declarar y usar variables, cómo definir constantes que no cambien durante la ejecución, y cómo utilizar operadores aritméticos, relacionales, lógicos y bit a bit para manipular datos.

También te veremos la estructura general de un programa en C, desde la declaración de funciones hasta el cuerpo principal, y te enseñaremos a comunicarte con el usuario mediante funciones estándar de entrada y salida como printf y scanf. Finalmente, abordaremos las buenas prácticas de estilo y la escritura de comentarios, indispensables para crear código legible, organizado y fácil de mantener. Vamos….

2.1 Tipos de Datos Primitivos en C

En el lenguaje C, los tipos de datos primitivos son los bloques fundamentales sobre los que se construyen todas las estructuras de datos y operaciones. Estos tipos permiten almacenar distintas clases de información como números enteros, números decimales, caracteres y valores lógicos. A continuación, explicamos los principales tipos de datos primitivos en C, con sus variantes, ejemplos y consideraciones importantes.

int – Enteros

El tipo int (abreviatura de integer) se utiliza para representar números enteros, es decir, sin parte decimal. Puede ser positivo, negativo o cero.

int edad = 25;
int temperatura = -3;

Modificadores de tamaño y signo:

C permite ajustar el tamaño y el signo del tipo int mediante modificadores:

  • short int (o simplemente short) → menor rango (habitualmente 2 bytes)
  • long int (o long) → mayor rango (habitualmente 4 u 8 bytes)
  • long long int → aún más rango (habitualmente 8 bytes)
  • unsigned → solo números positivos, permite duplicar el rango superior
unsigned int positivos = 4000;
short int pequeño = -120;
long int grande = 300000L;

float – Números Reales (con punto decimal)

El tipo float se usa para representar números reales o de punto flotante. Su precisión es limitada (normalmente 6-7 cifras decimales).

float pi = 3.14159;
float temperatura = -12.5;

Se utiliza f al final para indicar un número flotante literal:

loat x = 5.0f;

double – Números Reales de Doble Precisión

double es como float, pero con mayor precisión (hasta 15-16 cifras decimales) y por tanto ocupa más memoria.

double gravedad = 9.80665;
double resultado = 1.234567891234567;

También existe long double para aún más precisión en algunas implementaciones.

char – Caracteres

El tipo char sirve para representar un solo carácter, almacenado como un número entero según la tabla ASCII.

char letra = 'A';
char signo = '+';
char salto = '\n'; // carácter especial: salto de línea

Un char también puede utilizarse para representar valores numéricos entre -128 y 127 (o de 0 a 255 si es unsigned char).

unsigned char byte = 200;

_Bool – Booleanos (en C99 y versiones posteriores)

En C no existía un tipo booleano nativo hasta C99. Con la inclusión de _Bool (o bool tras incluir <stdbool.h>), se pueden representar valores true y false.

#include <stdbool.h>

bool es_valido = true;

Tabla Resumen de Tipos Primitivos

TipoDescripciónTamaño (estimado)Rango Aproximado
intEntero con signo4 bytes-2,147,483,648 a 2,147,483,647
unsigned intEntero sin signo4 bytes0 a 4,294,967,295
shortEntero corto2 bytes-32,768 a 32,767
longEntero largo4 u 8 bytesDepende del sistema
floatReal de precisión simple4 bytes±3.4e-38 a ±3.4e+38
doubleReal de doble precisión8 bytes±1.7e-308 a ±1.7e+308
charCarácter ASCII1 byte-128 a 127 o 0 a 255
boolBooleano (C99)1 bytetrue (1), false (0)

Buenas Prácticas

  • Siempre elige el tipo más adecuado al valor que necesitas almacenar. No uses double si basta con int.
  • Para constantes numéricas, utiliza sufijos (L, f) según el tipo deseado.
  • Asegúrate de no exceder el rango del tipo, ya que puede causar resultados inesperados o errores.
  • Usa sizeof(tipo) para verificar cuánto espacio ocupa un tipo de dato en tu sistema.

Ejemplo Práctico

#include <stdio.h>

int main() {
int edad = 30;
float altura = 1.75f;
char inicial = 'M';
double saldo = 12345.67;
_Bool es_estudiante = 1;

printf("Edad: %d\n", edad);
printf("Altura: %.2f\n", altura);
printf("Inicial: %c\n", inicial);
printf("Saldo: %.2lf\n", saldo);
printf("¿Es estudiante? %s\n", es_estudiante ? "Sí" : "No");

return 0;
}

2.2 Variables y Constantes en C

En cualquier lenguaje de programación, las variables y constantes son fundamentales para almacenar y manipular datos. En C, su declaración y uso está estrictamente tipado, lo que significa que debes definir el tipo de dato que contendrán desde el principio.

¿Qué es una Variable?

Una variable es un espacio reservado en memoria que se utiliza para almacenar un valor que puede cambiar durante la ejecución del programa. Cada variable tiene:

  • Un nombre (identificador),
  • Un tipo de dato,
  • Y una dirección de memoria interna donde se guarda el valor.

Sintaxis general:

tipo nombre_variable;

O bien:

tipo nombre_variable = valor_inicial;

Ejemplos:

int edad = 25;
float peso = 68.5;
char letra = 'A';

Reglas para nombrar variables:

El nombre que asignamos a las variables deben cumplir las siguiente restricciones:

  • Deben comenzar con una letra (A-Z, a-z) o guion bajo (_).
  • No pueden empezar por un número.
  • No se permiten espacios ni símbolos especiales.
  • No pueden tener el mismo nombre que una palabra reservada de C (int, return, if, etc.).
  • C distingue entre mayúsculas y minúsculas (edadEdad).

¿Qué es una Constante?

Una constante es similar a una variable, pero su valor no puede cambiar una vez definido. Se utiliza para valores que deben permanecer fijos durante toda la ejecución del programa, como el valor de π o un límite máximo.

En C, hay dos formas comunes de declarar constantes:

– Usando #define (directiva de preprocesador)

#define PI 3.14159
#define MAX_ESTUDIANTES 30
  • Se suele escribir en mayúsculas como convención.
  • No tiene tipo explícito.
  • Se reemplaza directamente por el valor en tiempo de compilación.

– Usando const

const float PI = 3.14159;
const int max_edades = 100;
  • Tiene un tipo de dato y ocupa espacio en memoria como una variable.
  • Es más seguro que #define, especialmente en programas grandes o con compiladores modernos.

Ejemplo práctico:

#include <stdio.h>

#define IVA 0.21 // constante preprocesador

int main() {
const float PI = 3.14159;
int radio = 5;
float area = PI * radio * radio;

printf("El área del círculo es: %.2f\n", area);
printf("IVA actual: %.2f\n", IVA);

return 0;
}


// Salida del script:
El área del círculo es: 78.54
IVA actual: 0.21

Buenas Prácticas

  • Utiliza nombres descriptivos: en lugar de x o y, usa altura, precio, edad, etc.
  • Declara variables lo más cerca posible de donde las vayas a usar.
  • Prefiere const sobre #define para constantes, ya que ofrece mayor control de tipo y depuración.
  • Usa #define para valores que representan configuraciones globales o constantes de preprocesador, como tamaños de búfer o configuraciones del sistema.
int a = 10, b = 20, c = 30; // válido, pero menos legible

2.3 Operadores en C (aritméticos, relacionales, lógicos, bit a bit)

Los operadores son símbolos que le indican al compilador que debe realizar una operación específica sobre uno o más operandos. En C, los operadores se agrupan en varias categorías según el tipo de operación que realizan. Aquí te explicamos las más importantes en esta etapa del curso:

Operadores Aritméticos

Estos se utilizan para realizar operaciones matemáticas básicas entre variables numéricas.

OperadorSignificadoEjemplo
+Sumaa + b
-Restaa - b
*Multiplicacióna * b
/Divisióna / b
%Módulo (resto)a % b

Nota importante: cuando se realiza una división entre enteros, el resultado también será un entero (se trunca la parte decimal). Por ejemplo, 5 / 2 da 2.

Operadores Relacionales o de Comparación

Permiten comparar valores. Se usan frecuentemente en estructuras de control como if, while, etc.

OperadorSignificadoEjemplo
==Igual aa == b
!=Distinto dea != b
<Menor quea < b
>Mayor quea > b
<=Menor o igual quea <= b
>=Mayor o igual quea >= b

Estos operadores devuelven un valor de tipo int: 1 si la condición es verdadera y 0 si es falsa.

Operadores Lógicos

Se utilizan para combinar expresiones booleanas (condiciones verdaderas o falsas). Muy útiles en decisiones complejas.

OperadorNombreEjemploSignificado
&&AND lógicoa > 0 && b < 10Verdadero si ambas condiciones son verdaderas
``OR lógico
!NOT lógico!aVerdadero si a es falso (0)

Operadores de Asignación

Permiten asignar valores a variables.

OperadorEjemploEquivalente a
=a = 5Asigna 5 a a
+=a += 2a = a + 2
-=a -= 2a = a - 2
*=a *= 2a = a * 2
/=a /= 2a = a / 2
%=a %= 2a = a % 2

Operadores de Incremento y Decremento

Se utilizan para aumentar o disminuir en 1 el valor de una variable.

OperadorDescripciónEjemplo
++Incremento en 1i++ o ++i
--Decremento en 1i-- o --i
  • ++i incrementa antes de usar la variable.
  • i++ incrementa después de usarla.

Operadores de Incremento/Decremento: Prefix vs Postfix

Dentro de los operadores de Incremento/Decremente existen versiones prefix y postfix, y su uso puede tener efectos distintos en expresiones más complejas.

En C, los operadores ++ y -- se pueden usar antes o después de una variable. Esto no solo afecta la sintaxis, sino también el momento en que se realiza el cambio de valor, lo cual es muy importante a la hora de evaluar las expresiones.

Prefix (++i o --i)

El operador modifica el valor de la variable antes de devolverlo.

int i = 5;
int x = ++i; // i se incrementa a 6, luego x toma el valor 6
  • Primero se incrementa o decrementa la variable.
  • Luego, ese nuevo valor se usa en la expresión.

Usos típicos:

  • Cuando necesitas usar el valor ya modificado de inmediato.
  • En bucles donde el incremento previo tiene sentido lógico.
Postfix (i++ o i--)

El operador devuelve el valor actual de la variable y luego lo modifica.

int i = 5;
int x = i++; // x toma el valor 5, y luego i se incrementa a 6
  • Primero se usa el valor actual.
  • Luego, la variable se incrementa o decrementa.

Usos típicos:

  • Cuando necesitas usar el valor antes de cambiarlo.
  • En estructuras donde el incremento debe ocurrir después de una operación (por ejemplo, recorrer arrays).

Operadores Bit a Bit (Bitwise)

Manipulan directamente los bits individuales de una variable. Son muy útiles en programación de bajo nivel (como sistemas embebidos).

OperadorNombreEjemploDescripción
&ANDa & bCompara cada bit y devuelve 1 si ambos son 1
``OR`a
^XORa ^ bDevuelve 1 si los bits son diferentes
~NOT~aInvierte los bits
<<Shift lefta << 1Desplaza bits a la izquierda
>>Shift righta >> 1Desplaza bits a la derecha

Estos operadores requieren un conocimiento más avanzado sobre el almacenamiento binario de datos, y los veremos más en profundidad cuando trabajemos con máscaras de bits y hardware.

Buenas Prácticas

  • Usa paréntesis para agrupar operaciones complejas y evitar errores de precedencia.
  • Evita abusar de operadores en una sola línea si comprometes la legibilidad.
  • Familiarízate con el orden de evaluación (precedencia) de operadores para evitar errores sutiles.

1.4 Estructura general de un programa en C/C++

Todo programa escrito en C o C++ sigue una estructura básica común que permite al compilador entender qué instrucciones debe ejecutar, en qué orden, y cómo debe gestionar las funciones, variables y recursos del programa. Conocer esta estructura es fundamental antes de escribir código más complejo, ya que proporciona el esqueleto sobre el cual se construyen todos los programas.

Partes esenciales de un programa C/C++

A continuación se describen los componentes fundamentales de un programa típico:

1º Inclusión de bibliotecas

Antes de poder usar ciertas funciones (como printf, scanf o cout), es necesario incluir los archivos de cabecera que las contienen.

En C:

#include <stdio.h>  // Para funciones de entrada/salida
#include <stdlib.h> // Para funciones auxiliares como malloc, exit, etc.

En C++:

#include <iostream> // Para cout y cin
using namespace std; // Permite evitar escribir std::cout, std::cin, etc.

Función principal: main()

Es el punto de entrada del programa. El sistema operativo siempre comienza la ejecución del programa desde esta función.

int main() {
// Código a ejecutar
return 0; // Indica que el programa terminó correctamente
}

En C++, main() se escribe igual y también devuelve un entero (int). La instrucción return 0; es opcional en algunos entornos modernos de C++, pero sigue siendo recomendable. Con la instrucción return indicamos el valor de salida que devolvemos al Sistema Operativo.

Declaración de variables

Se hace dentro de main() o al inicio de otras funciones. Estas variables se usan para almacenar valores que el programa va a procesar.

int edad;
float altura;
char inicial;

Bloques de código

Los bloques se delimitan entre llaves {}. Cada función tiene su propio bloque, y dentro puedes incluir instrucciones, condiciones, bucles, etc.

int main() {
int numero = 10;
if (numero > 0) {
printf("El número es positivo.\n");
}
return 0;
}

5º Instrucciones del programa

Dentro de main() o cualquier otra función, se colocan las instrucciones que realiza el programa, como operaciones, llamadas a funciones, condiciones, bucles, etc.

printf("Hola, mundo\n");

Comentarios

Los comentarios sirven para documentar el código y no son ejecutados por el programa.

// Este es un comentario de una línea

/* Este es un
comentario de varias líneas */

Ejemplo completo en C:

Así pues la estructura de un programa en C queda de la siguiente manera:

#include <stdio.h>  // Incluir biblioteca para entrada/salida

int main() { // Función principal
int edad = 25; // Declaración de variable
printf("Tienes %d años.\n", edad); // Imprimir mensaje
return 0; // Fin del programa
}

Ejemplo completo en C++:

Y el mismo programa en C++

#include <iostream>  // Biblioteca de entrada/salida en C++

using namespace std;

int main() {
int edad = 25;
cout << "Tienes " << edad << " años." << endl;
return 0;
}

Consideraciones importantes a tener en cuenta:

  • Cada instrucción termina con punto y coma ;.
  • El compilador siempre necesita una función main().
  • Es común declarar las funciones auxiliares antes de main() o proporcionar un prototipo si se declaran después.

1.5 Entrada y salida estándar en C: printf() y scanf()

En cualquier programa es esencial poder comunicarse con el usuario: mostrarle mensajes, resultados de cálculos, pedirle datos de entrada, etc. En C, esta interacción se realiza mediante funciones de la biblioteca estándar ubicadas en <stdio.h> (Standard Input Output Header).

Las dos funciones más importantes para esto son:

  • printf() → Para mostrar información al usuario (salida estándar).
  • scanf() → Para leer información ingresada por el usuario (entrada estándar).

printf() — Mostrar información por pantalla

La función printf() permite imprimir texto o datos en la consola.

Sintaxis general:

printf("texto con formato", valores);

Ejemplos básicos:

printf("Hola mundo\n");
// Hola mundo
int edad = 25;
printf("Tienes %d años\n", edad);

// Tienes 25 años

Especificadores de formato

printf nos permite incluir secuencias de caracteres que indican qué tipo de dato se va a imprimir:

EspecificadorTipo de datoEjemplo de uso
%dEntero (int)printf("%d", 10);
%fComa flotante (float)printf("%f", 3.14);
%.2ffloat con 2 decimalesprintf("%.2f", 3.1416);
%cCarácter (char)printf("%c", 'A');
%sCadena de textoprintf("%s", "Hola");
%uEntero sin signoprintf("%u", 300);
%x, %XNúmero hexadecimalprintf("%x", 255);ff

Concatenación de valores:

Se pueden incluir multiples valores en una salida de printf, los modificadores se sustituirán por los valores correspodientes según el orden en el que se introduzcan, por tanto, hay que prestar atención a la hora de colocar dichas variables.

int edad = 20;
float altura = 1.75;
printf("Edad: %d años, Altura: %.2f m\n", edad, altura);

// Edad: 20 años, Altura: 1.75 m

scanf() — Leer datos introducidos por el usuario

scanf() permite capturar datos desde el teclado y guardarlos en variables.

Sintaxis general:

scanf("formato", &variable);

Es obligatorio usar el símbolo & (operador de dirección) para pasar la dirección de memoria de la variable, ya que scanf() necesita modificar su valor. Realmente lo que se está indicando es la posibión de memoria de dicha variable y scanf guarda el dato en esa posición de memoria.

Ejemplos básicos:

int edad;
printf("Introduce tu edad: ");
scanf("%d", &edad);
float peso;
printf("Introduce tu peso: ");
scanf("%f", &peso);
char letra;
printf("Introduce una letra: ");
scanf(" %c", &letra); // Nota: el espacio antes de %c evita errores con caracteres pendientes del buffer

Leer múltiples variables a la vez:

scanf permite leer distintos valores y asignarlos a cada variable. Cada valor hay que introducirlo pulsando la tecla enter.

int x, y;
printf("Introduce dos números: ");
scanf("%d %d", &x, &y);
printf("Has introducido: %d y %d\n", x, y);

Consideraciones importantes

  • printf() no modifica datos, solo los muestra.
  • scanf() necesita que las variables estén inicializadas correctamente y usa & para acceder a su dirección.
  • Hay que tener cuidado con el tipo de datos, ya que usar el especificador incorrecto puede causar errores o comportamientos inesperados.
  • Para char, se recomienda usar " %c" (con espacio) para evitar capturar caracteres invisibles como el salto de línea (\n).

Ejemplo completo:

#include <stdio.h>

int main() {
int edad;
float peso;
char inicial;

printf("Introduce tu edad: ");
scanf("%d", &edad);

printf("Introduce tu peso: ");
scanf("%f", &peso);

printf("Introduce la inicial de tu nombre: ");
scanf(" %c", &inicial);

printf("\nResumen de datos:\n");
printf("Edad: %d años\n", edad);
printf("Peso: %.2f kg\n", peso);
printf("Inicial: %c\n", inicial);

return 0;
}

Comentarios y convenciones de código en C

Escribir un programa funcional es solo una parte del trabajo de un buen programador. Tan importante como que un programa funcione correctamente es que sea fácil de entender, mantener y ampliar. Para lograr esto, en C (como en cualquier otro lenguaje), debemos aplicar dos prácticas esenciales:

  1. Comentar adecuadamente el código.
  2. Seguir convenciones de estilo coherentes.

1.6 Comentarios en C

Los comentarios son notas que el programador inserta en el código, pero que el compilador ignora completamente. Sirven para explicar qué hace un bloque de código, anotar ideas, advertencias o simplemente dejar recordatorios.

/* Este es un comentario
que abarca varias líneas.
Útil para explicaciones más largas. */
int edad = 25;

Tipos de comentarios

Comentario de múltiples líneas (/* ... */)

C admite dos tipos de comentarios:

Comentario de una sola línea (//)

// Este es un comentario de una línea
int edad = 25; // Aquí se guarda la edad

¿Cuándo comentar?

Un comentario bien usado explica el porqué, no solo el qué. Ejemplos de buenos usos:

  • Al principio del archivo: describir qué hace el programa.
  • Al inicio de funciones: explicar su propósito y parámetros.
  • En bloques complejos: describir la lógica o la razón de alguna decisión.
  • Para marcar TODOs o advertencias.

Malos usos de comentarios:

  • Repetir literalmente lo que dice el código (redundante).
  • Comentarios desactualizados que no reflejan el comportamiento actual.
  • Abusar de comentarios innecesarios.

Convenciones de estilo

Además de los comentarios, existen reglas no obligatorias pero altamente recomendadas que ayudan a que el código sea más claro y uniforme. Estas reglas se conocen como convenciones de estilo o de codificación.

Nombres de variables

  • Usa nombres significativos:
int x; // Malo: no se entiende qué representa int edadUsuario; // Bueno: nombre descriptivo
  • Usa minúsculas o camelCase, según el estándar que sigas.

Identación y bloques

Un código bien indentado (es decir, con sangría coherente) es más legible.

// Malo
if(x>0){
printf("Positivo");
}else{
printf("Negativo");
}

// Bueno
if (x > 0) {
printf("Positivo");
} else {
printf("Negativo");
}

Espacios en blanco

Usa espacios para mejorar la claridad:

int suma=a+b;      // Malo
int suma = a + b; // Bueno

Longitud y organización del código

  • No pongas varias instrucciones en la misma línea.
  • Divide el código en funciones pequeñas con tareas claras.
  • Usa bloques ({}) incluso si no son obligatorios.

Convenciones comunes en C

  • Variables: numero, totalSuma, indice, nombreUsuario
  • Constantes: #define PI 3.14159
  • Funciones: calcularPromedio(), mostrarMenu()
  • Macros y constantes: en mayúsculas separadas por guiones bajos

Ejemplo completo bien comentado y formateado

#include <stdio.h>

// Programa que calcula el cuadrado de un número
int main() {
int numero;

// Pedir al usuario que introduzca un número
printf("Introduce un número: ");
scanf("%d", &numero);

// Mostrar el cuadrado del número
printf("El cuadrado de %d es %d\n", numero, numero * numero);

return 0;
}

Aquí finaliza el capítulo, hemos creado las bases mínimas para que podamos realizar nuestros primeros programas. Vamos a practicar con unos ejercicios prácticos propuestos.

Ejercicio 1: Calcular el área de un rectángulo
Enunciado:
Escribe un programa en C que solicite al usuario la base y la altura de un rectángulo, y luego calcule y muestre el área.
Te recuerdo que el área de un rectángulo se calcula con la fórmula: área = base * altura

Código:

#include <stdio.h>

int main() {
    float base, altura, area;

    // Solicitar base y altura al usuario
    printf("Introduce la base del rectángulo: ");
    scanf("%f", &base);

    printf("Introduce la altura del rectángulo: ");
    scanf("%f", &altura);

    // Calcular el área
    area = base * altura;

    // Mostrar el resultado
    printf("El área del rectángulo es: %.2f\n", area);

    return 0;
}

Explicación:

  • Se usan variables float para permitir valores con decimales.
  • scanf() se utiliza para leer la entrada del usuario.
  • printf() muestra el resultado con %.2f, que limita a 2 decimales.
  • Se sigue una estructura clara y se incluye un comentario para cada bloque funcional.
Ejercicio 2: Conversor de temperatura (Celsius a Fahrenheit)
Enunciado:

Crea un programa que lea una temperatura en grados Celsius y la convierta a Fahrenheit.
La fórmula de conversión es: Fahrenheit = (Celsius × 9/5) + 32

Código:

#include <stdio.h>

int main() {
    float celsius, fahrenheit;

    // Solicitar temperatura en Celsius
    printf("Introduce la temperatura en grados Celsius: ");
    scanf("%f", &celsius);

    // Realizar la conversión
    fahrenheit = (celsius * 9 / 5) + 32;

    // Mostrar el resultado
    printf("%.2f grados Celsius equivalen a %.2f grados Fahrenheit\n", celsius, fahrenheit);

    return 0;
}

Explicación:

  • Uso de variables float por tratarse de medidas físicas que pueden incluir decimales.
  • Se emplea una operación aritmética para la conversión.
  • Comentarios breves aclaran cada paso.
Ejercicio 3: Uso de operadores de incremento y decremento
Enunciado:

Declara una variable entera x con valor 10. Usa operadores de incremento y decremento (++ y --) en forma prefix y postfix para modificarla, y muestra los resultados en cada paso.

Código:

#include <stdio.h>

int main() {
    int x = 10;

    printf("Valor inicial: %d\n", x);

    // Post-incremento: se muestra x y luego se incrementa
    printf("Post-incremento (x++): %d\n", x++);
    printf("Después del post-incremento: %d\n", x);

    // Pre-incremento: se incrementa antes de usar
    printf("Pre-incremento (++x): %d\n", ++x);

    // Post-decremento
    printf("Post-decremento (x--): %d\n", x--);
    printf("Después del post-decremento: %d\n", x);

    // Pre-decremento
    printf("Pre-decremento (--x): %d\n", --x);

    return 0;
}

Explicación:

  • Se ilustra claramente la diferencia entre las formas prefix (++x) y postfix (x++).
  • El valor de x se imprime después de cada operación para observar cómo cambia.
  • El código tiene comentarios y un flujo estructurado para facilitar la comprensión.
Logo C++

Bibliografía del tutorial de C/C++.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Disponible para Amazon Prime