Lenguaje C

Lenguaje C Erwin Meza Vega

Lenguaje C

Outline 1

Introducción

2

Tipos básicos de datos

3

Estructuras de control

4

Funciones

5

Ejemplos de funciones

6

Tipos compuestos de datos

7

Arreglos

8

Apuntadores (punteros)

9

Cadenas de caracteres

Lenguaje C Introducción

Lenguaje C

Lenguaje C Introducción

Historia

El lenguaje C fue creado junto con el sistema operativo Unix. Unix fue escrito originalmente en lenguaje ensamblador, pero luego de comprender su potencial, sus creadores decidieron, en 1972, reescribirlo en un nuevo lenguaje, llamado C. Este lenguaje fue desarrollado por Dennis Ritchie en los Laboratorios Bell en Estados Unidos. C fue estandarizado a nales de los años 80, por lo que actualmente se le conoce como ANSI C.

Lenguaje C Introducción

Características Un programa en ANSI C (no C++) puede ser compilado para ejecutarse en virtualmente cualquier sistema operativo. Permite denir variables, constantes y funciones con una sintaxis relativamente simple. Ofrece estructuras básicas de control (decisión - selección ) y repetitivas. Fuertemente tipado: Es necesario denir el tipo de datos para las variables y las funciones. Cuenta con un conjunto reducido de palabras clave (es decir, palabras que tienen signicado dentro del lenguaje de programación)

Lenguaje C Introducción

Características Aunque su funcionalidad básica es limitada, se apoya en una serie de librerías estándar (ANSI) que ofrecen funciones adicionales Es posible extenderlo mediante la implementación de librerías adicionales a la librería estándar. Sus tipos de datos simples son comprendidos por la mayoría de procesadores actuales. Es posible crear nuevos tipos de datos complejos (estructuras y uniones) de forma sencilla. Permite acceder y modicar directamente la memoria por medio de apuntadores.

Lenguaje C Introducción

Primer programa en C

#include #include int main(int argc, char * argv[]) { printf("Hola, mundo!\n"); }

Lenguaje C Introducción

Codicación de programas en C

Un programa en C es un archivo de texto, que puede ser creado usando: El bloc de notas, o una aplicación similar (no procesadores de palabras) Un editor más especializado, como NotePad++, PSPad, Vi, Emacs, etc. Un entorno de desarrollo, el cual usualmente incluye las herramientas para compilar el programa

Lenguaje C Introducción

Compilación de programas en ANSI C

Para crear programas ejecutables a partir de código fuente en lenguaje C, se requiere un programa especíco llamado compilador. En Linux, se puede instalar y usar el compilador gcc. En Windows, se puede instalar el entorno de desarrollo Dev-C++, el cual usa una versión modicada del compiador gcc que funciona en Windows. También se puede usar el excelente compilador Tiny C Compiler, el cual puede ser instalado en Windows.

Lenguaje C Introducción

Compilación del programa en Dev-C++ Se debe abrir el archivo en C, y elegir la opción Compilar del menú Ejecutar.

Lenguaje C Introducción

Compilación por línea de comandos Se debe abrir una ventana del símbolo del sistema, y ejecutar el comando para compilar el archivo que contiene el código en C. Para que esto funcione, el directorio donde fue instalado el compilador debe estar incluido dentro de la variable PATH del entorno.

En este caso, el programa se compiló dos veces, usando el compilador gcc y el compilador tcc.

Lenguaje C Introducción

Ejecución de un programa Una vez que se ha creado un archivo ejecutable a partir del código fuente en lenguaje C, se debe iniciar la ejecución del programa. Se recomienda aprender a ejecutar el programa usando un intérprete de comandos (el símbolo del sistema en Windows o el shell en Linux). Esto permite comprender mejor el funcionamiento del programa.

Lenguaje C Tipos básicos de datos

Tipos básicos de datos

Lenguaje C Tipos básicos de datos

Tipos básicos de datos Entero: Representa números enteros con o sin signo. La palabra reservada unsigned se usa para denir una variable sin signo. Número de punto otante: Representa números con decimales. Caracter: Es un tipo de datos especial, ya que se comporta como un número entero muy pequeño (con signo o sin signo), pero también se puede almacenar un carácter (un número, una letra del alfabeto inglés o algunos códigos especiales como n de línea)

Lenguaje C Tipos básicos de datos

Números enteros Tipo char unsigned char short unsigned short long unsigned long int

Tamaño en bytes 1 byte 1 byte 2 bytes 2 bytes 4 bytes 4 bytes 2 o 4 bytes

unsigned int

2 o 4 bytes

Rango de valores -128 - 127 0 - 255 -32.768 - 32.767 0 - 65.535 -2.147.483.648 - 2.147.483.647 0 - 4.294.967.295 -32.768 - 32.767 -2.147.483.648 - 2.147.483.647 0 - 65535, 0 - 4.294.967.295 0 - 4.294.967.295

El tipo int es especial, debido a que depende del procesador en el cual se ejecute el programa.

Lenguaje C Tipos básicos de datos

Números de punto otante Tipo oat double long double

Tamaño en bytes 4 bytes 8 bytes 10 bytes

Rango de valores 1.2*10-38 - 3.4*1038 2.3*10-308 - 1.7*10308 3.4*10-4932 - 1.1*104932

Precisión 6 decimales 16 decimales 19 decimales

Lenguaje C Tipos básicos de datos

Caracteres Un carácter representa la mínima unidad de almacenamiento en memoria. Generalmente un char tiene un tamaño de 1 byte, por lo cual puede almacenar: Números entre -128 y 127 (char) Números entre 0 - 255 (unsigned char)

Además, en C, es posible almacenar un caracter (a, b, c, !, ..) en una variable de tipo char. Esto se debe a que estos caracteres se codican en ASCII como un número entero menor o igual a 255.

Lenguaje C Tipos básicos de datos

Operador sizeof En lenguaje C, el operador sizeof permite obtener el tamaño en bytes de un tipo de datos. Esto puede ser especialmente útil para vericar si un programa que depende de un tipo de datos numérico funcionará correctamente. En un computador personal, el operador sizeof retornará: Tipo de datos char short long int

Operación sizeof(char) sizeof(short) sizeof(short) sizeof(int)

Resultado 1 2 4 4

Lenguaje C Tipos básicos de datos

Ejemplo de tipos básicos de datos #include #include int main(int argc, char * argv[]) { int a; int b; double f; char x; a = 5; b = 2; f = (double)a / (double)b; x = 'a'; x = x + 1; }

printf("a= %d b=%d f=%1.3f x=%c\n", a, b, f, x);

Lenguaje C Estructuras de control

Estructuras de control

Lenguaje C Estructuras de control

Decisión #include #include int main(int argc, char * argv[]) { int x; scanf("%d", &x); if ((x % 2) == 0) { printf("%d es par\n", x); }else { printf("%d es impar\n", x); } }

Estrutura básica if .. else. La secuencia else . . . es opcional. Si la secuencia solo consta de una instrucción, se pueden omitir los corchetes { }.

Lenguaje C Estructuras de control

Selección #include #include int main(int argc, char * argv[]) { int x; scanf("%d", &x);

}

switch (x) { case 1: printf("Selecciono 1\n"); break; case 2: printf("Selecciono 2\n"); break; case 3: printf("Selecciono 3\n"); break; default: printf("No selecciono 1, 2 ni 3\n"); break; }

Permite ejecutar diferentes secuencias de acuerdo con el valor almacenado en una variable. Cada caso se debe terminar con break, de lo contrario los casos se ejcutarán uno tras otro (en cascada) El caso alternativo se especica con la palabra reservada default.

Lenguaje C Estructuras de control

Mientras .. hacer y Hacer .. mientras #include #include int main(int argc, char * argv[]) { int i; int n; int suma;

}

scanf("%d", &n); i = 1; suma = 0; while (i x, q->y);

Lenguaje C Apuntadores (punteros)

Apuntadores y paso por referencia en funciones

Los apuntadores también se usan en las funciones, cuando se desea pasar parámetros por referencia. En este caso a la función se debe pasar como parámetro un apuntador (válido) o la referencia a la posición de memoria de una variable. La función recibe la referencia como un apuntador del tipo especicado como parámetro.

Lenguaje C Apuntadores (punteros)

Ejemplo de paso de apuntadores #include #include struct punto { int x; int y; };

int main(int argc, char * argv[]) { int x1; int y1; struct punto p; scanf("%d %d", &p.x, &p.y); printf("[%d, %d]\n", p.x, p.y);

void mover(struct punto * p, int n_x, int n_y) {

}

p->x = n_x; p->y = n_y;

scanf("%d %d", &x1, &y1); mover(&p, x1, y1); }

printf("[%d, %d]\n", p.x, p.y);

Lenguaje C Cadenas de caracteres

Cadenas de caracteres

Lenguaje C Cadenas de caracteres

Concepto Las cadenas de caracteres en C son un tipo especial de datos, que puede ser usado para muchos propósitos. De forma general, una cadena de caracteres es una secuencia de cero o más caracteres, que siempre debe nalizar con el carácter nulo (cuyo valor numérico es cero - 0). Por ejemplo, la cadena "Hola mundo" se almacena en memoria así: H 72

111

o

108

l 97

a

m 32

109

u

n 117

d 110

o

0 10

111

0

Lenguaje C Cadenas de caracteres

Arreglos y cadenas de caracteres #include #include #include int main(int argc, char * argv[]) { char * str = "Hola mundo"; int i; char c; printf("%s\n", str);

}

i = 0; do{ c = str[i]; printf("#%c#", c); i++; }while(str[i] != 0);

Una cadena de caracteres puede ser tratada como un arreglo de caracteres, en el cual su última posición siempre contiene el caracter nulo (0). El parámetro %s se usa en la función printf para imprimir una cadena de caracteres terminada en nulo. El algoritmo imprime los caracteres de la cadena en forma individual.

Lenguaje C Cadenas de caracteres

Arreglos y cadenas de caracteres #include #include #include int main(int argc, char * argv[]) { char str[] = {'H', 'o', 'l', 'a', ' ', 'm', 'u', 'n', 'd', 'o', 0, 'A', 'd', 'i', 'o', 's', 0}; int i; char c; printf("%s\n", str);

}

i = 0; do{ c = str[i]; printf("#%c#", c); i++; }while(str[i] != 0);

Cuidado! Un arreglo de caracteres puede contener cero, una o más cadenas de caracteres. Esto se debe, a que, por denición, una cadena de caracteres es una secuencia de cero o más caracteres, seguidos de un carácter nulo. En este caso, el arreglo de caracteres contiene dos cadenas de caracteres. Ni la función printf, ni las instrucciones para imprimir cada caracter de la cadena, funcionan como se pensaría, ya que estas asumen que la cadena termina en el primer caracter nulo (0) encontrado.

Lenguaje C Cadenas de caracteres

Arreglos de cadenas de caracteres

Es posible crear arreglos de cadenas de caracteres. En este caso, cada posición del arreglo contiene un apuntador al inicio de una cadena de caracteres. char * cadenas[10];

En la denición anterior, el arreglo cadenas tiene 10 posiciones, en cada una de las cuales se puede almacenar un apuntador al inicio de una cadena de caracteres.

Lenguaje C Cadenas de caracteres

Arreglos de cadenas de caracteres

En un arreglo de cadenas de caracteres se pueden almacenar cadenas que se especican en el código de programa, o cadenas de caracteres que se han construido mediante reserva dinámica de memoria. En el segundo caso, siempre se debe garantizar que la memoria reservada para la cadena tenga el tamaño suciente. #include #include #include int main(int argc, char * argv[]) { char * cadenas[3]; int i; cadenas[0] = "Hola"; cadenas[1] = "Mundo"; cadenas[2] = (char*)malloc(80); strcpy(cadenas[2], "Hola mundo");

}

for (i=0; i