Está en la página 1de 45

Introduccin al Lenguaje C (ANSI)

Computacin para Ingenieros Lab. de Computacin para Ingenieros Semestre 2006-1

Historia del Lenguaje C

Fue inventado por Dennis Ritchie en un DECPDP-11 en los Laboratorios BELL, basndose en el lenguaje B, creado por Ken Thompson. En 1983 el Instituto de Estndares Americanos estableci un estndar que definiera al lenguaje C, conocido como ANSI C. Los principales compiladores de C llevan implementado el estndar ANSI C.

Caractersticas del Lenguaje C

Se cataloga como un lenguaje de nivel medio, puesto que combina elementos de lenguajes de alto nivel (Fortran, Pascal, Basic, etc.) con la funcionalidad del lenguaje ensamblador. Permite el manejo de bits, bytes y direcciones de memoria. Posee slo 32 palabras clave, definidas por el comit ANSI.

32 Palabras Reservadas
char int void if default break return auto

float
double

else
do

continue
goto

extern
register

long
short signed unsigned

while
for switch case

struct
union enum typedef

const
static volatile sizeof

Elementos de un Programa

Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. Macros del pre-procesador.

Estructura de un programa
Libreras Variables globales; Main () { Variables locales; Sentencias; }

Diferentes libreras a utilizar Variables del programa Inicio del programa

Cuerpo del programa


Fin del programa

Libreras

Conjunto de funciones que se identifican con un nombre y que tenemos que llamar al principio del programa para utilizar unas funciones concretas. Lista de libreras usuales:
Stdio.h funciones de entrada-salida Conio.h mas funciones de entrada-salida Math.h funciones matematicas Stdlib.h mas funciones matematicas Ctype.h funciones de conversion de caracteres String.h funciones de cadena Graphics.h funciones graficas

Variables

Son combinaciones de letras y nmeros que permiten almacenar cualquier valor en la memoria del ordenador. Estos valores los podremos utilizar en el programa haciendo referencia al nombre de la variable. Al finalizar la ejecucin del programa las variables se borran.

Variables II

Tipos de variables: Dependiendo del valor a guardar tendremos que determinar el tipo de la variable. Tipos:
char valores caracter int valores numericos enteros float valores numericos grandes con decimales double valores numericos grandes con decimales

Variables III

Modificadores de variables: Son parmetros que permiten modificar los rangos de los tipos de variables, principalmente del tipo (int) Modificadores:

Signed Unsigned Long short

Variables IV

Modificador signed
Es el modificador por defecto que utiliza C, en el caso de una variable definida como: signed int almacenara valores entre -32000 y 32000

Modificador unsigned
Este modificador en una variable INT se definira como : unsigned int almacenara valores entre o y 65000 (pasa todo el rango de nmeros negativos a positivos)

Modificador long
Este modificador en una variable INT se definir como: long int almacenara valores entre -2000000000 y 2000000000

Ejemplo Declaracin de Variables


Declaracin de una variable como un entero int variable; int variable2; int variable3; Declaracin de variables y asignacin de valores en una lnea int variable = 1000, variable2 = 2, variable3; Declaracin de variables tipo texto char variable ; Con tamao fijo de caracteres: char variable[15]; Con asignacin de valor char variable = 'a' ;

Comentarios

Comentarios multi-lnea

Comienzan con /* y terminan con */ No puede anidarse un comentario dentro de otro. Comienzan al principio de la lnea con //

Comentarios de una sola lnea (C++, Java, Delphi).

Ejemplo:
//Esto es un comentario /* Esto tambin es un comentario */

Identificadores

Se utilizan para nombrar variables, funciones, etiquetas y elementos definidos por el usuario. Los primeros seis caracteres deben ser significativos (distinguirse de otro similar) y mximo puede tener hasta 31 caracteres. El primer carcter debe de ser una letra o subguin. Posteriormente pueden ser letras, nmeros, signos de subrayado. Existe diferencia entre maysculas y minsculas.

Identificadores

No pueden emplearse palabras reservadas como identificadores. No pueden emplearse nombres de funciones que ya existan en el programa o en la librera de funciones de C. No puede llamarse main.

Convenciones

Empezar los nombres de funciones y de variables con una letra minscula. Las constantes escritas con #define van con maysculas como #define PI 3.1416 Las palabras intermedias comienzan con maysculas.
sumaMatrices

Utilizar el subguin para separar palabras intermedias.


suma_Matrices

Emplear nombres cortos para optimizar. (i, j, k, cont)

Constantes

Constantes de carcter.
Ej. a, 0, \0x5, \0, \n, \t, $, \\, NULL

Constantes enteras.
Ej. 5, +5, -5, \05, \0x5, 5L, 5U, 5lu, etc.

Constantes reales.
Ej. 0.5f, 0.5, 5e-01f, 5.0e-01, (float)5, etc.

Constantes de texto (Cadenas o Strings)


Esto es una cadena

#define

Se utiliza para asignar un identificador a una constante.


#define PI 3.1416 #define NCOLS 20

El pre-procesador de C, sustituye la ocurrencia de PI por el valor 3.1416 en todo el programa antes de efectuar la compilacin, del mismo modo se sustituye NCOLS por 2.

Variables

Una variable es una localidad de memoria cuyo valor puede ser cambiado durante la ejecucin del programa. Todas las variables deben de ser declaradas para se utilizadas. <tipo de dato> espacio(s) <identificador>; Ejemplo:
int a; float area, radio, volumen;

const
Es un modificador de acceso que me permite asignar a una variable un valor constante, es decir que una vez asignado a dicha variable su valor no podr ser modificado durante el programa. const <tipo dato> esp <identificador> = valor; Ejemplo:

const int a=10; const char pais[]=MXICO; const char *nombre=VLADIMIR;

volatile
Es un modificador de acceso que me permite cambiar el valor de una variable por medios no explcitamente especificados por el programa. Por ejemplo la direccin de una variable global que apunta a un puerto externo. volatile <tipo dato> esp <identificador> = valor; Ejemplo:

volatile unsigned char *puerto = 0x30;

Operadores

Son palabras o smbolos que implican una accin sobre ciertas variables. Pueden ser unarios (1 variable), binarios(2 variables) o ternarios (3 variables).

Operadores Aritmticos Operadores Relacionales Operadores Lgicos Operadores de Asignacin Operadores de Direccin Operadores de Bits

Operadores Aritmticos
Operador + * Nombre Suma Resta Multiplicacin Descripcin 5+2 7 5-2 3 5*2 10

/
% (tipo de dato)

Divisin
Mdulo Cast forzado

5/2 2
5%2 1 (double)5 5.0

Operadores Relacionales
Operador == != > Nombre Igual a Diferente de Mayor que Descripcin if (a==s) if (a!=null) if (a>0.5)

<
>= <=

Menor que
Mayor o igual que Menor o igual que

if (a<2l)
if (a>=2f) if (a<=3)

Operadores Lgicos
Operador && || !

Nombre Y (AND) O (OR) NEGADO (NOT)

Descripcin if ((a>3) && (a<9)) if ((a==2) || (a==3)) if (!(a==3)) es igual a if (a!=3)

Importante: FALSO es igual a cero. VERDADERO es diferente de cero.

Operadores de Asignacin
Operador = ++ -+= -= *= /= %= Abreviado a=2; n++; n--; n+=2; n-=2; n*=2; n/=2; n%=2; No Abreviado a=2; n=n+1; n=n-1; n=n+2; n=n-2; n=n*2; n=n/2; n=n%2;

Operadores de Bits
Operador
<< >> & | ~ ^

Nombre
Corrimiento a la izquierda Corrimiento a la derecha Y (AND) entre bits O (OR) entre bits Complemento A1 O exclusivo (XOR)

Descripcin
b=a>>2; b=a<<3; c=a&128; c=a|0x0a; c=~a; c=^a;

Operadores de Asignacin para bits


Operador <<= >>= &= |= ^= = Abreviado n<<=2; n>>=2; n&=0x0a; n|=7; n^=0x03; n=0x7f; No Abreviado n=n<<2; n=n>>2; n=n&0x0a; n=n|7; n=^0x03; n=0x7f;

Nota: 0x7f, 0x0a, 0x03 son un nmeros hexadecimales.

Operadores De Direccin
Operador * Nombre Descripcin Operador Me da el valor que est indireccin almacenado en una direccin de memoria. Tambin sirve para declarar una variable apuntador. Operador Me da la direccin de direccin memoria de una variable.

&

Variables Apuntador

Sirven para almacenar una direccin de memoria. Utilizan el operador & para obtener la direccin. Se deben inicializar con NULL (equivale a cero). Se declaran como: <tipo de dato><*> espacio(s) <identificador>; Ejemplo:
int *a=NULL; int b=2,c=1; a=&b; /*Guarda la direc. de b en a */ c=*a; /*c vale 2 */

Precedencia de Operadores
( ) [ ] ->
* / %+-

Alta prioridad
Aritmticos

! ~ + - ++ -- & * sizeof Unarios

<< >>
< <= > >= == != & ^ | && || ?:

Corrimiento de bits
Relacionales Bits / Lgicos / Condicional

= *= /= %= += -= &= ^= |= <<= >>=


,

Asignacin
Evaluacin

Sentencias (Instrucciones)

Una sentencia es una instruccin o expresin en C que tiene una consecuencia. Pueden ser asignaciones, operaciones, llamadas a funciones. Todas las sentencias terminan con el signo de punto y coma ; Pueden ser simples o compuestas. Las compuestas van entre llaves: { sentencia1; sentencia2; : sentencian; }

Sentencias (Instrucciones)

Sentencias de Seleccin.

if else, switch case, ?:


do while, while, for return, break, continue.

Sentencias de Repeticin.

Sentencias de Salto.

Estructura de un programa en C
I. Directivas del pre-procesador #include y #define II. Declaracin de Prototipos (Declaracin de funciones) III. Declaracin de variables globales

IV. Funciones definidas por el usuario


V. Funcin Principal main( )

#include <stdio.h> #include <math.h> #define VALOR 5.7

Ejemplo

double modulo3D( double x, double y, double z ); double mod3; /* Variable global */ double modulo3D( double x, double y, double z ){ return(sqrt(x*x+y*y+z*z); } int main( void ){ int x, y, z; x=y=z=VALOR; mod3=modulo3D(x,y,z); printf(\nEl mdulo es: %lf,mod3); return(0); }

if-else
if (expresin) sentencia; else sentencia; if (expresin) { sentencia1; sentencia2;

Nota: una expresin en C es todo aquello que regresa un valor. Como por ejemplo una condicin lgica, operaciones aritmticas, llamadas a funciones, una variable, una constante (nmrica, carcter, etc.).

} else { sentencia1; sentencia2; }

Operador Condicional ?:
(expresin)? sentencia1 : sentencia2; expresin? sentencia1 : sentencia2;
Se ejecuta: sentencia1 si expresin = verdadero sentencia2 si expresin = falso. Es un operador ternario y puede utilizarse para asignar variables:

Var = (expresin)? sentencia1:sentencia2;

switch-case
switch(expresin) { case 1: sentencias; break; case 2: sentencias; break; : case n: sentencias; break; default: sentencias_default; break; }

Arreglos Unidimensionales

Los arreglos unidimensionales son secuencias de valores del mismo tipo que se almacenan en localidades contiguas de memoria, segn el orden del ndice.
<tipo dato> esp <identificador>[tamao]; Ejemplo:
int valores[10]; float datos[5]={1.3,2.8,4.89,0.0,5.7}; char pais[]=MXICO; char *nombre=VLADIMIR;

Arreglos Unidimensionales

Un arreglo se identifica por su nombre, pero para el compilador este equivale a la direccin del primer elemento del arreglo, es decir: Ejemplo:
int num[50]; Para el compilador: num es igual a &num[0] /* La direccin del elemento 0 */

Arreglos Unidimensionales

Los ndices son necesarios para desplazarse a travs del arreglo. El primer elemento tiene el ndice cero y el ltimo el ndice (tamao-1). Se deben utilizar variables enteras y para agilizar el acceso a memoria se pueden declarar con el modificador register. Ejemplo:
int register i, j, k;

Arreglos Unidimensionales

Para guardar o leer los elemento en un arreglo es muy frecuente utilizar la sentencia for. Ejemplo:
int register i; int num[50]; /* Asigno al arreglo valores del 0 al 500 */ for (i=0; i<50; i++) num[i]= i*10;

Arreglos Unidimensionales

Para introducir los elemento en un arreglo con la funcin scanf se recomienda utilizar una variable auxiliar dentro de un ciclo for. Ejemplo:
int register i; double datos[100];
double temp;

for (i=0; i<100; i++) { scanf(%lf,&temp); fflush(stdin); /* stdin=entrada estndar */ num[i]= temp; }

Arreglos Unidimensionales

Un arreglo puede tener N dimensiones, dependiendo de las limitaciones de la memoria y su declaracin es la siguiente:

<tipo dato> esp <identificador>[dim1] [dim2][dimN];

Ejemplo:
double cubo[3][3][3];

Arreglos de Caracteres

Una cadena o String se manipula en lenguaje C, mediante arreglos de caracteres. Los arreglos de caracteres terminan con el carcter nulo \0 que en realidad es el valor cero. La nica diferencia con los arreglos numricos es que se requiere un carcter adicional para indicar cuando el final del arreglo.

Ejemplo:
char nombre[31]; /* Uso slo 30 */