Sintaxis C
Contents
Sintaxis C#

Sintáxis básica de C
Índice
Elementos básicos del lenguaje#
Instalación#
Para poder compilar un programa escrito en C debemos instalar un compilador, yo personalmente utilizo en linux GCC y el comando para instalarlo es: sudo apt install build-essential
Comentarios#
Comentarios de una sola línea:
1// Comentario de una sola línea
Comentarios multilínea:
1/* Este comentario
2tiene más de una línea.
3Puede servir para escribir
4un manual u otras cosas.
5*/
Entrada y salida estandar#
C utiliza para entrada de datos la función scanf() y para la impresión de estos por consola printf()
Entrada de datos:
1// acompañamos con un printf esta sentencia que solo lleva el tipo de dato y el enlace a la variable:
2scanf("%d", &edad);
Salida de datos:
1printf("Tu edad es de %d años\n", edad);
Especificación de formato#
En C existen los especificadores de formato cuya finalidad se da en la entrada o salida de datos para especificar donde va a ir un dato:
Tipo de dato |
Denominación |
---|---|
%d |
Número Entero (int) |
%f |
Número con decimales (float, decimal) |
%c |
Caracter o caracteres (char) |
%s |
Cadenas de texto (string) |
Estructura en c#
Código c puro:
1// en la primera línea importamos la librería estandar de C:
2#include <stdio.h>
3// creamos la función principal main que no retorna nada (void):
4void main (void){
5 printf("Hola mundo!\n"); // con \n hacemos un salto de línea
6}
Atención
Las líneas terminan en ; obligatóriamente.
Extensión#
La extensión utilizada por los archivos C es c Una vez se compila su extensión pasa a ser h
Compilación y ejecución#
El comando para compilar un programa en C con GCC es
gcc -o nombre script.c
La compilación nos devolverá un programa llamado hola que ejecutamos en Linux como
./hola
Variables y tipos de datos#
Declaración, asignación y tipo:
1#include <stdio.h>
2
3void main (void){
4 int numero = 27; // enteros
5 float decimal = 11.38; // decimales
6 double preciso = 3.1415161820; // doble precisión
7 char letra[1] = "a"; // carácteres, que es de cantidad fija.
8}
Constantes:
1#include <stdio.h>
2// definir constante en el archivo:
3#define PI 3.1415
4
5void main (void){
6 const PI = 3.1415; // constante de función
7}
Operadores#
Operadores aritméticos#
Operaciones aritméticas:
1#include <stdio.h>
2
3void main (void){
4 sumar = 3 + 6;
5 restar = 7 * 9;
6 multiplicar = 11 * 6;
7 dividir = 13 / 20;
8 resto = 54 % 7;
9}
Incremento y decremento:
1i++;
2++i;
3--i;
4i--;
Asignar operación:
1#include <stdio.h>
2
3void main (void){
4 // la variable debe tener un valor asignado:
5 resultado = 0
6
7 resultado += 12;
8 resultado -= 16;
9 resultado *= 19;
10 resultado /= 6;
11 resultado %= 19;
12}
Operadores relacionales#
Validación entre dos números.
Mayor que: >.
Menor que: <.
Mayor o igual que: >=.
Menor o igual que: <=.
Igual que: ==.
Operadores lógicos#
Expresiones de operaciones lógicas.
and: &&.
or: ||.
Estructuras de control#
Condicional if#
if sencillo:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5 if(a == 0){
6
7 printf("a es igual a 0\n");
8 }
9}
if / else:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5 if(a == 0){
6
7 printf("a es igual a 0\n");
8 }else{
9 printf("a es distinto a 0\n");
10 }
11}
else-if:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5
6 if(a == 0){
7 printf("a es igual a 0\n");
8 }else if(a == 1){
9 printf("a es igual a 1\n");
10 }else{
11 printf("a es un numero desconocido\n");
12 }
13}
Condicional Switch#
Estructura de un switch:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5
6 switch(a){
7 case 0:
8 printf("a es igual a 0\n");
9 break;
10 case 1:
11 printf("a es igual a 1\n");
12 break;
13 default:
14 printf("a es desconocido\n");
15 }
16}
Bucle for#
for básico:
1#include <stdio.h>
2
3void main(void){
4 int a;
5
6 for(a = 0; a < 5; a++){
7 printf("a es igual a %d\n", a);
8 }
9 printf("a es igual a %d y hemos acabado\n", a);
10}
Bucle while#
While sencillo:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5
6 while(a < 5){
7 printf("a es igual a %d\n", a);
8 a++;
9 }
10 printf("a es igual a %d y hemos terminado\n", a);
11}
do-while:
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5
6 do{
7 printf("a es igual a %d\n", a);
8 a++;
9 }while(a == 0);
10 printf("a es igual a %d y hemos terminado\n", a);
11}
Detener secuenda de script#
1#include <stdio.h>
2
3void main(void){
4 int a = 0;
5
6 while(1){
7 printf("a es igual a %d\n", a);
8 a++;
9 if(a == 5){
10 break;
11 }
12 }
13 printf("a es igual a %d y hemos acabado/n", a);
14}
Punteros#
Cuando trabajamos con punteros establecemos un enlace con una variable, de modo que por ejemplo en el caso de las funciones, al enviar parámetros lo que mandamos es una copia, pero gracias a los punteros se puede enviar por parámetros la variable original para modificarla.
1#include <stdio.h>
2
3void main(void){
4 int a;
5 // declarar un puntero:
6 int *ptr_a;
7 // asignar variable a un puntero:
8 ptr_a = &a;
9
10 a = 5;
11 printf("El valor de a es %d\n", a);
12 // modificar un puntero:
13 *ptr_a = 6;
14
15 printf("El valor de a es %d\n", a);
16
17}
Tipos de datos avanzados#
Arrays#
1#include <stdio.h>
2
3void main(void){
4 int a[10];
5 int count;
6
7 for(count = 0; count <10; count++){
8 a[count] = count;
9 printf("Repetición número %d\n", a[count]);
10 }
11}
Enumeradores#
Los enumeradores nos sirven para generar un tipo de dato utilizando typedef
y enum
, por ejemplo en el ejemplo generamos y usamos un tipo Booleano.
Ejemplo:
1#include <stdio.h>
2// creamos el enum y lo llamamos BOOLEAN:
3typedef enum{
4 false,
5 true,
6} BOOLEAN;
7
8void main(void){
9 // creamos una variable de tipo BOOLEAN
10 BOOLEAN b_var;
11 // esta variable solo aceptará los valores true o false
12 b_var = false;
13 if(b_var == true){
14 printf("Verdadero\n");
15 }else{
16 printf("Falso\n");
17 }
18}
Estructura de datos#
La estructura de datos se genera también con typedef
junto a struct
1#include <stdio.h>
2
3typedef struct{
4 int inval1;
5 int inval2;
6 int outval;
7} MY_DATA;
8
9void add(MY_DATA *d){
10 d->outval = d->inval1 + d->inval2;
11}
12
13void main(void){
14 MY_DATA data;
15
16 data.inval1 = 5;
17 data.inval2 = 7;
18 add(&data);
19
20 printf("La suma de %d y %d es %d\n", data.inval1, data.inval2, data.outval);
21}
Programación modular#
Funciones#
Procedimienos:
1#include <stdio.h>
2
3int sum(int a, int b){
4 int res;
5 res = a + b;
6 printf("La suma de 5 y %d es %d\n", y, z);
7}
8
9void main(void){
10 int y = 2;
11 sum(5, y);
12}
funciones:
1#include <stdio.h>
2
3int sum(int a, int b){
4 int res;
5 res = a + b;
6 return res;
7}
8
9void main(void){
10 int y = 2;
11 int z = sum(5, y);
12
13 printf("La suma de 5 y %d es %d\n", y, z);
14}
Manejo de Archivos#
En C existe la posibilidad de manejar archivos de modo que podemos leer, editar y crear nuevos:
Escritura de archivos#
Para escribir un nuevo archivo desde cero utilizamos el modificador wb
:
1#include <stdio.h>
2
3void main(void){
4 FILE *fp;
5 int value;
6
7 fp = fopen("entrada.txt", "wb");
8 if(fp){
9 for(value = 48; value < 58; value++){
10 fputc(value, fp);
11 }
12 fclose(fp);
13 }
14}
Añadir un texto formateado con la función
fprintf()
:
1#include <stdio.h>
2
3void main(void){
4 FILE *fp;
5 int value;
6
7 fp = fopen("entrada.txt", "wb");
8 if(fp){
9 fprintf(fp, "Esto es un texto.\n");
10 fprintf(fp, "Esto es otro texto.\n");
11 fclose(fp);
12 }
13}
Lectura de archivos#
Si queremos leer un archivo usamos el modificador rb
:
1#include <stdio.h>
2
3void main(void){
4 FILE *fp;
5 int value;
6
7 fp = fopen("entrada.txt", "rb");
8 if(fp){
9 while(1){
10 value = fgetc(fp);
11 if(value == EOF) break;
12 else printf("%c", value);
13 }
14 fclose(fp);
15 }
16}
Actualización de archivos#
Para actualizar un archivo existente sin destruir la información que ya posee usaremos el modificador ab
:
1#include <stdio.h>
2
3void main(void){
4 FILE *fp;
5 int value;
6
7 fp = fopen("entrada.txt", "ab");
8 if(fp){
9 fprintf(fp, "Esto es un texto.\n");
10 fprintf(fp, "Esto es otro texto.\n");
11 fclose(fp);
12 }
13}
Nota
Si ejecutamos este codigo varias veces veremos como se incluyen nuevas líneas a nuestro script.
Empaquetado y Preprocesamiento#
Crear paquetes#
En C podemos dividir el código y llamarlo en la cabecera
Tenemos un archivo llamado por ejemplo
funcion.c
que contiene una función específica:
1int add_valores(int a, int b, int c){
2 return a + b + c;
3}
Ahora necesitamos un archivo que exporte la función y lo llamamos
funcion.h
:
1extern int add_valores(int a, int b, int c);
Y ahora en nuestro archivo principal podemos importar este paquete:
1#include <stdio.h>
2// llamada del archivo funcion.h:
3#include "function.h"
4
5void main(void){
6 printf("El total es %d\n", add_valores(1,2,3));
7}
Importante
Para compilar este programa ejecutamos gcc -o miprograma main.c function.c
El preprocesador#
El archivo de intercambio que creamos antes llamado funcion.h
es un archivo de preprocesamiento, podemos saltarnos ese paso y añadir directamente la línea al codigo principal:
1#include <stdio.h>
2extern int add_valores(int a, int b, int c);
3
4void main(void){
5 printf("El total es %d\n", add_valores(1,2,3));
6}
Importante
Es necesario ejecutar la compilación de ambos al mismo tiempo igualmente