Introducción alIntroducción al
Lenguaje C (ANSI)Lenguaje C (ANSI)
PROGRAMACIONPROGRAMACION
ESTRUCTURADAESTRUCTURADA
Ing. Edwin Andrés Delgado R.Ing. Edwin Andrés Delgado R.
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ándosePDP-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 AmericanosEn 1983 el Instituto de Estándares Americanos
estableció un estándar que definiera al lenguajeestableció un estándar que definiera al lenguaje
C, conocido como ANSI C.C, conocido como ANSI C.
 Los principales compiladores de C llevanLos principales compiladores de C llevan
implementado el estándar ANSI C.implementado el estándar ANSI C.
Características del Lenguaje CCaracterísticas del Lenguaje C
 Se cataloga como un lenguaje deSe cataloga como un lenguaje de nivel medionivel medio,,
puesto que combina elementos depuesto que combina elementos de lenguajes delenguajes de
alto nivelalto nivel (Fortran, Pascal, Basic, etc.) con la(Fortran, Pascal, Basic, etc.) con la
funcionalidad delfuncionalidad del lenguaje ensambladorlenguaje ensamblador..
 Permite el manejo dePermite el manejo de bitsbits,, bytesbytes yy direccionesdirecciones dede
memoria.memoria.
 Posee sóloPosee sólo 32 palabras clave32 palabras clave, definidas por el, definidas por el
comité ANSI.comité ANSI.
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
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.
ComentariosComentarios
 ComentariosComentarios multi-líneamulti-línea
 Comienzan conComienzan 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 */
IdentificadoresIdentificadores
 Se utilizan para nombrarSe utilizan para nombrar variablesvariables,, funcionesfunciones,,
etiquetasetiquetas yy elementos definidos por el usuarioelementos definidos por el usuario..
 Los primerosLos primeros seisseis caracteres deben sercaracteres deben ser
significativos (distinguirse de otro similar) ysignificativos (distinguirse de otro similar) y
máximo puede tener hastamáximo puede tener hasta 3131 caracteres.caracteres.
 El primer carácter debe de ser unaEl primer carácter debe de ser una letraletra oo
subguiónsubguión. Posteriormente pueden ser letras,. Posteriormente pueden ser letras,
números, signos de subrayado.números, signos de subrayado.
 Existe diferencia entreExiste diferencia entre mayúsculasmayúsculas yy minúsculasminúsculas..
IdentificadoresIdentificadores
 NoNo pueden emplearsepueden emplearse palabras reservadaspalabras reservadas comocomo
identificadores.identificadores.
 NoNo pueden emplearsepueden emplearse nombres de funcionesnombres de funciones
que ya existan en el programa o en la librería deque ya existan en el programa o en la librería de
funciones de C.funciones de C.
 NoNo puede llamarsepuede llamarse mainmain..
ConvencionesConvenciones
 Empezar los nombres de funciones y de variables conEmpezar los nombres de funciones y de variables con
una letrauna letra minúsculaminúscula..
 Las constantes escritas conLas constantes escritas con #define van convan con
mayúsculas comomayúsculas como #define PI 3.1416#define PI 3.1416
 Las palabras intermedias comienzan conLas palabras intermedias comienzan con mayúsculasmayúsculas..
sumaMatricessumaMatrices
 Utilizar elUtilizar el subguiónsubguión para separar palabras intermedias.para separar palabras intermedias.
suma_Matricessuma_Matrices
 EmplearEmplear nombres cortosnombres cortos para optimizar.para optimizar. (i, j, k, cont)
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…”
#define#define
 Se utiliza para asignar un identificador a unaSe utiliza para asignar un identificador a una
constante.constante.
#define PI 3.1416#define PI 3.1416
#define NCOLS 20#define NCOLS 20
 ElEl pre-procesadorpre-procesador de C, sustituye la ocurrenciade C, sustituye la ocurrencia
de PI por el valor 3.1416 en todo el programade PI por el valor 3.1416 en todo el programa
antes de efectuar la compilación, del mismoantes de efectuar la compilación, del mismo
modo se sustituye NCOLS por 2.modo se sustituye NCOLS por 2.
VariablesVariables
 Una variable es unaUna variable es una localidad de memorialocalidad de memoria cuyocuyo
valor puede servalor puede ser cambiadocambiado durante la ejecucióndurante la ejecución
del programa.del programa.
 Todas las variables deben de serTodas las variables deben de ser declaradasdeclaradas parapara
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;
constconst
 Es unEs un modificador de accesomodificador de acceso que me permiteque me permite
asignar a una variable unasignar a una variable un valor constantevalor constante, es, es
decir que una vez asignado a dicha variable sudecir que una vez asignado a dicha variable su
valor no podrá ser modificado durante elvalor no podrá ser modificado durante el
programa.programa.
constconst <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”;
volatilevolatile
 Es unEs un modificador de accesomodificador de acceso que me permiteque me permite
cambiar el valor de una variable porcambiar el valor de una variable por medios nomedios no
explícitamente especificadosexplícitamente especificados por el programa.por el programa.
Por ejemplo laPor ejemplo la direccióndirección de unade una variable globalvariable global
que apunta a unque apunta a un puertopuerto externo.externo.
volatilevolatile <tipo dato><tipo dato> espesp <identificador><identificador> = valor;= valor;
 Ejemplo:Ejemplo:
volatilevolatile unsigned char *unsigned char *puertopuerto = 0x30= 0x30;;
OperadoresOperadores
 Son palabras o símbolos que implican una acción sobreSon 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
Operadores AritméticosOperadores Aritméticos
OperadorOperador NombreNombre DescripciónDescripción
++ SumaSuma 5+2 → 75+2 → 7
-- RestaResta 5-2 → 35-2 → 3
** MultiplicaciónMultiplicación 5*2 → 105*2 → 10
// DivisiónDivisión 5/2 → 25/2 → 2
%% MóduloMódulo 5%2 → 15%2 → 1
(tipo de dato)(tipo de dato) ““Cast” forzadoCast” forzado (double)5 → 5.0(double)5 → 5.0
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 queMayor o igual que if (a>=2f)if (a>=2f)
<=<= Menor o igual queMenor o igual que if (a<=3)if (a<=3)
Operadores LógicosOperadores Lógicos
OperadorOperador NombreNombre DescripciónDescripción
&&&& Y (AND)Y (AND) if ((a>3) && (a<9))if ((a>3) && (a<9))
|||| O (OR)O (OR) if ((a==2) || (a==3))if ((a==2) || (a==3))
!! NEGADONEGADO
(NOT)(NOT)
if (!(a==3)) es igual aif (!(a==3)) es igual a
if (a!=3)if (a!=3)
 Importante:Importante:
FALSOFALSO eses igual a ceroigual a cero..
VERDADEROVERDADERO eses diferente de cerodiferente de cero..
Operadores de AsignaciónOperadores de Asignación
OperadorOperador AbreviadoAbreviado No AbreviadoNo Abreviado
== 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;
Operadores de BitsOperadores de Bits
OperadorOperador NombreNombre DescripciónDescripción
<<<< Corrimiento a laCorrimiento a la
izquierdaizquierda
b=a>>2;b=a>>2;
>>>> Corrimiento a laCorrimiento a la
derechaderecha
b=a<<3;b=a<<3;
&& Y (AND) entre bitsY (AND) entre bits c=a&128;c=a&128;
|| O (OR) entre bitsO (OR) entre bits c=a|0x0a;c=a|0x0a;
~~ Complemento A1Complemento A1 c=~a;c=~a;
^^ O exclusivo (XOR)O exclusivo (XOR) c=^a;c=^a;
Operadores de AsignaciónOperadores de Asignación
para bitspara bits
OperadorOperador AbreviadoAbreviado No AbreviadoNo Abreviado
<<=<<= 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 hexadecimales0x7f, 0x0a, 0x03 son un números hexadecimales.
Operadores De DirecciónOperadores De Dirección
OperadorOperador NombreNombre DescripciónDescripción
** OperadorOperador
indirecciónindirección
Me da el valor que estáMe da el valor que está
almacenado en unaalmacenado en una
dirección de memoria.dirección de memoria.
También sirve paraTambién sirve para
declarar unadeclarar una variablevariable
apuntadorapuntador..
&& OperadorOperador
direccióndirección
Me da laMe da la dirección dedirección de
memoriamemoria de una variable.de una variable.
Variables ApuntadorVariables Apuntador
 Sirven para almacenar unaSirven para almacenar una dirección de memoriadirección de memoria..
 Utilizan el operadorUtilizan el operador && para obtener la dirección.para obtener la dirección.
 Se deben inicializar conSe 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 */
Precedencia de OperadoresPrecedencia de Operadores
( ) [ ] ->( ) [ ] -> Alta prioridadAlta prioridad
! ~ + - ++ -- & * sizeof! ~ + - ++ -- & * sizeof UnariosUnarios
* / % + -* / % + - AritméticosAritméticos
<< >><< >> Corrimiento de bitsCorrimiento de bits
< <= > >= == !=< <= > >= == != RelacionalesRelacionales
& ^ | && || ?:& ^ | && || ?: Bits / Lógicos / CondicionalBits / Lógicos / Condicional
= *= /= %= += -= &== *= /= %= += -= &=
^= |= <<= >>=^= |= <<= >>=
AsignaciónAsignación
,, EvaluaciónEvaluación
Sentencias (Instrucciones)Sentencias (Instrucciones)
 Una sentencia es unaUna sentencia es una instrucción o expresióninstrucción o expresión en C queen C que
tiene una consecuencia. Pueden ser asignaciones,tiene una consecuencia. Pueden ser asignaciones,
operaciones, llamadas a funciones.operaciones, llamadas a funciones.
 Todas las sentenciasTodas las sentencias terminanterminan con el signo de punto ycon el signo de punto y
comacoma ;;
 Pueden serPueden ser simplessimples oo compuestascompuestas. Las compuestas van. Las compuestas van
entre llaves:entre llaves:
 {{
 sentencia1;sentencia1;
 sentencia2;sentencia2;
 ::
 sentencian;sentencian;
 }}
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.
Estructura de un programa en CEstructura de un programa 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 PrincipalV. Función Principal main( )main( )
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);
}}
intint 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);
}}
if-elseif-else
if (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 todo
aquello que regresa un valor. Como
por ejemplo una condición lógica,
operaciones aritméticas, llamadas
a funciones, una variable, una
constante (númérica, carácter, etc.).
Operador Condicional ?:Operador Condicional ?:
((expresiónexpresión))?? sentencia1sentencia1 :: sentencia2sentencia2;;
expresiónexpresión?? sentencia1sentencia1 :: sentencia2sentencia2;;
Se ejecuta:Se ejecuta:
sentencia1sentencia1 sisi expresiónexpresión == verdaderoverdadero
sentencia2sentencia2 sisi expresiónexpresión == falsofalso..
Es un operador ternario y puede utilizarseEs un operador ternario y puede utilizarse
para asignar variables:para asignar variables:
Var =Var = ((expresiónexpresión))?? sentencia1sentencia1::sentencia2sentencia2;;
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;
}}
Arreglos UnidimensionalesArreglos Unidimensionales
 Los arreglos unidimensionales sonLos arreglos unidimensionales son
secuencias desecuencias de valores del mismo tipovalores del mismo tipo queque
se almacenan ense almacenan en localidades contiguaslocalidades contiguas dede
memoria, según elmemoria, 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”;
charchar **nombrenombre=“VLADIMIR”;=“VLADIMIR”;
Arreglos UnidimensionalesArreglos Unidimensionales
 Un arreglo se identifica por su nombre, peroUn arreglo se identifica por su nombre, pero
para el compilador este equivale a la direcciónpara 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 aa &num[0]&num[0]
/* La dirección del elemento 0 *//* La dirección del elemento 0 */
Arreglos UnidimensionalesArreglos Unidimensionales
 Los índices son necesarios para desplazarse aLos índices son necesarios para desplazarse a
través del arreglo. Eltravés del arreglo. El primerprimer elemento tiene elelemento tiene el
índiceíndice cerocero y ely el últimoúltimo el índiceel índice (tamaño-1)(tamaño-1)..
 Se deben utilizarSe deben utilizar variables enterasvariables enteras y para agilizary para agilizar
el acceso a memoria se pueden declarar con elel acceso a memoria se pueden declarar con el
modificadormodificador registerregister..
 Ejemplo:Ejemplo:
intint register i, j, k;register i, j, k;
Arreglos UnidimensionalesArreglos Unidimensionales
 ParaPara guardarguardar oo leerleer los elemento en un arreglo eslos elemento en un arreglo es
muy frecuente utilizar la sentenciamuy 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;
Arreglos UnidimensionalesArreglos Unidimensionales
 ParaPara introducirintroducir los elemento en un arreglo con lalos elemento en un arreglo con la
función scanf se recomienda utilizar una variablefunción scanf se recomienda utilizar una variable
auxiliar dentro de un cicloauxiliar 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;;
}}
Arreglos UnidimensionalesArreglos Unidimensionales
 Un arreglo puede tenerUn arreglo puede tener N dimensionesN dimensiones,,
dependiendo de las limitaciones de la memoria ydependiendo 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];
Arreglos de CaracteresArreglos de Caracteres
 Una cadena o “String” se manipula en lenguaje C,Una cadena o “String” se manipula en lenguaje C,
mediantemediante arreglos de caracteresarreglos de caracteres. Los arreglos de. Los arreglos de
caracteres terminan con el carácter nulocaracteres terminan con el carácter nulo ‘0’‘0’ queque
en realidad es elen realidad es el valor cerovalor cero..
 La única diferencia con los arreglos numéricos esLa única diferencia con los arreglos numéricos es
queque se requiere un carácter adicional para indicarse 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 */

Lenguajec intorduccionui

  • 1.
    Introducción alIntroducción al LenguajeC (ANSI)Lenguaje C (ANSI) PROGRAMACIONPROGRAMACION ESTRUCTURADAESTRUCTURADA Ing. Edwin Andrés Delgado R.Ing. Edwin Andrés Delgado R.
  • 2.
    Historia del LenguajeCHistoria 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ándosePDP-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 AmericanosEn 1983 el Instituto de Estándares Americanos estableció un estándar que definiera al lenguajeestableció un estándar que definiera al lenguaje C, conocido como ANSI C.C, conocido como ANSI C.  Los principales compiladores de C llevanLos principales compiladores de C llevan implementado el estándar ANSI C.implementado el estándar ANSI C.
  • 3.
    Características del LenguajeCCaracterísticas del Lenguaje C  Se cataloga como un lenguaje deSe cataloga como un lenguaje de nivel medionivel medio,, puesto que combina elementos depuesto que combina elementos de lenguajes delenguajes de alto nivelalto nivel (Fortran, Pascal, Basic, etc.) con la(Fortran, Pascal, Basic, etc.) con la funcionalidad delfuncionalidad del lenguaje ensambladorlenguaje ensamblador..  Permite el manejo dePermite el manejo de bitsbits,, bytesbytes yy direccionesdirecciones dede memoria.memoria.  Posee sóloPosee sólo 32 palabras clave32 palabras clave, definidas por el, definidas por el comité ANSI.comité ANSI.
  • 4.
    32 Palabras Reservadas32Palabras 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
  • 5.
    Elementos de unProgramaElementos 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.
  • 6.
    ComentariosComentarios  ComentariosComentarios multi-líneamulti-línea Comienzan conComienzan 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 */
  • 7.
    IdentificadoresIdentificadores  Se utilizanpara nombrarSe utilizan para nombrar variablesvariables,, funcionesfunciones,, etiquetasetiquetas yy elementos definidos por el usuarioelementos definidos por el usuario..  Los primerosLos primeros seisseis caracteres deben sercaracteres deben ser significativos (distinguirse de otro similar) ysignificativos (distinguirse de otro similar) y máximo puede tener hastamáximo puede tener hasta 3131 caracteres.caracteres.  El primer carácter debe de ser unaEl primer carácter debe de ser una letraletra oo subguiónsubguión. Posteriormente pueden ser letras,. Posteriormente pueden ser letras, números, signos de subrayado.números, signos de subrayado.  Existe diferencia entreExiste diferencia entre mayúsculasmayúsculas yy minúsculasminúsculas..
  • 8.
    IdentificadoresIdentificadores  NoNo puedenemplearsepueden emplearse palabras reservadaspalabras reservadas comocomo identificadores.identificadores.  NoNo pueden emplearsepueden emplearse nombres de funcionesnombres de funciones que ya existan en el programa o en la librería deque ya existan en el programa o en la librería de funciones de C.funciones de C.  NoNo puede llamarsepuede llamarse mainmain..
  • 9.
    ConvencionesConvenciones  Empezar losnombres de funciones y de variables conEmpezar los nombres de funciones y de variables con una letrauna letra minúsculaminúscula..  Las constantes escritas conLas constantes escritas con #define van convan con mayúsculas comomayúsculas como #define PI 3.1416#define PI 3.1416  Las palabras intermedias comienzan conLas palabras intermedias comienzan con mayúsculasmayúsculas.. sumaMatricessumaMatrices  Utilizar elUtilizar el subguiónsubguión para separar palabras intermedias.para separar palabras intermedias. suma_Matricessuma_Matrices  EmplearEmplear nombres cortosnombres cortos para optimizar.para optimizar. (i, j, k, cont)
  • 10.
    ConstantesConstantes  Constantes decará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…”
  • 11.
    #define#define  Se utilizapara asignar un identificador a unaSe utiliza para asignar un identificador a una constante.constante. #define PI 3.1416#define PI 3.1416 #define NCOLS 20#define NCOLS 20  ElEl pre-procesadorpre-procesador de C, sustituye la ocurrenciade C, sustituye la ocurrencia de PI por el valor 3.1416 en todo el programade PI por el valor 3.1416 en todo el programa antes de efectuar la compilación, del mismoantes de efectuar la compilación, del mismo modo se sustituye NCOLS por 2.modo se sustituye NCOLS por 2.
  • 12.
    VariablesVariables  Una variablees unaUna variable es una localidad de memorialocalidad de memoria cuyocuyo valor puede servalor puede ser cambiadocambiado durante la ejecucióndurante la ejecución del programa.del programa.  Todas las variables deben de serTodas las variables deben de ser declaradasdeclaradas parapara 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;
  • 13.
    constconst  Es unEsun modificador de accesomodificador de acceso que me permiteque me permite asignar a una variable unasignar a una variable un valor constantevalor constante, es, es decir que una vez asignado a dicha variable sudecir que una vez asignado a dicha variable su valor no podrá ser modificado durante elvalor no podrá ser modificado durante el programa.programa. constconst <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”;
  • 14.
    volatilevolatile  Es unEsun modificador de accesomodificador de acceso que me permiteque me permite cambiar el valor de una variable porcambiar el valor de una variable por medios nomedios no explícitamente especificadosexplícitamente especificados por el programa.por el programa. Por ejemplo laPor ejemplo la direccióndirección de unade una variable globalvariable global que apunta a unque apunta a un puertopuerto externo.externo. volatilevolatile <tipo dato><tipo dato> espesp <identificador><identificador> = valor;= valor;  Ejemplo:Ejemplo: volatilevolatile unsigned char *unsigned char *puertopuerto = 0x30= 0x30;;
  • 15.
    OperadoresOperadores  Son palabraso símbolos que implican una acción sobreSon 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
  • 16.
    Operadores AritméticosOperadores Aritméticos OperadorOperadorNombreNombre DescripciónDescripción ++ SumaSuma 5+2 → 75+2 → 7 -- RestaResta 5-2 → 35-2 → 3 ** MultiplicaciónMultiplicación 5*2 → 105*2 → 10 // DivisiónDivisión 5/2 → 25/2 → 2 %% MóduloMódulo 5%2 → 15%2 → 1 (tipo de dato)(tipo de dato) ““Cast” forzadoCast” forzado (double)5 → 5.0(double)5 → 5.0
  • 17.
    Operadores RelacionalesOperadores Relacionales OperadorOperadorNombreNombre 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 queMayor o igual que if (a>=2f)if (a>=2f) <=<= Menor o igual queMenor o igual que if (a<=3)if (a<=3)
  • 18.
    Operadores LógicosOperadores Lógicos OperadorOperadorNombreNombre DescripciónDescripción &&&& Y (AND)Y (AND) if ((a>3) && (a<9))if ((a>3) && (a<9)) |||| O (OR)O (OR) if ((a==2) || (a==3))if ((a==2) || (a==3)) !! NEGADONEGADO (NOT)(NOT) if (!(a==3)) es igual aif (!(a==3)) es igual a if (a!=3)if (a!=3)  Importante:Importante: FALSOFALSO eses igual a ceroigual a cero.. VERDADEROVERDADERO eses diferente de cerodiferente de cero..
  • 19.
    Operadores de AsignaciónOperadoresde Asignación OperadorOperador AbreviadoAbreviado No AbreviadoNo Abreviado == 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;
  • 20.
    Operadores de BitsOperadoresde Bits OperadorOperador NombreNombre DescripciónDescripción <<<< Corrimiento a laCorrimiento a la izquierdaizquierda b=a>>2;b=a>>2; >>>> Corrimiento a laCorrimiento a la derechaderecha b=a<<3;b=a<<3; && Y (AND) entre bitsY (AND) entre bits c=a&128;c=a&128; || O (OR) entre bitsO (OR) entre bits c=a|0x0a;c=a|0x0a; ~~ Complemento A1Complemento A1 c=~a;c=~a; ^^ O exclusivo (XOR)O exclusivo (XOR) c=^a;c=^a;
  • 21.
    Operadores de AsignaciónOperadoresde Asignación para bitspara bits OperadorOperador AbreviadoAbreviado No AbreviadoNo Abreviado <<=<<= 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 hexadecimales0x7f, 0x0a, 0x03 son un números hexadecimales.
  • 22.
    Operadores De DirecciónOperadoresDe Dirección OperadorOperador NombreNombre DescripciónDescripción ** OperadorOperador indirecciónindirección Me da el valor que estáMe da el valor que está almacenado en unaalmacenado en una dirección de memoria.dirección de memoria. También sirve paraTambién sirve para declarar unadeclarar una variablevariable apuntadorapuntador.. && OperadorOperador direccióndirección Me da laMe da la dirección dedirección de memoriamemoria de una variable.de una variable.
  • 23.
    Variables ApuntadorVariables Apuntador Sirven para almacenar unaSirven para almacenar una dirección de memoriadirección de memoria..  Utilizan el operadorUtilizan el operador && para obtener la dirección.para obtener la dirección.  Se deben inicializar conSe 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 */
  • 24.
    Precedencia de OperadoresPrecedenciade Operadores ( ) [ ] ->( ) [ ] -> Alta prioridadAlta prioridad ! ~ + - ++ -- & * sizeof! ~ + - ++ -- & * sizeof UnariosUnarios * / % + -* / % + - AritméticosAritméticos << >><< >> Corrimiento de bitsCorrimiento de bits < <= > >= == !=< <= > >= == != RelacionalesRelacionales & ^ | && || ?:& ^ | && || ?: Bits / Lógicos / CondicionalBits / Lógicos / Condicional = *= /= %= += -= &== *= /= %= += -= &= ^= |= <<= >>=^= |= <<= >>= AsignaciónAsignación ,, EvaluaciónEvaluación
  • 25.
    Sentencias (Instrucciones)Sentencias (Instrucciones) Una sentencia es unaUna sentencia es una instrucción o expresióninstrucción o expresión en C queen C que tiene una consecuencia. Pueden ser asignaciones,tiene una consecuencia. Pueden ser asignaciones, operaciones, llamadas a funciones.operaciones, llamadas a funciones.  Todas las sentenciasTodas las sentencias terminanterminan con el signo de punto ycon el signo de punto y comacoma ;;  Pueden serPueden ser simplessimples oo compuestascompuestas. Las compuestas van. Las compuestas van entre llaves:entre llaves:  {{  sentencia1;sentencia1;  sentencia2;sentencia2;  ::  sentencian;sentencian;  }}
  • 26.
    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.
  • 27.
    Estructura de unprograma en CEstructura de un programa 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 PrincipalV. Función Principal main( )main( )
  • 28.
    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); }} intint 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); }}
  • 29.
    if-elseif-else if (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 todo aquello que regresa un valor. Como por ejemplo una condición lógica, operaciones aritméticas, llamadas a funciones, una variable, una constante (númérica, carácter, etc.).
  • 30.
    Operador Condicional ?:OperadorCondicional ?: ((expresiónexpresión))?? sentencia1sentencia1 :: sentencia2sentencia2;; expresiónexpresión?? sentencia1sentencia1 :: sentencia2sentencia2;; Se ejecuta:Se ejecuta: sentencia1sentencia1 sisi expresiónexpresión == verdaderoverdadero sentencia2sentencia2 sisi expresiónexpresión == falsofalso.. Es un operador ternario y puede utilizarseEs un operador ternario y puede utilizarse para asignar variables:para asignar variables: Var =Var = ((expresiónexpresión))?? sentencia1sentencia1::sentencia2sentencia2;;
  • 31.
    switch-caseswitch-case switch(expresión)switch(expresión) {{ case 1: sentencias;case1: 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; }}
  • 32.
    Arreglos UnidimensionalesArreglos Unidimensionales Los arreglos unidimensionales sonLos arreglos unidimensionales son secuencias desecuencias de valores del mismo tipovalores del mismo tipo queque se almacenan ense almacenan en localidades contiguaslocalidades contiguas dede memoria, según elmemoria, 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”; charchar **nombrenombre=“VLADIMIR”;=“VLADIMIR”;
  • 33.
    Arreglos UnidimensionalesArreglos Unidimensionales Un arreglo se identifica por su nombre, peroUn arreglo se identifica por su nombre, pero para el compilador este equivale a la direcciónpara 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 aa &num[0]&num[0] /* La dirección del elemento 0 *//* La dirección del elemento 0 */
  • 34.
    Arreglos UnidimensionalesArreglos Unidimensionales Los índices son necesarios para desplazarse aLos índices son necesarios para desplazarse a través del arreglo. Eltravés del arreglo. El primerprimer elemento tiene elelemento tiene el índiceíndice cerocero y ely el últimoúltimo el índiceel índice (tamaño-1)(tamaño-1)..  Se deben utilizarSe deben utilizar variables enterasvariables enteras y para agilizary para agilizar el acceso a memoria se pueden declarar con elel acceso a memoria se pueden declarar con el modificadormodificador registerregister..  Ejemplo:Ejemplo: intint register i, j, k;register i, j, k;
  • 35.
    Arreglos UnidimensionalesArreglos Unidimensionales ParaPara guardarguardar oo leerleer los elemento en un arreglo eslos elemento en un arreglo es muy frecuente utilizar la sentenciamuy 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;
  • 36.
    Arreglos UnidimensionalesArreglos Unidimensionales ParaPara introducirintroducir los elemento en un arreglo con lalos elemento en un arreglo con la función scanf se recomienda utilizar una variablefunción scanf se recomienda utilizar una variable auxiliar dentro de un cicloauxiliar 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;; }}
  • 37.
    Arreglos UnidimensionalesArreglos Unidimensionales Un arreglo puede tenerUn arreglo puede tener N dimensionesN dimensiones,, dependiendo de las limitaciones de la memoria ydependiendo 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];
  • 38.
    Arreglos de CaracteresArreglosde Caracteres  Una cadena o “String” se manipula en lenguaje C,Una cadena o “String” se manipula en lenguaje C, mediantemediante arreglos de caracteresarreglos de caracteres. Los arreglos de. Los arreglos de caracteres terminan con el carácter nulocaracteres terminan con el carácter nulo ‘0’‘0’ queque en realidad es elen realidad es el valor cerovalor cero..  La única diferencia con los arreglos numéricos esLa única diferencia con los arreglos numéricos es queque se requiere un carácter adicional para indicarse 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 */