2

Tutorial Básico de C para este curso

El siguiente tutorial tiene como objetivo brindar las herramientas básicas de C para poder llevar adelante el curso de Algoritmos y Estructuras de datos sin problemas.

<h3>C y los Tipos de Datos</h3>

El lenguaje de programación C es un lenguaje tipado, es decir, es necesario definir que tipo de variables vamos a utilizar al declararlas(Entero, Caracter, Flotante, etc). Es fundamental para que nuestro programa corra que hagamos esto, sino, simplemente no funcionará y el compilador nos dará un error.
Cada tipo de variable, tiene asignado un tamaño en bytes en memoria. En la siguiente tabla figura el tamaño asignado a cada una:

TipoTamaño en MemoriaValores PosiblesDescripción
char1 byte- 128 a 127 o 0 a 255Guarda números enteros los cuales estan asociados a un código en general ASCII
int4 bytes- 2.147.483.648 a 2147.483.647Guarda números enteros
float4 bytes1.2E-38 a 3.4E+38Guarda números decimales con precisión de 6 dígitos decimales
short2 bytes-32768 a 32767Guarda enteros con menor capacidad de almacenamiento
double8 bytes2.3E-308 a 1.7E+308Igual que Float pero con mayor precisión y mayor rango
long4 bytes- 2.147.483.648 a 2147.483.647Guarda números enteros con mayor capacidad de almacenamiento que Int
long double10 bytes3.4E-4932 a 1.1E+4932Mucho mayor precisión en cálculo decimal, incluso mayor que double

Para declararlas simplemente debemos llamar al tipo de de dato, asignarle un nombre e inicializarla con un valor, por ejemplo:

int a = 1;

De esta forma estamos creando la variable “a”, del tipo entero, la cual se inicializa con el valor 1. Es muy importante luego de cada instrucción agregar el punto y coma, de lo contrario el compilador nos devolverá un error de sintaxis.

Para declarar un array, debemos definir el tamaño del array y el tipo de datos que almacenará. Este lenguaje no permite mezclar, dentro de un array, distintos datos como sí lo permiten lenguajes como Python. Por ejemplo, para declarar un array de enteros de 5 elementos hacemos:

intarray[5] = { 5, 4, 9, 55, 10};
<h3>Loops</h3>

Para declarar un ciclo for hacemos lo siguiente:

int i = 0; 	# Inicializamos una variable para llevar adelante el loopint n = 5;	 #Variable que usaremos como condición para ejecutar cada 5 for(i; i < n; i++)
{
#Código a ejecutar
} 

El ciclo se ejecutará hasta que el valor del i sea menor que 5. i++ incrementa el valor de i, y la condición i < n, determina la condición que dará por finalizada la ejecución del for. Es importante destacar que dentro de la declaración del ciclo for, tenemos un punto y coma separando los componentes, caso contrario obtendremos un error de sintaxis.

Para ejecutar un ciclo while hacemos lo mismo, solo que en lugar de for colocamos la palabra clave While.

<h3>Condicionales</h3>

Los condicionales nos permiten realizar bifurcaciones en un código a través del cumplimiento o no de una condición lógica. La sintaxis es la siguiente:

if(<condición a cumplir>){
#Código a ejecutar si se cumple la condiciónlógica
} 
else
{
#Código a ejecutar en caso dequela condición sea falsa
}
<h3>Funciones</h3>

Para declarar una función, la sintaxis es la siguiente:

TipoDeDatoqueRetorna <Nombre de la funcion>(<tipoDeDatoParámetro><parámentro>){
#Codigo a ejecutar
return ValorqueRetorna
}

En este caso, es importante tener en cuenta varias cosas, en primer lugar una función puede retornar un valor o no. En caso de que la función no retorne ningún valor, debemos utilizar la palabra clave void, por ejemplo la siguiente función imprime en pantalla un caracter almacenado en la variable letra:

voidimprimoUnCaracter(char letra){
	printf("%c", letra);
}

Por otro lado una función que sume dos valores enteros puede devolver el resultado de la suma, por ejemplo:

int suma(int a, int b)
{
	suma = a + b;return suma;
}
<h3>Tomar un valor en consola e imprimirlo</h3>

Para leer un valor en consola se utiliza la función scanf. Para cargar el valor en la variable que le asignemos se utiliza el operador & junto al nombre de la variable si es numérica. En caso de ser una string no es necesario. Para imprimir algo en consola se utiliza la función printf. A continuación tenemos un pequeño snippet:

#include<stdio.h>intmain(){
	char str1[20];
	
	printf("Ingresa un nombre");
	scanf("%s", str1);
	printf("El nombre ingresado es: %s", str1);
	
	return0;
}

En el ejemplo tenemos una variable str1 de tipo vector de 20 caracteres. La primer función printf imprime en pantalla el mensaje “Ingresa un nombre” y la función scanf, se encarga de leer el texto en pantalla y lo carga en la variable str1.

Si lo que ingresamos es un número entero usamos el operador & para leer el valor como se ve a continuación:

intnum;
scanf("%d", &num);

Esto se debe a que debemos indicarle a la función scanf la dirección de memoria donde debemos almacenar el valor.

%d, %s son modificadores que están asociados a los tipos de datos que se están usando: d para enteros, s, para strings, c para caracteres individuales, etc. Te dejo como recomendación que investigues cuales son los demás.

Un detalle más es que podemos imprimir varios valores en pantalla. Por ejemplo imprimimos un número entero almacenado en la variable num y una cadena almacenada en la variable str simplemente haciendo:

printf("%d, %s", num, str); 
<h3>Bonus Track: Punteros</h3>

Los punteros son los elementos más poderosos del lenguaje C. Un puntero es una variable destinada a contener una dirección de memoria. Esta posición de memoria frecuentemente corresponde a la ubicación de otra variable, se dice entonces que el puntero “apunta” a otra variable.
El tamaño de los punteros depende de la arquitectura del sistema, por ejemplo en una máquina de 32 bits los punteros ocuparán 4 bytes ya que deben tener el tamaño suficiente para almacenar direcciones de 32 bits.

<h4>Declaración</h4>

La sintaxis de declaración de un puntero es:

tipoDeDatoAlqueApunta * nombrePuntero;

El tipo de dato al que apunta es importante ya que tiene incidencia en el comportamiento del puntero frente a la aritmética de punteros, tema que quedará para otro tutorial.

<h4>Operadores Puntero</h4>

Tenemos dos operadores * y &. El operador & devuelve la dirección de memoria de su operando, puede considerarse que equivale a decir “la dirección de la variable x es y”. A través de él podemos relacionar a los punteros con las variables a ser apuntadas por ellos. Por ejemplo:

int A, *p; 
p = &A

A partir de esta última sentencia, p se carga con la dirección de A, es decir: “p apunta A”.

El operador * es relativamente complementario del anterior. Retorna el valor de la variable cuya dirección es la que sigue. Podemos interpretarlo como: " El contenido de lo apuntado por p es lo almacenado en A.

Bueno, hasta acá llega este tutorial, se puede seguir por muchas páginas mas, pero con esto tenemos lo suficiente para llevar adelante el curso. espero que les sirva y resulte útil.

Saludos y nunca pares de aprender!!

Escribe tu comentario
+ 2
2
22036Puntos

Muchas gracias 😄