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

Lenguajec diapositivas

Embed Size (px)

DESCRIPTION

Una breve intruduccional programacion de c++

Citation preview

Page 1: Lenguajec diapositivas

Introducción al Introducción al Lenguaje C Lenguaje C

(ANSI)(ANSI)Computación para IngenierosComputación para Ingenieros

Lab. de Computación para Lab. de Computación para IngenierosIngenieros

Semestre 2006-1Semestre 2006-1

Page 2: Lenguajec diapositivas

Historia del Lenguaje CHistoria del Lenguaje C

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

En 1983 el Instituto de Estándares En 1983 el Instituto de Estándares Americanos estableció un estándar que Americanos estableció un estándar que definiera al lenguaje C, conocido como definiera al lenguaje C, conocido como ANSI C.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 diapositivas

Características del Características del Lenguaje CLenguaje C

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

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

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

Page 4: Lenguajec diapositivas

32 Palabras Reservadas32 Palabras Reservadas

charchar voidvoid defaultdefault returnreturn

intint ifif breakbreak autoauto

floatfloat elseelse continuecontinue externextern

doubledouble dodo gotogoto registerregister

longlong whilewhile structstruct constconst

shortshort forfor unionunion staticstatic

signedsigned switchswitch enumenum volatilevolatile

unsignedunsigned casecase typedeftypedef sizeofsizeof

Page 5: Lenguajec diapositivas

Elementos de un Elementos de un ProgramaPrograma

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 diapositivas

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 diapositivas

IdentificadoresIdentificadores Se utilizan para nombrarSe utilizan para nombrar variablesvariables, ,

funcionesfunciones, , etiquetasetiquetas y y elementos definidos elementos definidos por el usuariopor el usuario..

Los primeros Los primeros seisseis caracteres deben ser caracteres deben ser significativos (distinguirse de otro similar) significativos (distinguirse de otro similar) y máximo puede tener hasta y 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 . Posteriormente pueden ser letras, números, signos de subrayado.letras, números, signos de subrayado.

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

Page 8: Lenguajec diapositivas

IdentificadoresIdentificadores

NoNo pueden emplearse pueden emplearse palabras palabras reservadasreservadas como identificadores. como identificadores.

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

NoNo puede llamarse puede llamarse mainmain..

Page 9: Lenguajec diapositivas

ConvencionesConvenciones Empezar los nombres de funciones y de variables Empezar los nombres de funciones y de variables

con una letra con 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 para separar palabras intermedias.intermedias.suma_Matricessuma_Matrices

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

Page 10: Lenguajec diapositivas

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 diapositivas

#define#define

Se utiliza para asignar un Se utiliza para asignar un identificador a una constante.identificador a una 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 de C, sustituye la

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

Page 12: Lenguajec diapositivas

VariablesVariables

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

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

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

Ejemplo:Ejemplo:int a;int a;

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

Page 13: Lenguajec diapositivas

constconst Es un Es un modificador de accesomodificador de acceso que me que me

permite asignar a una variable un permite asignar a una variable un valor valor constanteconstante, es decir que una vez asignado , es decir que una vez asignado a dicha variable su valor no podrá ser a dicha variable su valor no podrá ser modificado durante el programa.modificado durante el programa.const const <tipo dato><tipo dato> esp <identificador> esp <identificador> = =

valorvalor;; Ejemplo:Ejemplo:

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

Page 14: Lenguajec diapositivas

volatilevolatile

Es un Es un modificador de accesomodificador de acceso que me que me permite cambiar el valor de una variable permite cambiar el valor de una variable por por medios no explícitamente medios no explícitamente especificadosespecificados por el programa. Por por el programa. Por ejemplo la ejemplo la direccióndirección de una de una variable variable globalglobal 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 diapositivas

OperadoresOperadores Son palabras o símbolos que implican una Son palabras o símbolos que implican una

acción sobre ciertas variables. Pueden ser acción sobre ciertas variables. Pueden ser unarios (1 variable), binarios(2 variables) o unarios (1 variable), binarios(2 variables) o ternarios (3 variables).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 diapositivas

Operadores AritméticosOperadores Aritméticos

OperadorOperador NombreNombre DescripciónDescripción

++ SumaSuma 5+2 → 75+2 → 7

-- RestaResta 5-2 → 35-2 → 3

** MultiplicaciMultiplicaciónón

5*2 → 105*2 → 10

// DivisiónDivisión 5/2 → 25/2 → 2

%% MóduloMódulo 5%2 → 15%2 → 1

(tipo de (tipo de dato)dato)

““Cast” Cast” forzadoforzado

(double)5 → (double)5 → 5.05.0

Page 17: Lenguajec diapositivas

Operadores RelacionalesOperadores Relacionales

OperadorOperador NombreNombre DescripciónDescripción

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

!=!= Diferente deDiferente de if (a!=null)if (a!=null)

>> Mayor queMayor que if (a>0.5)if (a>0.5)

<< Menor queMenor que if (a<2l)if (a<2l)

>=>= Mayor o igual Mayor o igual queque

if (a>=2f)if (a>=2f)

<=<= Menor o igual Menor o igual queque

if (a<=3)if (a<=3)

Page 18: Lenguajec diapositivas

Operadores LógicosOperadores Lógicos

OperadorOperador NombreNombre DescripciónDescripción

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

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

!! NEGADO NEGADO (NOT)(NOT)

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

if (a!=3)if (a!=3) Importante: Importante:

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

Page 19: Lenguajec diapositivas

Operadores de Operadores de AsignaciónAsignación

OperadorOperador AbreviadoAbreviado No No AbreviadoAbreviado

== a=2;a=2; a=2;a=2;

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

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

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

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

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

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

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

Page 20: Lenguajec diapositivas

Operadores de BitsOperadores de BitsOperadorOperador NombreNombre DescripciónDescripción

<<<< Corrimiento a Corrimiento a la izquierdala izquierda

b=a>>2;b=a>>2;

>>>> Corrimiento a Corrimiento a la derechala derecha

b=a<<3;b=a<<3;

&& Y (AND) entre Y (AND) entre bitsbits

c=a&128;c=a&128;

|| O (OR) entre O (OR) entre bitsbits

c=a|0x0a;c=a|0x0a;

~~ Complemento Complemento A1A1

c=~a;c=~a;

^̂ O exclusivo O exclusivo (XOR)(XOR)

c=^a;c=^a;

Page 21: Lenguajec diapositivas

Operadores de AsignaciónOperadores de Asignaciónpara bitspara bits

OperadorOperador AbreviadoAbreviado No No AbreviadoAbreviado

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

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

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

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

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

== n=0x7f;n=0x7f; n=0x7f;n=0x7f;Nota:Nota: 0x7f, 0x0a, 0x03 son un números 0x7f, 0x0a, 0x03 son un números hexadecimaleshexadecimales.

Page 22: Lenguajec diapositivas

Operadores De DirecciónOperadores De Dirección

OperadoOperadorr

NombreNombre DescripciónDescripción

** Operador Operador indirecciindirecci

ónón

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

También sirve para También sirve para declarar una declarar una variable variable apuntadorapuntador..

&& Operador Operador direccióndirección

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

Page 23: Lenguajec diapositivas

Variables ApuntadorVariables Apuntador Sirven para almacenar una Sirven para almacenar una dirección de dirección de

memoriamemoria.. 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 diapositivas

Precedencia de Precedencia de OperadoresOperadores

( ) [ ] ->( ) [ ] -> Alta prioridadAlta prioridad

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

UnariosUnarios

* / % + - * / % + - AritméticosAritméticos

<< >><< >> Corrimiento de bitsCorrimiento de bits

< <= > >= == !=< <= > >= == != RelacionalesRelacionales

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

= *= /= %= += -= = *= /= %= += -= &=&=

^= |= <<= >>=^= |= <<= >>=

AsignaciónAsignación

,, EvaluaciónEvaluación

Page 25: Lenguajec diapositivas

Sentencias Sentencias (Instrucciones)(Instrucciones)

Una sentencia es una Una sentencia es una instrucción o expresióninstrucción o expresión en C que tiene una consecuencia. Pueden ser en C que tiene una consecuencia. Pueden ser asignaciones, operaciones, llamadas a asignaciones, operaciones, llamadas a funciones.funciones.

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

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

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

Page 26: Lenguajec diapositivas

Sentencias Sentencias (Instrucciones)(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 diapositivas

Estructura de un Estructura de un programa en Cprograma en C

I. Directivas del pre-procesadorI. Directivas del pre-procesador

#include y #define#include y #define

II. Declaración de PrototiposII. Declaración de Prototipos

(Declaración de funciones)(Declaración de funciones)

III. Declaración de variables globalesIII. Declaración de variables globales

IV. Funciones definidas por el usuarioIV. Funciones definidas por el usuario

V. Función Principal V. Función Principal main( )main( )

Page 28: Lenguajec diapositivas

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 diapositivas

if-elseif-elseif (expresión)if (expresión)

sentencia;sentencia;

elseelse

sentencia;sentencia;

if (expresión)if (expresión)

{{

sentencia1;sentencia1;

sentencia2;sentencia2;

}}

elseelse

{{

sentencia1;sentencia1;

sentencia2;sentencia2;

}}

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 diapositivas

Operador Condicional ?:Operador Condicional ?:

((expresiónexpresión))? ? sentencia1sentencia1 :: sentencia2sentencia2;;

expresiónexpresión? ? sentencia1sentencia1 :: sentencia2sentencia2;;Se ejecuta:Se ejecuta:

sentencia1sentencia1 si si expresiónexpresión = = verdaderoverdadero

sentencia2sentencia2 si si expresiónexpresión = = falsofalso..

Es un operador ternario y puede Es un operador ternario y puede utilizarse para asignar variables:utilizarse para asignar variables:

Var =Var = ((expresiónexpresión))?? sentencia1sentencia1::sentencia2sentencia2;;

Page 31: Lenguajec diapositivas

switch-caseswitch-caseswitch(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: default:

sentencias_default;sentencias_default; break;break; }}

Page 32: Lenguajec diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

Los arreglos unidimensionales son Los arreglos unidimensionales son secuencias de secuencias de valores del mismo valores del mismo tipotipo que se almacenan en que se almacenan en localidades contiguaslocalidades contiguas de memoria, de memoria, según el 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 diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

Un arreglo se identifica por su nombre, Un arreglo se identifica por su nombre, pero para el compilador este equivale a pero para el compilador este equivale a la dirección del primer elemento del la dirección del primer elemento del arreglo, es decir: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 diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

Los índices son necesarios para Los índices son necesarios para desplazarse a través del arreglo. El desplazarse a través del arreglo. El primerprimer elemento tiene el índice elemento tiene el í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 y para agilizar el acceso a memoria se para agilizar el acceso a memoria se pueden declarar con el modificador pueden declarar con el modificador registerregister..

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

Page 35: Lenguajec diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

Para Para guardarguardar o o leerleer los elemento en los elemento en un arreglo es muy frecuente utilizar un arreglo es muy frecuente utilizar la sentencia 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 diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

Para Para introducirintroducir los elemento en un los elemento en un arreglo con la función scanf se arreglo con la función scanf se recomienda utilizar una variable 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 diapositivas

Arreglos Arreglos UnidimensionalesUnidimensionales

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

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

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

Page 38: Lenguajec diapositivas

Arreglos de CaracteresArreglos de Caracteres

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

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

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