Sunteți pe pagina 1din 41

Introduccin al Lenguaje de Programacin C by Jorge M.

Dhios
www.bairesrobotics.com.ar
1.- Caractersticas del lenguaje C
2.- Estructura de un programa en C
2.1.- Estructura
2.2.- Comentarios
2.3.- Palabras clave
2.4.- Identificadores
3.- Tipos de datos
3.1.- Tipos
3.2.- Calificadores de tipo
3.3.- Las variables
3.4.- Dnde se declaran ?
3.5.- Constantes
3.6.- Secuencias de escape
3.7.- Inclusin de ficheros
4.- Operadores aritmticos y de asignacin
4.1.- Operadores artmeticos
4.2.- Operadores de asignacin
4.3.- Jerarqua de los operadores
5.- Salida / Entrada
5.1.- Sentencia printf()
5.2.- Sentencia scanf()
6.- Operadores relacionales
7.- Sentencias condicionales
7.1.- Estructura IF...ELSE
7.2.- Estructura SWITCH
8.- Operadores lgicos
9.- Bucles
9.1.- Sentencia WHILE
9.2.- Sentencia DO...WHILE
9.3.- Sentencia FOR
9.4.- Sentencia BREAK
9.5.- Sentencia CONTINUE
Pgina 1 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
10.- Funciones
10.1.- Tiempo de vida de los datos
10.2.- Funciones
10.3.- Declaracin de las funciones
10.4.- Paso de parmetros a una funcin
11.- Arrays
11.1.- Vectores
11.2.- Matrices
12.- Punteros
12.1.- Declaracin
12.2.- Operadores
12.3.- Asignacin
12.4.- Aritmtica de direcciones
13.- Estructuras
13.1.- Concepto de estructura
13.2.- Estructuras y funciones
13.3.- Arrays de estructuras
13.4.- Typedef
14.- Ficheros
14.1.- Apertura
14.2.- Cierre
14.3.- Escritura y lectura
15.- Apndice
17.1.- Librera stdio.h
17.2.- Librera stdlib.h
17.3.- Librera conio.h
17.4.- Librera string.h
17.5.- Librera graphics.h
17.6.- Librera dir.h
17.7.- Funciones interesantes
Pgina ! de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
1.- CARACTERISTICAS DEL LENGUAJE C
El lenguaje C se conoce como un lenguaje compilado. Existen dos tipos de
lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan
del cdigo fuente para funcionar (P.ej: Basic). Los compilados conierten el cdigo
fuente en un fic!ero o"jeto y #ste en un fic!ero ejecuta"le. Este es el caso del
lenguaje C.
Podemos decir que el lenguaje C es un lenguaje de niel medio$ ya que com"ina
elementos de lenguaje de alto niel con la funcionalidad del lenguaje ensam"lador.
Es un lenguaje estructurado$ ya que permite crear procedimientos en "loques
dentro de otros procedimientos. %ay que destacar que el C es un lenguaje porta"le$
ya que permite utili&ar el mismo cdigo en diferentes equipos y sistemas
inform'ticos: el lenguaje es independiente de la arquitectura de cualquier m'quina
en particular.
Por (ltimo solo queda decir que el C es un lenguaje relatiamente peque)o* se
puede descri"ir en poco espacio y aprender r'pidamente. Este es sin duda el
o"jetio de #ste curso. +o pretende ser un completo manual de la programacin$
sin una "ase (til para que cualquiera pueda introducirse en este apasionante
mundo.
,unque en principio cualquier compilador de C es 'lido$ para seguir este curso
se recomienda utili&ar el compilador Turbo C/C++ o "ien el Borland C++ 5.0.
Pgina " de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
2.- ESTRUCTURA DE UN PROGRAMA EN C
2.1.- Estructura
-odo programa en C consta de una o m's funciones$ una de las cuales se llama
main. El programa comien&a en la funcin main$ desde la cual es posi"le llamar a
otras funciones.
Cada funcin estar' formada por la ca"ecera de la funcin$ compuesta por el
nom"re de la misma y la lista de argumentos (si los !u"iese)$ la declaracin de las
aria"les a utili&ar y la secuencia de sentencias a ejecutar.
Ejemplo:
declaraciones globales
main( ) {
variables locales
bloque
}
funcion1( ) {
variables locales
bloque
}
2.2.- Comentarios
, la !ora de programar es coneniente a)adir comentarios (cuantos m's mejor)
para poder sa"er que funcin tiene cada parte del cdigo$ en caso de que no lo
utilicemos durante alg(n tiempo. ,dem's facilitaremos el tra"ajo a otros
programadores que puedan utili&ar nuestro arc!io fuente.
Para poner comentarios en un programa escrito en C usamos los s.m"olos
/* y */:
/* Este es un ejemplo de comentario */
/* Tambin podemos escribir
un comentario en varias lneas */
El s.m"olo /* se coloca al principio del comentario y el s.m"olo */ al final.
El comentario$ contenido entre estos dos s.m"olos$ no ser' tenido en cuenta por
el compilador.
/tra forma de colocar comentarios en algunos compiladores es con el sim"olo
// 0olo de"emos tener en cuenta que esto solo nos permite una sola linea de
comentario.
// Este es un ejemplo de comentario
Pgina 4 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
2.3.- Palabras clave
Existen una serie de indicadores reserados$ con una finalidad determinada$ que
no podemos utili&ar como identificadores.
, continuacin emos algunas de estas pala"ras clae:
char int float double if
else do while for switch
short long extern static default
continue break register sizeof typedef
2.4.- Identificadores
1n identificador es el nom"re que damos a las aria"les y funciones. Est'
formado por una secuencia de letras y d.gitos$ aunque tam"i#n acepta el caracter
de su"rayado _. Por contra no acepta los acentos ni la 2.
El primer caracter de un identificador no puede ser un n(mero$ es decir que
de"e ser una letra o el s.m"olo _.
0e diferencian las may(sculas de las min(sculas$ as. num$ Num y nuM son
distintos identificadores.
, continuacin emos algunos ejemplos de identificadores 'lidos y no 'lidos:
Vlidos No vlidos
3num 4num
ar4 n(mero5
fec!a3nac a)o3nac
Pgina # de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
3.- TIPOS DE DATOS
3.1.- Tipos
En 6C6 existen "'sicamente cuatro tipos de datos$ aunque como se er'
despu#s$ podremos definir nuestros propios tipos de datos a partir de estos cuatro.
, continuacin se detalla su nom"re$ el tama)o que ocupa en memoria y el rango
de sus posi"les alores.
TIPO Tamao Rango de valores
c!ar 4 "yte 7458 a 459
int 5 "ytes 7:59;8 a :59;9
float < "ytes :6< E7:8 a :6< E=:8
dou"le 8 "ytes 469 E7:>8 a 469 E=:>8
3.2.- Calificadores de tipo
Los calificadores de tipo tienen la misin de modificar el rango de alores de un
determinado tipo de aria"le. Estos calificadores son cuatro:
signed
Le indica a la aria"le que a a llear signo. Es el utili&ado por defecto.
tamao rango de valores
signed char 4 "yte 7458 a 459
signed int 5 "ytes 7:59;8 a :59;9
unsigned
Le indica a la aria"le que no a a llear signo (alor a"soluto).
tamao rango de valores
unsigned char 4 "yte > a 5??
unsigned int 5 "ytes > a ;??:?
Pgina $ de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
short
@ango de alores en formato corto (limitado). Es el utili&ado por defecto.
tamao rango de valores
short char 4 "yte 7458 a 459
short int 5 "ytes 7:59;8 a :59;9
long
@ango de alores en formato largo (ampliado).
tamao rango de valores
long int < "ytes 75.4<9.<8:.;<8 a 5.4<9.<8:.;<9
long double 4> "ytes 7:6:; E7<A:5 a 4648 E=<A:5
-am"i#n es posi"le com"inar calificadores entre s.:
signed long int = long int = long
unsigned long int = unsigned long 4 bytes 0 a 4.294.967.295
(El mayor entero permitido en 'C')
3.3.- Las variables
1na aria"le es un tipo de dato$ referenciado mediante un identificador (que es
el nom"re de la aria"le). 0u contenido podr' ser modificado a lo largo del
programa.
1na aria"le slo puede pertenecer a un tipo de dato. Para poder utili&ar una
aria"le$ primero tiene que ser declarada:
[calificador] <tipo> <nombre>
Es posi"le iniciali&ar y declarar m's de una aria"le del mismo tipo en la misma
sentencia:
[calificador] <tipo>
<nombre1>,<nombre2>=<valor>,<nombre3>=<valor>,<nombre4>
Pgina % de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
/* Uso de las variables */
#include <stdio.h>
main() { /* Suma dos valores */
int num1 = 4, num2, num3 = 6;
printf("El valor de num1 es %d", num1);
printf("\nEl valor de num3 es %d", num3);
num2 = num1+num3;
printf("\nnum1 + num3 = %d", num2);
}
3.4.- Dnde se declaran ?
Las aria"les pueden ser de dos tipos seg(n el lugar en que las declaremos:
globales o locales.
La aria"le glo"al se declara antes de la main( ). Puede ser utili&ada en
cualquier parte del programa y se destruye al finali&ar #ste.
La aria"le local se declara despu#s de la main( )$ en la funcin en que aya a
ser utili&ada. 0lo existe dentro de la funcin en que se declara y se destruye al
finali&ar dic!a funcin.
El identificador (nom"re de la aria"le) no puede ser una palabra clave y los
caracteres que podemos utili&ar son las letras: a-z y A-Z (ojoB la o no est'
permitida)$ los n(meros: 0-9 y el s.m"olo de su"rayado _. ,dem's !ay que tener
en cuenta que el primer caracter no puede ser un n(mero.
/* Declaracin de variables */
#include <stdio.h>
int a;
main() { /* Muestra dos valores */
int b = 4;
printf("b es local y vale %d",b);
a = 5;
printf("\na es global y vale %d",a);
}
3.5.- Constantes
,l contrario que las variables$ las constantes mantienen su alor a lo largo de
todo el programa.
Para indicar al compilador que se trata de una constante$ usaremos la directia
#define:
#define <identificador> <valor>
Pgina & de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
/"serar que no se indica el punto y coma de final de sentencia ni tampoco el
tipo de dato.
La directia #define no slo nos permite sustituir un nom"re por un alor
num#rico$ sin tam"i#n por una cadena de caracteres.
El alor de una constante no puede ser modificado de ninguna manera.
/* Uso de las constantes */
#include <stdio.h>
#define pi 3.1416
#define escribe printf
main() { /* Calcula el permetro */
int r;
escribe("Introduce el radio: ");
scanf("%d", &r);
escribe("El permetro es: %f", 2*pi*r);
}
3.6.- Secuencias de escape
Ciertos caracteres no representados gr'ficamente se pueden representar
mediante lo que se conoce como secuencia de escape.
, continuacin emos una ta"la de las m's significatias:
\n salto de l.nea
\b retroceso
\t ta"ulacin !ori&ontal
\v ta"ulacin ertical
\\ contra"arra
\f salto de p'gina
\' apstrofe
\" comillas do"les
\0 fin de una cadena de caracteres
/* Uso de las secuencias de escape */
#include <stdio.h>
main() { /* Escribe diversas sec. de escape */
printf("Me llamo \"Nemo\" el grande");
printf("\nDireccin: C\\ Mayor 25");
printf("\nHa salido la letra \'L\'");
printf("\nRetroceso\b");
printf("\n\tEsto ha sido todo");
}
Pgina ' de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
3.7.- Inclusin de archivos
En la programacin en C es posi"le utili&ar funciones que no esten inclu.das en
el propio programa. Para ello utili&amos la directia #include$ que nos permite
a)adir li"rer.as o funciones que se encuentran en otros arc!ios a nuestro
programa.
Para indicar al compilador que amos a incluir arc!ios externos podemos
!acerlo de dos maneras (siempre antes de las declaraciones).
4. Cndic'ndole al compilador la ruta donde se encuentra el arc!io.
#include "misfunc.h"
#include "c:\includes\misfunc.h"
5. Cndicando que se encuentran en el directorio por defecto del compilador.
#include <misfunc.h>
Pgina 1( de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
4.- OPERADORES ARITMETICOS Y DE ASIGNACION
, continuacin se explican los tipos de operadores (aritm#ticos y de asignacin)
que permiten reali&ar operaciones matem'ticas en lenguaje C.
4.1.- Operadores aritmticos
Existen dos tipos de operadores aritm#ticos:
Los "inarios:
+ 0uma
- @esta
* Dultiplicacin
/ Eiisin
% Ddulo (resto)
y los unarios:
++ Cncremento (suma 4)
- - Eecremento (resta 4)
- Cam"io de signo
0u sintaxis es:
binarios:
<variable1><operador><variable2>
unarios:
<variable><operador> y al re#s$ <operador><variable>.
/* Uso de los operadores aritmticos */
#include <stdio.h>
main() { /* Realiza varias operaciones */
int a = 1, b = 2, c = 3, r;
r = a + b;
printf("%d + %d = %d\n", a, b, r);
r = c - a;
printf("%d - %d = %d\n", c, a, r);
b++;
printf("b + 1 = %d", b);
}
Pgina 11 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
4.2.- Operadores de asignacin
La mayor.a de los operadores aritm#ticos "inarios explicados en el cap.tulo
anterior tienen su correspondiente operador de asignacin:
= ,signacin simple
+= 0uma
-= @esta
*= Dultiplicacin
/= Eiisin
%= Ddulo (resto)
Con estos operadores se pueden escri"ir$ de forma m's "ree$ expresiones del
tipo:
n = n + 3 se puede escri"ir n += 3
k = k*(x-2) lo podemos sustituir por k*= x-2
/* Uso de los operadores de asignacin */
#include <stdio.h>
main() { /* Realiza varias operaciones */
int a = 1, b = 2, c = 3, r;
a += 5;
printf("a + 5 = %d\n", a);
c -= 1;
printf("c - 1 = %d\n", c);
b *= 3;
printf("b * 3 = %d", b);
}
4.3.- Jerarqua de los operadores
0er' importante tener en cuenta la precedencia de los operadores a la !ora de
tra"ajar con ellos:
( ) Dayor precedencia
++, - -
*, /, %
+, - Denor precendencia
Las operaciones con mayor precedencia se reali&an antes que las de menor
precedencia.
0i en una operacin encontramos signos del mismo niel de precedencia$ dic!a
operacin se reali&a de i&quierda a derec!a. , continuacin se muestra un ejemplo
so"re ello:
a * b + c / d - e
1. aF" resultado G x
Pgina 1! de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
2. c2d resultado G y
3. x=y resultado G &
4. &7e
Hijarse que la multiplicacin se resuele antes que la diisin ya que est'
situada m's a la i&quierda en la operacin. Lo mismo ocurre con la suma y la resta.
/* Jerarqua de los operadores */
#include <stdio.h>
main() { /* Realiza una operacin */
int a = 6, b = 5, c = 4, d = 2, e = 1, x, y, z, r;
x = a * b;
printf("%d * %d = %d\n", a, b, x);
y = c / d;
printf("%d / %d = %d\n", c, d, y);
z = x + y;
printf("%d + %d = %d\n", x, y, z);
r = z - e;
printf("%d = %d", r, a*b+c/d-e);
}
Pgina 1" de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
5.- ENTRADA / SALIDA
5.1.- Sentencia printf( )
La sentencia printf permite la aparicin de alores num#ricos$ caracteres y
cadenas de texto por pantalla.
El prototipo de la sentencia printf es el siguiente:
printf(control, arg1, arg2...);
En la cadena de control indicamos la forma en que se mostrar'n los argumentos
posteriores. -am"i#n podemos introducir una cadena de texto ( sin necesidad de
argumentos )$ o com"inar am"as posi"ilidades$ as. como secuencias de escape.
En el caso de que utilicemos argumentos de"eremos indicar en la cadena de
control tantos modificadores como argumentos ayamos a presentar.
El modificador est' compuesto por el caracter % seguido por un caracter de
conersin$ que indica de que tipo de dato se trata.
/* Uso de la sentencia printf() 1. */
#include <stdio.h>
main() { /* Saca por pantalla una suma */
int a = 20, b = 10;
printf("El valor de a es %d\n", a);
printf("El valor de b es %d\n", b);
printf("Por tanto %d+%d=%d", a, b, a+b);
}
Los modificadores m's utili&ados son:
%c 1n (nico caracter
%d 1n entero con signo$ en "ase decimal
%u 1n entero sin signo$ en "ase decimal
%o 1n entero en "ase octal
%x 1n entero en "ase !exadecimal
%e 1n n(mero real en coma flotante$ con exponente
%f 1n n(mero real en coma flotante$ sin exponente
%s 1na cadena de caracteres
%p 1n puntero o direccin de memoria
/* Uso de la sentencia printf() 2. */
#include <stdio.h>
main() { /* Modificadores 1 */
char cad[] = "El valor de";
int a =- 15;
unsigned int b = 3;
float c = 932.5;
printf("%s a es %d\n",cad,a);
Pgina 14 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
printf("%s b es %u\n", cad, b);
printf("%s c es %e o %f", cad, c, c);
}
El formato completo de los modificadores es el siguiente:
% [signo] [longitud] [.precisin] [l/L] conversin
Signo: indicamos si el alor se ajustar' a la i&quierda$ en cuyo caso utili&aremos
el signo menos$ o a la derec!a ( por defecto ).
Longitud: especifica la longitud m'xima del alor que aparece por pantalla. 0i la
longitud es menor que el n(mero de d.gitos del alor$ #ste aparecer' ajustado a la
i&quierda.
Precisin: indicamos el n(mero m'ximo de decimales que tendr' el alor.
l/L: utili&amos l cuando se trata de una aria"le de tipo long y L cuando es de
tipo dou"le.
/* Uso de la sentencia printf() 3. */
#include <stdio.h>
main() { /* Modificadores 2 */
char cad[ ] = "El valor de";
int a = 25986;
long int b = 1976524;
float c = 9.57645;
printf("%s a es %9d\n", cad, a);
printf("%s b es %ld\n", cad, b);
printf("%s c es %.3f", cad, c);
}
5.2.- Sentencia scanf( )
La rutina scanf permite entrar datos en la memoria del ordenador a tra#s del
teclado.
El prototipo de la sentencia scanf es el siguiente:
scanf(control, arg1, arg2...);
En la cadena de control indicaremos$ por regla general$ los modificadores que
!ar'n referencia al tipo de dato de los argumentos. ,l igual que en la sentencia
printf los modificadores estar'n formados por el caracter % seguido de un
caracter de conersin. Los argumentos indicados ser'n$ nueamente$ las
aria"les.
Pgina 1# de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
La principal caracter.stica de la sentencia scanf es que necesita sa"er la posicin
de la memoria del ordenador en que se encuentra la aria"le para poder almacenar
la informacin o"tenida. Para indicarle esta posicin utili&aremos el s.m"olo
ampersand ( & )$ que colocaremos delante del nom"re de cada aria"le. ( Esto no
ser' necesario en los arrays ).
/* Uso de la sentencia scanf(). */
#include <stdio.h>
main() { /* Solicita dos datos */
char nombre[10];
int edad;
printf("Introduce tu nombre: ");
scanf("%s", nombre);
printf("Introduce tu edad: ");
scanf("%d", &edad);
}
Pgina 1$ de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
6.- OPERADORES RELACIONALES
Los operadores relacionales se utili&an para comparar el contenido de dos
aria"les.
En C existen seis operadores relacionales "'sicos:
> Dayor que
< Denor que
>= Dayor o igual que
<= Denor o igual que
== Cgual que
!= Eistinto que
El resultado que deuelen estos operadores es 1 para Ierdadero y 0 para
Halso.
0i !ay m's de un operador se eal(an de i&quierda a derec!a. ,dem's los
operadores == y != est'n por de"ajo del resto en cuanto al orden de precedencia.
/* Uso de los operadores relacionales. */
#include <stdio.h>
main() { /* Compara dos nmeros entre ellos */
int a, b;
printf("Introduce el valor de A: ");
scanf("%d", &a);
printf("Introduce el valor de B: ");
scanf("%d", &b);
if(a > b)
printf("A es mayor que B");
else if( a < b)
printf("B es mayor que A");
else
printf("A y B son iguales");
}
Pgina 1% de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
7.- SENTENCIAS CONDICIONALES
Este tipo de sentencias permiten ariar el flujo del programa en "ase a unas
determinadas condiciones.
Existen arias estructuras diferentes:
7.1.- Estructura IF...ELSE
0intaxis:
if (condicin) sentencia;
La sentencia solo se ejecuta si se cumple la condicin. En caso contrario el
programa sigue su curso sin ejecutar la sentencia.
/tro formato:
if (condicin) sentencia1;
else sentencia2;
0i se cumple la condicin ejecutar' la sentencia1$ sin ejecutar' la
sentencia2. En cualquier caso$ el programa continuar' a partir de la sentencia2.
/* Uso de la sentencia condicional IF. */
#include <stdio.h>
main() { /* Simula una clave de acceso */
int usuario, clave = 18276;
printf("Introduce tu clave: ");
scanf("%d", &usuario);
if(usuario == clave)
printf("Acceso permitido");
else
printf("Acceso denegado");
}
/tro formato:
if(condicin) sentencia1;
else if (condicin) sentencia2;
else if (condicin) sentencia3;
else sentencia4;
Con este formato el flujo del programa (nicamente entra en una de las
condiciones. 0i una de ellas se cumple$ se ejecuta la sentencia correspondiente y
salta !asta el final de la estructura para continuar con el programa.
Pgina 1& de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
Existe la posi"ilidad de utili&ar llaes para ejecutar m's de una sentencia dentro
de la misma condicin.
/* Uso de la sentencia condicional ELSE...IF. */
#include <stdio.h>
main() { /* Escribe beb, nio o adulto */
int edad;
printf("Introduce tu edad: ");
scanf("%d", &edad);
if (edad < 1)
printf("Lo siento, te has equivocado.");
else if (edad < 3) printf("Eres un beb");
else if (edad < 13) printf("Eres un nio");
else printf("Eres adulto");
}
Este tipo de sentencias permiten ariar el flujo del programa en "ase a unas
determinadas condiciones.
Existen arias estructuras diferentes:
7.1.- Estructura IF...ELSE
0intaxis:
if (condicin) sentencia;
La sentencia solo se ejecuta si se cumple la condicin. En caso contrario el
programa sigue su curso sin ejecutar la sentencia.
/tro formato:
if (condicin) sentencia1;
else sentencia2;
0i se cumple la condicin ejecutar' la sentencia1$ sin ejecutar' la
sentencia2. En cualquier caso$ el programa continuar' a partir de la sentencia2.
/* Uso de la sentencia condicional IF. */
#include <stdio.h>
main() { /* Simula una clave de acceso */
int usuario, clave = 18276;
printf("Introduce tu clave: ");
scanf("%d", &usuario);
if(usuario == clave) printf("Acceso permitido");
else printf("Acceso denegado");
}
Pgina 1' de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
/tro formato:
if(condicin) sentencia1;
else if(condicin) sentencia2;
else if(condicin) sentencia3;
else sentencia4;
Con este formato el flujo del programa (nicamente entra en una de las
condiciones. 0i una de ellas se cumple$ se ejecuta la sentencia correspondiente y
salta !asta el final de la estructura para continuar con el programa.
Existe la posi"ilidad de utili&ar llaes para ejecutar m's de una sentencia dentro
de la misma condicin.
/* Uso de la sentencia condicional ELSE...IF. */
#include <stdio.h>
main() { /* Escribe beb, nio o adulto */
int edad;
printf("Introduce tu edad: ");
scanf("%d", &edad);
if(edad < 1) printf("Lo siento, te has equivocado.");
else if(edad < 3) printf("Eres un beb");
else if(edad < 13) printf("Eres un nio");
else printf("Eres adulto");
}
7.2.- Estructura SWITCH
Esta estructura se suele utili&ar en los men(s$ de manera que seg(n la opcin
seleccionada se ejecuten una serie de sentencias.
0u sintaxis es:
switch (variable){
case contenido_variable1:
sentencias;
break;
case contenido_variable2:
sentencias;
break;
default:
sentencias;
break;
}
Cada case puede incluir una o m's sentencias sin necesidad de ir entre llaes$
ya que se ejecutan todas !asta que se encuentra la sentencia BREAK. La aria"le
ealuada slo puede ser de tipo entero o caracter. default ejecutar' las
sentencias que incluya$ en caso de que la opcin escogida no exista.
/* Uso de la sentencia condicional SWITCH. */
Pgina !( de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
#include <stdio.h>
main() { /* Escribe el da de la semana */
int dia;

printf("Introduce el da: ");
scanf("%d", &dia);
switch(dia){
case 1: printf("Lunes"); break;
case 2: printf("Martes"); break;
case 3: printf("Mircoles"); break;
case 4: printf("Jueves"); break;
case 5: printf("Viernes"); break;
case 6: printf("Sbado"); break;
case 7: printf("Domingo"); break;
}
}
Pgina !1 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
8.- OPERADORES LOGICOS
Los operadores lgicos "'sicos son tres:
&& ,+E
|| /@
! +/- (El alor contrario)
Estos operadores act(an so"re expresiones lgicas. Permiten unir expresiones
lgicas simples formando otras m's complejas.
I G Ierdadero H G Halso
/* Uso de los op. lgicos AND,OR,NOT. */
#include <stdio.h>
main() { /* Compara un nmero introducido */
int numero;

printf("Introduce un nmero: ");
scanf("%d", &numero);
if(!(numero >= 0))
printf("El nmero es negativo");
else if((numero <= 100) && (numero >= 25))
printf("El nmero est entre 25 y 100");
else if((numero < 25)||(numero > 100))
printf("El nmero no est entre 25 y 100");
}
Pgina !! de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
9.- BUCLES
Los "ucles son estructuras que permiten ejecutar partes del cdigo de forma
repetida mientras se cumpla una condicin.
Esta condicin puede ser simple o compuesta de otras condiciones unidas por
operadores lgicos.
9.1.- Sentencia WHILE
0u sintaxis es:
while (condicin) sentencia;
Con esta sentencia se controla la condicin antes de entrar en el "ucle. 0i #sta
no se cumple$ el programa no entrar' en el "ucle.
+aturalmente$ si en el interior del "ucle !ay m's de una sentencia$ #stas
de"er'n ir entre llaes para que se ejecuten como un "loque.
/* Uso de la sentencia WHILE. */
#include <stdio.h>
main() /* Escribe los nmeros del 1 al 10 */
{
int numero = 1;
while(numero <= 10) {
printf("%d\n", numero);
numero++;
}
}
9.2.- Sentencia DO...WHILE
0u sintaxis es:
do{
sentencia1;
sentencia2;
}while(condicin);
Con esta sentencia se controla la condicin al final del "ucle. 0i #sta se cumple$
el programa uele a ejecutar las sentencias del "ucle.
La (nica diferencia entre las sentencias J!ile y do...J!ile es que con la segunda
el cuerpo del "ucle se ejecutar' por lo menos una e&.
Pgina !" de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
/* Uso de la sentencia DO...WHILE. */
#include <stdio.h>
main() { /* Muestra un men si no se pulsa 4 */
char seleccion;
do{
printf("1.- Comenzar\n");
printf("2.- Abrir\n");
printf("3.- Grabar\n");
printf("4.- Salir\n");
printf("Escoge una opcin: ");
seleccion = getchar();
switch(seleccion){
case '1': printf("Opcin 1");
break;
case '2': printf("Opcin 2");
break;
case '3':printf("Opcin 3");
break;
}
}while(seleccion!='4');
}
9.2.- Sentencia DO...WHILE
0u sintaxis es:
do{
sentencia1;
sentencia2;
}while(condicin);
Con esta sentencia se controla la condicin al final del "ucle. 0i #sta se cumple$
el programa uele a ejecutar las sentencias del "ucle.
La (nica diferencia entre las sentencias J!ile y do...J!ile es que con la segunda
el cuerpo del "ucle se ejecutar' por lo menos una e&.
/* Uso de la sentencia DO...WHILE. */
#include <stdio.h>
main() {/* Muestra un men si no se pulsa 4 */
char seleccion;
do{
printf("1.- Comenzar\n");
printf("2.- Abrir\n");
printf("3.- Grabar\n");
printf("4.- Salir\n");
printf("Escoge una opcin: ");
seleccion=getchar();
switch(seleccion){
case '1':printf("Opcin 1");
Pgina !4 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
break;
case '2':printf("Opcin 2");
break;
case '3':printf("Opcin 3");
break;
}
}while(seleccion != '4');
}
9.3.- Sentencia FOR
0u sintaxis es:
for(inicializacin; condicin; incremento){
sentencia1;
sentencia2;
}
La iniciali&acin indica una aria"le (aria"le de control) que condiciona la
repeticin del "ucle. 0i !ay m's$ an separadas por comas:
for(a = 1, b = 100; a!=b; a++,b- -){
El flujo del "ucle FOR transcurre de la siguiente forma:
/* Uso de la sentencia FOR. */
#include <stdio.h>
main() { /* Escribe la tabla de multiplicar */
int num, x, result;
printf("Introduce un nmero: ");
scanf("%d", &num);
for (x = 0; x <= 10; x++){
result = num*x;
printf("\n%d por %d = %d\n", num, x, result);
}
9.4.- Sentencia BREAK
Esta sentencia se utili&a para terminar la ejecucin de un "ucle o salir de una
sentencia SWITCH.
9.5.- Sentencia CONTINUE
0e utili&a dentro de un "ucle. Cuando el programa llega a una sentencia
CONTINUE no ejecuta las l.neas de cdigo que !ay a continuacin y salta a la
siguiente iteracin del "ucle.
Pgina !# de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
K aqu. termina el cap.tulo dedicado a los "ucles. Existe otra sentencia$ GOTO$
que permite al programa saltar !acia un punto identificado con una etiqueta$ pero
el "uen programador de"e prescindir de su utili&acin. Es una sentencia muy mal
ista en la programacin en 6C6.
/* Uso de la sentencia CONTINUE. */
#include <stdio.h>
main() { /* Escribe del 1 al 100 menos el 25 */
int numero = 1;
while(numero <= 100) {
if(numero == 25) {
numero++;
continue;
}
printf("%d\n",numero);
numero++;
}
}
9.4.- Sentencia BREAK
Esta sentencia se utili&a para terminar la ejecucin de un "ucle o salir de una
sentencia SWITCH.
9.5.- Sentencia CONTINUE
0e utili&a dentro de un "ucle. Cuando el programa llega a una sentencia
CONTINUE no ejecuta las l.neas de cdigo que !ay a continuacin y salta a la
siguiente iteracin del "ucle.
K aqu. termina el cap.tulo dedicado a los "ucles. Existe otra sentencia$ GOTO$
que permite al programa saltar !acia un punto identificado con una etiqueta$ pero
el "uen programador de"e prescindir de su utili&acin. Es una sentencia muy mal
ista en la programacin en 6C6.
/* Uso de la sentencia CONTINUE. */
#include <stdio.h>
main() { /* Escribe del 1 al 100 menos el 25 */
int numero = 1;
while(numero <= 100) {
if(numero == 25) {
numero++;
continue;
}
printf("%d\n",numero);
numero++;
}
}
Pgina !$ de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
10.1.- Tiempo de vida de los datos
0eg(n el lugar donde son declaradas puede !a"er dos tipos de aria"les.
Globales: las aria"les permanecen actias durante todo el programa. 0e crean
al iniciarse #ste y se destruyen de la memoria al finali&ar. Pueden ser utili&adas en
cualquier funcin.
Locales: las aria"les son creadas cuando el programa llega a la funcin en la
que est'n definidas. ,l finali&ar la funcin desaparecen de la memoria.
0i dos aria"les$ una glo"al y una local$ tienen el mismo nom"re$ la local
prealecer' so"re la glo"al dentro de la funcin en que !a sido declarada.
Eos aria"les locales pueden tener el mismo nom"re siempre que est#n
declaradas en funciones diferentes.
/* Variables globales y locales. */
#include <stdio.h>
int num1=1;
main() { /* Escribe dos cifras */
int num2 = 10;
printf("%d\n",num1);
printf("%d\n",num2);
}
10.2.- Funciones
Las funciones son "loques de cdigo utili&ados para diidir un programa en
partes m's peque)as$ cada una de las cu'les tendr' una tarea determinada.
0u sintaxis es:
tipo_funcin nombre_funcin (tipo y nombre de argumentos){
bloque de sentencias
}
tipo_funcin: puede ser de cualquier tipo de los que conocemos. El alor
deuelto por la funcin ser' de este tipo. Por defecto$ es decir$ si no indicamos el
tipo$ la funcin deoler' un alor de tipo entero ( int ). 0i no queremos que
retorne ning(n alor de"eremos indicar el tipo ac.o ( void ).
nombre_funcin: es el nom"re que le daremos a la funcin.
tipo y nombre de argumentos: son los par'metros que reci"e la funcin. Los
argumentos de una funcin no son m's que aria"les locales que reci"en un alor.
Este alor se lo eniamos al !acer la llamada a la funcin. Pueden existir funciones
que no reci"an argumentos.
bloque de sentencias: es el conjunto de sentencias que ser'n ejecutadas cuando
se realice la llamada a la funcin.
Pgina !% de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
Las funciones pueden ser llamadas desde la funcin main o desde otras
funciones. +unca se de"e llamar a la funcin main desde otro lugar del programa.
Por (ltimo recalcar que los argumentos de la funcin y sus aria"les locales se
destruir'n al finali&ar la ejecucin de la misma.
10.3.- Declaracin de las funciones
,l igual que las aria"les$ las funciones tam"i#n !an de ser declaradas. Esto es
lo que se conoce como prototipo de una funcin. Para que un programa en C sea
compati"le entre distintos compiladores es imprescindi"le escri"ir los prototipos de
las funciones.
Los prototipos de las funciones pueden escri"irse antes de la funcin main o
"i#n en otro fic!ero. En este (ltimo caso se lo indicaremos al compilador mediante
la directia #include.
En el ejemplo adjunto podremos er la declaracin de una funcin ( prototipo ).
,l no reci"ir ni retornar ning(n alor$ est' declarada como void en am"os lados.
-am"i#n emos que existe una aria"le glo"al llamada num. Esta aria"le es
reconoci"le en todas las funciones del programa. Ka en la funcin main
encontramos una aria"le local llamada num. ,l ser una aria"le local$ #sta tendr'
preferencia so"re la glo"al. Por tanto la funcin escri"ir' los n(meros 4> y ?.
/* Declaracin de funciones. */
#include <stdio.h>
void funcion(void); /* prototipo */
int num=5; /* variable global */
main() { /* Escribe dos nmeros */
int num = 10; /* variable local */
printf("%d\n",num);
funcion(); /* llamada */
}
void funcion(void) {
printf("%d\n",num);
}
10.4.- Paso de parmetros a una funcin
Como ya !emos isto$ las funciones pueden retornar un alor. Esto se !ace
mediante la instruccin return$ que finali&a la ejecucin de la funcin$ deoliendo
o no un alor.
En una misma funcin podemos tener m's de una instruccin return. La forma
de retornar un alor es la siguiente:
return( valor o expresin );
El alor deuelto por la funcin de"e asignarse a una aria"le. Ee lo contrario$
el alor se perder'.
Pgina !& de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
En el ejemplo puedes er lo que ocurre si no guardamos el alor en una
aria"le. H.jate que a la !ora de mostrar el resultado de la suma$ en el printf$
tam"i#n podemos llamar a la funcin.
/* Paso de parmetros. */
#include <stdio.h>
int suma(int, int); /* prototipo */
main() { /* Realiza una suma */
int a = 10, b = 25, t;
t = suma(a, b); /* guardamos el valor */
printf("%d=%d", suma(a,b), t);
suma(a, b); /* el valor se pierde */
}
int suma(int a, int b){
return (a+b);
}
1n array es un identificador que referencia un conjunto de datos del mismo tipo.
Cmagina un tipo de dato int* podremos crear un conjunto de datos de ese tipo y
utili&ar uno u otro con slo cam"iar el .ndice que lo referencia. El .ndice ser' un
alor entero y positio. En C los arrays comien&an por la posicin 0.
11.- ARRAYS
11.1.- Vectores
1n ector es un array unidimensional$ es decir$ slo utili&a un .ndice para
referenciar a cada uno de los elementos. 0u declaracin ser':
tipo nombre[tamao];
El tipo puede ser cualquiera de los ya conocidos y el tama)o indica el n(mero de
elementos del ector ( se de"e indicar entre corc!etes [ ] ). En el ejemplo puedes
o"serar que la aria"le i es utili&ada como .ndice$ el primer for sire para rellenar
el ector y el segundo para isuali&arlo. Como es$ las posiciones an de 0 a 9
( total 4> elementos ).
/* Declaracin de un array. */
#include <stdio.h>
main() { /* Rellenamos del 0 - 9 */
int vector[10], i;
for (i=0; i<10; i++) vector[i] = i;
for (i=0; i<10; i++) printf(" %d", vector[i]);
}
Pgina !' de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
Podemos inicializar (asignarle alores) un ector en el momento de declararlo.
0i lo !acemos as. no es necesario indicar el tama)o. 0u sintaxis es:
tipo nombre [] = {valor 1, valor 2...}
Ejemplos:
int vector[] = {1, 2, 3, 4, 5, 6, 7, 8};
char vector[] = "programador";
char vector[] = {'p', 'r', 'o', 'g', 'r', 'a', 'm', 'a', 'd', 'o', 'r'};
1na particularidad con los ectores de tipo char (cadena de caracteres)$ es que
de"eremos indicar en que elemento se encuentra el fin de la cadena mediante el
caracter nulo (\0). Esto no lo controla el compilador$ y tendremos que ser nosotros
los que insertemos este caracter al final de la cadena.
Por tanto$ en un ector de 4> elementos de tipo char podremos rellenar un
m'ximo de A$ es decir$ !asta vector[8]. 0i slo rellenamos los ? primeros$ !asta
vector[4]$ de"emos asignar el caracter nulo a vector[5]. Es muy sencillo:
vector[5] = '\0'; .
,!ora eremos un ejemplo de como se rellena un ector de tipo char.
/* Vector de tipo char. */
#include <stdio.h>
main() /* Rellenamos un vector char */
char cadena[20];
int i;
for (i=0; i<19 && cadena[i-1] != 13; i++)
cadena[i] = getche( );
if (I == 19) cadena[i] = '\0';
else cadena[i-1] = '\0';
printf("\n%s", cadena);
}
Podemos er que en el for se encuentran dos condiciones:
1.- Lue no se !ayan rellenado todos los elementos (i<19).
2.- Lue el usuario no !aya pulsado la tecla E+-E@$ cuyo cdigo ,0CCC es 13.
(cadena[x-i] != 13).
-am"i#n podemos o"serar una nuea funcin llamada getche( )$ que se
encuentra en conio.h. Esta funcin permite la entrada de un caracter por teclado.
Eespu#s se encuentra un if$ que comprue"a si se !a rellenado todo el ector. 0i es
cierto$ coloca el caracter nulo en el elemento nM5> (cadena[19]). En caso
contrario tenemos el else$ que asigna el caracter nulo al elemento que almacen el
caracter E+-E@.
Pgina "( de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
En resumen: al declarar una cadena de"eremos reserar una posicin m's que
la longitud que queremos que tenga dic!a cadena.
.- Llamadas a funciones con arrays
Como ya se coment en el tema anterior$ los arrays (nicamente pueden ser
eniados a una funcin por referencia. Para ello de"eremos eniar la direccin de
memoria del primer elemento del array. Por tanto$ el argumento de la funcin
de"er' ser un puntero.
/* Envo de un array a una funcin. */
#include <stdio.h>
void visualizar(int []); /* prototipo */
main() { /* rellenamos y visualizamos */
int array[25], i;
for (i=0; i<25; i++){
printf("Elemento n %d", i+1);
scanf("%d", &array[i]);
}
visualizar(&array[0]);
}
void visualizar(int array[]) { /* desarrollo */
int i;
for (i=0; i<25; i++) printf("%d", array[i]);
}
En el ejemplo se puede apreciar la forma de eniar un array por referencia. La
funcin se pod.a !a"er declarado de otra manera$ aunque funciona exactamente
igual:
declaracin o prototipo
void visualizar(int *);
desarrollo de la funcin
void visualizar(int *array)
11.2.- Matrices
1na matri& es un array multidimensional. 0e definen igual que los ectores
excepto que se requiere un .ndice por cada dimensin.
0u sintaxis es la siguiente:
tipo nombre [tamao 1][tamao 2]...;
1na matri& bidimensional se podr.a representar gr'ficamente como una ta"la
con filas y columnas.
Pgina "1 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
La matri& tridimensional se utili&a$ por ejemplo$ para tra"ajos gr'ficos con
o"jetos 3D.
En el ejemplo puedes er como se rellena y isuali&a una matri& bidimensional.
0e necesitan dos "ucles para cada una de las operaciones. 1n "ucle controla las
filas y otro las columnas.
/* Matriz bidimensional. */
#include <stdio.h>
main() { /* Rellenamos una matriz */
int x, i, numeros[3][4];
/* rellenamos la matriz */
for(x = 0; x < 3; x++)
for(i = 0; I < 4; i++)
scanf("%d",&numeros[x][i]);
/* visualizamos la matriz */
for(x = 0; x < 3; x++)
for (I = 0; I < 4; i++)
printf("%d", numeros[x][i]);
}
0i al declarar una matri& tam"i#n queremos iniciali&arla$ !a"r' que tener
encuenta el orden en el que los alores son asignados a los elementos de la matri&.
Ieamos algunos ejemplos:
int numeros[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
quedar.an asignados de la siguiente manera:
numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3
numeros[0][3]=4
numeros[1][0]=5 numeros[1][1]=6 numeros[1][2]=7
numeros[1][3]=8
numeros[2][0]=9 numeros[2][1]=10 numeros[2][2]=11
numeros[2][3]=12
-am"i#n se pueden iniciali&ar cadenas de texto de la siguiente forma:
char dias[7][10]={"lunes", "martes", "mircoles", "jueves",
"viernes", "sbado", "domingo"};
Para referirnos a cada pala"ra "astar.a con el primer .ndice:
printf("%s", dias[i]);
Pgina "! de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
12.- PUNTEROS
1n puntero es una aria"le que contiene la direccin de memoria de otra
aria"le. 0e utili&an para pasar informacin entre una funcin y sus puntos de
llamada.
12.1.- Declaracin
0u sintaxis es la siguiente:
tipo *nombre;
Eonde nom"re es$ naturalmente$ el nom"re de la aria"le$ y tipo es el tipo del
elemento cuya direccin almacena el puntero.
12.2.- Operadores
Existen dos operadores especiales para tra"ajar con punteros: & y *.
El primero deuele la direccin de memoria de su operando. Por ejemplo$ si
queremos guardar en el puntero x la direccin de memoria de la aria"le num$
de"eremos !acer lo siguiente:
x = &num;
El segundo deuele el alor de la aria"le cuya direccin es contenida por el
puntero. Este ejemplo sit(a el contenido de la aria"le apuntada por x$ es decir
num$ en la aria"le a:
a = *x;
1n puntero es una aria"le que contiene la direccin de memoria de otra
aria"le. 0e utili&an para pasar informacin entre una funcin y sus puntos de
llamada.
12.3.- Asignacin
Los punteros se asignan igual que el resto de las aria"les. El programa ejemplo
mostrar' las direcciones contenidas en p1 y p2$ que ser' la misma en am"os
punteros.
/* Asignaciones de punteros. */
#include <stdio.h>
main() { /* Asignamos direcciones */
int a;
int *p1, *p2;
p1 = &a;
p2 = p1;
printf("%p %p", p1, p2);
}
Pgina "" de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
12.4.- Aritmtica de direcciones
Es posi"le despla&ar un puntero recorriendo posiciones de memoria. Para ello
podemos usar los operadores de suma$ resta$ incremento y decremento (=$ 7$ ==$
7 7). 0i tenemos un puntero ( p1 ) de tipo int ( 2 bytes )$ apuntando a la posicin
:>>>> y !acemos: p1=p1+5; el puntero almacenar' la posicin :>>4>$ porque
apunta ? enteros por encima ( 10 bytes ms ).
Pgina "4 de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
13.- ESTRUCTURAS
13.1.- Concepto de estructura
1na estructura es un conjunto de una o m's aria"les$ de distinto tipo$
agrupadas "ajo un mismo nom"re para que su manejo sea m's sencillo.
0u utili&acin m's !a"itual es para la programacin de "ases de datos$ ya que
est'n especialmente indicadas para el tra"ajo con registros o fic!as.
La sintaxis de su declaracin es la siguiente:
struct tipo_estructura {
tipo_variable nombre_variable1;
tipo_variable nombre_variable2;
tipo_variable nombre_variable3;
};
Eonde tipo_estructura es el nom"re del nueo tipo de dato que !emos
creado. Por (ltimo$ tipo_variable y nombre_variable son las aria"les que
forman parte de la estructura.
Para definir aria"les del tipo que aca"amos de crear lo podemos !acer de
arias maneras$ aunque las dos m's utili&adas son #stas:
1na forma de definir la estructura:
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
struct trabajador fijo, temporal;
/tra forma:
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
}fijo, temporal;
En el primer caso declaramos la estructura$ y en el momento en que
necesitamos las aria"les$ las declaramos. En el segundo las declaramos al mismo
tiempo que la estructura. El pro"lema del segundo m#todo es que no podremos
declarar m's aria"les de este tipo a lo largo del programa. Para poder declarar
una aria"le de tipo estructura$ la estructura tiene que estar declarada
preiamente. 0e de"e declarar antes de la funcin main.
El manejo de las estructuras es muy sencillo$ as. como el acceso a los campos
( o aria"les ) de estas estructuras. La forma de acceder a estos campos es la
siguiente:
variable.campo;
Pgina "# de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
Eonde variable es el nom"re de la aria"le de tipo estructura que !emos
creado$ y campo es el nom"re de la aria"le que forma parte de la estructura. Lo
eremos mejor con un ejemplo "asado en la estructura del cap.tulo 4:.4:
temporal.edad = 25;
Lo que estamos !aciendo es almacenar el alor 5? en el campo edad de la
aria"le temporal de tipo trabajador.
/tra caracter.stica interesante de las estructuras es que permiten pasar el
contenido de una estructura a otra$ siempre que sean del mismo tipo naturalmente:
fijo = temporal;
,l igual que con los otros tipos de datos$ tam"i#n es posi"le iniciali&ar aria"les
de tipo estructura en el momento de su declaracin:
struct trabajador fijo={"Pedro","Hernndez Surez", 32, "gerente"};
0i uno de los campos de la estructura es un array de n(meros$ los alores de la
iniciali&acin de"er'n ir entre llaes:
struct notas {
char nombre[30];
int notas[5];
};
struct notas alumno={"Carlos Prez",{8,7,9,6,10}};
13.2.- Estructuras y funciones
Podemos eniar una estructura a una funcin de las dos maneras conocidas:
1.- Por valor: su declaracin ser.a:
void visualizar(struct trabajador);
Eespu#s declarar.amos la aria"le fijo y su llamada ser.a:
visualizar(fijo);
Por (ltimo$ el desarrollo de la funcin ser.a:
void visualizar(struct trabajador datos)
/* Paso de una estructura por valor. */
#include <stdio.h>
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
Pgina "$ de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
char puesto[10];
};
void visualizar(struct trabajador);
main() { /* Rellenar y visualizar */
struct trabajador fijo;
printf("Nombre: ");
scanf("%s", fijo.nombre);
printf("\nApellidos: ");
scanf("%s", fijo.apellidos);
printf("\nEdad: ");
scanf("%d", &fijo.edad);
printf("\nPuesto: ");
scanf("%s", fijo.puesto);
visualizar(fijo);
}
void visualizar(struct trabajador datos) {
printf("Nombre: %s",datos.nombre);
printf("\nApellidos: %s",datos.apellidos);
printf("\nEdad: %d",datos.edad);
printf("\nPuesto: %s",datos.puesto);
}
2.- Por referencia: su declaracin ser.a:
void visualizar(struct trabajador *);
Eespu#s declararemos la aria"le fijo y su llamada ser':
visualizar(&fijo);
Por (ltimo$ el desarrollo de la funcin ser':
void visualizar(struct trabajador *datos)
H.jate que en la funcin visualizar$ el acceso a los campos de la aria"le datos
se reali&a mediante el operador ->$ ya que tratamos con un puntero. En estos
casos siempre utili&aremos el operador ->. 0e consigue con el signo menos seguido
de mayor que.
/* Paso de una estructura por referencia. */
#include <stdio.h>
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
Pgina "% de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
void visualizar(struct trabajador *);
main() { /* Rellenar y visualizar */
struct trabajador fijo;
printf("Nombre: ");
scanf("%s", fijo.nombre);
printf("\nApellidos: ");
scanf("%s", fijo.apellidos);
printf("\nEdad: ");
scanf("%d", &fijo.edad);
printf("\nPuesto: ");
scanf("%s", fijo.puesto);
visualizar(&fijo);
}
void visualizar(struct trabajador *datos) {
printf("Nombre: %s",datos->nombre);
printf("\nApellidos: %s",datos->apellidos);
printf("\nEdad: %d",datos->edad);
printf("\nPuesto: %s",datos->puesto);
}
13.3.- Arrays de estructuras
Es posi"le agrupar un conjunto de elementos de tipo estructura en un array.
Esto se conoce como array de estructuras:
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
};
struct trabajador fijo[20];
,s. podremos almacenar los datos de 5> tra"ajadores. Ejemplos so"re como
acceder a los campos y sus elementos: para er el nom"re del cuarto tra"ajador$
fijo[3].nombre;. Para er la tercera letra del nom"re del cuarto tra"ajador$
fijo[3].nombre[2];. Para iniciali&ar la aria"le en el momento de declararla lo
!aremos de esta manera:
struct trabajador fijo[20]={{"Jos","Herrero Martnez",29},
{"Luis","Garca Snchez",46}};
13.4.- Typedef
Es posi"le agrupar un conjunto de elementos de tipo estructura en un array.
Esto se conoce como array de estructuras:
El lenguaje 6C6 dispone de una declaracin llamada typedef que permite la
creacin de nueos tipos de datos. Ejemplos:
typedef int entero; // acabamos de crear un tipo de dato llamado entero
entero a, b = 3; // declaramos dos variables de este tipo
Pgina "& de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
0u empleo con estructuras est' especialmente indicado. 0e puede !acer de
arias formas:
1na forma de !acerlo:
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
};
typedef struct trabajador datos;
datos fijo, temporal;
/tra forma:
typedef struct {
char nombre[20];
char apellidos[40];
int edad;
} datos;
datos fijo, temporal;
Pgina "' de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
15.- APENDICE
En este cap.tulo y para finali&ar eremos los arc!ios de ca"ecera mas comunes
$ donde est'n declaradas las funciones que utili&aremos !a"itualmente.
15.1.- Librera stdio.h
printf
Huncin: Escri"e en la salida est'ndar con formato.
0intaxis: printf(formato $ arg4 $ ...)*
15.2.- Librera stdlib.h
atoi
Huncin: Conierte una cadena de texto en un alor de tipo entero.
0intaxis: numentGatoi(cadena)*
itoa
Huncin: Conierte un alor num#rico entero en una cadena de texto. La "ase
generalmente ser' 4>$ aunque se puede indicar otra distinta.
0intaxis: itoa(n(mero $ cadena $ "ase)*
15.3.- Librera string.h
strlen
Huncin: Calcula la longitud de una cadena.
0intaxis: longitudGstrlen(cadena)*
strcpy
Huncin: Copia el contenido de una cadena so"re otra.
0intaxis: strcpy(copia $ original)*
strcat
Huncin: Concatena dos cadenas.
0intaxis: strcat(cadena4 $ cadena5)*
Pgina 4( de 41
.bairesrobotics.com.ar
Introduccin al Lenguaje de Programacin C by Jorge M. Dhios
www.bairesrobotics.com.ar
strcmp
Huncin: Compara el contenido de dos cadenas. 0i cadena1 < cadena2
retorna un n(mero negatio. 0i cadena1 > cadena2$ un nNmero positio$ y si
cadena1 es igual que cadena2 retorna 0 ( o NULL ).
0intaxis: alorGstrcmp(cadena4 $ cadena5)*
,qu. finali&a este Curso de Programacin en C. , lo largo de todas sus
p'ginas !e intentado descri"ir los metodos$ funciones$ sentencias$ operadores...
para poder programar en 6C6.
+aturalmente el 6C6 no se aca"a aqu.$ pero espero que con lo que !ayas
aprendido puedas comen&ar a inestigar por tu cuenta$ de forma que comprendas
el funcionamiento de cualquier cdigo fuente que se te presente.
,nimo y... que tengas muc!a suerte en tu faceta de programador.
Pgina 41 de 41
.bairesrobotics.com.ar