Clase 1 y 2 Lenguaje c

download Clase 1 y 2 Lenguaje c

of 132

Transcript of Clase 1 y 2 Lenguaje c

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    1/132

    (C/C++)

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    2/132

    Cmo Programar en C/C++.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    3/132

    programacin estructurada mediante el uso del.

    Revisar los conceptos principales de la POO++.

    Se utilizar como plataforma el Qt (modo.

    impartir sirve para muchas plataformas, nosolo Windows.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    4/132

    .ha utilizado para el desarrollo de aplicaciones tandis ares como: ho as de clculos estores de bases

    de datos, compiladores, sistemas operativos, etc.

    Es un lenguaje potente y eficiente. Usando C, un

    programador puede casi alcanzar la eficiencia delcdigo ensamblador, aunque se sacrifica algo lasimplicidad del cdigo de otros lenguajes.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    5/132

    .programar a alto nivel (pensando a nivel lgico y no enla m uina fsica a ba o nivel con lo ue se uede

    obtener la mxima eficiencia y un control absoluto decuanto sucede en el interior del ordenador).

    Es un lenguaje porttil. Los programas escritos en Cson fcilmente transportables a otros sistemas.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    6/132

    e ve ue e e ue ems complicado de aprender que otros

    e u e y ue e u e euna cierta experiencia para poder aprovecharlo.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    7/132

    Compilarlo en un compilador

    n azar o en un en aza or Ejecutarlo

    Podemos encontrar ambientes de desarrollointegrados (IDE) que realizan estos pasosautomticamente.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    8/132

    La programacin estructurada es unestilo de pro ramacin que se basa en el

    llamado a funciones y procedimientosdesde un lazo de e ecucin rinci al.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    9/132

    u e .

    main ()

    {rintf "Mi rimer ro rama en C."

    }

    .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    10/132

    unidades de programa llamadas funciones, las

    . En este caso, el programa est compuesto por

    una so a unc n ama a ma n.

    Todos los programas C deben tener unafuncin main() pues es la primera funcin quese ejecuta cuando se hace funcionar el

    programa.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    11/132

    os par n es s que s guen a ma n en can amain como nombre de funcin.

    n m o o e comun cac n e a os en refunciones es el uso de argumentos. Los

    funciones. Estos se encierran entre parntesis;

    ,indica mediante (). Siempre que se pueda sedebe haceruso de ar umentos.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    12/132

    main (){

    printf ("Mi primer programa en C.");}

    tambin se poda haber escrito as:

    " " .pero en este caso el cdigo es menos legible para elusuario.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    13/132

    printf ("Mi primer programa en C.");

    printf, con el argumento Mi primer programaen C.; printf es una funcin de biblioteca querealiza una escritura en la salida estndar.Normalmente la salida estndar es el monitor.

    formato y es muy poderosa. En este casoescribe una cadena secuencia de caracteres .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    14/132

    . El prototipo de las funciones de biblioteca (y de

    las nuestras se definen en un ti o de fichero

    llamado cabecera o header. En este caso esel fichero stdio.h (standard input/output.

    necesario incluir el correspondiente fichero de

    cabecera antes de utilizarla.

    Por e em lo:

    #include

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    15/132

    manipuladas por el preprocesador. El preprocesadorrealiza algunas tareas antes de empezar a actuar el

    .

    La lnea:#include

    lo que hace es incluir la informacin que hay en el. .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    16/132

    coma. La lnea del main no va se uida de unto

    coma porque no se trata de una llamada a unafuncin sino de la definicin de una funcin. La definicin de una funcin especifica las

    instrucciones (bloque de cdigo) que posee

    tiene. El C es case sensitive. No es lo mismo ara

    el C printf que PRINTF o que Printf.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    17/132

    .main (){

    printf ("Mi segundo programa en C.\n");printf ("Pulsa la tecla RETURN para terminar.");ge c ar ;

    }

    La salida por pantalla de este programa es:

    Mi se undo ro rama en C.

    Pulsa la tecla RETURN para terminar.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    18/132

    La primera es la aparicin del cdigo \n dentro de lacadena del primer printf.

    La segunda es la aparicin de una nueva funcin delibrera: getchar ().

    La secuencia \n es un carcter especial que denota el

    carcter de nueva lnea. Al ser \n un carcter se puedecualquier otro carcter.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    19/132

    ,

    segun o programa en . u sa a ec apara terminar.

    Veamos algunas variantes equivalentes al ejemploanterior.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    20/132

    .

    ma n

    {

    pr n segun o programa en . ;

    printf ("\nPulsa la tecla RETURN para terminar.");

    ge c ar ;

    }

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    21/132

    .

    ma n{

    printf("Mi segundo programa en C.\nPulsa la

    tecla RETURN para terminar.");getchar();

    }

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    22/132

    .

    {rintf "Mi se undo ro rama en C."

    printf ("\n");

    printf ("Pulsa la tecla RETURN para terminar.");getchar ();

    }

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    23/132

    .

    llaman secuencias de escape. Las secuencias

    caracteres no imprimibles.

    retorno de carro, \t para el tabulador, \b para

    retroceso, \" ara la comilla, \' ara el a strofey \\ para la barra diagonal invertida.

    En la biblio rafa del curso se uede encontrar

    un listado completo de las secuencias escapey su uso.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    24/132

    getchar() es una funcin que espera lapulsacin de la tecla return por parte del

    usuario.Esta funcin no necesita argumentospero los parntesis son necesarios puesto quese trata de una uncin. E.I: Estudiar getchar()

    getchar() se encuentra en la librera stdio.h, porlo tanto, siempre que utilicemos esta funcin enun programa es necesario incluir la lnea:

    #include

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    25/132

    #include main () /* Tercer ejemplo */{

    int gramos, kilogramos;kilogramos = 3;*

    printf ("%d gramos equivalen a %d kilogramos.",

    gramos, kilogramos);getchar ();}

    3000 gramos equivalen a 3 kilogramos.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    26/132

    * *,ignorado. Las secuencias /* y */ denotan el principio yel final de un comentario en C. Se deben utilizar

    comentarios en los programas para hacerlos mscomprensibles. Tambin se pueden usar // pero solo

    La lnea:int gramos, kilogramos;

    es una sentencia de declaracin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    27/132

    1) En algn sitio de la funcin se utilizarn las"variables ramos kilo ramos.

    2) Estas dos variables son de tipo entero (integer).

    El punto y coma final de la lnea de declaracin la

    identifican como una sentencia o instruccin C.Tambin se podra haber escrito:

    int gramos;

    int kilogramos;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    28/132

    valor de su contenido puede variar a lo largo delprograma.

    En C, todas las variables utilizadas han de serec ara as an es e su uso. as neas:

    kilogramos = 3;

    *

    son sentencias de asignacin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    29/132

    "kilogramos el valor 3". La lnea: gramos = 1000 *kilo ramos si nifica: "dar a la variable ramos el

    resultado de multiplicar 1000 por kilogramos".

    En la lnea:

    int ramos kilo ramos se reserva espacio en memoria para las variables

    gramos y kilogramos.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    30/132

    kilogramos = 3;

    = *

    se les da valor a dichas variables (al contenido de losespacios reservados). Posteriormente se les puedeasignar a estas variables valores diferentes

    = es e opera or e as gnac n y es e opera or emultiplicacin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    31/132

    + (nmero positivo usado como operador unario ysuma usado como o erador binario .

    - (nmero negativo usado como operador unario ysubstraccin usado como operador binario).

    / (operador de divisin). Se debe tener cuidado almanejarlo pues puede devolver la parte entera de la

    . %(operador mdulo, esto es, resto de la divisin de

    dos nmeros enteros).

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    32/132

    printf ("%d gramos equivalen a %d kilogramos.",,

    escribe:

    3000 gramos equivalen a 3 kilogramos.

    Como se ve los dos %d no se han escrito y sinembargo se ha escrito en su lugar los valores deas var a es gramos y ogramos.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    33/132

    imprimir una variable en esta posicin; la letra dinforma ue la variable a im rimir es entera di it .

    porque nos permite formatear la salida a nuestro

    gusto.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    34/132

    .nmeros y los caracteres que contienen la informacina utilizar.

    constantes y variables. Las constantes son datos con

    valores fijos que no pueden ser alterados por elprograma. Las variables son datos cuyo valor sepuede cambiar a lo largo del programa.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    35/132

    Una segunda divisin de los datos la podemos hacer segn lostipos que sean. Algunos ejemplos de datos simples del C son:

    Tipo Descripcin Longitud en bytes Rango------ ------------------ ----------------- -------------------------char carcter 1 0 a 255int entero 2 -32768 a 32767float coma flotante 4 aproxim. 6 dgitos de precisindouble coma flotante

    .void sin valor 0 sin valor

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    36/132

    .

    , ,tambin el rango, de la tabla anterior,dependen de cada tipo de procesador y de

    cada compilador de C. En C, los caracteres se definen con

    . Ejemplos vlidos de constantes tipo carcter:

    ' ' ' ' ' ', , . Ejemplos invlidos de constantes tipo carcter:

    'TT' l 1.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    37/132

    'TT' es incorrecto porque hay dos caracteres entre losapstrofes; l es incorrecto porque el compilador lo

    compilador como un nmero y no como un carcter.

    El valor de una constante carcter es el valor numricodel carcter en el conjunto de caracteres del sistema.

    Por e em lo en el con unto ASCII el carcter cero o'0', es 48

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    38/132

    char ch1, ch2; /* declaracin de las variables ch1 y ch2*/

    ch1 = 'A'; /* a la variable ch1 se le asigna el valor' ' *

    ch2 = 65; /* a la variable ch2 se le asigna el cdigoASCII 65 que es 'A'*/

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    39/132

    .

    Las constantes enteras se pueden escribir de uno delos tres modos si uientes:

    En decimal: escribiendo el nmero sin empezar por 0(a excepcin de que sea el propio 0). Ejemplos: 1, 0, -.

    En hexadecimal: empezando el nmero por 0x.

    , , . En octal: empezando el nmero por 0. Ejemplos: 02,

    010.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    40/132

    .tipo double tiene el doble de precisin que el tipo float. Por lodems, los dos tipos son iguales.

    La sintaxis correcta de las constantes de estos dos tipos es:[signo] [dgitos] [.] [dgitos] [exponente [signo] dgitos]

    signo es + o -dgitos es una secuencia de dgitos

    .exponente es E o e

    gunos e emp os e es e po: . e , - - , - .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    41/132

    , .

    Uno de los usos de void se puede observar al comparar estos dosprogramas:

    #include #include

    main () void main (void)

    { {

    " " " ". .getchar (); getchar ();

    } }

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    42/132

    una funcin, se define a sta como funcin que notiene ar umentos. No confundir con llamada a funcin

    en cuyo caso no se puede utilizar el void.

    Del mismo modo, al poner void antes del nombre de la

    funcin en la definicin de sta, se est declarandocomo funcin que no devuelve nada.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    43/132

    < >.

    void main (void)

    int i = 1; char c = 'c';float f = 2.0

    int a = 3; float x= i/a;

    double d = 1e-1;

    pr n = n c = c n = n = n a= a= , , c, ,d,a,i/a);

    printf("\n %f",x);

    getchar ();

    }

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    44/132

    int i = 1;

    c ar c = c ;

    float f = 2.0;

    int a = 3;

    Como se puede observar en el programa, sepuede asignar un valor a una variable en elmomento de la declaracin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    45/132

    printf el lugar en que se ha de escribir una variable deti o entera. Los cdi os c f lf indican a la

    funcin printf el lugar en la cadena de caracteres en laque se han de escribir variables de tipo char, float ydouble respectivamente.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    46/132

    ,pueden tener varios modificadores precedindolos.

    Hay modificadores de tipo y de acceso.

    significado del tipo base para que se ajuste ms

    recisamente a las necesidades de cada momento.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    47/132

    Modif. Desc. Tipos a los se les puede aplicar

    ----------- ----------- ---------------------------------------------

    -- ,

    unsigned sin signo int, char

    , ,short corto int, char

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    48/132

    est permitido, ya que la declaracin implcita deentero asume un nmero con signo.

    El estndar ANSI elimina el long float por ser equivalente al double. printf: %lf; que significa: long.

    Se puede utilizar un modificador de tipo sin tipo; en

    este caso el ti o se asume ue es int.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    49/132

    Tipo Long. en bytes Rango------------------ ---------------------- ---------------------------------------char 1 Caracteres ASCIIunsigned char 1 0 a 255

    -int 2 -32768 a 32767unsigned int 2 0 a 65535signed int 2 -32768 a 32767short int 1 -128 a 127unsigned short int 1 0 a 255signed short int 1 -128 a 127

    -signed long int 4 -2147483648 a 2147483649unsigned long int 4 0 a 4294967296float 4 Aprox. 6 dgitos de precisindouble 8 Aprox. 12 dgitos de precisinlong double 16 Aprox. 24 dgitos de precisin

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    50/132

    ,modificadores modifican el acceso a los tipos.

    Estos modificadores son:o ca or escr pc n

    --------------- ----------------

    const constante

    volatile voltil

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    51/132

    les asigna un valor inicial y este valor no puede ser cambiado a lo lar o del ro rama. Se utilizan ara

    declarar constantes.

    Ejemplo de declaracin de una constante:

    const unsi ned int hola

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    52/132

    variable puede ser cambiada por medios no explcitamenteespecificados en el programa.

    Obsrvese las siguientes sentencias C: int v;

    v = 1;

    v = 2;

    ,primera sentencia de asignacin se desecha y no se generacdigo para ella ya que es redundante.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    53/132

    la o timizacin descrita no se realizara sobre lavariable v, generndose cdigo para las dosasignaciones.

    mayor uso que pue e ener es en mu area. a areferencia a la variable genera una instruccin decar a desde memoria or arte del com ilador node un registro).

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    54/132

    string) es una secuencia de caracteres encerrados entre comillas.

    Ejemplos de cadenas:

    Esto es una cadena.

    abc

    a

    \n a \n b \n c \n

    Las comillas no forman arte de la secuencia. Sirven araespecificar el comienzo y final de sta, al igual que los apstrofosmarcaban los caracteres individuales.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    55/132

    caracteres. Un array (conocido tambin con el nombrede vector es una secuencia de datos ue se

    encuentran almacenados en memoria de una formaconsecutiva.

    Un array de caracteres es una secuencia decaracteres. El array:

    "abc"

    se almacenara en memoria como:

    a b c \0

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    56/132

    ' ' ,el C para marcar el final de la cadena en memoria. Elcarcter nulo ('\0') no es la cifra 0 (cuyo cdigo ASCIIes 48), sino un carcter no imprimible, cuyo cdigo

    ASCII es 0. A este tipo de cadena se le suele llamar

    Teniendo en cuenta el carcter nulo en la cadena"abc", esta cadena es un array de tamao 4 (trescaracteres ms el carcter nulo).

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    57/132

    E em lo:void main (void){char ch1, ch2, ch3, ch4;

    ch1 = '\0'; /* en memoria, ch1 tiene el valor 0 que es el' *

    ch2 = 0; /* en memoria, ch2 tiene el valor 0 */ch3 = '0'; /* en memoria, ch3 tiene el valor 48 que es

    e va or correspon en e a car c erch4 = 48; /* en memoria, ch4 tiene el valor 48 */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    58/132

    .

    void main (void)

    {

    printf ("\n Esta cadena est separada en

    dos.\n s " esta es la se unda arte"}

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    59/132

    cosas nuevas: la divisin de una cadena de caracteresen varias lneas y el cdigo de formato %s.

    c go s e n ca a a unc n pr n que escr a

    una cadena en su lugar. Una cadena de caracteres se puede escribir en varias

    lneas de fichero cerrando las comillas al final de lalnea y volvindolas a abrir en la lnea siguiente.

    Hacindolo de este modo el com ilador lo inter retacomo una sola cadena de caracteres escrita en variaslneas.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    60/132

    ' '"x". 'x' es una constante carcter. "x" es una cadena decaracteres.

    'x' pertenece a un tipo bsico (char). "x" es de un tipoer va o array compues o e e emen os e po

    bsico char). "x", en realidad, contiene dos caracteres,

    a saber 'x' '\0'.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    61/132

    determinada operacin sobre sus operandos. Unoperando es el dato que va a ser manipulado por eloperador.

    Los operadores en C se pueden dividir en cuatro

    a) Operadores aritmticos.

    .c) Operadores a nivel de bits.

    d O eradores es eciales.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    62/132

    -------------- ------------------------------

    - ,

    + Suma, tambin suma monaria* Multi licacin

    / Divisin

    % Divisin en mdulo

    -- Decremento

    ++ Incremento

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    63/132

    pueden aplicar a variables, no constantes. El deincremento aade 1 a su operando y el de decremento

    ,

    ++x; o x++; es lo mismo que x = x + 1;-- -- -

    Los operadores de incremento y decremento pueden

    receder o se uir al o erando. Si el o erador recede aloperando, C lleva a cabo la operacin antes de utilizar elvalor del operando. Si el operador sigue al operando, C

    decrementarlo.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    64/132

    e e :

    int x, y; int x, y;

    x = 2; x = 2;= ++x = x++

    /* ahora x tiene el /* ahora x tiene el

    , ,valor 3 */ valor 2 */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    65/132

    siguiente:

    MAYOR ++ --

    + (ms monario) - (menos monario)* / %

    MENOR + -

    Los operadores del mismo nivel de precedencia son

    eva ua os por e comp a or e zqu er a a erec a.Se puede alterar el orden de evaluacin utilizando

    arntesis.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    66/132

    E em lo:void main (void){

    int x1, x2, x3, x4, x5, x6;/* Asignaciones */ /* Orden de asignaciones */

    x1 = 2 + 3 * 4; /* x1 = 14; */x2 = (2 + 3) * 4; /* x2 = 20; */x3 = -4 - (-1); /* x3 = -3; */x4 = 10 / 2 % 3; /* x4 = 2; */x5 = ++x3 - x4; /* x3 = -2; x5 = -4; */

    x6 = x3++ - x4; /* x6 = -4; x3 = -1; */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    67/132

    x = -x ; x = - ;x2 = (x1 + x2) / x3; /* x2 = -6; */x3 = ((x1++) + (x2++)) - x3; /* x3 = -19; x1 = -13; x2 = -5; */x4 = -(-(-x3)); /* x4 = 19; */

    x5 = (x6 * x6 + x6 / x6); /* x5 = 17; */x6 = x1++ + ++x2 - ++x6 /* x2 = -4 x6 = -3 x6 = -14 x1 = -12 */x1++; /* x1 = -11; */--x2; /* x2 = -5; */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    68/132

    .

    entre unos valores y otros. La palabra lgico serefiere a las formas en ue esas relaciones

    pueden conectarse entre s. Los veremos untos or ue ambos o eradores

    se basan en la idea de cierto (true en ingls) yfalso (false en ingls). En C, cualquier valordistinto de cero es cierto, y el valor 0 es falso.Las expresiones que son ciertas toman el valor

    .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    69/132

    .

    Operador Accin Operador Accin

    ------------ ----------------- ------------- -----------

    > Mayor que && AND

    >= Mayor o igual que || OR >= <

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    72/132

    .

    void main (void){int x1, x2, x3, x4, x5, x6;"/* Asignaciones */ /* Orden de asignaciones */x = < ; x = ;x2 = 10 > 12; /* x2 = 0; */

    = - * = *x4 = 0 || x3; /* x4 = 1; */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    73/132

    .

    expresin se termina en cuanto se sabe el resultado de dichaexpresin. Por ejemplo:

    1 || x En las dos expresiones anteriores NO se evala x puesto que es

    super uo: en a pr mera expres n a ser uno e os os operan os0, el otro no hace falta mirarlo; con la segunda expresin podemosdecir lo mismo. Como los operadores && y || se evalan de izquierda

    a erec a, po emos asegurar que es e segun o operan o e quecontiene la x) el que no se evala. Si la expresin fuera: x && 0, seevaluara la x, y si sta es cierta se evaluara el 0, y si la x fuera

    , .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    74/132

    .

    * *x6 = x1 == x2 || x3 != x4; /* x6 = 0; */

    = * = *

    x2 = ! (!x1 || x3

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    75/132

    Estos o erandos realizan o eraciones sobre los bitsde un byte o una palabra (dos bytes). Slo se puedenutilizar con los tipos char e int.

    Operador Accin------------- -----------------------------------------& AND| OR

    exc us vo~ Complemento a uno (NOT)

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    76/132

    p q p q p q ~p p q

    0 0 0 0 1 0

    1 0 0 1 0 1

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    77/132

    siempre producen un resultado que es 0 1, mientrasque las operaciones entre bits producen cualquier valor

    .

    ejemplo:

    z 1 = 2 & & 3 ; z 2 = 2 & 3 ; / * z 1 = 1 ; z 2 = 2 * /

    Por u 2 && 3 es 1 2 & 3 es 2?

    2&&3: compilador evala la expresin 1 && 1 es 1.

    2&3: el compilador evala 00000010 & 00000011 es00000010 (2 en decimal)

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    78/132

    Sintaxis para los operadores de desplazamiento: expresin >> nmero de bits a desplazar a la derecha expresin

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    79/132

    e e e e :

    MAYOR ~

    >

    &

    ^MENOR |

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    80/132

    E em los:void main (void){

    char x, ;"/* Asignaciones x en bits y en bits valor de x valor de y */

    /* ------------------ ---------------- -------------- ------------- ------------- */x = 2; y = 3; /* 0000 0010 0000 0011 2 3 */y = y

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    81/132

    operadores no agrupables en ninguno de los gruposanteriores.

    s os opera ores son os s gu en es:

    ?*

    sizeof,

    . ->() []

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    82/132

    expresion_1 ? expresion_2 : expresion_3

    on e expres on_ , expres on_ y expres on_ son

    expresiones C.

    expresion_1. Si es cierta, evala expresion_2 y tomaese valor ara la ex resin. Si ex resion 1 es falsa_evala expresion_3 y toma su valor para la expresin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    83/132

    int x, y;

    x = < : ; a x se e as gna e va or : x

    = 4; */y = > : ; a y se e as gna e va or : x= 5; */

    x = < > : : ; a x se e as gnael valor 2: x = 2;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    84/132

    * .

    .son monarios. Un puntero es una variable quecontiene una direccin de memoria.

    El significado que tiene en este caso el operador * noene a so u amen e na a que ver con e que ene e

    operador aritmtico *. En el cdigo fuente no hayconfusin entre uno otro ues el aritmtico es binarioy el de punteros es monario. Lo mismo ocurre con eloperador &.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    85/132

    longitud, en bytes, de una expresin o de un tipo; en este ltimocaso, el tipo ha de estar entre parntesis.

    #include

    void main (void)

    {

    printf ("La cantidad de bytes de un doble en memoria es %d",sizeof(a));

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    86/132

    ,

    La coma , tiene dos usos mu distintos en C: 1) Para representar una lista de elementos, por ejemplo:

    int a, b, c;

    " " , , ,

    2) Como operador. Como operador, la coma encadena varias expresiones. Estas

    expresiones son evaluadas de izquierda a derecha y el valor de laexpresin total es el valor de la expresin ms a la derecha. Porejemplo:

    int x; x = (2, 3, 4); /* a x se le asigna el valor 4: x = 4; */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    87/132

    ->. .

    e e e u zcompuestos: estruct (estructura) y unionu .

    El significado, tanto de los tipos compuestosstruct y union, como de los operadores . y ->,

    se estudiarn en clases posteriores.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    88/132

    que aumentan la precedencia de las operaciones quecontienen.

    emp o:

    int x = 1 - 2 * 3; /* a x se le asigna el valor -5: x = -5;*/ int y = (1 - 2) * 3; /* a y se le asigna el valor -3: x = -3;

    */

    ,expresin, para especificar la llamada a una funcin.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    89/132

    arrays. Ya hemos hablado anteriormente un

    Ejemplo:* ,

    f[1] y f[2] */

    * . . .asignaciones */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    90/132

    Una sentencia de asi nacin es una sentencia C en laque se asigna un valor a una variable. La forma generalde la sentencia de asignacin es:

    _ _ _

    donde operador_de_asignacin es uno de losoperadores siguientes:=, *=, /=, %=, +=, -=, =, &=, ^=, |=.

    Una sentencia de asignacin es una expresin. El valor

    variable. El operador de asignacin se evala dederecha a izquierda.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    91/132

    int x, y;x = y = 2; /* el 2 se asigna primero a la y y luego a la x */

    Con el operador =, el significado de la asignacin es dar el valorde la expresin de la parte derecha a la variable que se encuentra

    =

    Ejemplo:

    , ,a = 5;b = 4 + a;c = a - ;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    92/132

    --------------------------------- -----------------------------------x *= y; x = x * y;

    x %= y; x = x % y;x += y; x = x + y;x -= y; x = x - y;x > y;

    x &= y; x = x & y;x ^= y; x = x ^ y;x |= y; x = x | y;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    93/132

    tipo nombre_variable = expresin;

    Ejemplo: oa = . ;

    am n se pue en n c a zar var as var a esseparadas por comas en una misma sentencia.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    94/132

    = * * char ch1 = 'a', ch2 = 'b'; /* declaracin e inicializacin

    de ch1 y ch2 */ oa = . , = e ; ec arac n e n c a zac n

    de f1 y f2 */ int x = 3 z /* declaracin de x z inicializacin de

    y */ double d = 1.1 - 2.2; /* declaracin e inicializacin de

    * int a = 1 + 2, b = 4, c; /* declaracin de a, b, c pero

    esta ltima no se inicializa */

    PRECEDENCIA DE OPERADORES

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    95/132

    PRECEDENCIA DE OPERADORES

    -> .! ~ ++ -- - (tipo) * & sizeof* / %

    < >=

    == !=

    ^|

    &&||?= += -= *= /= %= &= ^= |= =

    Menor ,

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    96/132

    =Paso 1: 0 && 8 >= 3

    Paso 2: 0 && 1

    Paso 3: 0

    = =

    Paso 1: a la variable y se le asigna el valor 3

    Paso 2: el valor de la expresin coma es y, o sea, 3

    aso : a a var a e x se e as gna e va orPaso 4: el valor de toda la expresin es x, es decir, 3

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    97/132

    Paso 1: 3 < 3 || 4 + 5 > 2

    Paso 2: 0 || 4 + 5 > 2

    Paso 3: 0 || 9 > 2

    Paso 4: 0 || 1

    Expresin 4: (-3 < !2) >> (~-3)

    aso : - < >> ~-Paso 2: 1 >> (~-3)

    Paso 3: 1 >> 2

    Paso 4: 0

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    98/132

    x e : -Paso 1: 1 < ((4 - 1) / !3)

    Paso 2: 1 < ( 3 / !3)

    Paso 3: 1 < 3 / 0

    Paso 4: Error: Divisin por cero.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    99/132

    y e e e e ecualquier lenguaje estn basadas en

    e . e u ex e

    cuya resolucin da como resultado cierto (true).

    programacin incorporan los valores true y

    true, y el valor cero es false.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    100/132

    e e e uecontrolan el flujo de programa, pues pueden

    e e e e e u e ue ue

    se sigue en el programa. Hay varios tipos de estructuras de control de

    programa, cada una de utilidad en

    determinada situacin:

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    101/132

    ee e e e : yswitch.

    Adems, el operador ? es una posiblealternativa para if en ciertas situaciones.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    102/132

    if (expresin)sentencia

    o

    if (expresin)_

    elsesentencia_2

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    103/132

    Si expresin es cierta se ejecuta la sentencia correspondiente alif. Si expresin es falsa se ejecuta la sentencia correspondiente alelse si lo ha .

    En la segunda sintaxis se ejecuta sentencia_1 o sentencia_2,

    pero nunca ambas.

    EJEMPLOSif (contador < 50) if (x < y) if (ch == '\n')

    ++ =else #_de_lineas++;z = y; #_de_caracteres++;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    104/132

    1) Lo siguiente es incorrecto:if (expresin)

    {

    sentencias;

    else

    puesto que entre el if y el else slo puede haber unasentencia y aqu hay dos: { } y ;.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    105/132

    ,pueden anidar:/* a la variable numero_menor se le asigna la

    * , ,if (x

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    106/132

    .siguientes ejemplos son distintos:

    /* E em lo 1: */ /* E em lo 2: */

    if (n > 0) if (n > 0)

    if (a > b) {

    z = a; if (a > b)

    else z = a;

    z = b; }else

    (z puede no tomar valor) z = b; // siempre lo toma

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    107/132

    - - .Tiene la forma siguiente:

    if (expresin_1) /* Ejemplo: numero_menor

    sen enc a_ oma e va or e a var a e

    else if (expresin_2) menor entre x, y, z */

    sentencia_2 if (x

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    108/132

    -else.

    /* Ejemplo 1 con if-else */ /* Ejemplo 1 con ?: */

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    109/132

    SINTAXISswitch (expresin){

    case ex resin constante 1:_ _sentencias_1

    break;case expresin_constante_2:sentencias_2break;

    case expresin_constante_3:

    sentencias_3break;default:

    sen enc as_n}

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    110/132

    En muchas ocasiones es ms elegante utilizar la sentencia switchque la escala if-else-if.

    Una expresin constante es una expresin en la que todos los

    operandos son constantes. .

    las expresiones constantes hasta que encuentra una que coincidacon expresin. Cuando la encuentra ejecuta las sentencias

    correspon en es a ese case. no ay n nguna expres n caseque coincida con expresin, se ejecuta las sentenciascorrespondientes al default.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    111/132

    1) La sentencia default es opcional. Si fallan todas lascomprobaciones de los case y no hay default, no se ejecuta

    .cualquier posicin y no obligatoriamente al final.

    2) La sentencia switch se diferencia de la escala if-else-if en dos

    A) En la sentencia switch slo se puede comprobar la igualdad entrelas expresiones constantes y expresin.

    B) Las expresiones de los case han de ser constantes.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    112/132

    EJEMPLO

    switch (operando){case 1:

    x *= y;break;

    case 2:x = y;break;

    case 3:

    break;default:

    " "-}

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    113/132

    opcionales. El break hace que se produzca.

    Si no hay una sentencia break en un case, ale ecutarse las sentencias ue corres onden aese case, tambin se ejecutaran lassentencias correspondientes al siguiente case

    y as sucesivamente hasta encontrar un breako llegar al final del switch.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    114/132

    4 Asociado a cada case uede haber nin una una o varias sentencias.case 1: /* case sin sentencias directas*/case 2: /* case con dos sentencias */

    ++x;break;

    case 3:x++;break;y++;/*est sentencia nunca se ejecuta*/

    case 4: /* case con tres sentencias */

    x++;y++;break;

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    115/132

    u e e e e v e eque un conjunto de instrucciones seae e u ue e e u e

    condicin.

    Las sentencias iterativas son: while, for y do.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    116/132

    while (expresin)

    sen enc a

    DESCRIPCION e eva a expres n. es c er a, se e ecu a sen enc a

    y se vuelve a evaluar expresin. El ciclo contina,

    ejecucin contina con lo que est despus desentencia.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    117/132

    EJEMPLOS

    /* /* /*el bucle termina imprime los cinco pri- al ; del while nocuando encuentra meros nmeros naturales se llega nunca yaun carcter distin- */ que el bucle noto de blanco en i = 1; hace ningunavector s while (i

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    118/132

    for (expresin_1; expresin_2; expresin_3)

    En la sentencia for, a la expresin_1 se le llama

    n c a zac n, a a expres n_ se e amacondicin, y a la expresin_3 se le llama.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    119/132

    La forma descrita de la sentencia for es e uivalente a:

    expresin_1

    _

    { La forma de actuar del bucle for se observa

    sentencia claramente en su equivalente del while.

    expresin_3;

    }

    Las tres expresiones de la sentencia for son opcionales, aunque lospuntos y coma siempre deben aparecer. Si no aparece expresin_2 se

    .

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    120/132

    EJEMPLOS

    #include #include void main (void) void main (void){ {printf ("Lista de los 100 primeros" int i, s;

    "nmeros naturales:\n); for (s = 0, i = 1; i < 100; i++)int x; s += i;for (x = 1; x

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    121/132

    , , ,es una expresin formada por el operador coma,cuyos operandos son expresiones de asignacin.

    OBSERVACIONLa instruccin:

    for (;;)

    sen enc aes un bucle infinito.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    122/132

    do

    while (expresin);

    DESCRIPCION

    En la instruccin do, primero se ejecuta sentencia y acontinuacin se evala expresin. En caso de ser

    c er a, se e ecu a sen enc a e nuevo y assucesivamente. La iteracin termina cuando laex resin se convierte en falsa.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    123/132

    /* imprime los 50 primerosnmeros naturales */

    .void main (void)

    {n = ;do{

    printf ("%d ", i++);} while (i

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    124/132

    tratarse de una sola sentencia; pero en el caso de lasentencia do, se recomienda que siempre se pongan

    lector, no para el compilador). Observe el mismo

    ejemplo sin llaves:= ;

    do" ",

    while (i

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    125/132

    while (expresin)

    sen enc a

    DESCRIPCION e eva a expres n. es c er a, se e ecu a sen enc a

    y se vuelve a evaluar expresin. El ciclo contina,

    ejecucin contina con lo que est despus desentencia.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    126/132

    EJEMPLOS

    /* /* /*el bucle termina imprime los cinco pri- al ; del while nocuando encuentra meros nmeros naturales se llega nunca yaun carcter dis- */ que el bucle noto de blanco en i = 1; nace ninguna

    vector s while (i

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    127/132

    break;

    Descripcin

    Esta sentencia provoca la salida inmediata de las, , . ,slo es correcto dentro de un bloque de una estassentencias.

    Observacin

    ciclo (o switch) ms interior.

    SENTENCIA BREAK

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    128/132

    for (i = 0; i < 10; i++)

    =

    if (j == 5)

    break

    La ejecucin de la sentencia break provoca una salida

    del bucle for de la variable j, pero no tiene ningn efectosobre el bucle for de la variable i.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    129/132

    continue;

    Descripcin

    similar a break. En vez de forzar la terminacin,continue fuerza una nueva iteracin del bucle salta

    cualquier cdigo que exista entre medias.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    130/132

    E em lo/*este bucle imprime todos los nmeros nonegativos del vector vector_de_numeros

    */

    {numero = vector de numeros i_ _

    if (numero < 0)continue;

    printf ("%d ", vector_de_numeros [i]);}

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    131/132

    n os c c os w e y o-w e, una sen enc a

    continue da lugar a que el control pase

    prosiga el proceso del bucle. En el caso de un,

    bucle, a continuacin se ejecuta la evaluacinde condicin, finalmente el bucle rosi ue.

  • 5/28/2018 Clase 1 y 2 Lenguaje c

    132/132

    u - e . Ejercicios resueltos y propuestos de estos

    captulos.

    Realizar los ejercicios vistos en clases ycomprobar las observaciones hechas a lo largode la misma.