Introducción a C

Taller de creación de juegos retro

Víctor Suárez

Contenido

  • ¿Qué es C?
  • Hola Mundo
  • Variables y Operadores
  • Condicionales
  • Bucles
  • Introducciones de PreProcesador
  • Funciones
  • Arrays
  • Punteros
  • Structs
  • Make

¿Què es C?

C es un lenguaje de programación de proposito general que fue desarrollado entre los años 1969 y 1972.

 

Es un lenguaje estructurado, compilado, debilmente tipado y que puede usarse tanto como alto nivel como bajo nivel.

C NO es un lenguaje orientado a Objetos.

Hola Mundo

#include <stdio.h>


int main(){
    printf("Hello World");
    return 0;
}

Variables y Operadores

Una variable en C, es un elemento donde se puede almacenar un valor.

La sintaxis para crear una es:

<tipo> <nombre>;

int num;
char letra;

Variables y Operadores

Tipos Básicos de C

Tipo Descripción rango
int Entero simple -32 768  a  32 767
float Decimal simple 3.4E-38 a 3.4E+38
double Decimal doble 1.7E-308 a 1.7E+308
long Entero largo -2 147 483 648 a 2147 483 647
char caracter 0 a 255
bool booleano true o false

Variables y Operadores

Operadores Matemáticos

Operadores Lógicos

Tipo Descripción
+ Suma
- Resta
* Producto
/ División
% Resto
>> Desplazamiento bits derecha
<< Desplazamiento bits izquierda
Tipo Descripción
== Igual que
>= Mayor o igual que
<= Menor o igual Que
!= Distinto De
! NO

Variables y Operadores

Operadores Asignación

Operadores Lógicos II

Tipo Descripción
= Asignación
+= Asignación con suma
-= Asignación con resta
++ Suma 1 valor
-- Resta 1 valor
Tipo Descripción
> Menor que
< Mayor que
&& and
|| Or
& And Lógico
| Or Lógico

Variables y Operadores

Comentarios

Tipo Descripción
// Comentario de línea.
/* */ Comentario de Bloque

Estructuras de control

  • Condicionales
  • Bucles

Estructuras de control

Condicionales

if(edad<18){
	printf("Es menor de edad");
}

Estructuras de control

Condicionales

if(edad<18){
	printf("Es menor de edad");
}else{
	printf("Es mayor de edad");
}

Estructuras de control

Condicionales

switch(a){
	case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    	printf("Es una vocal");
       	break;
    default:
    	printf("Consonante");
}

Estructuras de control

Repetitivas

while (a==1){
	a++;
}

Estructuras de control

Repetitivas

do{
	a++;
}while(a==1);

Estructuras de control

Repetitivas

for(int i=0;i<10;i++){
	a=i+1;
}

Instrucciones de Preprocesado

  • #include
  • #define
  • #ifndef
  • #endif
  • #if
  • ...

En C, existe una serie de instrucciones especiales llamadas de preprocesado que nos van a ayudar a mantener nuestro código más ordenado.

Instrucciones de Preprocesado

#include

Permite añadir un fichero externo para tener acceso a sus contenido desde nuestro código

#include <stdio.h>

Nota: si el fichero va entre <> se considera de sistema y si va entre "" es local.

#define

Permite crear una constante.

#define CONSTANTE 1

Si la constante a definir es una función, esta se llama MACRO.

Instrucciones de Preprocesado

 #ifndef

Permite que se pueda acceder a bloques de código en función de si esta definida una variable o no.

#ifndef _H_MIFICHERO_
#define _H_MIFICHERO_
//codigo a incluir una sola vez.
//de esta forma aunque se incluya el fichero varias veces, solo se referenciará una.

#endif

Funciones

En C, podemos dividir nuestros programas en pequeños subprogramas para organizarlo y poder reutilizarlo. Esto se realiza a través de las funciones.

Una función, se compone de su cabecera y de su implementación.

La cabecera de la función se compone de la siguiente información:

<tipodevuelto> <nombre>(<lista de parametros>);

int calcularDoble(int);

Funciones

El cuerpo de la función, es donde estará definido su contenido. Normalmente esta en un fichero a parte.

Normalmente, los ficheros que contienen las cabaceras de las funciones son los que tienen extensión .h.

Mientras que los ficheros que contienen las implementaciones, tienen extensión .c.

int calcularDoble(int n){

return 2*n;
}

Funciones

misfunciones.c

int calcularDoble(int n);
//otras funciones y variables necesarias

misfunciones.h

#include "misfunciones.h"

int calcularDoble(int n){
return 2*n;
}

Arrays

Hasta ahora, hemos estado trabajando en usar variables simples; pero ¿Qué ocurre cuando queremos usar muchas variables del mismo tipo?

int datos[4]; //array de 1 dimension
int datos2[4][4] //array de 2 dimensiones

Los Arrays, permitem almacenar de forma contigua información homogénea.

Se definen:

 

<tipo> <nombre>[<longitud>];

Arrays

En C, no existe el tipo de dato "String" como en otros lenguajes. en C, las cadenas de caracteres, son arrays de tipo char.

char micadena[10]="Hola Mundo";

Las cadenas son arrays de char que siempre acaban con el carácter '\0'.

Punteros

Un puntero, es una variable que almacena una posición de memoria.

Punteros

Para manejar punteros, existen dos operadores especiales.

Operador *

Operador &

Define un puntero y su contenido.

int* mipuntero;

Establece la dirección de memoria de una variable o puntero.

int variable=1;
int* mipuntero= &variable;
int valor2 = *mipuntero;

Punteros

El nombre de un array, es un puntero; y por lo tanto cada puntero, puede ser usado como un array.

int miarray[5];

int* mipuntero = miarray;

for(int i=0;i<5;i++){

	printf("%d",mipuntero[i]);
}

Punteros

Hasta ahora, las funciones las hemos utilizado pasando parametros básicos o como se conoce "por valor". Esto quiere decir, que en cada llamada se hace una copia de los parámetros.

int calculaDoble(int n);//Paso por valor

void calculaDoble(int* n);//Paso por referencia o por puntero.

En el paso por referencia, si se modifica el parámetro se modifica el original.

Structs

En ocasiones, se necesitan tipos de datos complejos que nos permitirán definir objetos del mundo.

Para definir un struct, se utiliza la palabra reservada "struct"; seguida de la siguiente definición:

struct <nombre>{

<definicion de elementos>

}<variables>;

struct ejemplo{
	int edad;
    char nombre[50];
}a1;

Structs

Inicializar Structs

Acceder a Elementos

ejemplo e1={34, "victor"}
printf("%d",e1.edad);//Como variable
ejemplo* e2=&e1;//creación de un puntero.
printf("%d",e2->edad);//Como puntero

NOTA: las definiciones de structs, normalmente se definen en los ficheros .h.

Structs

typedef

Typedef, es una palabra reservada que se utiliza para crear sinonimos de tipos o structs.

typedef struct{
	int edad;
    char* nombre[50];
}Persona;
...

Persona mipersona;

Makefiles

En proyectos ya complejos, es necesaria una herramienta que nos ayude con la configuración y compilación de todos los ficheros de nuestro proyecto.

 

Por ello, se utiliza la herramienta "make"; que gracias a los conocidos Makefiles, nos va a permitir configurar y construir nuestro proyecto.

main: hello.c
	gcc -o hello hello.c

Referencias

Made with Slides.com