Curso de programación con C
C es un lenguaje de programación rápido, portátil y eficiente, ideal para sistemas operativos, software embebido y aplicaciones de alto rendimiento.
El lenguaje C es uno de los lenguajes de programación más influyentes y ampliamente utilizados. Fue desarrollado a principios de la década de 1970 por Dennis Ritchie en los Laboratorios Bell, y ha servido como base para muchos otros lenguajes modernos (como C++, C#, Java y muchos más). A continuación, se presenta una explicación de los fundamentos de C y un recorrido por su sintaxis principal.
1. Características y fundamentos del lenguaje C
Lenguaje compilado:
El código fuente escrito en C se compila a código máquina específico para la arquitectura de la computadora, lo que permite programas eficientes y rápidos.Lenguaje estructurado:
Se basa en la descomposición del programa en funciones y módulos, facilitando el diseño, la lectura y el mantenimiento del código.Tipado estático y fuerte:
Cada variable en C debe declararse con un tipo específico (por ejemplo,int
,float
,char
), lo que ayuda a detectar errores durante la compilación.Acceso de bajo nivel:
Permite manipular directamente la memoria (por ejemplo, mediante punteros), lo que es fundamental en programación de sistemas y desarrollo de controladores, sistemas operativos y software embebido.Portabilidad:
Aunque el código debe compilarse para cada plataforma, C fue diseñado con portabilidad en mente, lo que significa que un programa en C puede ser adaptado a diferentes sistemas con pocos cambios.
2. Estructura básica de un programa en C
Todo programa en C tiene una estructura mínima que incluye la función main()
, que es el punto de entrada. Además, se utilizan directivas del preprocesador para incluir librerías o definir macros. Un ejemplo básico:
#include <stdio.h> // Inclusión de la librería estándar de entrada/salida
// Función principal: punto de entrada del programa
int main() {
// Instrucción que imprime un mensaje en la consola
printf("Hola, mundo!\n");
return 0; // Indica que el programa terminó correctamente
}
Elementos a notar:
#include <stdio.h>
: Directiva del preprocesador que incluye la librería estándar de entrada y salida.int main() { ... }
: Definición de la función principal.printf(...)
: Función para mostrar información en la consola.return 0;
: Devuelve un valor al sistema operativo indicando el estado de salida del programa.
3. Sintaxis principal del lenguaje C
Declaración de variables y tipos de datos
C tiene varios tipos de datos básicos:
- Enteros:
int
,short
,long
,unsigned int
, etc. - Punto flotante:
float
,double
. - Caracteres:
char
.
Ejemplo de declaración y asignación:
#include <stdio.h>
int main() {
int edad = 25; // Declaración de un entero
float altura = 1.75; // Declaración de un número de punto flotante
char inicial = 'J'; // Declaración de un carácter
printf("Edad: %d, Altura: %.2f, Inicial: %c\n", edad, altura, inicial);
return 0;
}
Formato de impresión:
%d
para enteros.%f
o%.2f
para números flotantes (con 2 decimales en este caso).%c
para caracteres.
Operadores
C cuenta con diversos operadores:
- Aritméticos:
+
,-
,*
,/
,%
(módulo) - Asignación:
=
,+=
,-=
, etc. - Comparación:
==
,!=
,<
,>
,<=
,>=
- Lógicos:
&&
(AND),||
(OR),!
(NOT) - Incremento/Decremento:
++
,--
Ejemplo:
#include <stdio.h>
int main() {
int a = 10, b = 3;
int suma = a + b;
int modulo = a % b;
printf("Suma: %d, Módulo: %d\n", suma, modulo);
return 0;
}
Estructuras de control
Sentencias condicionales
If-Else:
#include <stdio.h>
int main() {
int numero = 7;
if (numero % 2 == 0) {
printf("El número es par.\n");
} else {
printf("El número es impar.\n");
}
return 0;
}
Switch:
#include <stdio.h>
int main() {
int opcion = 2;
switch(opcion) {
case 1:
printf("Opción 1 seleccionada.\n");
break;
case 2:
printf("Opción 2 seleccionada.\n");
break;
default:
printf("Opción no reconocida.\n");
break;
}
return 0;
}
2. Bucles o iteraciones
While:
#include <stdio.h>
int main() {
int contador = 0;
while (contador < 5) {
printf("Contador: %d\n", contador);
contador++;
}
return 0;
}
Do-While:
#include <stdio.h>
int main() {
int contador = 0;
do {
printf("Contador: %d\n", contador);
contador++;
} while (contador < 5);
return 0;
}
For:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 5; i++) {
printf("Valor de i: %d\n", i);
}
return 0;
}
Funciones
Las funciones permiten modularizar el código. Se pueden declarar y definir funciones para realizar tareas específicas.
Ejemplo con una función que suma dos números:
#include <stdio.h>
// Declaración de la función (prototipo)
int sumar(int a, int b);
int main() {
int resultado = sumar(3, 4);
printf("La suma es: %d\n", resultado);
return 0;
}
// Definición de la función
int sumar(int a, int b) {
return a + b;
}
Aspectos a considerar:
- Los prototipos de función son útiles para indicar al compilador la existencia de funciones que se definirán posteriormente.
- Las funciones pueden retornar valores o ser del tipo
void
si no retornan nada.
Punteros
Los punteros son variables que almacenan direcciones de memoria. Permiten un control muy preciso sobre la memoria, lo que es crucial en aplicaciones de bajo nivel.
Ejemplo básico de punteros:
#include <stdio.h>
int main() {
int var = 20;
int *puntero = &var; // 'puntero' almacena la dirección de 'var'
printf("Valor de var: %d\n", var);
printf("Dirección de var: %p\n", (void*)&var);
printf("Valor almacenado en puntero: %p\n", (void*)puntero);
printf("Valor al que apunta puntero: %d\n", *puntero); // Desreferenciación
return 0;
}
Conceptos importantes:
&
: Operador de dirección.*
: Operador de desreferenciación, que accede al valor almacenado en la dirección indicada.
f) Arreglos y cadenas de caracteres
Un arreglo es una colección de elementos del mismo tipo. En C, las cadenas de caracteres se manejan como arreglos de char
terminados en un carácter nulo \0
.
Ejemplo de un arreglo y una cadena:
#include <stdio.h>
int main() {
int numeros[5] = {1, 2, 3, 4, 5}; // Arreglo de enteros
char saludo[] = "Hola"; // Arreglo de caracteres (cadena)
// Recorrido del arreglo de enteros
for (int i = 0; i < 5; i++) {
printf("numero[%d] = %d\n", i, numeros[i]);
}
// Imprimir la cadena
printf("Saludo: %s\n", saludo);
return 0;
}
Estructuras y uniones
Las estructuras permiten agrupar diferentes tipos de datos bajo un mismo nombre, facilitando la organización y manipulación de datos complejos.
Ejemplo de una estructura:
#include <stdio.h>
// Definición de una estructura para representar una persona
struct Persona {
char nombre[50];
int edad;
float altura;
};
int main() {
// Declaración e inicialización de una variable de tipo 'struct Persona'
struct Persona persona1 = {"Juan", 30, 1.80};
printf("Nombre: %s\n", persona1.nombre);
printf("Edad: %d\n", persona1.edad);
printf("Altura: %.2f\n", persona1.altura);
return 0;
}
Las uniones son similares a las estructuras, pero todos sus miembros comparten el mismo espacio de memoria, lo que permite ahorrar memoria cuando solo se usa uno de los miembros a la vez.
h) Manejo de memoria dinámica
La biblioteca <stdlib.h>
provee funciones para gestionar memoria dinámicamente, como malloc
, calloc
, realloc
y free
.
Ejemplo de asignación dinámica:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arreglo;
int n = 5;
// Asignar memoria para 5 enteros
arreglo = (int *)malloc(n * sizeof(int));
if (arreglo == NULL) {
printf("Error en la asignación de memoria.\n");
return 1;
}
// Inicializar y mostrar el arreglo
for (int i = 0; i < n; i++) {
arreglo[i] = i * 2;
printf("arreglo[%d] = %d\n", i, arreglo[i]);
}
// Liberar la memoria asignada
free(arreglo);
return 0;
}
Tutoriales de C
Aprende C con tutoriales de programación en C.
Introducción A C
Introducción Y Entorno
Primer Programa En C
Introducción Y Entorno
Estructura Básica De Un Programa En C
Sintaxis
Operadores Y Expresiones
Sintaxis
Control De Flujo
Sintaxis
Arrays Y Manejo De Cadenas
Sintaxis
Funciones
Funciones Y Punteros
Punteros
Funciones Y Punteros
Gestión De Memoria Dinámica
Funciones Y Punteros
Estructuras En C
Estructuras, Uniones Y Tipos
Uniones Y Enumeraciones
Estructuras, Uniones Y Tipos
Tipo de tecnología
Lenguaje
Categoría laboral
Backend
Año de lanzamiento
1972
Developers
ISO/IEC JTC1/SC22/WG14
Todos los módulos de C
Ver todos los módulos de COtras tecnologías
Node
Node
Backend
Node.js es un entorno de ejecución de JavaScript basado en el motor V8 de Google.
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Seaborn
Seaborn
Ciencia de Datos e Inteligencia artificial
Biblioteca de visualización de datos para Python.
PySpark
PySpark
Big Data
Motor unificado de análisis de datos distribuido para grandes volúmenes.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
OpenCV
OpenCV
Ciencia de Datos e Inteligencia artificial
Biblioteca de Python para el aprendizaje automático, incluyendo clasificación, regresión, clustering y reducción de dimensionalidad.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
CSharp
CSharp
Backend
Lenguaje de programación de Microsoft para aplicaciones robustas.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
Go
Go
Backend
Lenguaje de programación eficiente y concurrente creado por Google.
ScikitLearn
ScikitLearn
Backend
Biblioteca de aprendizaje automático en Python.
SQL
SQL
Administración de bases de datos
Lenguaje para gestionar bases de datos relacionales.
Fundamentos
Fundamentos
Full Stack
Fundamentos y bases de la programación de software moderna.
PHP
PHP
Backend
Lenguaje de programación para desarrollo web del lado del servidor.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
TensorFlow
TensorFlow
Backend
Biblioteca Python para redes neuronales en Deep Learning
Selenium
Selenium
Testing / QA (Quality Assurance)
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
Git
Git
DevOps
Sistema de control de versiones distribuido.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.
Bootstrap
Bootstrap
Frontend
Framework CSS para diseños web responsive y modernos.
Hibernate
Hibernate
Backend
ORM para Java, simplifica el acceso a bases de datos.
Pandas
Pandas
Ciencia de Datos e Inteligencia artificial
Herramienta Python para análisis y manipulación de datos.
JavaScript
JavaScript
Full Stack
Lenguaje de scripting para desarrollo web interactivo.
Angular
Angular
Frontend
Framework web de Google para aplicaciones dinámicas.
CSS
CSS
Frontend
Lenguaje de estilo para diseñar páginas web atractivas.
Python
Python
Backend
Lenguaje de programación fácil de aprender y versátil.