Parcial2 PDF
Document Details
Tags
Summary
This document provides an introduction to the C programming language. It covers topics like the history of C, different types of programming languages, and the structure of a C program. It also includes examples, and exercises. It is aimed at an undergraduate level.
Full Transcript
M. en A. Rosy Avendaño López Capítulo 1. INTRODUCCIÓN AL LENGUAJE C Objetivo Específico. Que el alumno conozca la historia de C, qué es un lenguaje de medio nivel y la estructura básica de un programa en C. 1. El Origen de C. C fue desarrollado originalmente en los años 60’s por Dennis Ritchie en...
M. en A. Rosy Avendaño López Capítulo 1. INTRODUCCIÓN AL LENGUAJE C Objetivo Específico. Que el alumno conozca la historia de C, qué es un lenguaje de medio nivel y la estructura básica de un programa en C. 1. El Origen de C. C fue desarrollado originalmente en los años 60’s por Dennis Ritchie en los laboratorios Bell (Ahora AT&T). Se derivó de los lenguajes BCPL y B, éste último fue escrito para el primer sistema Unix de la DEC PDP-7. Ambos lenguajes también se desarrollaron en los laboratorios Bell.1 2. Niveles de lenguajes. Los lenguajes se clasifican según su abstracción, en tres niveles:2 a ) Lenguajes de Bajo Nivel: Es natural para el hardware pero no para el programador ya que se debía tener un profundo conocimiento de la computadora, ya que se tenía que tomar en cuenta las características del procesador. El código fuente es muy grande y el ejecutable pequeño (Ensambladores). b ) Lenguajes de Medio Nivel: Todavía mantienen algunas cualidades de los lenguajes de bajo nivel pero ya no tan profundo. Hay un equilibrio entre el tamaño del código fuente y el ejecutable ( C ). c ) Lenguajes de Alto Nivel: Son más parecidos al lenguaje humano. No son entendidos directamente por la computadora pero sí por los programadores. El código fuente es fácil de comprender y es pequeño con relación al ejecutable, el cual es desarrollado por la computadora a través de un compilador que traduce lenguaje natural del hombre al código del lenguaje comprensible para la computadora (Java, Pascal, Visuales). Hay quien sólo considera lenguajes de bajo nivel y de alto nivel, (en ese caso, C es considerado de alto nivel). Los lenguajes se clasifican según su propósito, es decir, el tipo de problemas a tratar con ellos, en cuatro niveles: a ) Lenguajes de propósito general: Aptos para todo tipo de tareas: Ejemplo: C. b ) Lenguajes de propósito específico: Hechos para un objetivo muy concreto. Ejemplo: Csound (para crear ficheros de audio). c ) Lenguajes de programación de sistemas: Diseñados para realizar sistemas operativos o drivers. Ejemplo: C. d ) Lenguajes de script: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (“Job Control 1 Apuntes de Francisco Bernal, de Arriaga y del libro “El lenguaje de Programación C” de Dennis M. Ritchie 2 Apuntes de Francisco Bernal Introducción al Lenguaje C. 1 M. en A. Rosy Avendaño López Languages”). Se subdividen en varias clases (de shell, de GUI, de programación web, etc.). Ejemplos: bash (shell), mIRC script, JavaScript (programación web). 3. Estructura de un Programa en C. Todo programa en C cuenta con las siguientes áreas: a ) Área de Inclusiones b ) Área de Definiciones c ) Área de Funciones. a ) Área de Inclusiones: Aquí se incluyen los nombres de las librerías y bibliotecas donde se encuentran las funciones de C. Ejemplo: #include Indica que el compilador de C, busque en las librerías de las funciones estándar de I/O. b ) Área de Definiciones: Sirve para dar más legibilidad a los programas en C, ya que aquí se escriben las equivalencias de algunos valores. Esta área puede o no utilizarse dependiendo del programa que se realice. Ejemplo: #define N 100 En el programa al utilizar la variable N, el compilador entenderá que se sustituya por 100. c ) Área de Funciones: Todo programa en C, consta de una o más funciones. Se debe tener una función llamada “main” en algún sitio del programa ya que éste comenzará a ejecutarse con dicha función. Por lo general main llamará a otras funciones que le ayuden a realizar su trabajo. Una función contiene proposiciones y variables. Las funciones indican las operaciones que se van realizar y las variables almacenan los valores utilizados durante los cálculos. Cada función debe contener: Una cabecera de la función, que consta del Nombre de la Función, seguida de una lista de valores que la función que llama, proporciona a la función que está invocando. Los argumentos van encerrados entre paréntesis. Las proposiciones de una función están encerradas entre llaves {}. Ejemplo de un programa en C: #include Incluye información acerca de la biblioteca estándar. main() Se tiene una función llamada main, que no recibe valores de argumentos. { Las proposiciones del main están encerradas entre llaves. Printf(“hola a todos \n”); Main llama a la función de biblioteca printf para escribir esta secuencia de caracteres. \n representa el carácter nueva línea. } Introducción al Lenguaje C. 2 M. en A. Rosy Avendaño López 4. Librerías o bibliotecas Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados bibliotecas. Las bibliotecas contienen el código objeto de muchos programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, manejar números, realizar funciones matemáticas, etc. Las bibliotecas están clasificadas por el tipo de trabajos que hacen, hay bibliotecas de entrada y salida, matemáticas, de manejo de memoria, de manejo de textos, etc. Hay un conjunto de bibliotecas (o librerías) muy especiales, que se incluyen con todos los compiladores de C y de C++. Son las librerías (o bibliotecas) ANSI o estándar. Pero también las hay no estándar, y dentro de estas las hay públicas y comerciales. En este curso sólo usaremos bibliotecas (o librerías) ANSI. 5. Errores Por supuesto, somos humanos, y por lo tanto nos equivocamos. Los errores de programación pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten. Errores de sintaxis: son errores en el programa fuente. Pueden deberse a palabras reservadas mal escritas, expresiones erróneas o incompletas, variables que no existen, etc. Los errores de sintaxis se detectan en la fase de compilación. El compilador, además de generar el código objeto, nos dará una lista de errores de sintaxis. De hecho nos dará sólo una cosa o la otra, ya que si hay errores no es posible generar un código objeto. Avisos: además de errores, el compilador puede dar también avisos (warnings). Los avisos son errores, pero no lo suficientemente graves como para impedir la generación del código objeto. No obstante, es importante corregir estos errores, ya que ante un aviso el compilador tiene tomar decisiones, y estas no tienen por qué coincidir con lo que nosotros pretendemos hacer, ya se basan en las directivas que los creadores del compilador decidieron durante la creación del compilador. Errores de enlazado: el programa enlazador también puede encontrar errores. Normalmente se refieren a funciones que no están definidas en ninguno de los ficheros objetos ni en las bibliotecas. Puede que hayamos olvidado incluir alguna biblioteca, o algún fichero objeto, o puede que hayamos olvidado definir alguna función o variable, o lo hayamos hecho mal. Errores de ejecución: incluso después de obtener un fichero ejecutable, es posible que se produzcan errores. En el caso de los errores de ejecución normalmente no obtendremos mensajes de error, sino que simplemente el programa terminará bruscamente. Estos errores son más difíciles de detectar y corregir. Existen programas auxiliares para buscar estos errores, son los llamados depuradores (debuggers). Estos programas permiten detener la ejecución de nuestros programas, inspeccionar variables y ejecutar nuestro programa paso a paso (instrucción a instrucción). Esto resulta útil para detectar excepciones, errores sutiles, y fallos que se presentan dependiendo de circunstancias distintas. Errores de diseño: finalmente los errores más difíciles de corregir y prevenir. Si nos hemos equivocado al diseñar nuestro algoritmo, no habrá ningún programa que nos pueda ayudar a corregir los nuestros. Contra estos errores sólo cabe practicar y pensar. Introducción al Lenguaje C. 3 M. en A. Rosy Avendaño López 6. Características deseables de un programa. Un programa en C, debe tener las siguientes características:3 Modular: que el programa se divida en módulos independientes, es decir, que esté estructurado por bloques, donde cada módulo no afecte a los demás y la revisión sea fácil. Sencillo: Que cada módulo sea fácil de entender. Claridad: Que cada módulo sea lo más claro posible en sus especificaciones. Eficiente: Que sea rápido en sus tiempos de respuesta y además sencillo y claro. Íntegro: Que los datos sean consistentes y fiables. General: Que el programa realice lo que tiene que hacer. 7. Comentarios en C. Cualquier carácter que se encuentre entre o que vaya después de //, son ignorados por el compilador y pueden ser utilizados libremente para hacer a un programa más fácil de entender. Se utiliza de preferencia cuando el comentario ocupará varias líneas. // Cuando el comentario ocupará una sola línea. Ejemplo: #include main() { printf(“Hola a todos\n”); //Imprime hola a todos } Ejercicios: 1. ¿Quién desarrolló el lenguaje C? 2. ¿En cuántos tipos y niveles se clasifican los lenguajes de programación y cuáles son? 3. Mencione y explique brevemente las áreas con las que se conforma un programa en C. 4. Mencione las características deseables de todo programa. 5. ¿Cómo se señalan los comentarios en el lenguaje C? 6. ¿Qué son las librerías? 7. ¿Cuántos tipos de Errores hay y cuáles son? 3 Apuntes de Francisco Bernal Introducción al Lenguaje C. 4 M. en A. Rosy Avendaño López Capítulo 2. T IPOS DE DATOS, VARIABLE Y CONSTANTES. Objetivo Específico. Que el alumno conozca los diferentes tipos de datos en C, la manera de declarar variables y el uso de constantes. 1. El Conjunto de caracteres de C. Los nombres de variables y de constantes simbólicas se componen de letras y dígitos. El primer carácter debe ser una letra. El carácter de subrayado “_” cuenta como una letra sin embargo, no se deben comenzar los nombres de variables con este carácter. Las letras mayúsculas y minúsculas son distintas, de tal manera que pi y PI son dos nombres diferentes. Normalmente se usan letras minúsculas para nombres de variables y mayúsculas para constantes. Para funciones y variables, es conveniente elegir nombres que estén relacionados con el propósito de la variable o de lo que realizará la función, y su longitud no debe exceder a 31 caracteres. 2. Identificadores y Palabras Reservadas. Identificadores: Es una secuencia de letras y dígitos. Son los nombres de variables, constantes y de las funciones. Un identificador puede incluir: letras (Aa...Zz) números (0...9) y el underline (_). El primer carácter debe ser una letra. Nunca debe comenzar con número. Puede ser de la longitud que guste pero solo serán tomados en cuenta los primeros 31 caracteres. Ejemplo: main() #define IMP_TOTAL 10 Palabras Reservadas: Son aquellas que tienen un significado especial para el compilador, la cual no es posible modificar o alterar y se escriben con minúsculas. Algunas palabras reservadas son: Tipos de Datos, Variables y Constantes 5 M. en A. Rosy Avendaño López auto default float register typedef asm do for return union break double goto short unsigned case else if signed void char enum int sizeof volatile const extern long static while continue far near struct switch Ejemplo: #include main() { clrscr() //Invoca a la función clrscr que limpia la pantalla return 0 //Return es una palabra reservada que regresa un valor de 0. } 3. Tipos de Datos. Hay unos cuantos tipos de datos básicos en C: char Representa caracteres. int Representa números enteros. float Punto flotante de precisión normal. double Punto flotante de doble precisión. void 0 Sin valor. Además existen algunos calificadores que se aplican a estos tipos básicos: short int long int signed Puede aplicar a char o a cualquier entero. unsigned Los números unsigned son siempre positivos o cero. Tipo de Dato Bits Bytes Rango de Valores char 8 1 -127 a 128 unsigned char 8 1 0 a 255 signed char 8 1 -128 a 127 int 16 2 -32768 a 32767 unsigned int 16 2 0 a 65535 signed int 16 2 -32768 a 32767 short int 16 2 -32768 a 32767 unsigned short int 16 2 0 a 65535 long int 32 4 -2147483648 a 2147483648 unsigned long int 32 4 0 a 4294967295 signed long int 32 4 -21474 a 21474 float 32 4 3.4E –38 a 3.4E +38 double 64 8 1.7E –308 a 1.7E +308 Tipos de Datos, Variables y Constantes 6 M. en A. Rosy Avendaño López 4. Constantes. Caso 1: Sintaxis: #define Ejemplo: #define PI 3.1416 #define CLAVE 7 #define MENS_ERR “Error” #define BELL ‘\007’ //carácter campana en ASCII Caso 2: Sintaxis: const = Ejemplo: const char INDICE = ‘T’ const int MAX = 500 Si se omite el tipo, el default es int. Caso 3: Sintaxis: enum {valores}; Ejemplo: enum meses{ENE=1, FEB=2} enum escapes{BELL=’\a’, RETROCESO=’\b’ TAB=’\t’, RETURN=’\r’}; 5. Variables. Todas las variables deben ser declaradas antes de su uso, aunque algunas declaraciones pueden ser hechas en forma implícita por el contexto. Una declaración de variable debe especificar el tipo de ésta y la variable o lista de variables de ese mismo tipo. Si se declaran dos o más variables del mismo tipo, se separan con coma (,) y al final va un punto y coma (;). Sintaxis: Tipo , [identificador-2],..., [identificador-n]; Ejemplo: int num; int v1, v2, v3; char c; Tipos de Datos, Variables y Constantes 7 M. en A. Rosy Avendaño López Una variable también puede ser inicializada en su declaración. Si el nombre es seguido por un signo de igual y una expresión que sirve como un inicializador. Ejemplo: int i=0; Las variables pueden declararse dentro de los bloques de las funciones o fuera de ellas. Ejemplo: #include #define DOS 2 #define CINCO 5 int calif; main() { int sum; sum=DOS+CINCO; calif=sum+30; printf(“La suma de %d y %d es %d\n”, DOS, CINCO, sum); } Suma() { Calif=10+20; } 6. Estatuto de Asignación. Es cuando el valor de la variable de la derecha es almacenado en la variable de la izquierda, después de que ha tenido lugar la asignación. Existen varios operadores de asignación; todos se agrupan de derecha a izquierda. Caso 1: Sintaxis: variable = expresión Ejemplo: i=5 Ahora i tiene almacenado el valor de 5. Caso 2: Sintaxis: Variable expresión Los operadores de asignación pueden ser: *= /= %= += -= = Tipos de Datos, Variables y Constantes 8 M. en A. Rosy Avendaño López Ejemplo: cont += 1 equivale a escribir: cont=cont+1 cont ahora tiene el valor de cont+1 es decir, si cont al inicio tenía un valor de 1, después de la asignación vale 2. Nota: Esto es siempre y cuando la variable de la izquierda se involucre en la expresión de la derecha. La variable de la izquierda no debe ser un arreglo ni una función. Tampoco debe ser calificado con const. Ejemplo: x/=5 Equivale a escribir: x=x/5 x*=y+1 Equivale a escribir: x=x*(y+1) Ejercicios: 1. Indique si los siguientes nombres de variables son validos para el lenguaje C y si son o no palabras reservadas. 8letras auto letras8 cadena A volatile switch CADENA_B cadena_b short long 2. En un programa en C, ¿Cómo declararía las siguientes variables? Nombre de la Variable Tipo Longitud Valor nombre Alfanumérico 20 Variable teléfono Numérico 7 Variable contador Numérico 3 Variable Pi Numérico - 3.1416 main() { char nombre; int teléfono, contador; const float PI = 3.1416; Tipos de Datos, Variables y Constantes 9 M. en A. Rosy Avendaño López 3. Realice las siguientes asignaciones: a ) Que el contador se incremente en 3 contador=0; contador = contador + 3; contador += 3; b ) Que la variable se multiplique por 5 variable = 1; variable = variable * 5; variable *= 5; Tipos de Datos, Variables y Constantes 10 M. en A. Rosy Avendaño López Capítulo 3. EXPRESIONES EN C Objetivo Específico. Que el alumno conozca y aplique los diferentes operadores y expresiones que existen en C. 1. Operadores en C. Existen diferentes tipos de operadores: Aritméticos, Relacionales, Lógicos, de Incremento y Decremento y para Manejo de bits. a) Operadores Aritméticos: + Suma - Resta * Multiplicación / División % Modulo: Produce el residuo de una división. No puede aplicarse a operandos float o double.4 #include pow(numero,potencia); res=pow(5,3); b) Operadores Relacionales: > Mayor >= Mayor igual < Menor = Izquierda a derecha == != Izquierda a derecha && Izquierda a derecha || Izquierda a derecha = += -= *= /= %= Derecha a izquierda 2. Expresiones. 2.1. Expresiones Aritméticas Las expresiones Aritméticas son aquellas que utilizan operadores aritméticos. Cuando en C, se tiene una expresión con diferentes tipos, el tipo resultante de ellas es de acuerdo a lo siguiente: a ) Los operandos de tipo Char y Short son convertidos a Int y los de tipo Float son convertidos a Double. b ) Si un operando es Double, el otro operando y el resultado también lo serán. c ) Si un operando es unsigned, el otro operando y el resultado también lo serán. Ejemplo: int r; char c; c = ‘A’; r = c/3; Tomaría el Ascii (65/3). El resultado es entero. 2.2. Expresiones Relacionales Todos los operadores de relación tienen la misma precedencia. Precisamente bajo ellos en precedencia están los operadores de igualdad: == !=. Expresiones en C 12 M. en A. Rosy Avendaño López Los operadores de relación tienen precedencia inferior que los operadores aritméticos, así que una expresión como: i < lim-1 se toma como i < (lim-1) como se esperaría. 2.3. Expresiones Lógicas Las expresiones conectadas por && o ¦¦ son evaluadas de izquierda a derecha y la evaluación se detiene tan pronto como se conoce el resultado verdadero o falso. La precedencia de && es más alta que la de ¦¦, y ambas son menores que los operadores de relación y de asignación. Ejercicios: 1. Mencione el resultado de las siguientes expresiones: a ) g = (5 + 8) / (1-2) * (5+4-2) g= 13 / -1 * 7 g= -13 * 7 g= -91 b ) g = 5 + 8 / 1-2 * 5+4-2 g = 5 + 8 - 2 * 5+4-2 g = 5 + 8 - 10 + 4-2 g = 13 - 10 + 4-2 g= 3 + 4-2 g= 7 -2 g= 5 2. ¿Indique qué se esta realizando en las siguientes expresiones: a ) i += 2 Se esta incrementando en 2 la variable i. i = i + 2 b ) x *= y+1 Se esta multiplicando la variable x por la ecuación y + 1 x = x * (y+1) Expresiones en C 13 M. en A. Rosy Avendaño López 3. E/S POR CONSOLA La entrada y la salida se realizan a través de funciones de la biblioteca, que ofrece un mecanismo flexible a la vez que consistente para transferir datos entre dispositivos. Las funciones printf() y scanf() realizan la salida y entrada con formato que pueden ser controlados. Aparte hay una gran variedad de funciones E/S. PRINTF: Escribe los datos en pantalla. Se puede indicar la posición donde mostrar mediante una función gotoxy(columna,fila) (pero no en DEV C++) o mediante las constantes de carácter. La sintaxis general que utiliza la función printf() depende de la operación a realizar. printf(“mensaje [const_carácter]”); printf(“[const_carácter]”); printf(“mensaje ident(es)_formato[const_carácter]”,variable(s)); En las siguientes tablas se muestran todos los identificadores de formato y las constantes de carácter las que se utilizan para realizar operaciones automáticamente sin que el usuario tenga que intervenir en esas operaciones. IDENTIFICADORES DE FORMATO CONSTANTES DE CARÁCTER IDENTIFICADOR DESCRIPCION CONSTANTE DESCRIPCION %c Carácter \n Salto de línea %d, %i Entero \f Salto de página %e N. Científica \r Retorno de carro %E N. Científica \t Tabulación %f Coma flotante \b Retroceso %o Octal \’ Comilla simple %s Cadena \” Comillas %u Sin signo \\ Barra invertida %x Hexadecimal \? Interrogación %X Hexadecimal %p Puntero %ld Entero Largo %h Short Expresiones en C 14 M. en A. Rosy Avendaño López %% signo % Existen especificadores de formato asociados a los identificadores que alteran su significado ligeramente. Se puede especificar la longitud mínima, el número de decimales y la alineación. Estos modificadores se sitúan entre el signo de porcentaje y el identificador. % modificador identificador El especificador de longitud mínima hace que un dato se rellene con espacios en blanco para asegurar que este alcanza una cierta longitud mínima. Si se quiere rellenar con ceros o espacios hay que añadir un cero delante antes del especificador de longitud. printf(“%f ”,numero); //salida normal. printf(“%10f ”,numero); //salida con 10 espacios. printf(“%010f “,numero); //salida con los espacios poniendo 0. El especificador de precisión sigue al de longitud mínima(si existe). Consiste en un nulo y un valor entero. Según el dato al que se aplica su función varía. Si se aplica a datos en coma flotante determina el número de posiciones decimales. Si es a una cadena determina la longitud máxima del campo. Si se trata de un valor entero determina el número mínimo de dígitos. printf(“%10.4f “,numero); //salida con 10 espacios con 4 decimales. printf(“%10.15s”,cadena); //salida con 10 caracteres dejando 15 espacios. printf(“%4.4d”,numero); //salida de 4 dígitos mínimo. El especificador de ajuste fuerza la salida para que se ajuste a la izquierda, por defecto siempre lo muestra a la derecha. Se consigue añadiendo después del porcentaje un signo menos. printf(“%8d”,numero); // salida ajustada a la derecha. printf(“%-8d”,numero); //salida ajustada a la izquierda. SCANF: Es la rutina de entrada por consola. Puede leer todos los tipos de datos incorporados y convierte los números automáticamente al formato incorporado. En caso de leer una cadena lee hasta que encuentra un carácter de espacio en blanco. El formato general: scanf(“identificador”,&variable_numerica o char); scanf(“identificador”,variable_cadena); La función scanf() también utiliza modificadores de formato, uno especifica el número máximo de caracteres de entrada y eliminadores de entrada.. Para especificar el número Expresiones en C 15 M. en A. Rosy Avendaño López máximo solo hay que poner un entero después del signo de porcentaje. Si se desea eliminar entradas hay que añadir %*c en la posición donde se desee eliminar la entrada. scanf(“%10s”,cadena); scanf(“%d%c%d”,&x,&y,&z); En muchas ocasiones se combinaran varias funciones para pedir datos y eso puede traer problemas para el buffer de teclado, es decir que asigne valores que no queramos a nuestras variables. Para evitar esto hay dos funciones que se utilizan para limpiar el buffer de teclado. fflush(stdin); fflushall(); OTRAS FUNCIONES E/S: El archivo de cabecera de todas estas funciones es STDIO.H. Todas estas funciones van a ser utilizadas para leer caracteres o cadenas de caracteres. Todas ellas tienen asociadas una función de salida por consola. FUNCIONES DESCRIPCIÓN Lee un carácter de teclado, espera un salto de var_char=getchar(); carro. Lee un carácter con eco, no espera salto de var_char=getche(); carro. Lee un carácter sin eco, no espera salto de var_char=getch(); carro. gets(var_cadena); Lee una cadena del teclado. putchar(var_char); Muestra un carácter en pantalla. puts(variables); Muestra una cadena en pantalla. EJEMPLO 1 : Este primer programa lo único que hace es mostrar un mensaje en pantalla. La primera línea que aparece se denomina ENCABEZAMIENTO y son ficheros que proporcionan información al compilador. En este archivo están incluidas las funciones llamadas por el programa. La ubicación de estos ficheros es el directorio C:\TC\INCLUDE\. La segunda línea del programa indica donde comienza la función main indicando los valores que recibe y los que devuelve. La primera línea de la función main (clrscr();) limpia la pantalla. y la segunda muestra un mensaje en la pantalla. #include main() { printf(“HOLA A TODOS\n”); getchar(); } Expresiones en C 16 M. en A. Rosy Avendaño López EJEMPLO 2: #include #define EURO 166.386 #define TEXTO "Esto es una prueba" const int PESETA=1; main() { printf("El valor del Euro es %f pecetas",EURO); printf("\nEl valor de la Peseta es %d peceta",PESETA); printf("\n%s",TEXTO); printf(“Ejemplo de constantes y defines”); getchar(); } Expresiones en C 17 M. en A. Rosy Avendaño López Capítulo 3. SENTENCIAS DE CONTROL. Es la manera que tiene un lenguaje de programación de provocar que el flujo de la ejecución avance y se ramifique en función de los cambios de estado de los datos. IF-ELSE: La ejecución atraviese un conjunto de estados bolean que determinan que se ejecuten distintos fragmentos de código. if (expresion-booleana) if (expresion-booleana) Sentencia1; { else Sentencia1; Sentencia2; sentencia2; } else Sentencia3; La cláusula else es opcional, la expresión puede ser de cualquier tipo y más de una (siempre que se unan mediante operadores lógicos). Un operador muy relacionado con la sentencia if es ¿?. Es un operador ternario que puede sustituir al if. El modo de trabajo es el siguiente, evalúa la primera expresión y si es cierta toma el valor de la segunda expresión y se le pasa a la variable. Si es falsa, toma el valor de la tercera y la pasa a la variable varible=condicion ¿? expresion2:expresion3; EJEMPLO: #include void main() { int peso; printf(“Introducir peso: “); scanf(“%d”,&peso); if(peso