38
Introducción al Introducción al Lenguaje C (ANSI) Lenguaje C (ANSI) Computación para Ingenieros Computación para Ingenieros Lab. de Computación para Ingenieros Lab. de Computación para Ingenieros Semestre 2006-1 Semestre 2006-1

Lenguajec 1

Embed Size (px)

Citation preview

Page 1: Lenguajec 1

Introducción al Introducción al Lenguaje C (ANSI)Lenguaje C (ANSI)

Computación para IngenierosComputación para Ingenieros

Lab. de Computación para IngenierosLab. de Computación para Ingenieros

Semestre 2006-1Semestre 2006-1

Page 2: Lenguajec 1

Historia del Lenguaje CHistoria del Lenguaje C

Fue inventado por Dennis Ritchie en un DEC-Fue inventado por Dennis Ritchie en un DEC-PDP-11 en los Laboratorios BELL, basándose PDP-11 en los Laboratorios BELL, basándose en el lenguaje B, creado por Ken Thompson.en el lenguaje B, creado por Ken Thompson.

En 1983 el Instituto de Estándares Americanos En 1983 el Instituto de Estándares Americanos estableció un estándar que definiera al lenguaje estableció un estándar que definiera al lenguaje C, conocido como ANSI C.C, conocido como ANSI C.

Los principales compiladores de C llevan Los principales compiladores de C llevan implementado el estándar ANSI C.implementado el estándar ANSI C.

Page 3: Lenguajec 1

Características del Lenguaje CCaracterísticas del Lenguaje C

Se cataloga como un lenguaje de Se cataloga como un lenguaje de nivel medionivel medio, , puesto que combina elementos de puesto que combina elementos de lenguajes de lenguajes de alto nivelalto nivel (Fortran, Pascal, Basic, etc.) con la (Fortran, Pascal, Basic, etc.) con la funcionalidad del funcionalidad del lenguaje ensambladorlenguaje ensamblador..

Permite el manejo de Permite el manejo de bitsbits, , bytesbytes y y direccionesdirecciones de de memoria.memoria.

Posee sólo Posee sólo 32 palabras clave32 palabras clave, definidas por el , definidas por el comité ANSI.comité ANSI.

Page 4: Lenguajec 1

32 Palabras Reservadas32 Palabras Reservadas

sizeoftypedefcaseunsigned

volatileenumswitchsigned

staticunionforshort

conststructwhilelong

registergotododouble

externcontinueelsefloat

autobreakifint

returndefaultvoidchar

Page 5: Lenguajec 1

Elementos de un ProgramaElementos de un Programa

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

Page 6: Lenguajec 1

ComentariosComentarios

Comentarios Comentarios multi-líneamulti-línea Comienzan con Comienzan con /* /* y terminan con */ */ No puede anidarse un comentario dentro de otro.

Comentarios de una sola líneauna sola línea (C++, Java, Delphi). Comienzan al principio de la línea con //

Ejemplo:

//Esto es un comentario

/* Esto también es

un comentario */

Page 7: Lenguajec 1

IdentificadoresIdentificadores

Se utilizan para nombrarSe utilizan para nombrar variablesvariables, , funcionesfunciones, , etiquetasetiquetas y y elementos definidos por el usuarioelementos definidos por el usuario..

Los primeros Los primeros seisseis caracteres deben ser caracteres deben ser significativos (distinguirse de otro similar) y significativos (distinguirse de otro similar) y máximo puede tener hasta máximo puede tener hasta 3131 caracteres. caracteres.

El primer carácter debe de ser una El primer carácter debe de ser una letraletra o o subguiónsubguión. Posteriormente pueden ser letras, . Posteriormente pueden ser letras, números, signos de subrayado.números, signos de subrayado.

Existe diferencia entre Existe diferencia entre mayúsculasmayúsculas y y minúsculasminúsculas..

Page 8: Lenguajec 1

IdentificadoresIdentificadores

NoNo pueden emplearse pueden emplearse palabras reservadaspalabras reservadas como como identificadores.identificadores.

NoNo pueden emplearse pueden emplearse nombres de funcionesnombres de funciones que ya existan en el programa o en la librería de que ya existan en el programa o en la librería de funciones de C.funciones de C.

NoNo puede llamarse puede llamarse mainmain..

Page 9: Lenguajec 1

ConvencionesConvenciones

Empezar los nombres de funciones y de variables con Empezar los nombres de funciones y de variables con una letra una letra minúsculaminúscula..

Las constantes escritas con Las constantes escritas con #define van con van con mayúsculas como mayúsculas como #define PI 3.1416#define PI 3.1416

Las palabras intermedias comienzan con Las palabras intermedias comienzan con mayúsculasmayúsculas..sumaMatricessumaMatrices

Utilizar el Utilizar el subguiónsubguión para separar palabras intermedias. para separar palabras intermedias.suma_Matricessuma_Matrices

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

Page 10: Lenguajec 1

ConstantesConstantes

Constantes de carácter.Constantes de carácter.Ej. ‘a’, ‘0’, ‘\0x5’, ‘\0’, ‘\n’, ‘\t’, ‘$’, ’\\’, NULLEj. ‘a’, ‘0’, ‘\0x5’, ‘\0’, ‘\n’, ‘\t’, ‘$’, ’\\’, NULL

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

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

Constantes de texto (Cadenas o “Strings”)Constantes de texto (Cadenas o “Strings”)““Esto es una cadena…”Esto es una cadena…”

Page 11: Lenguajec 1

#define#define

Se utiliza para asignar un identificador a una Se utiliza para asignar un identificador a una constante.constante.#define PI 3.1416#define PI 3.1416

#define NCOLS 20#define NCOLS 20

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

Page 12: Lenguajec 1

VariablesVariables

Una variable es una Una variable es una localidad de memorialocalidad de memoria cuyo cuyo valor puede ser valor puede ser cambiadocambiado durante la ejecución durante la ejecución del programa.del programa.

Todas las variables deben de ser Todas las variables deben de ser declaradasdeclaradas para para se utilizadas.se utilizadas.

<tipo de dato> espacio(s) <identificador>;<tipo de dato> espacio(s) <identificador>; Ejemplo:Ejemplo:

int a;int a;

float area, radio, volumen;float area, radio, volumen;

Page 13: Lenguajec 1

constconst

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

Ejemplo:Ejemplo:constconst intint aa=10;=10;constconst charchar paispais[][]=“MÉXICO”;=“MÉXICO”;constconst char *char *nombrenombre=“VLADIMIR”;=“VLADIMIR”;

Page 14: Lenguajec 1

volatilevolatile

Es un Es un modificador de accesomodificador de acceso que me permite que me permite cambiar el valor de una variable por cambiar el valor de una variable por medios no medios no explícitamente especificadosexplícitamente especificados por el programa. por el programa. Por ejemplo la Por ejemplo la direccióndirección de una de una variable globalvariable global que apunta a un que apunta a un puertopuerto externo. externo.

volatile volatile <tipo dato><tipo dato> esp esp <identificador><identificador> = valor; = valor; Ejemplo:Ejemplo:

volatilevolatile unsigned char *unsigned char *puerto puerto = 0x30= 0x30;;

Page 15: Lenguajec 1

OperadoresOperadores

Son palabras o símbolos que implican una acción sobre Son palabras o símbolos que implican una acción sobre ciertas variables. Pueden ser unarios (1 variable), ciertas variables. Pueden ser unarios (1 variable), binarios(2 variables) o ternarios (3 variables).binarios(2 variables) o ternarios (3 variables).

Operadores AritméticosOperadores Aritméticos Operadores RelacionalesOperadores Relacionales Operadores LógicosOperadores Lógicos Operadores de AsignaciónOperadores de Asignación Operadores de DirecciónOperadores de Dirección Operadores de BitsOperadores de Bits

Page 16: Lenguajec 1

Operadores AritméticosOperadores Aritméticos

(double)5 → 5.0“Cast” forzado(tipo de dato)

5%2 → 1Módulo%

5/2 → 2División/

5*2 → 10Multiplicación*

5-2 → 3Resta-

5+2 → 7Suma+

DescripciónNombreOperador

Page 17: Lenguajec 1

Operadores RelacionalesOperadores Relacionales

if (a<=3)Menor o igual que<=

if (a>=2f)Mayor o igual que>=

if (a<2l)Menor que<

if (a>0.5)Mayor que>

if (a!=null)Diferente de!=

if (a==‘s’)Igual a==

DescripciónNombreOperador

Page 18: Lenguajec 1

Operadores LógicosOperadores Lógicos

if (!(a==3)) es igual a

if (a!=3)

NEGADO (NOT)

!

if ((a==2) || (a==3))O (OR)||

if ((a>3) && (a<9))Y (AND)&&

DescripciónNombreOperador

Importante: Importante: FALSOFALSO es es igual a ceroigual a cero..VERDADEROVERDADERO es es diferente de cerodiferente de cero..

Page 19: Lenguajec 1

Operadores de AsignaciónOperadores de Asignación

n=n%2;n%=2;%=

n=n/2;n/=2;/=

n=n*2;n*=2;*=

n=n-2;n-=2;-=

n=n+2;n+=2;+=

n=n-1;n--;--

n=n+1;n++;++

a=2;a=2;=

No AbreviadoAbreviadoOperador

Page 20: Lenguajec 1

Operadores de BitsOperadores de Bits

c=^a;O exclusivo (XOR)^

c=~a;Complemento A1~

c=a|0x0a;O (OR) entre bits|

c=a&128;Y (AND) entre bits&

b=a<<3;Corrimiento a la derecha

>>

b=a>>2;Corrimiento a la izquierda

<<

DescripciónNombreOperador

Page 21: Lenguajec 1

Operadores de AsignaciónOperadores de Asignaciónpara bitspara bits

n=n<<2;n<<=2;<<=

n=n>>2;n>>=2;>>=

n=0x7f;n=0x7f;=

n=^0x03;n^=0x03;^=

n=n|7;n|=7;|=

n=n&0x0a;n&=0x0a;&=

No AbreviadoAbreviadoOperador

Nota:Nota: 0x7f, 0x0a, 0x03 son un números hexadecimales0x7f, 0x0a, 0x03 son un números hexadecimales.

Page 22: Lenguajec 1

Operadores De DirecciónOperadores De Dirección

Me da la dirección de memoria de una variable.

Operador dirección

&

Me da el valor que está almacenado en una dirección de memoria.

También sirve para declarar una variable apuntador.

Operador indirección

*

DescripciónNombreOperador

Page 23: Lenguajec 1

Variables ApuntadorVariables Apuntador Sirven para almacenar una Sirven para almacenar una dirección de memoriadirección de memoria.. Utilizan el operador Utilizan el operador && para obtener la dirección. para obtener la dirección. Se deben inicializar con Se deben inicializar con NULL (equivale a cero)NULL (equivale a cero).. Se declaran como:Se declaran como:

<tipo de dato><tipo de dato><*><*> espacio(s) espacio(s) <identificador><identificador>;; Ejemplo:Ejemplo:

intint * *aa=NULL=NULL;;

int b=2,c=1;int b=2,c=1;

a=&b; /*Guarda la direc. de b en a */a=&b; /*Guarda la direc. de b en a */

c=*a; /*c vale 2 */c=*a; /*c vale 2 */

Page 24: Lenguajec 1

Precedencia de OperadoresPrecedencia de Operadores

Evaluación,

Asignación = *= /= %= += -= &=

^= |= <<= >>=

Bits / Lógicos / Condicional& ^ | && || ?:

Relacionales< <= > >= == !=

Corrimiento de bits<< >>

Aritméticos* / % + -

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

Alta prioridad( ) [ ] ->

Page 25: Lenguajec 1

Sentencias (Instrucciones)Sentencias (Instrucciones) Una sentencia es una Una sentencia es una instrucción o expresióninstrucción o expresión en C que en C que

tiene una consecuencia. Pueden ser asignaciones, tiene una consecuencia. Pueden ser asignaciones, operaciones, llamadas a funciones.operaciones, llamadas a funciones.

Todas las sentencias Todas las sentencias terminanterminan con el signo de punto y con el signo de punto y coma coma ;;

Pueden ser Pueden ser simplessimples o o compuestascompuestas. Las compuestas van . Las compuestas van entre llaves:entre llaves:

{{ sentencia1;sentencia1; sentencia2;sentencia2; :: sentencian;sentencian; }}

Page 26: Lenguajec 1

Sentencias (Instrucciones)Sentencias (Instrucciones)

Sentencias de Selección.Sentencias de Selección. if – else, switch – case, ?:if – else, switch – case, ?:

Sentencias de Repetición.Sentencias de Repetición. do – while, while, fordo – while, while, for

Sentencias de Salto. Sentencias de Salto. return, break, continue.return, break, continue.

Page 27: Lenguajec 1

Estructura de un programa en CEstructura de un programa en C

V. Función Principal main( )

IV. Funciones definidas por el usuario

III. Declaración de variables globales

II. Declaración de Prototipos

(Declaración de funciones)

I. Directivas del pre-procesador

#include y #define

Page 28: Lenguajec 1

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

double modulo3D( double x, double y, double z );double modulo3D( double x, double y, double z );double mod3;double mod3; /* Variable global */ /* Variable global */

double modulo3D( double x, double y, double z ){double modulo3D( double x, double y, double z ){ return(sqrt(x*x+y*y+z*z);return(sqrt(x*x+y*y+z*z);}}

int int mainmain( void ){( void ){ int x, y, z;int x, y, z; x=y=z=VALOR;x=y=z=VALOR; mod3=modulo3D(x,y,z);mod3=modulo3D(x,y,z); printf(“\nEl módulo es: %lf”,mod3);printf(“\nEl módulo es: %lf”,mod3); return(0);return(0);}}

Page 29: Lenguajec 1

if-elseif-elseif (expresión)

{

sentencia1;

sentencia2;

}

else

{

sentencia1;

sentencia2;

}

if (expresión)

sentencia;

else

sentencia;

Nota: una expresión en C es todoaquello que regresa un valor. Comopor ejemplo una condición lógica, operaciones aritméticas, llamadasa funciones, una variable, unaconstante (númérica, carácter, etc.).

Page 30: Lenguajec 1

Operador Condicional ?:Operador Condicional ?:

Es un operador ternario y puede utilizarse para asignar variables:

Var = (expresión)? sentencia1:sentencia2;

(expresión)? sentencia1 : sentencia2;

expresión? sentencia1 : sentencia2;Se ejecuta:

sentencia1 si expresión = verdadero

sentencia2 si expresión = falso.

Page 31: Lenguajec 1

switch-caseswitch-case

switch(expresión)switch(expresión) {{ case 1: sentencias;case 1: sentencias; break;break; case 2: sentencias;case 2: sentencias; break;break; :: case n: sentencias;case n: sentencias; break;break; default: sentencias_default;default: sentencias_default; break;break; }}

Page 32: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales

Los arreglos unidimensionales son Los arreglos unidimensionales son secuencias de secuencias de valores del mismo tipovalores del mismo tipo que que se almacenan en se almacenan en localidades contiguaslocalidades contiguas de de memoria, según el memoria, según el orden del índiceorden del índice..

<tipo dato><tipo dato> espesp <identificador> <identificador>[tamaño][tamaño];; Ejemplo:Ejemplo:

intint valoresvalores[10][10];;float datosfloat datos[5][5]={1.3,2.8,4.89,0.0,5.7};={1.3,2.8,4.89,0.0,5.7};charchar paispais[][]=“MÉXICO”;=“MÉXICO”;char char **nombrenombre=“VLADIMIR”;=“VLADIMIR”;

Page 33: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales

Un arreglo se identifica por su nombre, pero Un arreglo se identifica por su nombre, pero para el compilador este equivale a la dirección para el compilador este equivale a la dirección del primer elemento del arreglo, es decir:del primer elemento del arreglo, es decir:

Ejemplo:Ejemplo:intint numnum[50][50];;

Para el compilador:Para el compilador:

numnum es iguales igual a a &num[0]&num[0]

/* La dirección del elemento 0 *//* La dirección del elemento 0 */

Page 34: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales

Los índices son necesarios para desplazarse a Los índices son necesarios para desplazarse a través del arreglo. El través del arreglo. El primerprimer elemento tiene el elemento tiene el índice índice cerocero y el y el últimoúltimo el índice el índice (tamaño-1)(tamaño-1)..

Se deben utilizar Se deben utilizar variables enterasvariables enteras y para agilizar y para agilizar el acceso a memoria se pueden declarar con el el acceso a memoria se pueden declarar con el modificador modificador registerregister..

Ejemplo:Ejemplo:intint register i, j, k; register i, j, k;

Page 35: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales

Para Para guardarguardar o o leerleer los elemento en un arreglo es los elemento en un arreglo es muy frecuente utilizar la sentencia muy frecuente utilizar la sentencia forfor..

Ejemplo:Ejemplo:int register i;int register i;int num[50];int num[50];

/* Asigno al arreglo valores del 0 al/* Asigno al arreglo valores del 0 al 500 */500 */for (for (i=0i=0; ; i<50i<50; ; i++i++)) num[num[ii]=]= ii*10;*10;

Page 36: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales Para Para introducirintroducir los elemento en un arreglo con la los elemento en un arreglo con la

función scanf se recomienda utilizar una variable función scanf se recomienda utilizar una variable auxiliar dentro de un ciclo auxiliar dentro de un ciclo forfor..

Ejemplo:Ejemplo:int register i;int register i;doubledouble datos[100]; datos[100];doubledouble temptemp;;

for (i=0; i<100; i++)for (i=0; i<100; i++) {{ scanf(scanf(“%lf”“%lf”,&,&temptemp);); fflush(fflush(stdinstdin); /* stdin=entrada estándar */); /* stdin=entrada estándar */ num[i]= num[i]= temptemp;; }}

Page 37: Lenguajec 1

Arreglos UnidimensionalesArreglos Unidimensionales

Un arreglo puede tener Un arreglo puede tener N dimensionesN dimensiones, , dependiendo de las limitaciones de la memoria y dependiendo de las limitaciones de la memoria y su declaración es la siguiente:su declaración es la siguiente:

<tipo dato><tipo dato> espesp <identificador>[dim1] [dim2]…[dimN];<identificador>[dim1] [dim2]…[dimN];

Ejemplo:Ejemplo:doubledouble cubo[3][3][3]; cubo[3][3][3];

Page 38: Lenguajec 1

Arreglos de CaracteresArreglos de Caracteres

Una cadena o “String” se manipula en lenguaje C, Una cadena o “String” se manipula en lenguaje C, mediante mediante arreglos de caracteresarreglos de caracteres. Los arreglos de . Los arreglos de caracteres terminan con el carácter nulo caracteres terminan con el carácter nulo ‘\0’‘\0’ que que en realidad es el en realidad es el valor cerovalor cero..

La única diferencia con los arreglos numéricos es La única diferencia con los arreglos numéricos es que que se requiere un carácter adicional para indicar se requiere un carácter adicional para indicar cuando el final del arreglocuando el final del arreglo..

Ejemplo:Ejemplo:char nombre[31]; /* Uso sólo 30 */char nombre[31]; /* Uso sólo 30 */