You are on page 1of 21
Contenido 9.1, Caracteristicas del-lenguaje C. 9.2. Tipos de datos. 9.3. Ident dores. 9.4. Definicion de las variables. 9.5, Modificadores de acceso. 9.6. Tipos de datos basicos. 9.7. Operadores. 9.8. Orden de pri 9.9, Expresiones. Objetives 2S Conocer la evolucién y caracteristicas del lenguaje C. 2S Conocer la clasificacién de las datos en ef lenguaje C. 2S Utilizar los diversos tipas de datos bdsicos. 2S Usar los operadores conociendo su orden de prioridad. X Conocer las distintas conversiones en el uso de expresiones. 9.1, Caracteristicas del lenguaje C El lenguaje de programacién C ha sido utilizado para cl desarrollo de infinidad de herremientas de trabajo (Gistemas operatives, compiladores, procesadores de texto, bases de datos, etc.), Mientras que otros lenguajes de programacién se caracterizan por ser utilizados en areas més concretas como, por ejemplo, Fortran para el célculo cientifico, Pascal como soporte para Ia ensefian- za, COBOL para gestién, etc. El lenguaje C, se caracte- riza por no tener ninguna connotacién sectorial; dicho de otra forma, es un lenguaje de propésito general. La ventaja mis destacable es la transportabilidad 0 portabilidad, es decir, la posibilidad de utilizarlo tanto en macroordenadores como en mini y microordenado- res, lo que le sita entre uno de los lenguajes més porta- bles. tra caracteristica estrechamente relacionada con la anteriores la compatibilidad, que se da cuando el cédi- go escrito para una maquina concreta es facilmente transferible a otro compilador y otra maquina, tras caracteristicas que se pueden destacar son las siguientes: © Es un lenguaje muy flexible. © Muy apropiado para controlar rutinas hechas en ‘ensamblador. © Permite generar programas de fiell modificacién. © Lenguaje predominante bajo cualquier méquina UNIX. © Muy veloz y potente, lo que permite la creacién de un software efectivo. © Posibilita una programacién estructurada o modular. © Produce programas de e6digo compacto y efi- lente, © Aunque es considerado como tun lenguaje de alto, nivel, mantiene muchas de las caracteristicas de los lenguajes de bajo nivel, por lo que puede ser clasificado como un lenguaje de nivel bajo-medio. © Es.un lenguaje compilado, © El cédigo fuente se escribe mayoritariamente en mindsculas. ‘Algunas de las desventajas més destacadas son: © No dispone de un editor propio para escribir los programas fuentes, aunque es posible el uso de ‘cualquier editor (por ejemplo, el EDIT del anti sistema operativo MS-DOS), siempre y cuando genere un fichero en formato ASCII. © Aunque no es una desventaja propia del Lenguaje C, si no de cualquier lenguaje compilado, las modificaciones sencillas requieren més tiempo en conseguir el fichero ejecutable que el empleadoen _y un Ienguaje interpretado. © La modularidad en C tiende a incrementar el tiem- po de compilacién, © Poco legible y eminentemente criptico, lo que da origen a un cddigo poco entendible sin la ayuda de comentarios o una informacién referente al mismo. La falta de dicha ayuda puede constituir una dificultad a la hora de realizar futuras modifi- caciones o actualizaciones sobre un cédigo que fue disefiado por diferentes programadores. 9.2. Tipos de datos ‘Los tipos de datos que se contemplan en el lenguaje C son los siguientes: entero ho | Numbsicos Real Simple precision fost = Doble precsion’ double cake nar Vas ie Compjos Dinsmicos structure Union Emumercion Camoos de bi caer ran — Los datos bisicos se contemplan en este capitulo, mientras que los datos derivados, las tablas, los datos maint) ‘ int Contador, Mum15025; © Suma_Totai=0) Ane Resul_totaly for(_Contador=1; _Contador Tip. ‘Nombre variable; Ejemplo: static long int cantidad; En una senténcia de definicién es obligatorio expre- sar el nombre de la variable y el tipo de dato, mientras que la clase de almacenamiento y el modificador de tipo son opcionales. © Clase de almacenamiento: Especifica la forma en que se almacenaré la variable, Existen cuatro especificadores para determinar la clase de alma- cenamiento: aulo, extern, static y register. Pot defecto, si no se especifica la clase de almacena- ‘miento se considera auto (variable local). Cuando se estudien préximamente las funciones en C, se veréin con detalle las clases de almacenamiento. © Modificador de tipo: Cambia el significado de un tipo bisico, afectando esencialmente al signo y al tamatio reservado en memoria (rango de represen- tacién) para dicha variable. Existen cuatro modifi- adores de tipo: signed, unsigned, short y long. Por defecto, si no se especifica un modificador de tipo, se considera signed (con signo). Cuando se cexplique en este capitulo cada tipo de dato basico, se estudiardn con detalle los modificadores de tipo para cada uno de ellos. © Tipo de dato: Es uno de los tipos de datos basicos vistos en el punto 9.2: int, float, double, char y void. © Nombre de Ia variable: Es un identificador ajus- tado a las normas especificadas anteriormente, y debe ser lo mis significativo posible de acuerdo cote contenido de la propia variable. En una sentencia de definicién se puede definit mis de una variable en forma de lista, separadas por comas, con Ia condicién de que todas las variables sean del mismo tipo. Ejemplo: Ejemplo: tne Smporte, sums, total, media: | Jotal_importeiconst int mum); Las variables pueden ser inicializadas, lo que signifi- ‘ca que puede asignarse un valor en el momento de su Modificador ‘volatile’ definicion. Ejemplo: int porcentase = 07 Float precio = 250.5, total; char letra, carac = A‘: Hay que distinguir entre la definicién de una variable y la declaraci6n de la misma. Se entiende por definicién la sentencia que reserva suficiente espacio en memoria para la variable, mientras que la declaracién es una sen- fencia que avisa al compilador que la variable ya esté definida en otro lugar del programa. 9.5. Modificadores de acceso Los modificadores de acceso pueden preceder a la definicién de una variable y son dos, const y volatile. Se utilizan para controlar la forma en que se modifican las, variables. Modificador ‘const’ Especifica que el valor de una variable no puede ser modificado en la ejecucién de un programa. Por tanto, ‘actia como una constante, pero tiene Ia ventaja de tener reservado un espacio en memoria, lo cual permite su empleo en miiltiples sitios del programa mediante su ‘dentificador. El valor de una variable con modificador const se obtiene normalmente mediante la inicializacion de la misma, Ejemplo: Si se quiere modificar el valor hay que modificar el programa fuente y volver a definir la variable, inicia- lizéndola con el nuevo valor. Se puede utilizar const en los parimetros de una fun- cin para indicar que los valores de dichos parimetros no pueden ser modificados en la funcién. Indica al compilador que el valor de una variable puede ser modificado de forma no especificada en el programa. Esto puede suceder cuando la direccién de memoria de una variable ¢s peseda a rutinas del sistema que pueden modificarla, El compilador suprime para este tipo de variables las posibles optimizaciones que se puedan realizar. Ejemplo: Cee ee [ volatile float date, Se pueden utilizar a la vez los dos modificadores de acceso. Ejemplo: ne f const volatile float data; 9.6. Tipos de datos basicos Los tipos de datos basicos en el lenguaje C son: Entero. Real de simple precision... Real de doble precisién, CT acto (sin valor), 9.6.1, Tipo de dato entero Se define con la palabra clave int y se utiliza para representar mimeros enteros con signo. El rango de representacién para este tipo de dato depende del tamaio de la palabra del procesador de la méquina donde se va a ejecutar el programa, asi como del modi- ficador empleado. © Para procesadores de 16 bits el rango es: de -32768 a 32767. © Para procesadores de 32 bits el rango es: de -2147483648 a 2147483647. 1) Definicin de variables Formato: SITES Pananinro 119 Concepts del lenguje Cy ip Ejemplo: i int mum, conmutader, inéicador a a ease vege gh re Sp b) Empleo de constantes Las constantes int estén constituidas por una serie de digitos precedidos 0 no por un signo + 0 un signo -. Si Ja constante es positiva no es obligatorio el signo +, pues, por defecto se {a considera positiva. Si la constante es negativa es obligatorio poner el simbolo — (menos). Normalmente los digitos se expresan en el sistema de ‘umeracién decimal, pero se pueden expresar utilizando el sistema de numeracién octal y el sistema hexadeci mat, Para expresar una constante en octal se debe utili zar como primer digito un cero. Para expresar tna cons- tante en hexadecimal se deben preceder los digitos y letras representativos de la cantidad correspondiente con un cero y una equis mayliscula 0 miniscula. Ejemplo a Sistema de numeracién decimal: -52, 3508 Sistema de numeracién octal: -063, 0465 Sistema de numeracién hexadecimal: -oxia, 0x24 | Para el tipo de dato int se pueden usar los siguientes ‘modificadores short long signed ‘unsigned Modificador ‘short’ Se emplea para la representacién de nfimeros enteros ‘pequeiios con signo, y puede ocupar menos espacio de ‘memoria que un int. Su rango de representacién es de - 32768 a 32767, por lo que en procesadores de 16 bits su tamafio y rango coinciden con int, mientras que en proce- sadores de 32 bits su. tamafto en memoria es de 2 bytes. 8) Definicién de variables Formato: short int Lista_variables; short Lista_variables; —/* Las dos son validas y equivalentes */ ) Empleo de constantes No existen constantes de tipo short int, pues explici- tamente las constantes son de tipo int 120 © ITES-Panasnro Modificador ‘long’ Se emplea para nimeros enteros més grandes de lo permitido por un int, y puede ocupar més espacio de memoria. Su rango de valores es de -2147483648 a 2147483647, por lo que en procesadores de 16 bits el rango de representacién y el tamatio aumentan en rela- cin con un int, mientras que en procesadores de 32 bits el rango y tamafio son iguales que un int. a) Deftnicién de variables Formato: Jong int Lista_variables; ] Tong Lista variables; _/* Las dos son vilidas y . equivalentes */ | Ejemplo: long int ab: tease. 4 b) Empleo de constantes Si se quiere especificar que una constante enters es de tipo long, cuando su valor esté dentro del rango de un int, se le debe posponer la letra ele maytiscula o minis- cula (es preferible emplear ‘L’, pues si se emplea ‘I’ se puede confundir con algiin digito). Ejemplo: | -asan, 92p, 32270518 | Modificador ‘signed! i Se emplea para nlimeros enteros con signo, siendo el ‘modificador de tipo por defecto para el tipo de dato int, por lo que no se usa normalmente. Ejemplo: ‘signed ant a, br int c, 6: Modificador ‘unsigned’ Se emplea para mimeros enteros sin signo, por lo que al eliminar el signo se gana un bit aumentando el rango de valores de 0 a 65535 en procesadores de 16 bits y de (0.4 4294967295 en procesadores de 32 bits 4) Definicién de variables Formato: ‘unsigned int Lista_variables; unsigned Lista variables, /* Las dos son validas y equivalentes */ Ejemplo: unsigned int unsigned c, 4; ) Empleo de constantes Se puede especificar que una constante es de tipo unsigned posponiéndote la letra “U Ej plo: es] J an Se puede combinar el modificador unsigned con los modificadores short y ong, siendo el més empleado el unsigned long que permite el maximo rango de repre- sentacion para un niimero entero sin signé (de 0 a 4294967295). Ejemplo: wasigred chart precio: long cantidads Long mayor aun = 4294967285; 1b) Empleo de constantes Se emplean dos notaciones: 1. Notacin decimal: La representacién de cantida- des segin esta notacién se realiza siguiendo el siguiente formato: ParteEntera.ParteDecimal Ejemplo: 2 — 1.025, 2673.85 Notacién clentifica 0 exponencial: Para més infor- macién ver “Representacién de mimeros reales” ~ Capitulo 2. Ejemplo: 24.58-3, 0.7502, -1.052 | Las constantes se consideran de tipo double. Si se quiere especificar una constante de tipo float se le debe posponer la letra ‘F’. ©) Modificadores de tipo En algunos compiladores se tiene el modificador ‘Jong’ para el tipo ‘double’, lo que permite una alta pre- cision. Ejemplo: a | tong aounte recorrige: | 9.6.2. Tipo de dato real Se define con las palabras clave float para punto flo- tante de simple precisién y double para punto flotante de doble precision y se utiliza para representar los niéimeros reales. Su rango de representacién es de 3.4E-38 a 3.4E4+38 para float y de 1.7E-308 a 1.7E+308 para el double. 1) Definicién de variables Formato: float Lista_variables; __/* Para simple precision */ double Lista_variables; | /* Para doble precision */ Ejemplo: ‘Sloat superficie, importer double Eotal, lengizua) 9.6.3. Tipo de dato caracter Se define con la palabra clave char y se utiliza para representar un caricter perteneciente a un determinado cédigo utilizado por el ordenador. Los cédigos mas uti- lizados son el ASCII de 8 bits y el EBCDIC. Interna- ‘mente el tipo de dato char es un niimero entero que se ccorresponde con el cédigo utilizado y que externamente tiene una representacién en forma de cardcter. Puede llevar asociados los modificadores de tipo sig- ned o unsigned para expresar que el valor almacenado es tun nimero entero con signo o sin signo. El rango de valores representables es de -128 a 127 para el signed char (por ejemplo ASCII de 7 bits) y de 0 a 255 para el unsigned char (por ejemplo ASCII de 8 bits). a) Definicién de variables Formato: char Lista_variables; once Ejemplo: enorme b) Empleo de constantes La forma més normal de expresar una constante de tipo char es delimitarla mediante el uso de comillas sim- ples. Ejemplos: ‘Con las constantes de tipo char se pueden realizar operaciones aritméticas pues internamente se opera con los nimeros correspondientes a su cédigo. Ejemplos *C'44" se corresponde con §7+52=119 que es| el cardcter ‘w’ 'C'+ 4 Se corresponde con 67+4=71 que oe el cardcter “G’ En el siguiente ejemplo de programa se pone de manifiesto cémo un cardcter (‘A’) puede ser asignado a tuna variable de tipo char, y c6mo se puede operar con ella Ejemplo: : Hinclude ] aint) c char cl, €2; sca 2 = 65; /* Cardcter ‘A */ printt(*\n $e / €er,el, €2); J cexéecer ‘A! +/ en a Lp Jt equivaiens Ay 7+ oquivaten: Los resultados que se obtendrfan en Ja ejecucién del programa anterior son: arn B/B abcdefghijkimnopgrstuvuxy: Con objeto de poder representar caracteres no impri- mibles, se puede utilizar otra forma de representacién, cuyo formato es el siguiente: “\ddd” 122 OITES-Pananeneo Hay dos formas de emplear esta nomenclatura: 1. Representando el carécter correspondiente en ‘octal (comenzando con 0) 0 en hexadecimal (comenzando con una x). Ejemplos: Octal: ‘\o07" representa un sonido | de campana | Hexadecimal: »\x20' representa el espacio | 2. Utilizando simbolos especiales en las secuencias de escape. Los mas utilizados son los siguientes: pido. retoces0. jn nuevelines ye retarne de carro At tabuledor horizontal coma simple Ejemplo; *\o" representa el nulo 0 cero binario *\t” tabulacion o desplazamiento horizontal Cuando se incluyen los caracteres de escape en una cadena de caracteres, éstos no van encerrados entre comillas simples, Ejemplo: *\a\t ta nueva airecciéa ea: \n* En el siguiente ejemplo de programa se muestran dis- tintas formas de inicializar cuatro variables del mismo tipo (de nombre a, b, ¢ y d) y con el mismo valor (la constante "P"), pero utilizando notaciones distintas. Ejemplo: 9.6.4. Tipo de dato vacio Se define con Ia palabra clave void que significa que 1 dato es nulo, por lo que no ocupa espacio en memoria ¥¥ por tanto su tamafto en bytes es cero. Este tipo de dato no ¢s aplicable a variables que no sean de tipo puntero. Se utiliza principalmente para: 1, Definir un puntero genérico (no se conoce el tipo de dato de la variable que hay que apuntar). 2. Especificar que una funcién no retorna de forma explicita ningiin valor 3. Declarar que una funcién no utiliza pardmetros. plos: ‘Tamafio en bits y rango de representacién de los tipos de datos en plataforma Pe: sired ear a 76h a 32161 Short int is sree fa 32767 tong int 2 2147483688 2147483647 “unsigned int a8 oa 6555) unsinediongint, 22a ens ‘oat 2 eae ‘3,48-38 & 7 .4ESE Z| ele fe 506-6 a.7e308 9.7. Operadores Los operadores en C se pueden clasificar de Ia siguiente forma: © Indicadores de expresién. Asitméticos. Relacionales y ligicos. Para tratamiento de bits Para punteros. Para estructuras. Asignacién. Coma. Tamatio. Molde. Condicional. Los operadores para punteros y para estructuras se tratardn en capitulos posteriores 9.7.1, Operadores indicadores ¥ de expresion Se utilizan para indicar una prioridad o una determi- nada misin en las expresiones. Los operadores son: 8) Paréntesis (), que pueden tener dos significados: 1. Para determinar la maxima prioridad en una expresién, comenzando por los mas internos. Ejemplo Se ee (afte 7 imem? @+e@ 2. Para encerrar los parémetros de una funcién, Ejemplo: Float Inporte(sueldo, éescuento) ja nt eatin int Figura void) b)Corchetes [ ], que sirven para encerrar los indices de las tablas. Ejemplo: ‘enpleade(201; | 9.7.2, Operadores aritméticos Se utilizan para efectuar operaciones aritméticas. Se pueden clasificar en: 8) Operador de signo negative - Se utiliza para indicar el signo menos de un operando numérico, Con este simbolo se puede cambiar de signo ‘una variable, pues equivale a multiplicar por -1. Ejemplo: ) Operador Incremento + Se utiliza para aumentar el valor de su operando en 1. La expresin ++e equivale a c=c+. El operador ++ 123 ITES-Pananiveo puede ir como prefijo ++< 0 como sufijo c++. La dife- Tencia estriba en el momento en que se efectia Ia opera- cin aritmétiea ‘Cuando el operador esté como prefijo, primero se hace el incremento y Iuego se continia con la operacién donde esté incluide el operando. Ejemplo: ren ‘Los valores de las variables quedan como a=6, =5 | ‘Cuando el operador esté como sufi, primero se hace Ja operacién donde esta incluido el operando y a conti- nuacidn se hace el incremento. Ejemplo: beat Los valores de las variables quedan como a=, b=5 | Este operador es muy istil cuando se emplea para el incremento de contadores. ©) El operador decremento ~~ Se utiliza para disminuir el valor de un operando en 1. La operacién —< equivale a c=c-1. Puede ir como pre- fijo o como sufijo, actuando de forma similar al opera- dor ++, 4) Operadores suma + y resta - Se utilizan para realizar la suma o Ia resta entre dos operandos. Ejemplos el ©) Operadores multiplicacién *, divisién | y médulo % El operador * realiza el producto entre dos operandos. Ejemple: —— [oasn | El operador /realiza la divisién obteniendo el cocien- te de la misma. En el lenguaje C no existe ningin sim- bolo para la divisién entera, obteniéndose el cociente de tuna divisién entera cuando los dos operands son valo- res numéricos enteros (en esta division el cociente no se redondea, sino que se trunca). Si un operando es numé- rico real la divisién sera real. © ITES-Pananaveo 124 Ejemplos: sare El resultado es 13 | | sare Elresultado es 13.6 El operador % permite obtener el resto de una division, entera, Por tanto, los dos operandos deben ser enteros. Ejemplo: [ mum 4 2 | Suponiendo que num sea un nimero entero, si mum 5 par el resultado de la operacién sera cero. 1 Prioridad entre operadores aritméticas Orras Spe aes relacionales y légicos Se utilizan para realizar operaciones logicas entre operandos, obteniendo como resultado un valor verda- dero o falso. En el lenguaje C el resultado falso es el valor cero y el resultado verdadero es el valor uno. En ‘un sentido mds amplio, cuando se evaliia una expresién légica, se considera verdadero todo valor que no sea cero. ) Los operadores relacionales son los siguientes de igualdad le asignacién. Noes lo mismo ¢ = 5 {asigna a la variable c el valor 5) que e == 5 (compara econ 5). Ejemplos: b) Los operadores légicos son los siguientes && —Conjuncién,y I Disyurcién 6 1 Regasién, né (Monario! Los operadores conjuncién se y disyuncin | utilizan dos simbolos iguales, y se debe tener la precaucién de no confundirlos con los operadores para tratamiento de bits, que emplean estos simbolos de forma tinica « y |. Tabla de la verdad de los operadores logicos: ios) : Ba=5uu7>3 fo 5>3)]) 2 1 Negacion lbsiex Mayor, Mayor igusl, Menor, Menor o igual Igual, Distinio de as Conjuncién tegica I Disyuncion lécica 9.7.4. Operadores para tratamiento de bits Se utilizan para realizar operaciones a nivel de bit, y los operandos deben ser de tipo char o int. Estos opera dores se clasifican en: « ‘(AND Binario) 1 10 (08 bineri} > TASCIL94) O-exclusivo IXOR bina = (ASCII126)_Complemeanta a ¥ (NOT binaric) 2S Desplazamierto # ls dareche Desplazamiento 3 la iquierda Tabla de verdad de los operadores para el tratamiento de bits. Ejemplos de los operadores &, |, * Los operadores de desplazamiento de bits mueven los bits de un operando hacia la derecha, caso de>>, 0 hacia la izquierda, caso de <<, tantas posiciones como indica ‘otro operando que debe ser un miimero entero. Cada des- plazamiento de un bit a la izquierda realiza una multi- plicacién del operando por 2, y cada desplazamiento a la derecha realiza una divisién del operando por 2. Ejemplo: Hinclude maint) c unsigned char bytei27 unsigned char byte2=55; + bytet & bytes; 7+ ano */ = bytet | byte2) f+ oR */ bytel * byte2; /* x08 */ resultade + ~byte2, (wor +7 3: /* Desplazamiento (de bite a deh. */ emesrammeo 125 La explicacién grifica de este ejemplo seria: vrs aTaL PATE) ans waftfetiniperty sm oon ooo wna ETD seme fb hnnnnny vee GET EEED ee decal Ghonnahty wmaofofitr fof itp ss ot ‘ neamio fafofapofaPoTefop “eee! OL2a eas vote Cof of of tt] of 1) 27 eset <2 bet] i] a] ola] a] ee 9.7.5. Operadores de asignacién Se utilizan para cargar una variable con el valor de tuna expresién. Pueden ser de dos tipos, simple 0 com- puesto. El operador de asignacién simple utiliza el simbolo = indicando que la variable situada a su izquierda se cargari con el valor resultante de la expresién situada a su derecha, Formato: Ejemplo: edie = sua / num El operador de asignacién compuesto utiliza dos simbolos, uno es el de asignacién simple y el otro es un simbolo de operacién, Los simbolos que se pueden utilizar son: + - / & <> e+ | Formato: sveifefoLaET pa Pop rp ap 27 eeine voyet( TP aT a] of of a] of of) 2280 ceca tof wf of ofa [if of rf if 27enasima 0 wen voweoft [aT of of ef of of of caine O12 wwei(oL op of rf Tf of 1] 1))27 ea cesta, 23 ve MER Too Ti) esi 126 ores.rincnre ‘Variable Simbolo_operacién = Expresién; La declaracién equivalente es | Variable Variable Simbolo_operacién Expresi Ejemplo: total /= inporte + 100 equivale 2 total = total / (importe + 100) 9.7.6. Operador coma Se utiliza para separar dos expresiones dentro de una expresién total, evaluandose primero la expresién de la izquierda y convirtiendo la de la derecha en el valor de Ia expresién total. Lo que se realiza en realidad es una secuencia de operaciones, no debiéndose confundir este ‘operador con la coma, que se utiliza para separar los parimetros de una funcién o con la coma que se utiliza para separar las variables en una definicién miltiple, Se emplea esencialmente en dos casos ) Para realizar una asignacién de una expresién, que previamente requiere otra expresién Ejemplo: Equivale a: bes; axbe! as(b5, be2) b) Para realizar varias operaciones dentro de la condi- cién de un bucle. Ejemplo: fee (Ge0, ald; tek: 1) ] Equivalente a: se; foe(ke15; icky #1 9.7.7. Operador de tamafo Se utiliza para obtener la longitud en bytes de una variable o de un especificador de tipo de dato, Emplea la palabra reservada sizeof. Cuando se emplea para un especificador de tipo de dato, éste debe ir entre parénte- sis y cuando se emplea para una veriable, puede ir 0 no con paréntesis, Ejemplos: (* Obtiene 1a lengitud an bytes Gel tipo de dase ‘int! */ 7+ Obtiene 1a iengitud en byte de la variable scant’ */ El empleo del operador sizeof facilita 1a portabilidad sizeof (ine) sizest cant ( Ejemplo: iy Si tenence 1a siguiente estructure: struct datos! | fat um; | chee santéo); tee" shoney Yeoeio: | Con sizeof socio obtenemos Ia longitud en bytes de la variable soci 9.7.8. Operador de molde Se utiliza para convertr el tipo de dato de un operan- do utilizado en una expresién. Se expresa precediendo al coperando con el tipo de dato deseado encerrado entre paréntesis. El tipo de dato del operando no varia en su definicién, tmicamente se convierte para la expresién en, la que se utiliza el moldeado. Formato: (Tipo) Operando Ejemplo: float a = 8.287 B= (int) a/2y El valor de b después de la asigniacién es 4, por haber= se realizado la divisién entera siendo los dos operandos de Ia division del tipo numérico entero (a sigue siendo “float pero en la expresién se toma con el valor entero y la divisién se realiza como entera). 9.7.9. Operador condicional Se utiliza para realizar una operacién.altemativa ‘mediante una condicién. Es un operador ternario, 0 sea, que requiere tres operandos que pueden ser tres expre- Facilita el uso de la variable cant en ordenadores que tengan distinto tamatio para el tipo de dato int. El operador sizeof permite expresar la longitud de una variable compuesta, sin necesidad de sumar las longitu- des de cada uno de sus components, fucilitando asi la portabilidad. . del cédigo a otros ordenadores. siones, Se emplean los simbolos 2 y + Ejemplo: Formato: Teles teapleady male aieiesrtoc, Expresionl ? Expresin? : Expresiin3; | La operacién se realiza de la siguiente forma: Se evalia la Expresiénl, si el resultado es verdadero se evalia la Bxpresidn2 y su resultado se toma como resultado de Ia expresién total, por el contrario si el resultado de la Expresidn/ es falso, se toma el resultado de la Expresién3 como resultado de la expresién total. © ES Peraninro 127 Ejemplo: Se trata de asignar a resut el mayor valor entre 2 0 b. eed) par: Su equivalente mediante una sentencia condicional es sf a>) rel = a) resul = b: 9.8. Orden de prioridad de los operadores Como resumen, vamos a ver una tabla que refleja todos los operadores, donde se establece su prioridad 0 precedencia de mayor a menor, asi como su asociati dad 0 comienzo de uso en el caso de estar con el mismo nivel de prioridad. 0 Parértesisy lamada afuncion Inquire n Subiedice de tabla Soroeh Miembro de estructura, Punto > Miombra de eetuctura. Fiche ' ‘no’ lieo Decechs 8 = Gomplerento @ une iaquierde Signe menoe ‘ + Increments = DSecrementa Ineiveclon para punteros Direesign do una varabie Made Taroho Maiptcacibn leauierds © Statin derechs Mécvie sume lequlerde 6 Rests drach Dosplazamionts leauierda 8 esplazamianto af as ‘Sorecha, Mencr que leauierde & Mensro igual que sorects Mayor us Mayor 9 igual que (gual Iraulerde 6 Sistine do dorecha '¥.anivel de bi leauierds 3 ‘erecta a ‘o excusivo& nivel de bt leauiorda 3 sdorecha 1 ‘e'anivel debit leauiords 9 derecha ae ¥ lesico Teavierdo serechs 1 “e'iégieo Iaguierde ss sderacha 2 Condicionsl Dereche = inguierde Asignacién Dereche = lequerda See come lequierde © dereche OITES Pananaro 128 2. 9, Expresiones Las expresiones son un conjunto de operandos (cons- tantes, variables y valores retornados por funciones) y de operadores. Después de efectuar en la expresin las ‘operaciones indicadas por los operadores se obtiene un determinado valor que se corresponderé con uno de los tipos basicos de los datos en C. Se debe tener en cuenta el orden de prioridad y la asociatividad de los operado- Tes para obtener un correcto resultado de la expresién, recordando que los paréntesis tienen la maxima priori- dad empezando por los mis interns. Ejemplos: (@+2/0-949+9/5 v5 tve2 10+ Cuadis) ee 7+ sireot 25 aes (+6) 28R5==5 1a es Sa2==4 a c : (10> 5ae9<=7)|/B> 15 Conversiones de tipo en las expresiones Se pueden considerar dos clases de conversiones: 8) Conversién de tipo en la evaluacin de una expresién Se aplican unas normas de promocién del tipo de dato cuando ge relaciona con otro tipo de dato de mayor nivel, teniendo en cuenta que es una promocién tempo- ral, de forma que se mantiene el tipo de dato con el que se ha definido la variable, Las reglas de conversin son las siguientes: © Si existe un molde de tipo para un determinado operand, éste se convierte en el tipo de dato espe- cificado por el operador. Ejemplo: Float sora, Gat) som / (Gat) nun El resultado es e! cociente de una divisién entera, pues al evaluar la expresién se toman los dos ‘miimeros como enteros, © Se realiza una conversién automética para los tipos de datos float que se convierten en double y para los tipos de datos char y short int que se con- ‘Vierten en in Ejemplos: Host > floct © | Se convierten autométicamente en: double 2 + double b | | char @ + short b | Se convierten autométicamente en: int a + ine» | © Para los dems tipos de datos se realiza la promo- cién siguiente: 1. Si un operando es long double, el otro se con- vierte en long double. 2. Si un operando es double, el otro se convierte en double. 3. Si un operando es long, el otro operando se convierte en long. 4. Si un operando es unsigned, el otto operando se converte en wisigned. 5. En los dems casos se convierte a int, Ejemplo: Especificar el tipo de dato resultante, suponiendo los siguientes tipos de datos: entero; cng largo: Moat real; double doble; (cn eto) +) leer = (Ino eter) + dole et) int ‘a tong oui fowl al | b) Comversién de tipo en las asignaciones v La norma que se sigue es que el resultado de Ia eva- luacién de la expresiOn situada a la dereche de la asig- nacién se convierte al tipo de la variable situada a la izquierda de la misma. Puede existir por tanto promo- cidn (no se pierde el valor de la expresién) o pérdida de rango (pueden existirtransformaciones que produzcan pérdida de informacién), En el cuadro siguiente se pueden ver las posibilidades cexistentes para plataforma Pc (se tiene en cuenta que el tipo char esta implementado como unsigned char por efecto). ‘Signed char char —_Sivalor > 127 el destino es negatvo char ‘short int Mayor de 8 bits. chor it Mayor de bs “char ng int_—_ Mayor de2A bs ‘shonin: int__ No hay psa (coinciden en tama). shortine Tong nt Mayor de 16 bits int. “Tong int Mayor de 16 bits int feat Par ecronaavposibiements més ost couble Pci. Rodan resto Aina long double _Precisin. Redondea estado Ejemploy: Promocién de la expresié float = 395: | int b= oy | | doubts a de informacié char ¢ = 650; int £'= 520745; See g = 75.45) | ‘lost B= 1.502-62) emeseammeo 129 Estructura de un programa en C ~ — Iniodluccién En este capitulo estudiaremos la sintaxis de las estructuras basicas de control, ¢s decir, estructuras secuenciales, estructuras condicionales 0 alternativas (if, if- else, if..else-if, switch) y estructuras repetitivas (while, do-while, for). Seguida- ‘mente veremos dos sentencias que offecen al lenguaje C cierta potencia y versa- © tilidad, como son break y continue. a Finalmente estudiaremos el uso de la sentencia goto como instruccién de auxi- “| tio, ya que nunca debemos utilizarla en una programacién estructurada. d Contenido 10.1. Tipos de instrucefones. Q 10.2. Estructuras de control. 4 10.3. Sentencia break. 10.4, Sentencia continue. 10.3. Sentencia goto. S Conocer y utilizar correctamente los distintos tipos de instrucciones en la traduccién de algoritmos segiin la sintaxis del propio lengua. ‘ S Conocer el formato y sintaxis de las estructuras utilizadas para controlar a ejecucién de determinados bloques de sentencias. 2S Conocer las funciones del preprocesador. 10.1, Tipos de instrucciones 10.1.1, Instrucciones de definicién Este tipo de instruceiones se utilizan para informar al procesador del espacio que debe reservar en memoria para almacenar un dato simple o estructurado, teniendo siempre presente que todas las variables, sean del tipo que sean, deberin ser definidas antes de ser uilizadas 0 referenciadas. La definicién consiste en enunciar el nombre de 1a variable, asociarle un tipo y opcionalmente, darle un valor inicial. ‘Los pasos necesarios para definir una variable simple son: a) Seleccionar el tipo de dato necesario. b) Seleccionar el nombre para la variable, procuran- ‘do que sea siempre lo mas significativo posible de acuerdo con el contenido de ta misma, ©) Utilizar el siguiente formato para construir la ins- truccién de definicién correspondiente, donde es opcional. [sitar ie a menses | La eee See eed @) Se puede definir mAs de una variable del mismo tipo en la misma sentencia o instrueci6n, separiin- dolas por comas. ©) Opcionalmente, se pueden inicializar las variables cen las instrucciones de definicién. “oder 4 > Te Rs Nombre vrais
; ie esl En el caso de definir més de una variable del mismo tipo @ las que opcionalmente sc les desea dar un valor inicial (a todas o alguna de ellas), es. necesario utilizar el siguiente formato de defini- cién: “Mader > Tp be Neel, Nar 124 ©rTes- pans Ejemplos: int horas, minutos, segundos: cha letra = "3" floar x, | Sot edad Sot a= 21, b= 33, e char sini = ‘¥/, simb2; Aouble Balance, bene! 10.1.2. Instrucciones de asignacién Es el hecho 0 suceso a través del cual podemos cal- cular el resultado de una expresi6n de mayor 0 menor complejidad y almacenar el valor simple obtenido en una variable. El operador de asignaci6n utilizado en el lenguaje de programacién C es el signo igual (=) El formato de una instruccién de asignacién es el siguiente: Nombre_variable = Expresion; | (ee ee a | donde el tipo de la variable utilizada y el tipo del valor obtenido al efectuar el célculo de Ia expresién deben coincidir, ya que el resultado obtenido en la parte dere- ccha de Ia instruccién es almacenado en la variable espe- cificada en Ia parte izquierda de la misma, Ejemplos: 10.1.3. Instrucciones de entrada/salida Son aquellas instrucciones que permiten introducir, datos desde un periférico a 1a memoria del ordenador y viceversa ‘Todo este conjunto de herramientas se encuentra en la libreria estandar“stdio.h’, abreviatura de “STanDar Input ‘Output Header” (fichero de cabecera estindar de entra- da/salida de datos), que es aquélla que va a proporcionar, ‘mediante funciones, acceso a las vias normales de entrada salida de los distintos dispositivos o periféricos conecta- {dos a nuestro ordenador. Por ello es imprescindible acos- tumbrarse a incluir en todos nuestros programas la libreria “sidio.h", pues gracias a ella podemos crear programas con una entrada/salida portable. Cuando se ejecuta un programa en C, se abren sutométicamente y de forma simulténea cinco vias de acceso estindar, asociadas cada una de ellas a un dispo- sitivo o periférico. Via de acceso Perlérco arociado Len] 734 com Eada estindar de datos tecedo) Salis exer de dots pana ‘Sale estinder de errores (pera) Intra sera de comunicaconesestndar(RS-2820) Said estindar do datos (moresors) Funciones de entrada (teclado) int getchar(void); Se caracteriza por guardar en un buffer todos aquellos caracteres introducidos a través del dispositivo esténdar de entrada (stdin) hasta la pulsacién de la tecla INTRO. © hasta alcanzar un nimero maximo de caracteres, que varia en funcién de la implementacién del lenguaje. El cardcter es leido como unsigned char y, convertido autométicamente a int. En el caso de alcanzar el cardc- ter de fin de fichero o producirse un error, la funcién devuelve EOF (End Of File). Macro definida con valor 1 en la libreria “stdio.h”. Ejemplo: | dinctue | maiac c [> tne Walle (getchar()1='\n") printf(‘La lines tiene #4 caracteres.\n",<]; Se caracteriza por leer cualquier tipo de dato del dis- positive estindar de entrada, convirtiéndolos autométi- camente en el formato interno apropiado, donde forma- to, apunta a una cadena de control constituida por tres tipos de caracteres: a) Especificadores de formato para la entrada de datos, que nos indican el tipo de dato que se deberd leer. Les iun nimero aaars decimal Lee un fhumero octal. b) Caracteres de espacio en blanco. ©) Caracteres que no sean espacios en blanco. La cadena de control apuntada por formato se lee de izquierda a derecha asociando cada cédigo de forma- to con el correspondiente argumento en Ia lista de argumentos siguiendo el mismo orden de izquierda a derecha. Te ciation. tps wounbtadaforwaciow Ejemplol: Pee anapereotnet El siguiente programa muestra la versatilidad y flexi- bilidad de la funcién scanf{), que puede ser utilizada para leer cualquier tipo de dato del dispositivo estindar de entrada (teclado).. Ant edad, fecha ace, char nombre(2517 = Introduce tu edad: *) Seant(-ha", edad); Site ("Introduce e2 alo actual (200); *) Beant (*ka",a#echa_act!; Puts ("= Introduce tu sombre: *); Scant (-te" ,nowbra) : Print ("Ss, naciete en 44.\n",norbre, fecha act~edad) + Entrada de datos: cans. ©" rnezoduce €1 ato actual (200_) 2001 Pedro Salida de resultados: nombre: naciste en 1971 © ITES-Pananaro 135 Enel supuesto de leer varios valores numéricos con la misma funcién scanf(), éstos deberdn introducirse a través del dispositivo esténdar de entrada separados por espacios en blanco, tabuladores o saltos de linea. En aquellos casos en los que la cadena de control, apuntada por formato, esté constituida por caracteres ‘que no sean espacios en blanco o especificadores de formato para la entrada de datos, se pueden dar las siguientes posibitidades @)La funcién scanf() utiliza el caricter especificado para detectar y descartar dicho carécter de la secuen- cia de entrada, Por ejemplo, “%d:%d", hace que scanf() lea un valor numérico entero, seguidamente lea y descarte los dos puntos y a contimuacién vuelva a leer un segundo valor numérico entero €) Si se especifica un asterisco (*) entre el simbolo de % y el cédigo de formato, scant) lee el dato del tipo especificado pero no lo asigna. Por ejemplo la entra- da 8+2 con: seanf(“%d %*e %d”, &sumi, &sum2); almacena el valor 8 en ‘sum!’, seguidamente lee y desearta el signo de suma y a continuacién coloca el valor 2 en ‘sum2’, Ejemplo; Hnclude Entrada de datos: Introduce tres numeros: as 305 212 Salida de resultados: EL niimero lefdo ee: 1212 Ejemplo3: ‘Winclude { char cr print#(*2Qué afirmacién es 1a correcta? \a‘l; | ‘@) El orangutan ee ua gran meno | de Sunatre y Borneo.\a"); | ) Bl orangutdén es un anfibic. \n*) | ©) Zi orangutan es un mono conin del norte de Airica.\n*); | | peinte(* Beinté(* printf (*zopeién?sia'l? Seant(st{abele*. ac}; /* equivalente a Seant(veta-cler, ae); “7 switch (e) Deineé(*Tu respuesta es correcta. \n"); bresies case “> Brine (‘Tu reequesta es incorrecte.\n") deteute: Prince (sta opeié: existe. \n"): 1 mntrada de datos: {Qué atimmacién es 1a correcta? ‘2) EL orangutdn ee un gran mono de Sunatra y Bornes ») HL orengucéa ex un anfibic. ¢) EL orangutdn = un mono comin cel nerte Ge Africa. iepeién? Salida de resultados: turespuesta es incorrecta, Funciones de salida (Pantalla) int putchar(int ch); La iiltima posibilidad es la de definir un conjunto de caracteres que serian los aceptados en la secuencia de entrada y almacenados en un array de caracteres, de ‘manera que la primera forma consistiria en definir los caracteres que se van a leer entre corchetes, por ejem- plo, *%[ABCDE]"” y la segunda forma seria especifi- cando un rango de valores, por ejemplo “%[A-B]” En ambos casos; cuando se introduce un cardcter que no corresponde con ninguno de los especificados, scanf{) finaliza ta secuencia de entrada aftadiendo el cardcter mulo a le cadena y pasando al siguiente campo. 136 CITES Parannro Escribe el caricter especificado como argumento en el dispositivo estindar de salida en la posicién en la que se encuentra actualmente el cursor. El argumento que debe recibir la funcién putchar() estd definido en la Libreria “stdio.h” como un entero, aunque se pueden uti- lizar variables de tipo cardicter como argumentos y que son convertidas a enteros en el momento de realizar la Mamada a la funcién, Sila llamada a la fumeién putchar() se ejecuta correc- tamente, ésta devuelve el carécter ch y, en caso de que se produizca un error, devuelve FOF (End Of File). * ¢ Ejemplot: Ejemplo: Pnclude Ejemplo2: El siguiente ejemplo es equivalente al anterior, pero en este caso se puede comprobar que es una solucién més compacta. [Hinetuae | i) c while (putchar(getenar() , | pe Hass Pane Le Intprin {const char “formate tte de argumentos); “Et nimero de caracteres escrtos 0 EOF ee ura ao ee eda Envia una serie de argumentos especificados en lista de argumentos al dispositivo estindar de salida, que son controlados mediante los formatos de impresién especi- ficados en la cadena formato, Las tinicas reglas que debemos tener en cuenta en el ‘momento de invocar la funcién printf) son: 8) Que e] formato de impresién Coincida con el tipo de dato que queremos imprimir o sea equivalente siguiendo las reglas de conversién de tipos. b) Que el niimero de formatos de impresién sea el mismo que el mimero de argumentos especifica- dos en lista de argumentos. e)Respetar siempre el orden de aparicién de los for- matos de impresién y los respectivos valores a imprimir (siempre de izquierda a derecha). | printf(n.%formato..26formato?...%eformatoN..”, valor, valor2;~, valor EL siguiente ejemplo mostrarfa en pantalla los dos siguientes mensajes: *y en 5 segundos se hizo Ja luz” “BI reloj me costé 16.000 pts." CE(taL de me coats 18ddc000 8e.\2", Se & eeseta yy | Esta funcién se caracteriza por la enorme flexibilidad ala hora de mostrar informacién en pantalla, ya que per- mite la impresién de constantes, variables, cadenas de caracteres, resultados de expresiones, etc. Si todo fue correctamente en la ejecucién de Ia fun- cidn, ésta deyuelve el nimero exacto de caracteres que hhan sido escritos en el dispositivo estindar de salida. En caso de ocurrir un error, la funcién devolveria EOF. Jmprime enveros deci | (unsigned int. ‘Los formatos de impresién disponen de modificado- res que permiten especificar la longitud del campo, el mimero de decimales y la justificacién a derecha 0 iaquierda de la informacién que deseamos mostrar en pantalla, Dichos modificadores pueden, por tanto, ser dofinidos como apéndices que unidos a los formatos de impresiOn nos permiten dar el formato deseado a la informacion presentada en pantalla. omes:ananeo 137 syaay\nt 348) Brant é(*/424/\n*, 248) peinte(=/¥6a/\n Beinte(-/t-80/\a" 348) 28) | Salida de resultados: p99 73487 a Bi ayprinté(*/ta/\n", 348); Es la opcién por defecto, donde el tama del campo y la longitud del valor que se va a imprimir coinciden, by princé (*/¢24/\n" 348) Este especificador deberia producir un campo de 2 espacios de ancho, pero al ser mayor el campo nece- sario para imprimir el entero especificado, el.campo se expande hasta el tamafio del valor, as{ se evita que cel namero pueda ser recortado o truncado eprint é(*/484/\n", 348); Reserva un campo de 8 espacios de los cuales 3 estén ‘ocupados quedando 5 vacios. Por defecto, el valor representado queda ajustado @ la derecha del campo. a@print#(*/$-86/\n" 348); yuierda por el Mnclude maint) ‘ printt(>/$2/\n7, 3234 print (*/se/\nr, 1234 Prints (2/s6.26/\n"/ 1234.56); Prints (0/93. 1#/\n 1234.56) Bente (*/S10.3#/ \n", 1234.58): Deine f(*/¥10.3e/\n, 1234.5 ) Salida de resultados: 13234, 5600007 11,23456e+03/ /ise.s67 7 rasa 5 73234. 560r 7 Th.a36+037 Para especificar el mimero de posiciones decimales que se han de imprimir para un niimero en coma flotan- te, se coloca un punto tras el especificador de longitud del campo, seguido del mimero de decimales que se desea que aparezca. 128 OMTES-Paasoinico Por ejemplo %10.3f, imprime un nimero de al menos 10 caracteres con 3 posiciones decimales. Si el ejemplo anterior se aplica a cadenas 0 a enteros, el niimero que sigue al punto especifica le longitud méxima no del ‘campo, si no del dato que se pretende mostrar sobre dicho campo. Por ejemplo %5.7s, imprime una cadena de al menos 5 caracteres y no ms de 7. Si la cadena es més larga de ia longitud méxima del campo, se truncarén los caracte- res finales de la derecha. Ejemplo: Hinclude Saefine SALUD0 *hola anigo* maint] c print €{*/410.48/\n",323.23) Prince (*/8-10.48/\n" 123-23) | Beinté(*/#10.de/\n", SALUDO); | Printe(+/¥-10.d8/\a", SALUDO): | prsmee(s/eze/in*, sazzD0) printf(*/#iés/\n*, SALUDO) ; ) Salida de resultados: | 1 = 123.2300 723.2300 — ooh ola antgo/ Por otro lado, el modificador asterisco sobre una fun- cién printf), tiene un efecto diferente al producido sobre la funcién seanf{). En aquellos casos en los que no deseemos declarar ‘con antelacién el tamafio de un eampo y queramos que el programa lo ajuste autométicamente, utilizaremos un ‘modificador muy especial que es el modificador asteris- co (*), Para ello debemos tener en cuenta que es nece- sario seguir informando al programa de la anchura del campo, siendo posible proporcionarle esta informacién durante la ejecucién del mismo. Ejemplo: Hineluce ¢ lungigned ancho camp, munero=256) printf("sual ee el ancho Gel cargo?) Beanf("Ru", cancho carp): prints (*E1 miner Td,\a" ancho_carp, nanero) Esta técnica también puede aplicarse a variables de punto flotante: printf(“Peso = %*.*fin”, ancho, precisién, peso); Existen otros dos modificadores de drdenes de for- rato que permiten a printf() imprimir enteros largos long) y cortos (short). Estos modificadores se pueden aplicara los especificadores de tipo d, i 0, u, xy son los siguientes a) El modificador ‘I’ indica a printf{) que lo que sigue es un tipo de dato ‘long’, por ejemplo %ld, para imprimir un Jong int. Este modificador tam- bin puede preceder a los especificadores de coma flotante e, fy g indicando asf que se desea impri- mir un nimero de doble precisién. b) El modificador ‘h’ indica @ printf) que lo que sigue es un tipo de dato ‘short’. Por ejemplo %hu imprime un short unsigned int 10.2. Estructuras de control ohss Las estructuras de control se basan en expresiones condicionales que provocan la ejecucién controlada de determinadas acciones en funcién del resultado obteni- do por dicha expresién. 10.2.1, Estructuras alternativas El lenguaje C, a diferencia de otros lenguajes de pro- gramacién, carece de los denominados tipos de datos Tégicos. Por ello la evaluacién de expresiones condicio- nales originan un valor 0 (cero) para falso y valor 1 (uno) para cierto; es mas, podemos decir que cualquier valor distinto de 0 (cero) es cierto incluidos los valores negatives, considerando el 0 (cero) como tinico valor falso. En C, las instrucciones altemnativas 0 condicionales comprenden dos modalidades formatos: Alternativa simple 1a) Formato para la ejecucién de una sola sentencia, if Expresién Condicional) ‘Sentencial; | b) Formato para la efecucién de un bloque de senten- clas. if (Expresién Condicional) { Sentencial; Bloque de Sentencia2; sentencias : SentenciaN; CASES sia eee ee eal tl] El orden de evaluacién de una estructura condicional simple es: 1, Evaluar Expresién Condicional. 2. Si Expresién Condicional es cierta ‘* Bjecutar sentencia 0 bloque de sentencias. 3. En caso contrario + Continuar Ta ejecucién del programa de forma secuencial, Ejercicio: Programa que lee dos valores numéricos enteros y los, almacena en dos variables de nombre ‘x’ y ‘2’, mos- trando en aquellos casos en los que °x’ es mayor que ‘2" un mensaje que dige “Verdadero”. | [vinctude 2) printf (*Verdadero") ; Alternativa doble Este tipo de sentencias condicionales ofece dos posi- bilidades o alternativas para elegir segiin se cumpla 0 n0 la condicién establecida, de manera que, si la expresion condicional es cierta, se ejecutard la primera sentencia (Sentencial) y en caso contrario la segunda sentencia (Sentencia2). a) Formato para la ejecucién de una sola sentencia. 5 if (Expresién Condicional) Sentencial; else Sentencia2; b) Formato para la ejecucién de un logue de senten- cas. if (Expresién Condicional) Bloque de sentencias 1; } else Bloque de sentencias 2; 3 esi ee ee ee ee) El orden de evaluacién de una estructura condicional doble es: onesies 139

You might also like