Está en la página 1de 70

Profesora: Giannina Costa

El lenguaje C es uno de los ms rpidos y potentes que


hay hoy en da.
No hay ms que decir que el sistema operativo Linux est
desarrollado en C en su prctica totalidad.
El lenguaje C se conoce como un lenguaje compilado
(convierten el cdigo fuente en un archivo objeto y ste
en un archivo ejecutable).
Podemos decir que el lenguaje C es un lenguaje de nivel
medio, ya que combina elementos de lenguaje de alto

Es un lenguaje estructurado, ya que permite crear


procedimientos en bloques dentro de otros
procedimientos.

Hay que destacar que el C es un lenguaje portable, ya


que permite utilizar el mismo cdigo en diferentes
equipos y sistemas informticos: el lenguaje es
independiente de la arquitectura de cualquier mquina en
particular.

Cabeza

Cuerpo

Estructura General de un programa en C


#include <biblioteca1.h>
#include <biblioteca2.h>
.. declaracion de funciones..
definiciones (cuerpo de funciones)..
.declaraciones de variables globales.
int main
{
. Cuerpo del main
}
. otras definiciones de funciones

Las declaraciones y funciones se pueden hacer en cualquier


orden, aunque es preferible declarar las funciones al
principio del programa (por legibilidad).

Estructura General de un programa en C


Todo programa en C consta de una o ms funciones, una de las
cuales se llama main.
El programa comienza en la funcin main, desde la cual es posible
llamar a otras funciones.
Cada funcin estar formada por la cabecera de la funcin,
compuesta por el nombre de la misma y la lista de argumentos (si
los hubiese), la declaracin de las variables a utilizar y la
secuencia de sentencias a ejecutar.

Estructura General de un programa en C


#include <biblioteca1.h>
#include <biblioteca2.h>
void funcion1 ( );
int a, d ;
main( )
{
variables locales
bloque
}
funcion1( )
{
variables locales
bloque
}

Tipos de datos proporcionados por el C


En 'C' existen bsicamente cuatro tipos de datos,
aunque como se ver despus, podremos definir
nuestros propios tipos de datos a partir de estos
cuatro.

Tipos de datos proporcionados por el C


Calificadores de tipo
Los calificadores de tipo tienen la misin de modificar
el rango de valores de un determinado tipo de
variable.
Estos calificadores son cuatro:

Signed: Le indica a la variable que va a llevar signo. Es


el utilizado por defecto.

Tipos de datos proporcionados por el C


Calificadores de tipo

Unsigned: Le indica a la variable que no va a llevar


signo (valor absoluto).

Short: Rango de valores en formato corto (limitado).


Es el utilizado por defecto.

Tipos de datos proporcionados por el C


Calificadores de tipo

Long: Rango de valores en formato largo (ampliado).

Tipos de datos proporcionados por el C


1.- Tipo int
Variable que almacena nmeros enteros (sin decimales).
El rango de valores que admite es -32767 a 32767.
Cuando se define una variable lo que se esta haciendo es decirle
al compilador que reserve una zona de memoria para almacenar
datos de tipo int.
Para poder usar una variable primero hay que declararla.
Por ejemplo:
int numero;
Esto hace que declaremos una variable llamada numero que va
a contener un nmero entero.

Tipos de datos proporcionados por el C

2.- Tipo char


Sirven para almacenar caracteres, estos en realidad se
almacenan como nmeros del 0 al 255.
Los 128 primeros (0 a 127) son el ASCII estndar. El resto es el
ASCII extendido y depende del idioma y del ordenador.
Para declarar una variable de tipo char hacemos:
char letra;
Slo es posible almacenar una letra, no se puede almacenar ni
frases ni palabras.
Para almacenar un dato en una variable char hay dos opciones:
letra = 'A'; o letra = 65;
En ambos casos se almacena la letra 'A' en la variable. ( en
ASCII la letra 'A' es el 65).

Tipos de datos proporcionados por el C


3.- Tipo float
Este tipo de variable almacena nmeros decimales.
El rango de posibles valores es del 3,4E-38 al 3,4E38.
Declaracin de una variable de tipo float:
float numero;
4.- Tipo double
En las variables tipo double se almacenan nmeros reales
del 1,7E-307 al 1,7E308.
Se declaran como:
double numero;

Comentarios
A la hora de programar es conveniente aadir comentarios
(cuantos ms mejor) para poder saber que funcin tiene
cada parte del cdigo, as facilitaremos el trabajo a otros
Programadores que puedan utilizar nuestro archivo fuente.
Para poner comentarios en un programa escrito en C
usamos los smbolos /* y */
El smbolo /* se coloca al principio del comentario y el
smbolo */ al final.

Palabras Claves
Existen una serie de indicadores reservados, con una
finalidad determinada, que no podemos utilizar como
identificadores.
A continuacin vemos algunas de estas palabras clave:

Identificadores
Un identificador es el nombre que damos a las variables y
funciones. Est formado por una secuencia de letras y
dgitos, aunque tambin acepta el caracter de subrayado
_. Pero no acepta los acentos ni la /.
El primer carcter de un identificador no puede ser un
nmero, es decir que debe ser una letra o el smbolo _.
Se diferencian las maysculas de las minsculas, as num,
Num y nuM son distintos identificadores.

Variables

Una variable es un tipo de dato, referenciado


mediante un identificador (que es el nombre de la
variable). Su contenido podr ser modificado a lo
largo del programa.
Una variable slo puede pertenecer a un tipo de dato.
Para poder utilizar una variable, primero tiene que
ser declarada:
[calificador] <tipo> <nombre>

Variables
Ejemplo:
/* Uso de las variables */
#include <stdio.h>
int 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);
}

Variables
Donde se declaran
Las variables pueden ser de dos tipos segn el lugar en que
las se declaren: globales o locales.
La variable global se declara antes de la main( ). Puede ser
utilizada en cualquier parte del programa y se destruye al
finalizar ste.
La variable local se declara despus de la main( ), en la
funcin en que vaya a ser utilizada. Slo existe dentro de
la funcin en que se declara y se destruye al finalizar
dichafuncin.

Variables
Ejemplo:

/* Declaracin de variables */
#include <stdio.h>
int a;
int 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);
}

Constantes

Al contrario que las variables, las constantes mantienen su


valor a lo largo de todo el programa.
Para indicar al compilador que se trata de una constante,
usaremos la directiva #define:
#define <identificador> <valor>
Observa que no se indica el punto y coma de final de
sentencia ni tampoco el tipo de dato.
La directiva #define no slo nos permite sustituir un
nombre por un valor numrico, sin tambin por una
cadena de caracteres.

Constantes
El valor de una constante no puede ser modificado de
ninguna manera.
/* Uso de las constantes */
#include <stdio.h>
#define pi 3.1416
#define escribe printf
int main() /* Calcula el permetro */
{
int r;
escribe("Introduce el radio: ");
scanf("%d",&r);
escribe("El permetro es: %f",2*pi*r);
}

Secuencias de escape
Ciertos caracteres no representados grficamente se
pueden representar mediante lo que se conoce como
secuencia de escape. A continuacin vemos una tabla de las
ms significativas:

Secuencias de escape
Ejemplo:
/* 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");
}

Inclusin de ficheros

En la programacin en C es posible utilizar funciones que


no estn incluidas en el propio programa. Para ello
utilizamos la directiva #include, que nos permite aadir
libreras o funciones que se encuentran en otros ficheros a
nuestro programa.
Para indicar al compilador que vamos a incluir ficheros
externos podemos hacerlo de dos maneras (siempre antes
de las declaraciones).
1. Indicndole al compilador la ruta donde se encuentra el
fichero.
#include "misfunc.h"
#include "c:\includes\misfunc.h"

Inclusin de ficheros
2.- Indicando que se encuentran en el directorio por
defecto del compilador.
#include <misfunc.h>

Operadores Aritmticos y de Asignacin


A continuacin se explican los tipos de operadores
(aritmticos y de asignacin) que permiten realizar
operaciones matemticas en lenguaje C.
Operadores aritmticos
Existen dos tipos de operadores aritmticos:
Los binarios:
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Mdulo (resto)

Operadores Aritmticos y de Asignacin


y los Unarios:
++
--

Incremento (suma 1)
Decremento (resta 1)
Cambio de signo

Operadores Aritmticos y de asignacin


/* Uso de los operadores aritmeticos */
#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);
}

Operadores de Asignacin
=
+=
-=
*=
/=
%=

Asignacin simple
Suma
Resta
Multiplicacin
Divisin
Mdulo (resto)

Con estos operadores se pueden escribir, de forma ms


breve, expresiones del tipo:
n=n+3 se puede escribir n+=3
k=k*(x-2) lo podemos sustituir por k*=x-2

Operadores de Asignacin
/* Uso de los operadores de asignacion */
#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);
}

Jerarqua de operadores
Ser importante tener en cuenta la precedencia de los
operadores a la hora de trabajar con ellos:
( ) Mayor precedencia
++, - *, /, %
+, Menor precendencia
Las operaciones con mayor precedencia se realizan antes
Que las de menor precedencia.

Jerarqua de operadores

Si en una operacin encontramos signos del mismo nivel de


precedencia, dicha operacin se realiza de izquierda a
derecha.
A continuacin se muestra un ejemplo sobre ello:
a*b+c/d-e
1. a*b resultado = x
2. c/d resultado = y
3. x+y resultado = z
4. z-e
Fijarse que la multiplicacin se resuelve antes que divisin
ya que est situada ms a la izquierda en la operacin.
Lo mismo ocurre con la suma y la resta.

Jerarqua de operadores

/* Jerarqua de los operadores */


#include <stdio.h>
main() /* Realiza una operacion */
{
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);
}

Operadores Relacinales
Son los siguientes :
< Menor que...
< = Menor o igual que...
= = Igual que...
> Mayor que...
>= Mayor o igual que...
!= Distinto (no igual)
Resultado: cierto ( 1 ) o falso (0).

Operadores Relacinales
Ejemplo:
#include < stdio,h >
void main(void)
{ int cierto, falso;
cierto = ( 12 < 22);
falso = ( 2 > 4) ;
printf("\n Cierto = %d, falso = %d", cierto, falso);
}

Entrada - Salida Estndar


Nos referimos a las funciones estndar de C para realizar
entrada de datos por teclado y salida de datos hacia
pantalla.
Son funciones definidas en la librera estndar. Para
usarlas es necesario incluir el fichero de cabecera de las
funciones :
#include <stdio.h>

Entrada - Salida Estndar


#include <stdio.h>
Estas funciones son:
printf( ) Salida de datos con formato
scanf( ) Entrada de datos con formato
getchar( ) Entrada de caracteres. 1 caracter
fflush( ) Borrado del buffer del teclado.

Entrada - Salida Estndar


funcin printf ( )
Escribe una serie de caracteres en la salida estndar (pantalla).
Prototipo
int printf (conts char *formato [,argumentoJ...);
Devuelve
Nmero de caracteres escritos.

Parmetros
Formato: Cadena de caracteres, entre comillas dobles, que
especifica cmo va a ser la salida. Incluye caracteres y
especificaciones de formato.
Argumento: Indica las variables a escribir.
Ejemplo:
float pi=3.141596; // declara y asigna a la vez
printf("El nmero pi vale %f ,pi);
carcter de control %f

Especificaciones de formato

% [ancho] [.precision]
ancho: Mnimo nmero de posiciones reservadas para la
salida.
precisin: Mnimo nmero de posiciones reservadas para la
parte decimal.

Caracteres de control en funcin del tipo


Cuando necesitamos especificar el valor de una variable
dentro de una instruccin printf debemos poner un
carcter de control que indica qu tipo de dato va en esa
posicin:

funcion scanf ( )
Lee datos de la entrada estndar (teclado) , los interpreta
y los almacena en los argumentos. Incluye caracteres y
especificaciones de formato.
#include <stdio.h>
int main()
{
int num;
printf( "Introduce un nmero " );
scanf( "%i", &num );
printf( "Has tecleado el nmero%i\n", num );
return 0;
}

funcin getchar ( )
Si desea introducir un carcter por el teclado usamos la
funcin getchar
Esta espera a que el usuario introduzca un carcter por el
teclado.
Getchar saca por pantalla la tecla que hemos pulsado
#include <stdio.h>
#include <conio.h>
int main()
{
char letra;
printf( "Introduce una letra: " );
fflush( stdout );
letra = getchar();
printf( "\nHas introducido la letra: %c", letra );
return 0;
}

Operadores Relacinales
Los operadores relacionales se utilizan para comparar el
contenido de dos variables.

En C existen seis operadores relacionales bsicos:


> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igual que
!= Distinto que

Operadores Relacinales

El resultado que devuelven estos operadores es 1 para


Verdadero y 0 para Falso.
Si hay ms de un operador se evalan de izquierda a
derecha. Adems los operadores == y != estn por
debajo del resto en cuanto al orden de precedencia.

Operadores Relacinales

/* 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");
}

Hasta ahora los programas que hemos visto son lineales.


Comienzan por la primera instruccin y acababan por la
ltima, ejecutndose todas una sola vez.
Muchas veces no es esto lo que queremos que ocurra. Lo
que nos suele interesar es que dependiendo de los valores
de los datos se ejecuten unas instrucciones y no otras.
O tambin puede que queramos repetir unas instrucciones
un nmero determinado de veces.
Para esto estn las sentencia de control de flujo.

1.- Bucles

Los bucles nos ofrecen la solucin cuando queremos


repetir una tarea un nmero determinado de veces.
Ejemplo: Supongamos que queremos escribir 100 veces la
palabra hola.
Con lo que sabemos hasta ahora haramos:
#include <stdio.h>
int main()
{ printf( "Hola\n");
printf( "Hola\n");
printf( "Hola\n");
printf( "Hola\n");
printf( "Hola\n"); ...
(y as hasta 100 veces) }

1.- Bucles
Los bucles que maneja C son:

For

While

Do While

1.1.- Bucle For

La sintaxis es la siguiente:
for( valores iniciales ; condiciones ; incrementos )
{ conjunto de instrucciones a ejecutar en el bucle }
Ejemplo:

#include <stdio.h>
int main()
{ int i;
for ( i=0 ; i<100 ; i++ )
{ printf( "Hola\n" ); }
}

1.1.- Bucle For

En otros lenguajes, la sentencia for es muy rgida. En


cambio en C es muy flexible. Se puede omitir cualquiera de
las secciones (inicializacin, condiciones o incrementos).
Tambin se pueden poner ms de una variable a inicializar,
ms de una condicin y ms de un incremento.
Ejemplo:
#include <stdio.h>
int main()
{ int i, j;
for( i=0, j=5 ; i<10 ; i++, j=j+5 )
{ printf( "Hola " );
printf( "Esta es la lnea %i", i );
printf( "j vale = %i\n", j ); } }

1.2.- Bucle While

La sintaxis es siguiente:
while ( condicin )
{ bloque de instrucciones a ejecutar }
While quiere decir mientras. Aqu se ejecuta el bloque de
instrucciones mientras se cumpla la condicin impuesta en
while.
Ejemplo:
#include <stdio.h>
int main()
{ int contador = 0;
while ( contador<100 )
{ contador++;
printf( "Ya voy por el %i, parar enseguida.\n", contador ); } }

1.3.- Bucle DoWhile


La sintaxis es:
do
{ instrucciones a ejecutar }
while ( condicin );
La diferencia entre while y do-while es que en este ltimo, la
condicin va despus del conjunto de instrucciones a ejecutar.
De esta forma, esas instrucciones se ejecutan al menos una
vez.
Su uso es similar al de while.

2.-Sentencias de Condicin
Ahora veremos cmo poder controlar totalmente el flujo de un
programa. Dependiendo de los valores de alguna variable se
tomarn unas acciones u otras.
Las sentencias de condicin son:
If
If Else
If Else If
Switch

2.1.-If
La palabra if significa si (condicional).
Su Sintaxis es el siguiente:
if ( condicin ) { instrucciones a ejecutar }
Cuando se cumple la condicin entre parntesis se ejecuta el
bloque inmediatamente siguiente al if (bloque instrucciones a

ejecutar).

2.1.-If
Ejemplo: Realizar un programa que pida un nmero, si el nmero es 10 se muestra un mensaje. Si no es 10
no se muestra ningn mensaje:
#include <stdio.h>
int main()
{ int num;
printf( "Introduce un nmero " );
scanf( "%i", &num );
if (num==10)
{ printf( "El nmero es correcto\n" ); } }
Como siempre, la condicin es falsa si es igual a cero. Si es
distinta de cero ser verdadera.

2.2.-If Else
El formato es el siguiente:
if ( condicin )
{
bloque que se ejecuta si se cumple la condicin
}
else
{
bloque que se ejecuta si no se cumple la condicin
}

2.2.-If Else
Con el if else tenemos un bloque adicional que slo se ejecuta si
no se cumple la condicin.
Ejemplo:
#include <stdio.h>
int main()
{ int a;
printf( "Introduce un nmero " );
scanf( "%i", &a );
if ( a==8 )
{ printf ( "El nmero introducido era un ocho.\n" ); }
else
{ printf ( "Pero si no has escrito un ocho!!!"\n" ); }
}

2.3.-If Else - If
La sintaxis es la siguiente:
if ( condicion1 )
{
bloque que se ejecuta si se cumple la condicion1
}
else if ( condicion2 )
{
bloque que se ejecuta si se cumple la condicion2
}
else if ( condicion3)
{
bloque que se ejecuta si se cumple la condicion3
}

2.3.-If Else - If
Ejemplo:
#include <stdio.h>
int main()
{ int a;
printf( "Introduce un nmero " );
scanf( "%i", &a );
if ( a<10 )
{ printf ( "El nmero introducido era menor de 10.\n" ); }
else if ( a>10 && a<100 )
{ printf ( "El nmero est entre 10 y 100"\n" ); }
else if ( a>100 )
{ printf( "El nmero es mayor que 100\n" ); }
printf( "Fin del programa\n" ); }

2.4.-? (el otro if-else)


El uso de la interrogacin es una forma de condensar if-else.
Su sintaxis es :
( condicion ) ? ( instruccin 1 ) : ( instruccin 2 )
Si se cumple la condicin se ejecuta la instruccin 1 y si no se
ejecuta la instruccin 2.
Veamos un ejemplo con el if-else y luego lo reescribimos con
"?":

2.4.-? (el otro if-else)


#include <stdio.h>
int main()
{ int a; int b;
printf( "Introduce un nmero " );
scanf( "%i", &a );
if ( a<10 )
{ b = 1; }
else
{ b = 4; }
printf ( "La variable 'b' toma el
valor: %i\n", b ); }

#include <stdio.h>
int main()
{ int a; int b;
printf("Introduce un nmero
");
scanf( "%i", &a );
b = ( a<10 ) ? 1 : 4 ;
printf ( "La variable 'b' toma
el valor: %i\n", b ); }

2.4.-Switch
El formato de la sentencia switch es:
switch ( variable )
{ case opcin 1:
cdigo a ejecutar si la variable tiene el valor de la opcin 1
break;
case opcin 2:
cdigo a ejecutar si la variable tiene el valor de la opcin 2
break;
default:
cdigo que se ejecuta si la variable es distinta a los anteriores
break; }
La sentencia switch sirve para elegir una opcin entre varias disponibles.
Ac no se debe cumplir una condicin ,sino el valor de una variable.
Dependiendo del valor se cumplir un caso u otro .

Con if-else
#include <stdio.h>
int main()
{ int num;
printf( "Introduce un nmero " );
scanf( "%i", &num );
if ( num==1 )
printf ( "Es un 1\n" );
else if ( num==2 )
printf ( "Es un 2\n" );
else if ( num==3 )
printf ( "Es un 3\n" );
else
printf ( "No era ni 1, ni 2, ni 3\n" );
}

Con switch:
#include <stdio.h>
int main()
{ int num;
printf( "Introduce un nmero " );
scanf( "%i", &num );
switch( num )
{ case 1:
printf( "Es un 1\n" );
break;
case 2:
printf( "Es un 2\n" );
break;
case 3:
printf( "Es un 3\n" );
break;
default:
printf( "No es ni 1, ni 2, ni 3\n" ); } }

Ejemplo SWITCH
/* Uso de la sentencia condicional SWITCH. */
#include <stdio.h>
main() /* Escribe el da de la semana */
{
int dia;
printf("Introduce el numero del da de la semana: ");
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;
}}

Vamos a ver qu pasa si nos olvidamos algn break:


#include <stdio.h>
int main()
{ int num;
printf( "Introduce un nmero " );
scanf( "%i", &num ); switch( num )
{
case 1: printf( "Es un 1\n" );
/* Nos olvidamos el break que debera haber aqu */
case 2: printf( "Es un 2\n" );
break;
default:
printf( "No es ni 1, ni 2, ni 3\n" ); } }

Por qu? Pues porque cada caso empieza con un case


y acaba donde hay un break. Si no ponemos break
aunque haya un case el programa sigue hacia adelante.
Por eso se ejecuta el cdigo del case 1 y del case 2.

También podría gustarte