Tutorial Lenguaje C

117
TUTORIAL LENGUAJE DE PROGRAMACIÓN C MICROPROCESADORES Y MICROCONTROLADORES 2014 PROFESOR MG.RAIMON SALAZAR SALINAS REFERENCIA: HTTP://WWW.CARLOSPES.COM/C URSO_DE_LENGUAJE_C/

description

Tutorial preparado por Raimon Salazar

Transcript of Tutorial Lenguaje C

Page 1: Tutorial Lenguaje C

TUTORIAL LENGUAJE DE PROGRAMACIÓN CMICROPROCESADORES Y MICROCONTROLADORES

2014

PROFESORMG. RAIMON SALAZAR SALINASREFERENCIA:HTTP://WWW.CARLOSPES.COM/CURSO_DE_LENGUAJE_C/

Page 2: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

2

TTAABBLLAA DDEE CCOONNTTEENNIIDDOOSSI.- INTRODUCCIÓN. 5

1.- Reglas de sintaxis y funciones de la biblioteca estándar de C ................................................................52.- Fases de la Puesta a Punto de un Programa en Lenguaje C ....................................................................63.- Estructura de un Programa en Lenguaje C .............................................................................................84.- Tipos de Instrucciones en Lenguaje C.....................................................................................................85.- Mi primer Programa en Lenguaje C......................................................................................................10

II.- ELEMENTOS BÁSICOS. 131.- Tipos de Datos. ....................................................................................................................................13

1.1.- Tipos de Datos en Lenguaje C. ..........................................................................................................131.2.- Datos de Tipo Entero en Lenguaje C (int)..........................................................................................131.3.- Datos de Tipo Real en Lenguaje C (float o double). ..........................................................................141.4.- Datos de Tipo Carácter en Lenguaje C (char) ....................................................................................141.5.- Datos sin Valor en Lenguaje C (void) .................................................................................................151.6.- Datos de Tipo Lógico en Lenguaje C..................................................................................................151.7.- Datos de Tipo Cadena en Lenguaje C ................................................................................................15

2.- Identificadores en Lenguaje C ..............................................................................................................162.1.- Identificadores. .................................................................................................................................162.2.- Ejemplos de Identificadores Válidos y No Válidos en Lenguaje C .....................................................162.3.- Palabras Reservadas en Lenguaje C ..................................................................................................17

3.- Variables en Lenguaje C .......................................................................................................................183.1.- Variable de Lenguaje. ........................................................................................................................183.2.- Ejemplos de Declaración de Variables en Lenguaje C .......................................................................18

4.- Constantes en Lenguaje C. ...................................................................................................................214.1.- Constante en Lenguaje C...................................................................................................................214.2.- Constantes de Tipo Entero en Lenguaje C.........................................................................................234.3.- Constantes de Tipo Real en Lenguaje C. ...........................................................................................244.4.- Constantes de Tipo Carácter en Lenguaje C......................................................................................254.5.- Constantes de Tipo Cadena en Lenguaje C. ......................................................................................26

5.- Operadores y Expresiones en Lenguaje C.............................................................................................276.- Expresiones Aritméticas en Lenguaje C. ...............................................................................................29

6.1.- Expresiones Aritméticas. ...................................................................................................................296.2.- El Operador División (/) en Lenguaje C..............................................................................................306.3.- Conversión de Tipo (Casting) en Lenguaje C. ....................................................................................316.4.- La Función pow en Lenguaje C ..........................................................................................................326.5.- Expresiones Lógicas en Lenguaje C ...................................................................................................33

6.5.1.- Operadores Relacionales en Lenguaje C ...................................................................................336.5.2.- Operadores Lógicos en Lenguaje C. ..........................................................................................34

6.6.- La Función strcat en Lenguaje C ........................................................................................................356.7.- Operadores de Asignación en Lenguaje C .........................................................................................366.8.- La Función strcpy en Lenguaje C .......................................................................................................396.9.- Los Operadores Incremento (++) y Decremento (--) en Lenguaje C..................................................406.10.- Prioridad de Operadores en Lenguaje C ...........................................................................................41

7.- Funciones printf y scanf. ......................................................................................................................437.1.- La Función printf en Lenguaje C ........................................................................................................437.2.- Texto Ordinario en la Función printf del Lenguaje C.........................................................................447.3.- Especificadores de Formato en la Función printf del Lenguaje C .....................................................44

Page 3: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

3

7.4.- Secuencias de Escape en la Función printf del Lenguaje C ...............................................................467.5.- Especificadores de Formato en la Función printf del Lenguaje C .....................................................497.6.- La Función scanf en Lenguaje C.........................................................................................................517.7.- Especificadores de Formato en la Función scanf del Lenguaje C ......................................................517.8.- Ejercicios de scanf y printf en Lenguaje C .........................................................................................56

7.8.1.- Ejercicio - Área de un Triángulo (en C) ......................................................................................567.8.2.- Ejercicio - División Entera (en C) ...............................................................................................57

8.- Comentarios. .......................................................................................................................................588.1.- Comentarios en Lenguaje C...............................................................................................................58

9.- Función fflush. .....................................................................................................................................599.1.- La Función fflush en Lenguaje C ........................................................................................................59

10.- Tipos de Errores...................................................................................................................................6210.1.- Tipos de Errores en Lenguaje C .........................................................................................................6210.2.- Errores de Sintaxis en Lenguaje C .....................................................................................................6210.3.- Errores de Ejecución en Lenguaje C ..................................................................................................6210.4.- Errores de Lógica en Lenguaje C........................................................................................................63

III.- INSTRUCCIONES DE CONTROL 651.- Instrucciones Alternativas en Lenguaje C.............................................................................................65

1.1.- Instrucción de Control Alternativa Doble (if else) .............................................................................651.1.1.- Instrucción if else en Lenguaje C...............................................................................................651.1.2.- Listado de Ejercicios Resueltos con la instrucción if else ..........................................................66

1.2.- Instrucción de Control Alternativa Simple (if) ...................................................................................691.2.1.- Instrucción if en Lenguaje C ......................................................................................................691.2.2.- Ejercicios de la Instrucción Alternativa Simple (if) en Lenguaje C.............................................70

1.3.- Instrucción de Control Alternativa Múltiple (switch) ........................................................................721.3.1.- Instrucción switch en Lenguaje C ..............................................................................................72

1.4.- Ejercicios de la Instrucción Alternativa Múltiple (switch) en Lenguaje C ..........................................771.4.1.- Ejercicio - Número del Dado (en C) ...........................................................................................771.4.2.- Ejercicio - Habitaciones de una Casa Rural (en C) .....................................................................79

1.5.- Anidamiento de Instrucciones de Control Alternativas ....................................................................821.5.1.- Anidamiento de Instrucciones Alternativas en Lenguaje C.......................................................821.5.2.- Anidamiento if else Dentro de if else en Lenguaje C ................................................................831.5.3.- Anidamiento switch Dentro de if else en Lenguaje C ...............................................................851.5.4.- Ejercicios de Anidamiento de Instrucciones Alternativas en Lenguaje C ..................................86

2.- Instrucciones Repetitivas en Lenguaje C ..............................................................................................902.1.- Instrucción while en Lenguaje C........................................................................................................902.2.- Ejercicios de la Instrucción Repetitiva mientras (while) en Lenguaje C ............................................92

2.2.1.- Ejercicio - Área de una Esfera (en C) .........................................................................................922.2.2.- Ejercicio - Volúmenes de Cubos (en C)......................................................................................94

2.3.- Instrucción de Control Repetitiva hacer...mientras (do while). ........................................................952.3.1.- Instrucción do while en Lenguaje C ..........................................................................................952.3.2.- Ejercicios de la Instrucción Repetitiva hacer...mientras (do..while) en Lenguaje C ..................97

2.4.- Instrucción de Control Repetitiva para (for) ...................................................................................1002.4.1.- Instrucción for en Lenguaje C..................................................................................................1002.4.2.- » ¿Cuándo usar un Bucle u otro? ............................................................................................1022.4.3.- Ejercicios de la Instrucción Repetitiva para (for) en Lenguaje C .............................................102

2.5.- Anidamiento de Instrucciones de Control Repetitivas y Alternativas. ............................................1032.5.1.- Bucle for en do while ..............................................................................................................1042.5.2.- Instrucción if Anidada en Bucle for del Lenguaje C .................................................................1042.5.3.- Ejercicios de Anidamiento de Instrucciones de Control Repetitivas y Alternativas. ...............105

Page 4: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

4

Ejercicio - Cantidad y Suma de Números Enteros (en C) .......................................................................1053.- Instrucciones de Salto en Lenguaje C ................................................................................................. 108

3.1.- Instrucción break en Lenguaje C .....................................................................................................1083.2.- Instrucción continue en Lenguaje C. ...............................................................................................1113.3.- Instrucción goto en Lenguaje C. ......................................................................................................1153.4.- Instrucción return en Lenguaje C ....................................................................................................1173.5.- Ventajas de no Usar las Instrucciones de Salto en Lenguaje C .......................................................117

Page 5: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

5

II..-- IINNTTRROODDUUCCCCIIÓÓNN..

1.- REGLAS DE SINTAXIS Y FUNCIONES DE LA BIBLIOTECA ESTÁNDAR DE CLos contenidos de este curso/tutorial pueden ser útiles a todos aquellos que quieraniniciarse en la programación utilizando lenguaje C. Aunque no es imprescindible, al lector leresultará más fácil seguir las explicaciones si ya posee conocimientos previos de programación enotro lenguaje y, en especial, es aconsejable que ya sepa diseñar algoritmos; véase el Curso de Diseñode Algoritmos. En cualquier caso, para facilitar la comprensión del texto, se han añadido enlaces dealgunos conceptos al Diccionario de Informática.Para poder escribir programa en C, es imprescindible ser conocedor de sus reglas desintaxis y de las funciones de su biblioteca estándar.Las funciones de la biblioteca estándar de C son un conjunto de funciones (subprogramas)que acompañan a todos los compiladores de lenguaje C, y sirven para realizar un gran número detareas. Además de las funciones de la biblioteca estándar, la mayoría de los compiladores de Ctambién proporcionan otras funciones que no son estándares, pero, éstas suelen ser muy útilespara el programador, quien, por otra parte, también puede desarrollar sus propias funciones.

Page 6: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

6

2.- FASES DE LA PUESTA A PUNTO DE UN PROGRAMA EN LENGUAJE CPara convertir un algoritmo en un programa, se deben llevar a cabo las siguientes fases depuesta a punto:•En esta primera fase, el programador debe convertir el algoritmo que haya diseñado eninstrucciones escritas en C. Para ello, se debe hacer uso de un editor de textos, con el cualse obtendrá el llamado código fuente del programa. El programador deberá guardar dichocódigo fuente en un archivo con extensión (.c) o (.cpp).

•Si un programa escrito en C se va a compilar con un compilador de C, el código fuentedebe ser guardado, obligatoriamente, en un archivo con extensión (.c). Ahora bien, si seutiliza un compilador de C/C++, el archivo se puede guardar con extensión (.c) o (.cpp).

Edición

•El pre-proceso sirve para realizar modificaciones en el código fuente obtenido en la fase deedición. Es el programador quien, mediante directivas del preprocesador, "dice" alpreprocesador las modificaciones que éste debe llevar a cabo.

•El preprocesador es un programa característico de C, es decir, en otros lenguajes deprogramación no existe, y siempre se ejecuta antes de llevarse a cabo la compilación. Estoes debido a que, es el propio compilador quien llama al preprocesador antes de realizar lacompilación.

Pre-proceso.

•Una vez que el código fuente ha sido preprocesado, el compilador traducirá ese códigofuente (modificado) a código máquina, también llamado código objeto, siempre y cuando,el propio compilador no detecte ningún error en dicho código fuente ya preprocesado.

•Como resultado de la compilación, el compilador guardará el código objeto del programaen un archivo con otra extensión, que, dependiendo del sistema operativo puede variar.Por ejemplo, en Windows, se guardará con la extensión (.obj), abreviatura de object.

Compilación.

•(linkaje o montaje). Los programas pueden utilizar funciones de la biblioteca estándar deC, tales como scanf o printf. De cada una de ellas existe un código objeto que debe serenlazado (unido) al código objeto del programa que las utilice. Esto se realiza mediante unprograma llamado enlazador, montador o linkador.

•Como resultado del enlace, el enlazador guardará, en disco, un archivo ejecutable. EnWindows, dicho archivo tendrá extensión (.exe), abreviatura de executable. Dicho archivoserá "el ejecutable".

Enlace.

Page 7: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

7

Además de las funciones de la biblioteca estándar de C, el programador también puedeutilizar funciones que hayan sido desarrolladas por él mismo. Éstas pueden agruparse en su propiabiblioteca de funciones (no estándar). Por lo que, también en esta fase, el código objeto de dichasfunciones deberá ser enlazado al código objeto del programa que las utilice.Gráficamente, el proceso de puesta a punto de un programa escrito en C se puede ver en lasiguiente figura:

Figura - Fases de la puesta a punto de un programa en lenguaje C.Finalmente, para que el código ejecutable de un programa se ejecute en la computadora, esnecesario que un programa del sistema operativo, llamado cargador, lo lleve a la memoria principalde la misma. A partir de ese momento, la CPU empezará a ejecutarlo.

Page 8: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

8

3.- ESTRUCTURA DE UN PROGRAMA EN LENGUAJE CUn programa escrito en lenguaje C está compuesto por una o más funciones. Como ya essabido, una función es un programa que sirve para realizar una tarea determinada, por ejemplo, lafunción scanf sirve para leer datos desde el teclado.Existe una función que está presente en todos los programas escritos en lenguaje C, sumisión es marcar el inicio y fin de la ejecución de cada uno de ellos; es la función principal, laprimera que se ejecuta; es la función main. Su sintaxis "básica" es:

int main(){

<bloque_de_instrucciones>}

La función main contiene al bloque de instrucciones principal de un programa, dentro de loscaracteres abrir llave ({) y cerrar llave (}).Los paréntesis "()" escritos después de main sirven para indicar que el identificador main esuna función. Es importante comprender que main no es una palabra reservada de C. Ningúnidentificador de función lo es.Finalmente, no podemos pasar por alto que delante de main se ha escrito la palabrareservada int; enseguida veremos el porqué.4.- TIPOS DE INSTRUCCIONES EN LENGUAJE C

En lenguaje C, las instrucciones, también llamadas sentencias, se pueden clasificar en:De expresión.De control.Compuestas.Una instrucción compuesta siempre alberga, entre llaves ({...}), a un <bloque_de_instrucciones>:{

<bloque_de_instrucciones>}

Un bloque de instrucciones puede estar compuesto por una o más instrucciones, que, a suvez, pueden ser instrucciones de expresión, de control y/o compuestas nuevamente.

Page 9: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

9

El cuerpo de toda función es una instrucción compuesta. Sirva como ejemplo el cuerpo de lafunción main, el cual alberga al bloque de instrucciones principal de un programa escrito enlenguaje C.Las instrucciones de expresión, también conocidas como instrucciones simples oelementales, son aquellas que representan a las acciones más pequeñas (elementales) que sepueden ejecutar en un programa, y siempre van seguidas de un carácter punto y coma (;), el cualindica que la instrucción ha terminado:<instrucción_de_expresión>;

Una instrucción de expresión es, en sí misma, una expresión. De modo que, la acción que se ejecutaes la evaluación de dicha expresión:<expresión>

En cuanto a las instrucciones de control, existen de distintos tipos, y todas sirven paramodificar el flujo de control de un programa. Veremos que, algunas de ellas deben ir seguidas delcarácter punto y coma (;), pero otras no.

Page 10: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

10

5.- MI PRIMER PROGRAMA EN LENGUAJE CEjemplo:Se quiere escribir un programa que muestre por pantalla un mensaje de saludo:Hola mundoObsérvese que, el saludo se visualiza justo en la esquina superior izquierda de la pantalla.Más adelante se estudiará cómo se puede mostrar en otro lugar de la pantalla.En lenguaje C, el código fuente de dicho programa puede ser:#include <stdio.h>int main(){

printf( "Hola mundo" );return 0;

}

Todas las funciones de la biblioteca estándar de lenguaje C son subprogramas que ya estáncompilados, es decir, junto a cualquier compilador de lenguaje C se acompañan los códigos objetode todas las funciones de su biblioteca estándar, pero no sus códigos fuente. Por tanto, aunque nosea posible modificar sus códigos fuente, sí se puede hacer uso de dichas funciones en cualquierprograma. Por ejemplo, se puede llamar a la función printf para que muestre por pantalla el saludo"Hola mundo".printf( "Hola mundo" );Dentro de los paréntesis "()" de la función printf, se debe escribir, entre comillas dobles ("),el mensaje o cadena de caracteres que se desea mostrar por pantalla.Obsérvese que, después del carácter cerrar paréntesis ")" se ha escrito un punto y coma (;),esto implica que la llamada a la función printf es considerada como una instrucción de expresión.Del código fuente preprocesado de un programa, el compilador generará un código objetoque se debe unir (enlazar) con los códigos objeto de las funciones de la biblioteca estándar dellenguaje C que se llamen desde dicho programa. Por ejemplo, el código objeto de nuestro primerprograma se debe enlazar con el código objeto del subprograma printf.El enlazador sabe dónde encontrar el código objeto de las funciones de la bibliotecaestándar de C que utilice un programa. Sin embargo, para poder utilizar una función (sea de labiblioteca estándar de C o no) en un programa, la función debe ser declarada previamente, al igualque se tienen que declarar las variables y las constantes que usa un programa.

Page 11: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

11

Para que el compilador conozca la declaración de la función printf, hay que utilizar ladirectiva del preprocesador #include:#include <stdio.h>En este caso, la directiva #include indica, al preprocesador, que debe incluir, antes de lacompilación, en el código fuente del programa, el contenido del archivo <stdio.h> (stdio, StandardInput/Output). En dicho archivo están escritas las declaraciones de todas las funciones de entrada ysalida estándar de la biblioteca estándar de C, como printf. Si el compilador no sabe quien es printf,no podrá generar el código objeto del programa.Las funciones de la biblioteca estándar de C están clasificadas en base a su funcionalidad, ysus declaraciones se agrupan en archivos con extensión (.h), los cuales son llamados archivos decabecera. Además de stdio.h, algunos de los archivos de cabecera más utilizados en lenguaje C son:math.h, string.h y stdlib.h. En ellos están escritas, respectivamente, las declaraciones de lasfunciones matemáticas, funciones de cadena y funciones de utilidad de la biblioteca estándar de C.Después de #include, el nombre del archivo de cabecera se puede escribir entre loscaracteres menor y mayor (<stdio.h>), o entre comillas dobles ("stdio.h"). Cuando se escriba entrecomillas dobles, el preprocesador buscará dicho archivo en el directorio actual de trabajo, y de noencontrarlo ahí, entonces lo buscará en el directorio especificado por el compilador. En el caso deescribirse entre los caracteres menor y mayor, el proceso de búsqueda será al revés.Además de la directiva del preprocesador #include, existen otras, pero, ninguna de ellas esuna palabra reservada del lenguaje C.El código objeto generado por el compilador de C tendrá "huecos" (espacios) en donde mástarde el enlazador escribirá el código objeto correspondiente a las llamadas de las funciones yacompiladas (como printf) y, así, generar el archivo ejecutable.Toda función retorna un valor. En nuestro primer programa se ha escrito:return 0;Esto quiere decir que la función main devuelve el valor 0. Precediendo a main se ha escrito lapalabra reservada int, indicando así, que la función retornará un valor de tipo int (entero).int main()En general, la instrucción return suele ser la última del bloque de instrucciónes de lafunción main. Al retornar el valor 0, indica (informa al sistema operativo) que el programa finalizócorrectamente, es decir, sin producirse ningún error en su ejecución. Cuando la función maindevuelva un valor distinto de cero, esto siginificará que se ha producido algún error en la ejecucióndel programa, o que ha ocurrido algo fuera de lo normal.La instrucción return es una de las instrucciones de control que existen en lenguaje C. Portanto, es una palabra reservada. Después del valor de retorno (que es una expresión) se debeescribir un punto y coma (;). La sintaxis de la instrucción return es:

Page 12: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

12

return <expresión>;

Por el momento, se ha visto que la sintaxis "básica" de un programa escrito en lenguaje C es:[ <directivas_del_preprocesador> ]int main(){

<bloque_de_instrucciones>}

Ahora es una buena ocasión para poner en práctica lo aprendido en el apartado Fases de laPuesta a punto de un Programa. Para ello, puede consultar las Guías de Uso de algunoscompiladores de C/C++.

Page 13: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

13

IIII..-- EELLEEMMEENNTTOOSS BBÁÁSSIICCOOSS..1.- TIPOS DE DATOS.

Datos de Tipo Entero (int)Datos de Tipo Real (float o double)Datos de Tipo Carácter (char)Datos sin Valor (void)Datos de Tipo LógicoDatos de Tipo Cadena1.1.- TIPOS DE DATOS EN LENGUAJE C.

En lenguaje C se dice que todos los datos que utilizan los programas son básicos (simplespredefinidos o estándares) o derivados. Los tipos básicos en lenguaje C se clasifican en:

Figura - Clasificación de los tipos de datos básicos en lenguaje C.1.2.- DATOS DE TIPO ENTERO EN LENGUAJE C (INT)

Un dato de tipo entero (int en lenguaje C ) es aquel que puede tomar por valor un númeroperteneciente al conjunto de los números enteros (Z), el cual está formado por los númerosnaturales, su opuestos (números negativos) y el cero.Z = { ..., -3, -2, -1, 0, 1, 2, 3, ... }

Page 14: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

14

Ejemplo:La edad de una persona y el año en que nació, son dos datos de tipo entero:Edad...: 29Año....: 1976Z es un conjunto infinito de números enteros, y como el ordenador no puede representarlostodos, un dato de tipo entero sólo puede tomar por valor un número perteneciente a unsubconjunto de Z. Los valores máximo y mínimo de dicho subconjunto varían según lascaracterísticas de cada ordenador y del compilador que se utilice.

1.3.- DATOS DE TIPO REAL EN LENGUAJE C (FLOAT O DOUBLE).Un dato de tipo real (float o double en lenguaje C) es aquel que puede tomar por valor unnúmero perteneciente al conjunto de los números reales (R), el cual está formado por los númerosracionales e irracionales.Ejemplo:El peso de una persona (en kilogramos) y su altura (en centímetros), son datos que puedenconsiderarse de tipo real.Peso.....: 75,3Altura...: 172,7R es un conjunto infinito de números reales, y como el ordenador no puede representarlostodos, un dato de tipo real sólo puede tomar por valor un número perteneciente a un subconjuntode R. Los valores de dicho subconjunto varían según las características de cada ordenador y delcompilador que se utilice.La diferencia principal entre float y double está en el hecho de que un dato de tipo doublepuede tomar por valor un número perteneciente a un subconjunto de R mayor que un dato de tipofloat.

1.4.- DATOS DE TIPO CARÁCTER EN LENGUAJE C (CHAR)Un dato de tipo carácter (char en lenguaje C) es aquel que puede tomar por valor uncarácter perteneciente al conjunto de los caracteres que puede representar el ordenador.En lenguaje C, el valor de un dato de tipo carácter se debe representar entre comillassimples (').Ejemplo:En un examen con preguntas en las que hay que seleccionar la respuesta correcta entrevarias opciones dadas (a, b, c, d, e), la respuesta correcta de cada una de las preguntas es un dato detipo carácter.Respuesta correcta a la pregunta 3...: 'c'

Page 15: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

15

1.5.- DATOS SIN VALOR EN LENGUAJE C (VOID)Un dato sin valor (void en lenguaje C) es un dato que no puede tomar por valor nigún valor,es decir, es un dato vacío (nulo).

1.6.- DATOS DE TIPO LÓGICO EN LENGUAJE CEn programación, un dato de tipo lógico es aquel que puede tomar por valor sólo uno de losdos siguientes:{ verdadero, falso }Los valores verdadero y falso son contrapuestos, de manera que, un dato de tipo lógicosiempre está asociado a que algo se cumpla o no se cumpla.Ejemplo:El estado de una barrera de paso de trenes es un dato que puede considerarse de tipológico, por ejemplo, asociando verdadero a que esté subida y falso a que esté bajada.Estado...: falso (indica que la barrera está bajada)En lenguaje C no existen datos de tipo lógico (que sí existen en otros lenguajes deprogramación). Ahora bien, se pueden simular con datos de tipo entero, considerándose el valorcero (0) como falso, y cualquier otro valor entero como verdadero (para ello, generalmente, seemplea el valor uno (1)).

1.7.- DATOS DE TIPO CADENA EN LENGUAJE CDe todos los tipos de datos que no son básicos se dice que son derivados, ya que, estánbasados en alguno que sí lo es. Por ejemplo, los datos de tipo cadena son aquellos que puedentomar por valor una secuencia de caracteres.En lenguaje C, el valor de un dato de tipo cadena se debe representar entre comillas dobles(").

Ejemplo:El título de un libro y el nombre de su autor, son datos de tipo cadena.Título...: "La Odisea" (cadena de 9 caracteres)Autor....: "Homero" (cadena de 6 caracteres)Obsérvese que, en la cadena "La Odisea", el carácter espacio en blanco también se cuenta.

Page 16: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

16

2.- IDENTIFICADORES EN LENGUAJE CIdentificadoresEjemplos de Identificadores válidos y no válidosPalabras Reservadas2.1.- IDENTIFICADORES.

La mayoría de los elementos de un programa se diferencian entre sí por su nombre. Porejemplo, los tipos de datos básicos en lenguaje C se nombran como:char, int, float, double y voidCada uno de ellos es un identificador. Un identificador es el nombre que se le da a unelemento de un algoritmo (o programa). Por ejemplo, el tipo de dato int hace referencia a un tipo dedato que es distinto a todos los demás tipos de datos, es decir, los valores que puede tomar un datode tipo entero, no son los mismos que los que puede tomar un dato de otro tipo.Los identificadores char, int, float, double y void están predefinidos, forman parte dellenguaje C. No obstante, en el código de un programa también pueden existir identificadoresdefinidos por el programador. Por ejemplo, un programa puede utilizar variables y constantesdefinidas por el programador.En lenguaje C, a la hora de asignar un nombre a un elemento de un programa, se debe teneren cuenta que todo indenficador debe cumplir las siguientes reglas de sintaxis:Consta de uno o más caracteres.El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos losdemás pueden ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas omayúsculas del alfabeto inglés. Así pues, no está permitido el uso de las letras 'ñ' y 'Ñ'.No pueden exitir dos identificadores iguales, es decir, dos elementos de un programa nopueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no puedaaparecer más de una vez en un programa.De la segunda regla se deduce que un identificador no puede contener caracteres especiales,salvo el carácter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde nidiéresis.2.2.- EJEMPLOS DE IDENTIFICADORES VÁLIDOS Y NO VÁLIDOS EN LENGUAJE C

A continuación, se muestran algunos ejemplos de identificadores válidos en lenguaje C yotros que no lo son:

Page 17: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

17

Ejemplo 1:Algunos identificadores válidos que pueden ser definidos por el programador son:numerodia_del_mesPINGUINO1_ciudadZ

Ejemplo 2:Los siguientes identificadores no son válidos por incumplir la segunda regla:123_DÍAnumero*lugar de nacimientoaño

Ejemplo 3:Los siguientes identificadores no pueden ser definidos por el programador:intcharint y char son identificadores predefinidos (ya existen en lenguaje C), por tanto, no puedenser definidos por el programador, en cumplimiento de la tercera regla.Los identificadores son sensibles a minúsculas y mayúsculas.Ejemplo 4:Mes y mes son considerados identificadores distintos.Por último, hay que decir que, es aconsejable que los identificadores tengan un significadoafín a lo que representan.

2.3.- PALABRAS RESERVADAS EN LENGUAJE CLas palabras reservadas son identificadores predefinidos (tienen un significado especial).En todos los lenguajes de programación existe un conjunto de palabras reservadas. Por elmomento, en lenguaje C, se han estudiado las siguientes:

char, int, float, double, voidEn la sintaxis de ANSI C, puede consultar toda la lista de palabras reservadas que existen enlenguaje C.

Page 18: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

18

3.- VARIABLES EN LENGUAJE CVariables en lenguaje.Ejemplos de declaración de Variables

3.1.- VARIABLE DE LENGUAJE.En lenguaje C hay que escribir un punto y coma (;) después de la declaración de una o másvariables. Así pues, la sintaxis para declarar una variable es:<tipo_de_dato> <variable> [ = <expresión> ];

Y para más de una variable del mismo tipo se utiliza la sintaxis:<tipo_de_dato> <variable_1> [= <expresión_1>],

<variable_2> [= <expresión_2>],...,

<variable_n> [= <expresión_n>];

Una expresión representa a un valor de un tipo de dato. En el apartado Operadores yExpresiones se estudiarán en detalle las expresiones.3.2.- EJEMPLOS DE DECLARACIÓN DE VARIABLES EN LENGUAJE CA continuación, se muestran algunos ejemplos de declaración de variables en lenguaje C.Ejemplo 1:La declaración de una variable para almacenar la edad de una persona se escribe:int edad;

Ejemplo 2:Para declarar varias variables del mismo tipo de dato se puede escribir:int edad;int numero_de_hijos;

Page 19: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

19

Ejemplo 3:O también, en la misma línea separadas por el carácter coma (,):int edad, numero_de_hijos;

Ejemplo 4:Si se desea declarar una variable para almacenar un número entero y que, inicialmente,contenga el valor 35, se debe escribir:int numero = 35;

Ejemplo 5:A continuación, se muestra la declaración de una variable para almacenar una letra delalfabeto y que, inicialmente, contenga el valor 'Z':char letra = 'Z';Ejemplo 6:Para declarar una variable que pueda almacenar el nombre de una persona y que,inicialmente, contenga el valor "Isabel", escribiremos:char nombre[7] = "Isabel";Un dato de tipo cadena es un dato compuesto (estructurado), debido a que está formadopor una agrupación de caracteres. Pues bien, dicha agrupación se define por medio de un array. Unarray agrupa, bajo el mismo nombre de variable, a una colección de elementos (datos) del mismotipo. Para declarar un array de caracteres, después del identificador de la variable, se tiene queescribir, entre corchetes "[]", el número de caracteres que se van a almacenar en el array, más uno.Por tanto, en este caso, puesto que "Isabel" tiene seis caracteres, hay que escribir un 7 entre loscorchetes.Se tiene que escribir un número más, porque en la memoria se va a reservar espacio paralos seis caracteres de la cadena "Isabel", más uno, conocido éste como el carácter nulo, el cual serepresenta mediante una barra invertida y un cero (\0). El sistema se encarga de "poner" dichocarácter, que indica el fin de la cadena.

Page 20: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

20

Por consiguiente, en la memoria se almacenarán siete caracteres consecutivos:

Los caracteres del array pueden ser referenciados mediante el identificador del mismo,seguido de un número entre corchetes. A dicho número, de manera formal, se le llama "índice", ypuede oscilar entre el valor 0 y n-1, siendo n el número de caracteres que pueden ser almacenadosen memoria en el array, en este caso 7.<nombre_de_la_variable>[<índice>]Por ejemplo, nombre[3] hace referencia al espacio de memoria donde está el carácter 'b'.Ejemplo 7:Si se declara la variable de tipo cadena:char nombre[7] = "June";En memoria tendremos:

Fíjese que, en esta ocasión, el array de caracteres nombre ha sido inicializado con el valor"June". De manera que, el fin de la cadena se encuentra en nombre[4], y no en el último espacio dememoria reservado para el array, ya que, "June" tiene, solamente, cuatro caracteres.

Page 21: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

21

4.- CONSTANTES EN LENGUAJE C.Constantes de Tipo EnteroConstantes de Tipo RealConstantes de Tipo CarácterConstantes de Tipo Cadena

4.1.- CONSTANTE EN LENGUAJE C.En lenguaje C, una constante puede ser de tipo entero, real, carácter, de cadena oenumerado. Las contantes de tipo enumerado se van a estudiar más adelante. En cuanto a lasdemás, se pueden expresar de dos formas diferentes:1. Por su valor.2. Con un nombre (identificador).Ejemplo 1:Las siguientes contantes de tipo entero están expresadas por su valor:-510Para expresar una constante con un nombre, la constante debe ser declarada previamente.Las constantes que se declaran en un programa escrito en lenguaje C reciben un tratamientodiferente al de la mayoría de los lenguajes de programación. En C, para representar a las constantes,se utilizan constantes simbólicas. Una constante simbólica representa (sustituye) a una secuenciade caracteres, en vez de representar a un valor (dato almacenado en memoria).Para declarar una constante simbólica, en lenguaje C, se utiliza una nueva directiva delpreprocesador:

#define <constante> <secuencia_de_caracteres>

La directiva #define indica al preprocesador que debe sustituir, en el código fuente delprograma, todas las ocurrencias del <nombre_de_la_constante> por la <secuencia_de_caracteres>,antes de la compilación.Ejemplo 2:Dos constantes muy habituales son:#define PI 3.141592 #defineNUMERO_E 2.718281

Page 22: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

22

En programación es una buena práctica escribir los identificadores de las constantes enmayúsculas, de esta forma es más fácil localizarlos en el código de un programa. Nótese que,después de la declaración de una constante simbólica no se escribe un carácter punto y coma (;),cosa que sí se debe hacer al declarar una variable.Por otra parte, no se puede declarar más de una constante simbólica en una misma línea decódigo.Ejemplo 3:Para declarar las constantes simbólicas PI y NUMERO_E, no se puede escribir:#define PI 3.141592, NUMERO_E 2.718281Por otra parte, en C, es posible declarar una variable indicando que su valor es inalterable.Para ello, se utiliza el cualificador const.Ejemplo 4:Uso de const:const int temperatura = -5;En el ejemplo, se ha declarado la variable entera temperatura inicializada al valor -5 y, pormedio de const, que es una palabra reservada, se ha indicado que su valor no puede cambiardurante la ejecución del programa. En cierta manera, la variable temperatura está simulando a unaconstante.

Ya se sabe cómo escribir la declaración de una constante y de las variables que utilice unprograma y, también, se conoce el lugar en que se tiene que escribir la directiva del preprocesador#define para declarar la constante.En cuanto a las variables que utiliza un programa, su declaración puede escribirse en varioslugares, pero, de momento las vamos a declarar inmediatemente después del carácter abrir llave ({)de la función main.[ <directivas_del_preprocesador> ]

int main(){

[ <declaraciones_de_variables> ]<lista_de_instrucciones>

}

Page 23: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

23

Ejemplo 5:Si en un programa se quieren declarar dos variables (area y radio) y una constante (PI), sepuede escribir:#define PI 3.141592int main(){

float area, radio;...

}

4.2.- CONSTANTES DE TIPO ENTERO EN LENGUAJE C.Una constante de tipo entero es aquella que representa a un valor (dato) perteneciente alsubconjunto de Z representable por el ordenador.Ejemplo 1:Suponiendo que el ordenador (utilizando dieciséis bits) pueda representar, enComplemento a 2, el siguiente conjunto de valores enteros:{ -32768, -32767, ..., 1, 0, -1, ..., 32766, 32767 }Algunos ejemplos de constantes de tipo entero son:-320000000077 (Los ceros a la izquierda no son significativos)+1111Obsérvese que, además de los caracteres numéricos, dígitos del (0) al (9), también se puedehacer uso de los caracteres especiales (+) y (-) para indicar el signo de un número entero, el cual espositivo por omisión. Sin embargo, en lenguaje C, es incorrecto usar los caracteres coma (,) y/opunto (.) para expresar constantes de tipo entero.Ejemplo 2:Por tanto, es incorrecto escribir:-32.0000,0+1,111.00

Ejemplo 3:Otros ejemplos incorrectos de constantes de tipo entero son:++111 (No se puede duplicar el signo)38000 (No pertenece al subconjunto de Z representable por el ordenador)

Page 24: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

24

4.3.- CONSTANTES DE TIPO REAL EN LENGUAJE C.Una constante de tipo real es aquella que representa a un valor (dato) perteneciente alsubconjunto de R representable por el ordenador.

Ejemplo 1:Algunos ejemplos son:8.12000.333 (Los ceros a la izquierda no son significativos)+1111.809-3200< (También se puede escribir -3200.0).56 (También se puede escribir 0.56)Obsérvese que, además de los caracteres numéricos, dígitos del (0) al (9), también se puedehacer uso de los caracteres especiales (+) y (-) para indicar el signo de un número real. Además, enlenguaje C, obligatoriamente debe aparecer el carácter punto (.), o el carácter (e) o (E) seguido delexponente, del cual también puede indicarse su signo con los caracteres (+) y (-). Los signos delexponente y del número en sí, por omisión, son positivos

Ejemplo 2:Las siguientes constantes de tipo real están expresadas correctamente:-77e-3+1111e+22000E+23040e2Una constante de tipo real también se puede expresar con el carácter punto (.) y elexponente al mismo tiempo.

Ejemplo 3:Algunos ejemplos son:-50.50e-4400.e-3+65.65E+2.7e2El exponente tiene la función de desplazar la posición del punto decimal hacia la derecha sies positivo o, hacia la izquierda si es negativo.

Page 25: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

25

Ejemplo 4:Así pues, las siguientes constantes de tipo real representan al mismo valor:0.004E+34..4e1+400.00e-24000E-3

Ejemplo 5:Algunos ejemplos de constantes de tipo real incorrectas son:-200 (No aparece el punto ni el exponente)-20,0 (No puede aparecer la coma)--111- (No se puede duplicar el signo)-111.. (No se puede duplicar el punto)-111.11. (No puede aparecer más de un punto)+22e (Después del carácter (e) o (E) se debe escribir el exponente)+22ee6 (No se puede duplicar el carácter (e) o (E))+22e 6 (No se puede escribir el carácter espacio en blanco)38E-2.2 (El exponente debe ser una cantidad entera)

4.4.- CONSTANTES DE TIPO CARÁCTER EN LENGUAJE CUna constante de tipo carácter es aquella que representa a un valor (dato) perteneciente alconjunto de caracteres que puede representar el ordenador.

Ejemplo 1:Las siguientes constantes de tipo carácter están expresadas por su valor:'a''T''5''+''.'

Ejemplo: 2En lenguaje C, para representar el carácter comilla simple ('), se debe anteponer el carácterbarra invertida (\).'\''

Page 26: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

26

4.5.- CONSTANTES DE TIPO CADENA EN LENGUAJE C.Una constante de tipo cadena es aquella que representa a un valor (dato) de tipo cadena, esdecir, representa a una secuencia de caracteres.

Ejemplo 1:Las siguientes constantes de tipo cadena están expresadas por su valor:"Alejandro""Lucerna""Barcelona 2000"

Ejemplo 2:En lenguaje C, para representar el carácter comilla doble (") dentro de una cadena, se debeanteponer el carácter barra invertida (\).#define FIESTA "7 de julio \"San Fermín\""

Page 27: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

27

5.- OPERADORES Y EXPRESIONES EN LENGUAJE CExpresiones AritméticasEl Operador DivisiónConversión de Tipo (Casting)La Función powExpresiones LógicasOperadores RelacionalesOperadores LógicosLa Función strcatOperadores de AsignaciónLa Función strcpyLos Operadores Incremento (++) y Decremento (--)Prioridad de Operadores en Lenguaje CEn un programa, el tipo de un dato determina las operaciones que se pueden realizar con él.Por ejemplo, con los datos de tipo entero se pueden realizar operaciones aritméticas, tales como lasuma, la resta o la multiplicación.Ejemplo 1:Algunos ejemplos son:111 + 6 (operación suma)19 - 72 (operación resta)24 * 3 (operación multiplicación)Todas las operaciones del ejemplo constan de dos operandos (constantes enteras) y unoperador. La mayoría de las veces es así, pero, también es posible realizar operaciones con distintonúmero de operadores y/u operandos.Ejemplo 2:Por ejemplo:111 + 6 - 8 (tres operandos y dos operadores)-( ( +19 ) + 72 ) (dos operandos y tres operadores)-( -72 ) (un operando y dos operadores)En las operaciones del ejemplo se puede observar que los caracteres más (+) y menos (-)tienen dos usos:1. Operadores suma y resta.2. Signos de un número (también son operadores).Los operadores de signo más (+) y menos (-) son operadores monarios, también llamadosunarios, ya que, actúan, solamente, sobre un operando.

Page 28: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

28

Los caracteres abrir paréntesis "(" y cerrar paréntesis ")" se utilizan para establecer laprioridad de los operadores, es decir, para establecer el orden en el que los operadores actúansobre los operandos.Un operador indica el tipo de operación a realizar sobre los operandos (datos) que actúa.Los operandos pueden ser:Constantes (expresadas por su valor o con un nombre (identificador)).Variables.Llamadas a funciones.Elementos de formaciones (arrays).En este apartado se van a tratar operaciones en donde sólo aparecen constantes y variables.Cuando se combinan uno o más operadores con uno o más operandos se obtiene unaexpresión. De modo que, una expresión es una secuencia de operandos y operadores escrita bajounas reglas de sintaxis.Ejemplo 3:Dadas las siguientes declaraciones de constantes y variables:#define PI 3.141592

int numero = 2;float radio_circulo = 3.2;Algunos ejemplos de expresiones son:2 * PI * radio_circulo( PI * PI )numero * 5De sus evaluaciones se obtienen los valores:20.106189 (valor real) ( 2 * 3.141592 * 3.2 )9.869600 (valor real) ( 3.141592 * 3.141592 )10 (valor entero) ( 2 * 5 )Un operador siempre forma parte de una expresión, en la cual, el operador siempre actúasobre al menos un operando. Por el contrario, un operando sí puede aparecer solo en unaexpresión.En programación, de la evaluación de una expresión siempre se obtiene un valor. Dichovalor puede ser de tipo: entero, real, lógico, carácter o cadena.Por consiguiente, una expresión puede ser:Aritmética (devuelve un número entero o real).Lógica (devuelve un valor lógico: verdadero o falso)De carácter (devuelve un carácter representable por el ordenador).De cadena (devuelve una cadena).

Page 29: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

29

6.- EXPRESIONES ARITMÉTICAS EN LENGUAJE C.6.1.- EXPRESIONES ARITMÉTICAS.

De la evaluación de una expresión aritmética siempre se obtiene un valor de tipo entero oreal. En lenguaje C existen algunos operadores que no se utilizan en pseudocódigo, y al revés. Acontinuación, se van a ver algunas similitudes y diferencias entre ambos lenguajes.

Figura - Comparación entre operadores aritméticos en pseudocódigo y en C.Como se puede apreciar, existen tres diferencias importantes entre los operadoresaritméticos en pseudocódigo y en lenguaje C:1. El operador potencia (**) no existe en lenguaje C.2. En lenguaje C, sólo existe un operador de división (/).3. En lenguaje C, el operador módulo (mod) se escribe con el carácter porcentaje (%).Ejemplo:A partir de las variables:En pseudocódigo:entero a = 4, b = 7, c = 2En lenguaje C:

Page 30: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

30

int a = 4, b = 7, c = 2;podemos escribir, por ejemplo, la expresión:En pseudocódigo:-a * ( b mod c )En lenguaje C:-a * ( b % c )De la evaluación de esta expresión se obtiene el valor-4 (actúan en orden los operadores: (%), menos (-) y (*))

6.2.- EL OPERADOR DIVISIÓN (/) EN LENGUAJE CPuesto que, en lenguaje C, sólo existe un operador de división, el resultado de una divisióndependerá de los operandos. La regla a seguir es: "si ambos operandos son enteros, el resultado deevaluar la expresión será entero, en caso contrario, es decir, si al menos un operando es real, elresultado será real".Ejemplo:Declaradas las variables:

int h = 3, v = 6;De las expresiones:v / h5 / h5.0 / 25 / 2.5.4 / 2.0se obtienen los valores:2 (valor entero, ambos operandos son enteros)1 (valor entero, ambos operandos son enteros)2.5 (valor real, el primer operando es real)2.5 (valor real, el segundo operando es real)2.7 (valor real, ambos operandos son reales)

Page 31: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

31

6.3.- CONVERSIÓN DE TIPO (CASTING) EN LENGUAJE C.En lenguaje C, cuando los dos operandos de una división (/) son enteros, pero aun así, de suevaluación se quiere obtener un valor real, hay que hacer un casting (o conversión de tipo). Susintaxis es:

( <tipo_de_dato> ) <expresión>;

De esta forma, se consigue cambiar el tipo de dato del valor resultante de evaluar la<expresión> a un <tipo_de_dato> deseado.Ejemplo:Para cambiar el tipo de dato de los valores resultantes de las siguientes expresiones:5 (valor entero)v (valor entero)5.0 (valor real)v / h5 / h5.0 / 25 / 2.5.4 / 2.0se puede escribir:( float ) 5( float ) v( int ) 5.0( float ) v / h( float ) 5 / h( int ) 5.0 / 25 / ( int ) 2.( int ) ( 5.4 / 2.0 )de tal forma que, los resultados de evaluar las expresiones anteriores son:5.000000 (valor real)6.000000 (valor real)5 (valor entero)2.000000 (actúan en orden los operadores: "( <tipo> )" y (/))1.666667 (actúan en orden los operadores: "( <tipo> )" y (/))2 (actúan en orden los operadores: "( <tipo> )" y (/))2 (actúan en orden los operadores: "( <tipo> )" y (/))2 (actúan en orden los operadores: (/) y "( <tipo> )")

Page 32: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

32

6.4.- LA FUNCIÓN POW EN LENGUAJE CEn lenguaje C, para realizar operaciones con potencias se utiliza una función de su bibliotecaestándar, en concreto la función pow, a la que hay que "darle" (pasarle) dos operandos entreparéntesis. La sintaxis de su llamada es:

pow( <operando_número_base>, <operando_exponente> )

La función pow devuelve, sobre el propio identificador de la función, el resultado que seobtiene de elevar el <operando_número_base> al <operando_exponente>. El valor de retorno dela función es de tipo double, con independencia de que los operandos sean reales o enteros.Ejemplo:Partiendo de la variable:En pseudocódigo:entero numero = 9En lenguaje C:int numero = 9;De la expresión:En pseudocódigo:1 + numero ** 2En lenguaje C:1 + pow ( numero, 2 )La función pow devuelve el resultado de elevar el valor de la variable numero a 2. Demanera que, el resultado de evaluar la expresión anterior es:82.000000 (se obtiene de 1 + 81.000000)La declaración de la función pow se encuentra en el archivo de cabecera math.h. Por tanto,si en un programa se utiliza dicha función, habrá que escribir también:

#include <math.h>

Page 33: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

33

6.5.- EXPRESIONES LÓGICAS EN LENGUAJE CDe la evaluación de una expresión lógica siempre se obtiene un valor de tipo lógico(verdadero o falso). En las expresiones lógicas se pueden utilizar dos tipos de operadores:

6.5.1.- Operadores Relacionales en Lenguaje CUn operador relacional se utiliza para comparar los valores de dos expresiones. Éstas debenser del mismo tipo (aritméticas, lógicas o de carácter).En la siguiente figura se comparan los operadores relacionales en pseudocódigo y enlenguaje C:

Figura - Comparación entre operadores relacionales en pseudocódigo y en C.Las diferencias son dos:1. En C, el operador igual que (=) se escribe con los caracteres igual-igual (==).2. En C, el operador distinto que (<>) se escribe con los caracteres admiración-igual (!=).Ejemplo:A partir de las variables:En pseudocódigo:entero p = 45, q = 186En lenguaje C:int p = 45, q = 186;

Page 34: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

34

podemos escribir la expresión:En pseudocódigo:p <> qEn lenguaje C:p != qDe su evaluación se obtiene:En pseudocódigo:Verdadero ( p es distinta de q )En lenguaje C:1 (C simula el valor lógico verdadero con el valor entero 1)En lenguaje C, los datos de tipo lógico se simulan con datos de tipo entero, considerándoseel valor 0 como falso, y cualquier otro valor entero como verdadero.

6.5.2.- Operadores Lógicos en Lenguaje C.Un operador lógico actúa, exclusivamente, sobre valores de expresiones lógicas.En la siguiente figura se comparan los operadores lógicos en pseudocódigo y en lenguaje C:

Figura - Comparación entre operadores lógicos en pseudocódigo y en C.

Page 35: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

35

Ejemplo:Habiendo declarado las variables:En pseudocódigo:entero r = 2, s = 9, t = 8En lenguaje C:int r = 2, s = 9, t = 8;se puede escribirEn pseudocódigo:No ( r = s o r <= t )En lenguaje C:! ( r == s || r <= t )La expresión se evalúa aEn pseudocódigo:falso (actúan en orden los operadores: (<=), (==), (||) y (!))En lenguaje C:0 (C simula el valor lógico falso con el valor entero 0)

6.6.- LA FUNCIÓN STRCAT EN LENGUAJE CEn lenguaje C, no existe el operador concatenación (+), que sí existe en otros lenguajes. Sinembargo, para concatenar cadenas, se puede utilizar la función strcat, que está disponible en labiblioteca estándar de C. La sintaxis de una llamada a strcat es:

strcat( <cadena_destino>, <cadena_fuente> )La función strcat añade el contenido de la <cadena_fuente> a la <cadena_destino>.Ejemplo:Dadas las siguientes declaraciones de arrays de caracteres:En pseudocódigo:

Page 36: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

36

cadena nombre = "Ana", apellido = "Luz"En lenguaje C:char nombre[8] = "Ana", apellido[4] = "Luz";

es posible escribir la expresión:En pseudocódigo:nombre + apellidoEn lenguaje C:strcat ( nombre, apellido )Observe el efecto que tiene, en la memoria de la computadora, la ejecución de la funciónstrcat. El contenido del array apellido se concatena (añade) al array nombre.La declaración de la función strcat se encuentra en el archivo de cabecera string.h. Por tanto,para poder usar dicha función en un programa, hay que escribir:

#include <string.h>

6.7.- OPERADORES DE ASIGNACIÓN EN LENGUAJE CEn lenguaje C existen expresiones de asignación y, para escribirlas, se utilizan los siguientesoperadores de asignación:

Figura - Clasificación de los operadores de asignación en C.

Page 37: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

37

De ellos, el más utilizado es el operador de asignación (=). Su funcionalidad es equiparablea la de una instrucción de asignación en psedocódigo, y su sintaxis es muy similar.<nombre_de_la_variable> = <expresión>;Existen dos diferencias:1. En vez del símbolo reservado flecha izquierda (←), se utiliza el carácter igual (=).2. Se debe escribir un punto y coma (;) al final.Ejemplo 1:Partiendo de la constante simbólica

#define PI 3.141592y de las variablesfloat area, longitud, radio;una instrucción de asignación puede ser:radio = 5.78;Técnicamente, en lenguaje C, una asignación (=) es una operación, al igual que lo es unasuma (+) o una resta (-). En consecuencia, radio = 5.78 es una expresión de asignación, que entradentro de la categoría de las instrucciones de expresión.

<instrucción_de_expresión>;

De la evaluación de una expresión de asignación siempre se obtiene el mismo valor que elasignado a la variable, en este caso, 5.78.Si ahora escribimos:area = PI * pow ( radio, 2 );longitud = 2 * PI * radio;De la evaluación de estas instrucciones de expresión se obtienen los valores 57.046290 y36.316804, los cuales coinciden con los valores asignados a las variables area y longitud,respectivamente.Cuando el operador de asignación (=) se escribe precedido de un operador aritmético:suma (+), resta (-), multiplicación (*), división (/) o módulo (%), la unión de ambos se convierte enun nuevo operador de asignación que opera de la siguiente manera:"A la variable se le asigna el valor que se obtiene de evaluar<variable> <operador_aritmético> <expresión>."

Page 38: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

38

Ejemplo 2:Dada la siguiente declaración de variables:int m = 4, n = 1;

se puede escribir la instrucción de expresiónm += 3;que es equivalente a la instrucciónm = m + 3;En la memoria, cambiará el valor almacenado en el espacio representado por la variable m.

Si, a continuación, se ejecuta la instrucciónm *= n += 2;ahora, los valores de las variables m y n son:

Primero, se evalúa la expresión n += 2 (equivalente a n = n + 2). Esto produce que a lavariable n se le asigne un 3. En segundo lugar, se evalúa la expresión m *= 3 (equivalente a m = m *3), asignándosele a la variable m el valor 21.

Page 39: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

39

6.8.- LA FUNCIÓN STRCPY EN LENGUAJE CEn lenguaje C, para asignar una expresión de cadena a un array de caracteres, no se puedeutilizar el operador de asignación (=). Para ello, se puede utilizar la función strcpy, que estádisponible en la bibiliteca estándar de C. La sintaxis de una llamada a strcpy es:

strcpy( <variable_destino>, <cadena_fuente> )La función strcpy copia el contenido de la <cadena_fuente> en la <variable_destino>,siendo ésta un array de caracteres.Ejemplo:Habiendo declarado el siguiente array de caracteres:En pseudocódigo:cadena ciudadEn lenguaje C:char ciudad[6];es posible escribirEn pseudocódigo:ciudad ← "Roma" (instrucción de asignación)En lenguaje C:strcpy( ciudad, "Roma" ) (instrucción de expresión)Por tanto, en memoria tendremos:

La declaración de la función strcpy se encuentra en el archivo de cabecera string.h. Portanto, para poder usar dicha función en un programa, hay que escribir:#include <string.h>

Page 40: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

40

6.9.- LOS OPERADORES INCREMENTO (++) Y DECREMENTO (--) EN LENGUAJE CEn lenguaje C, tanto el operador incremento (++) como el operador decremento (--) actúansiempre sobre un solo operando, normalmente una variable. Por tanto, son operadores monarios, ysirven para incrementar o decrementar en una unidad el valor de dicho operando.Ejemplo 1:Declaradas las variables:int r = 8, s = 3;

se pueden escribr las instrucciones de expresión:r++;s--;Dichas instrucciones son equivalentes a:r = r + 1;s = s - 1;Y también se pueden escribir como:++r;--s;Tras su ejecución, el aspecto de la memoria será:En estas instrucciones, ambos operadores se pueden escribir, indistintamente, antes odespués de los operandos sobre los que actúan. Pero, cuando en una expresión, además deloperador incremento o decremento, también aparecen otros operadores, entonces sí que hay quetener en cuenta la diferencia que supone el escribirlos antes o después.Ejemplo 2:A partir de las variables:int i = 5, j, k = 5, m;Si se ejecutan las instrucciones:j = i++;m = ++k;

Page 41: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

41

Los valores de las variables en memoria serán:Obsérvese que, los valores de j y m son diferentes. Esto es debido a que, cuando se evalúa laexpresión j = i++, en primer lugar, se le asigna a j el valor de i (es decir, un 5) y, a continuación, seincrementa el valor de la variable i. Por el contrario, cuando se evalúa la expresión m = ++k,primero, se incrementa el valor de k (de 5 pasa a ser 6) y, después, este nuevo valor de k se leasigna a m.En resumen, cuando en una expresión el operador incremento (++) o decremento (--)precede al operando sobre el que actúa (por ejemplo ++k), antes de utilizar el valor de dichooperando para otro propósito, este se incrementa. De ser al revés, es decir, si es el operando quienprecede al operador (por ejemplo i++), el valor de dicho operando se incrementa después de serutilizado para otro fin.6.10.- PRIORIDAD DE OPERADORES EN LENGUAJE C

La prioridad de todos los operadores del lenguaje C estudiados hasta el momento en estecurso/tutorial es:

Figura - Prioridad de los operadores aritméticos, de índice de un array, de llamada a una función,relacionales, lógicos, de asignación y de conversión de tipo en C.

Page 42: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

42

Obsérvese que, en lenguaje C, tanto los paréntesis "( )" que se utilizan para llamar a unafunción, como los corchetes "[ ]" que albergan el índice de un array, también son consideradosoperadores. Además, son los operadores más prioritarios y, en una expresión, se evalúan deizquierda a derecha.Por otra parte, los operadores incremento (++), decremento (--) y conversión de tipo "(<tipo> )" entran dentro de la categoría de operadores monarios. De manera que, al igual que losoperadores signo más (+), signo menos (-), negación (!) y de asignación, todos ellos se evalúan dederecha a izquierda en una expresión, al revés que todos los demás.

Page 43: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

43

7.- FUNCIONES PRINTF Y SCANF.La Función printfTexto Ordinario en la Función printfEspecificadores de Formato en la Función printfSecuencias de Escape en la Función printfLa Función scanfEspecificadores de Formato en la Función scanfEjercicios de Entrada y Salida Estándar (scanf y printf)En lenguaje C no existen palabras reservadas para realizar entradas y salidas. Para ello, elprogramador puede hacer uso de las funciones de entrada y salida estándar proporcionadas por labiblioteca estándar de lenguaje C, como son printf y scanf, entre otras que estudiaremos másadelante en este curso/tutorial.

7.1.- LA FUNCIÓN PRINTF EN LENGUAJE CTexto Ordinario en la Función printfEspecificadores de Formato en la Función printfSecuencias de Escape en la Función printfLa función printf permite llevar hacia la salida estándar (la pantalla) los valores (datos)obtenidos de la evaluación de una lista de argumentos. La sintaxis de su llamada es:

printf( <cadena_de_control> [, <lista_de_argumentos> ] )

En programación, los argumentos (también llamados parámetros) se emplean paratransferir datos de un programa (o subprograma) llamante a otro llamado, y viceversa (del llamadoal llamante).Cuando desde un programa llamante se invoca a la función printf, a ésta se le pasa una listade argumentos (expresiones). Los valores (datos) obtenidos de la evaluación de esa lista deexpresiones son los que se van a mostrar por la pantalla. También la <cadena_de_control> es unargumento.En la <cadena_de_control>, el programador debe indicar el formato de salida de los datosque se van a mostrar por la pantalla. Para ello, se puede hacer uso de:Texto ordinario (texto normal).Especificadores de formato.Secuencias de escape.La <cadena_de_control> es, en sí misma, una cadena de caracteres, que se debe escribirentre comillas dobles (").

Page 44: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

44

7.2.- TEXTO ORDINARIO EN LA FUNCIÓN PRINTF DEL LENGUAJE CEn la función printf de la biblioteca estándar del lenguaje C, el texto ordinario que se puedeutilizar es texto normal y corriente, a diferencia de los especificadores de formato y de lassecuencias de escape, que se les considera texto especial.Ejemplo:En la llamada a la función printf de nuestro primer programa de este curso/tutorial, lacadena de control sólo contenía texto ordinario:

#include <stdio.h>int main(){

printf( "Hola mundo" );return 0;

} Nótese que, en este ejemplo, a la función printf no se le pasa ningún argumento, aparte de lacadena de control.Por pantalla aparecerá:Hola mundo

7.3.- ESPECIFICADORES DE FORMATO EN LA FUNCIÓN PRINTF DEL LENGUAJE CCuando a la función printf de la biblioteca estándar del lenguaje C se le pase una lista deargumentos (expresiones), se debe escribir un especificador de formato por cada argumento. En lafunción printf, los especificadores de formato establecen el formato de salida por pantalla de losargumentos. La forma más sencilla de escribir un especificador de formato es con el carácter tantopor ciento (%) seguido de un carácter de conversión que indique el tipo de dato del argumento. Demomento, en este curso/tutorial no es necesario conocer todos los especificadores de formato quese pueden usar en la función printf, pero sí, los más utilizados:

Figura - Especificadores de formato más utilizados en la función printf.

Page 45: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

45

Ejemplo 1:Dada la constante simbólica#define NOMBRE "Raquel"

si escribimos

printf( "Hola %s", NOMBRE );por pantalla se verá:Hola RaquelEl especificador de formato (%s) escrito en la cadena de control, indica que, por pantalla, seva a mostrar un dato de tipo cadena en ese lugar, en este caso, "Raquel".Ejemplo 2:Si se ejecuta el programa#include <stdio.h>int main(){

char nombre[8] = "Timoteo";int hermanos = 2, sobrinos = 4;printf( "%s tiene %d hermanos y %d sobrinos.",

nombre, hermanos, sobrinos );return 0;

}

por pantalla se verá:Timoteo tiene 2 hermanos y 4 sobrinos.En la cadena de control del ejemplo, los especificadores de formato (%s), (%d) y (%d)indican que, en esos lugares, y en dicho orden, va a aparecer un dato de tipo cadena, un dato de tipoentero y otro dato de tipo entero, respectivamente. En este caso, se muestran los valores "Timoteo",2 y 4. Cada especificador de formato de la cadena de control se hace corresponder con unargumento (expresión), en el mismo orden de aparición, de izquierda a derecha. En el caso de queexistan más argumentos que especificadores de formato, los "sobrantes" son ignorados. Por elcontrario, si existen menos argumentos que especificadores de formato, en pantalla se mostrarándatos inverosímiles.

Page 46: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

46

7.4.- SECUENCIAS DE ESCAPE EN LA FUNCIÓN PRINTF DEL LENGUAJE CUna secuencia de escape siempre representa a un carácter del ASCII. Dichos caracteres sepueden clasificar en:Gráficos (se corresponden con los símbolos más usados para escribir por los humanos).No gráficos (representan a acciones, como por ejemplo, mover el cursor de la pantalla alprincipio de la línea siguiente).La forma más sencilla de escribir una secuencia de escape es con el carácter barra invertida(\), seguido de un carácter especial. Por tanto, cuando en la cadena de control de la función printfse escriba una secuencia de escape, o bien se mostrará un carácter gráfico por pantalla, o bien serealizará una acción. Por ahora, no es necesario conocer todas las secuencias de escape que existenen lenguaje C, pero sí, algunas de las más utilizadas:

Figura - Secuencias de enlace más utilizadas en la función printf.En general, cuando se diseña el algoritmo de un programa, el programador no se preocupadel lugar exacto de la pantalla en donde van a aparecer los datos de salida del programa, ya que,este aspecto suele concretarse en la codificación.En Windows, la patanlla (de la consola) está compuesta por 25 filas (líneas) y 80 columnas,es decir, en pantalla se pueden visualizar 2000 caracteres a la vez (25*80).Normalmente, al ejecutar un programa escrito en lenguaje C, el cursor se posiciona (pordefecto) en la primera columna de la primera fila.

_ (cursor)A partir de esa posición, se mostrarán por pantalla los datos de salida de dicho programa.

Page 47: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

47

Ejemplo 1:Si se escribe#include <stdio.h>int main(){

printf( "uno dos tres" );return 0;

} Tal cual está escrita la función printf, por pantalla se verá el texto "uno dos tres" pegado a laesquina superior izquierda de la misma.uno dos tresHasta ahora, no nos hemos preocupado del lugar exacto de la pantalla donde queremos quese muestren los datos de salida. Sin embargo, si deseamos visualizar dicho texto en otro lugar de lapantalla, por ejemplo, en la segunda línea:uno dos tresEsto se puede conseguir haciendo uso de la secuencia de escape nueva línea (\n).

printf( "\nuno dos tres" );Partiendo de que, inicialmente, el cursor se encuentre en la primera columna de la primerafila, es decir, en la esquina superior izquierda de la pantalla, la secuencia de escape nueva línea (\n)lo moverá al principio de la segunda fila y, a continuación, se escribirá el texto "uno dos tres".Obsérvese que, los caracteres que forman la secuencia de escape, (\) y (n), no aparecen en pantalla.La instrucción anterior hace lo mismo que las dos siguientesprintf( "\n" );printf( "uno dos tres" );Ejemplo 2:Si por pantalla se quiere verunodostres

hay que escribirprintf( "uno\ndos\ntres" );

Page 48: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

48

El proceso de ejecución de esta instrucción es el siguiente: justo en la esquina superiorizquierda de la pantalla (primera línea) se muestra el texto "uno". Después, una secuencia deescape nueva línea (\n) mueve el cursor al principio de la línea siguiente (segunda línea), en dondese visualiza el texto "dos". Posteriormente, otra secuencia de escape nueva línea (\n) vuelve amover el cursor al principio de la línea siguiente (tercera línea) y, finalmente, se muestra el texto"tres". La instrucción anterior es equivalente a:Printf( "uno" );printf( "\ndos" );printf( "\ntres" );Igualmente, se podría escribirprintf( "uno\n" );printf( "dos\n" );printf( "tres" );

Ejemplo 3:Para visualizaruno dos tres

se puede escribirprintf( "\n uno dos tres" );

Ejemplo 4:Y para mostrarunodostres escribiremos, por ejemplo,

printf( "\n uno\n dos\n tres" );La secuencia de escape tabulador horizontal (\t) mueve el cursor a la posición siguiente deltabulador horizontal de la pantalla. Entre cada posición hay ocho caracteres, por tanto, dichasposiciones están en las columnas 1, 9, 17, 25, 33, 41, 49, 57, 65 y 73.

Page 49: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

49

Ejemplo 5:De la instrucciónprintf( "diez\tveinte\ttreinta" );se obtiene por pantalla

diez veinte treinta

Obsérvese que, la d (de diez), la v (de veinte) y la primera t (de treinta) están en lasposiciones del tabulador horizontal 1, 9 y 17, respectivamente. Gráficamente, representando losespacios en blanco mediante guiones (-), en pantalla se muestra:diez----veinte--treinta

Entre el carácter d (de diez) y la v (de veinte) hay exactamente ocho caracteres (la v no secuenta), al igual que entre la v (de veinte) y la primera t (de treinta).Las secuencias de escape comilla doble (\") y barra invertida (\\) sirven para mostrar porla pantalla los caracteres comilla doble (") y barra invertida (\), respectivamente.Ejemplo 6:Al escribirprintf( "\n\t\t7 de julio \"San Fermin\"" );en la segunda línea de la pantalla se mostrará, a partir de la tercera posición del tabuladorhorizontal (columna 17), el mensaje: "7 de julio "San Fermin""7 de julio "San Fermin"

7.5.- ESPECIFICADORES DE FORMATO EN LA FUNCIÓN PRINTF DEL LENGUAJE CCuando a la función printf de la biblioteca estándar del lenguaje C se le pase una lista deargumentos (expresiones), se debe escribir un especificador de formato por cada argumento. En lafunción printf, los especificadores de formato establecen el formato de salida por pantalla de losargumentos. La forma más sencilla de escribir un especificador de formato es con el carácter tantopor ciento (%) seguido de un carácter de conversión que indique el tipo de dato del argumento. Demomento, en este curso/tutorial no es necesario conocer todos los especificadores de formato quese pueden usar en la función printf, pero sí, los más utilizados:

Page 50: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

50

Figura - Especificadores de formato más utilizados en la función printf.Ejemplo 1:Dada la constante simbólica#define NOMBRE "Raquel"si escribimosprintf( "Hola %s", NOMBRE );por pantalla se verá:Hola Raquel

El especificador de formato (%s) escrito en la cadena de control, indica que, por pantalla, seva a mostrar un dato de tipo cadena en ese lugar, en este caso, "Raquel".Ejemplo 2:Si se ejecuta el programa#include <stdio.h>int main(){

char nombre[8] = "Timoteo";int hermanos = 2, sobrinos = 4;printf( "%s tiene %d hermanos y %d sobrinos.",

nombre, hermanos, sobrinos );return 0;

} por pantalla se verá:Timoteo tiene 2 hermanos y 4 sobrinos.

Page 51: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

51

En la cadena de control del ejemplo, los especificadores de formato (%s), (%d) y (%d)indican que, en esos lugares, y en dicho orden, va a aparecer un dato de tipo cadena, un dato de tipoentero y otro dato de tipo entero, respectivamente. En este caso, se muestran los valores "Timoteo",2 y 4. Cada especificador de formato de la cadena de control se hace corresponder con unargumento (expresión), en el mismo orden de aparición, de izquierda a derecha. En el caso de queexistan más argumentos que especificadores de formato, los "sobrantes" son ignorados. Por elcontrario, si existen menos argumentos que especificadores de formato, en pantalla se mostrarándatos inverosímiles.7.6.- LA FUNCIÓN SCANF EN LENGUAJE C

La función scanf de la biblioteca estándar del lenguaje C permite asignar a una o másvariables, uno o más valores (datos) recibidos desde la entrada estándar (el teclado). La sintaxis desu llamada es:scanf( <cadena_de_control> [, <lista_de_argumentos> ] )

En la <cadena_de_control>, el programador debe indicar el formato de entrada de los datosque se van a recoger por teclado. Para ello, se puede hacer uso de:Especificadores de formato.Otros caracteresPor ahora, en este curso/tutorial, sólo vamos a estudiar algunos de los especificadores deformato más utilizados en la función scanf.7.7.- ESPECIFICADORES DE FORMATO EN LA FUNCIÓN SCANF DEL LENGUAJE C

En la función scanf, por cada argumento (variable) que se le pase, se debe escribir unespecificador de formato, que establecerá el formato de entrada por teclado del argumento. Laforma más sencilla de escribir un especificador de formato en la función scanf es con el caráctertanto por ciento (%) seguido de un carácter de conversión que indique el tipo de dato delargumento. De momento, no es necesario conocer todos los especificadores de formato que sepueden usar en la función scanf, pero sí, los más usados, que son los mismos que en la funciónprintf:

Page 52: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

52

Figura - Especificadores de formato más utilizados en la función scanf.Ejemplo 1:Dado el programa:#include <stdio.h>int main(){

int numero;printf( "\n Introduzca un numero entero: " );scanf( "%d", &numero );return 0;

} En la memoria se reservará espacio para la variable numero. Y si el usuario teclea, porejemplo, un 5, en pantalla se verá:Introduzca un numero entero: 5Puesto que la variable numero es de tipo entero, en la cadena de control se tiene queescribir el especificador de formato asociado a la entrada de un número entero (%d). Por otro lado,la variable numero se ha escrito precedida del carácter ampersand (&). Se trata de un nuevooperador, el operador dirección. El operador dirección (&) siempre actúa sobre un operando(normalmente una variable) y, de su evaluación, se obtiene la dirección de memoria de dichavariable.Es sabido que, una variable representa a un espacio de memoria en el cual se puedealmacenar un dato. Pues bien, en realidad, a la función scanf no se le pasa una lista de variables,sino, las direcciones de memoria de los espacios de memoria a los que representan dichas variables.

Page 53: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

53

Para todas las variables declaradas en un programa se reservan espacios de memoria endonde se almacenarán datos. La memoria del computador está dividida en celdas numeradas deforma consecutiva, por lo que, cada una de ellas tiene una dirección (un número). Un dato puedenecesitar una o más celdas de memoria. Así pues, en el ejemplo 1, la expresión &numero hacereferencia a la primera celda donde se va a almacenar el valor 5 introducido por el usuario. Ladirección de memoria de la variable número podría ser, por ejemplo, 0012FF88. En informática, lasdirecciones de memoria suelen representarse con números hexadecimales. Gráficamente, se puederepresentar de la siguiente manera:

El operador dirección (&) entra dentro de la categoría de operadores monarios y, siguiendocon el ejemplo, de la evaluación de la expresión&numerose obtiene el valor 0012FF88, que es la dirección de memoria de la variable numero. Esa direcciónla necesita conocer la función scanf para localizar la primera celda del espacio de memoria endonde se va a almacenar el 5 introducido por el usuario.La dirección de memoria de la variable numero se puede visualizar en pantalla escribiendoprintf ( "%p", &numero );Puesto que, de la expresión &numero se obtiene una dirección de memoria, en la cadena decontrol de la función printf se tiene que escribir el especificador de formato asociado a la salida deuna dirección de memoria, (%p).Obsérvese que, en la cadena de control de printf, se ha eludido escribir con tilde la palabranumero, ya que, de haberlo hecho, por pantalla hubiesemos visto algo parecido a:

Introduzca un n•mero entero: 5

Para visualizar el carácter 'ú', podemos escribir:printf( "\n Introduzca un n%cmero entero: ", 163 );Fíjese que, 163 es el número decimal que corresponde al carácter 'ú' en ASCII.

Page 54: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

54

Ejemplo 2:Ahora, estudiemos el siguiente programa:#include <math.h>#include <stdio.h>#define PI 3.141592int main(){

float area, radio;printf( "\n Introduzca radio: " );scanf( "%f", &radio );area = PI * pow( radio, 2 );printf( "\n El area de la circunferencia es: %f", area );return 0;

} Inicialmente, en la memoria se reservará espacio para las dos variables del programa.

Si el usuario teclea, por ejemplo, el valor 3.8 para el radio, en pantalla se visualizará:Introduzca radio: 3.8El area de la circunferencia es: 45.364588La variable radio es de tipo real y, por tanto, en la cadena de control de la función scanf setiene que escribir el especificador de formato asociado a la entrada de un número real, (%f). Y,puesto que, en la función printf, el resultado de evaluar la expresión area también es de tipo real, ensu cadena de control hay que escribir, de igual forma, el especificador de formato asociado a lasalida de un número real, (%f).Para que el área se muestre sólo con dos cifras decimales, es decir, 45.36 en vez de45.364588, en la cadena de control de la función printf se debe escribir %.2f en vez de %f.

printf( "\n El area de la circunferencia es: %.2f", area );En pantalla se veráIntroduzca radio: 3.8El area de la circunferencia es: 45.36

Page 55: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

55

Aunque sólo se muestren dos cifras decimales, en memoria el area seguirá valiendo45.364588.Por otra parte, hemos dicho que, para conocer la dirección de memoria de una variable, sepuede utilizar el operador dirección (&). Pero, esta regla no es general. Por ejemplo, no es aplicablea las variables (arrays) de tipo cadena.Ejemplo 3:Si se desea desarrollar un programa para leer un nombre de persona:

Introduzca nombre: Elsa

se puede escribir:#include <stdio.h>int main(){

char nombre[5];printf( "\n Introduzca nombre: " );scanf( "%s", nombre );return 0;

}

Obsérvese que, a la función scanf se le "pasa" nombre en vez de &nombre. Esto es así, yaque, para las variables de tipo cadena (arrays de caracteres), su propio identificador (nombre, eneste caso) ya hace referencia a la dirección de memoria donde se va a almacenar el dato. Másconcretamente, hace referencia al espacio reservado en memoria para guardar el primer carácterde la cadena. Para el resto de caracteres de la cadena, el sistema habrá reservado, en memoria,espacios contiguos al primero.

Nótese que, la variable nombre ha sido declarada con un tamaño de cinco caracteres. Porconsiguiente, con este programa sólo se podrá almacenar en memoria un nombre de persona dehasta cuatro caracteres, ya que, en el quinto debe guardarse el carácter nulo (\0).

Page 56: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

56

7.8.- EJERCICIOS DE SCANF Y PRINTF EN LENGUAJE C7.8.1.- Ejercicio - Área de un Triángulo (en C)Resolver con printf y scanfEscribir un programa, en lenguaje C, que:1º) Pida por teclado la base (dato real) de un triángulo.2º) Pida por teclado la altura (dato real) de un triángulo.3º) Calcule el área del triángulo.4º) Muestre por pantalla el resultado (dato real).En pantalla:Introduzca base: 1.2Introduzca altura: 4.5El área del triángulo es: 2.7Nota: Área de un triángulo = base * altura / 2Solución del Ejercicio - Área de un Triángulo (en C)Código fuente del programa:#include <stdio.h>int main(){

float altura, area, base;printf( "Introduzca base: " );scanf( "%f", &base );printf( "Introduzca altura: " );scanf( "%f", &altura );area = base * altura / 2;printf( "El area del triangulo es: %f", area );return 0;

} Una segunda solución es:#include <stdio.h>int main(){

float altura, base;printf( "Introduzca base: " );scanf( "%f", &base );printf( "Introduzca altura: " );scanf( "%f", &altura );printf( "El area del triangulo es: %f", base * altura / 2 );return 0;

}

Page 57: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

57

7.8.2.- Ejercicio - División Entera (en C)Resolver con printf y scanfEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) Muestre por pantalla el resultado de realizar la división entera del primer númerointroducido por el usuario entre el segundo, y el resto.En pantalla:Introduzca dividendo (entero): 39Introduzca divisor (entero): 539 div 5 = 7 ( Resto = 4 )Nota: Se entiende que el usuario no introducirá un divisor igual a cero.Solución del Ejercicio - División Entera (en C)Código fuente del programa:#include <stdio.h>int main(){

int dividendo, divisor, cociente, resto;printf( "Introduzca dividendo (entero): " );scanf( "%d", &dividendo );printf( "Introduzca divisor (entero): " );scanf( "%d", &divisor );cociente = dividendo / divisor;resto = dividendo % divisor;printf( "%d div %d = %d ( Resto = %d )",

dividendo, divisor, cociente, resto );return 0;

} Una segunda solución es:#include <stdio.h>int main(){

int dividendo, divisor;printf( "Introduzca dividendo (entero): " );scanf( "%d", &dividendo );printf( "Introduzca divisor (entero): " );scanf( "%d", &divisor );printf( "%d div %d = %d ( Resto = %d )", dividendo, divisor,

dividendo / divisor, dividendo % divisor );return 0;

}

Page 58: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

58

8.- COMENTARIOS.8.1.- COMENTARIOS EN LENGUAJE CEn lenguaje C, los comentarios se escriben entre los caracteres barra-asterisco (/*) yasterisco-barra (*/).

Ejemplo:Código fuente de un programa comentado:/*********************************************//* Programa: Area_de_una_circunferencia *//* *//* Descripción: Recibe por teclado el radio *//* de una circunferencia, mostrando su área *//* por pantalla. *//* *//* Autor: Carlos Pes *//* *//* Fecha: 31/03/2005 *//*********************************************/

#include <math.h>#include <stdio.h>#define PI 3.141592 /* Definición de una constante */int main(){

/* Variables del programa */float area, radio;printf( "\n Introduzca radio: " );scanf( "%f", &radio ); /* Entrada de dato *//* Cálculo del área de la circunferencia */area = PI * pow( radio, 2 );/* Salida por pantalla del resultado */printf( "\n El area de la circunferencia es: %f", area );return 0;

}

Los comentarios serán ignorados por el compilador y, por tanto, su presencia en el códigofuente es, meramente, informativa.

Page 59: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

59

9.- FUNCIÓN FFLUSH.9.1.- LA FUNCIÓN FFLUSH EN LENGUAJE CEjemplo 1:Si ejecutamos el siguiente programa:#include <stdio.h>int main(){

int a, b;printf( "Introduzca el primer numero: " );scanf( "%d", &a );printf( "Introduzca el segundo numero: " );scanf( "%d", &b );printf( "Los valores son: %d, %d ", a, b );return 0;

}

por pantalla veremos algo parecido a:Introduzca el primer numero: 76Introduzca el segundo numero: 45Los valores son: 76, 45

Obsérvese que, cuando se ejecuta scanf, por ejemplo, en la primera vezscanf( "%d", &a );

el programa se detiene a la espera de que el usuario teclee el dato de entrada requerido, el cual esalmacenado, temporalmente, en el buffer (memoria intermedia) de la entrada estándar. Y cuandose pulsa la tecla INTRO, es, en ese momento, cuando a la variable a se le asigna el valor introducido.Pero, además, se produce un salto de línea automático, de forma que, después de introducir elnúmero 76, la siguiente instrucción se muestra una línea más abajo. De igual forma, después de lainstrucciónscanf( "%d", &b );también se produce un salto de línea automático. En este ejemplo todo ha ido muy bien, sinembargo, se tiene que tener especial cuidado si utilizados scanf para leer caracteres.

Page 60: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

60

Ejemplo 2:En el siguiente programa:#include <stdio.h>int main(){

char a, b, c;printf( "Introduzca primer caracter: " );scanf( "%c", &a );printf( "Introduzca segundo caracter: " );scanf( "%c", &b );printf( "Introduzca tercer caracter: " );scanf( "%c", &c );printf( "Los valores son: %c, %c, %c ", a, b, c );return 0;

}por pantalla se verá algo similar a:Introduzca primer caracter: fIntroduzca segundo caracter: Introduzca tercer caracter: hLos valores son: f,, h En esta ocasión, ¿por qué no se ejecuta, correctamente, la siguiente instrucción?scanf( "%c", &b );La razón es la siguiente: cuando se ejecuta la primera instrucción de entrada:scanf( "%c", &a );después de asignar el carácter 'f' a la variable a, se produce un salto de línea automático, pero, en elbuffer del teclado también se ha quedado almacenada la secuencia de escape (\n), que es,precisamente, un carácter. En consecuencia, cuando se ejecuta la instrucciónscanf( "%c", &b );a la variable b se le asigna el salto de línea almacenado en el buffer de la entrada estándar, y laejecución del programa continua con la siguiente instrucción. Ahora, el buffer vuelve a estar vacío y,por tanto, la entrada de la variable c sí que se ejecuta de forma correcta.Para comprobar que esto es así, podemos sustituir la instrucciónprintf( "Los valores son: %c, %c, %c ", a, b, c );por esta otra:printf( "Los valores son: %d, %d, %d ", a, b, c );

Page 61: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

61

En pantalla veremos:Introduzca primer caracter: fIntroduzca segundo caracter: Introduzca tercer caracter: hLos valores son: 102, 10, 104

y como se puede comprobar en las tablas del ASCII, los números 102, 10 y 104 corresponden a loscaracteres 'f', LF (Salto de Línea) y 'h', respectivamente.Para resolver este problema, antes de leer un carácter con scanf, hay que vaciar (limpiar) elbuffer del teclado. Para ello, se utiliza la función fflush.Ejemplo 3:De forma que, el código quedaría de la siguiente manera:#include <stdio.h>int main(){

char a, b, c;printf( "Introduzca primer caracter: " );scanf( "%c", &a );printf( "Introduzca segundo caracter: " );fflush( stdin );scanf( "%c", &b );printf( "Introduzca tercer caracter: " );fflush( stdin );scanf( "%c", &c );printf( "Los valores son: %c, %c, %c ", a, b, c );return 0;

} La primera vez que se ejecuta scanf, el buffer del teclado está vacío, por tanto, no es precisoutilizar fflush, pero sí, en los dos casos posteriores. Obsérvese que, a fflush hay que indicarle elbuffer a limpiar, Standar Input (stdin) en este caso.

Page 62: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

62

10.- TIPOS DE ERRORES.10.1.- TIPOS DE ERRORES EN LENGUAJE CUna vez escrito el código fuente de un programa, siempre se debe comprobar si se hancometido errores. Estos pueden ser de tres tipos:De sintaxis (sintácticos).De ejecución.De lógica (lógicos).

10.2.- ERRORES DE SINTAXIS EN LENGUAJE CLos errores de sintaxis son los más fáciles de detectar en el código fuente de un programa.Un error de sintaxis se produce al escribir, incorrectamente, alguna parte del código.

Ejemplo:Estúdiese el siguiente código fuente de un programa escrito en lenguaje C:include <stdio.h>imt main(){

int a, b;a = 4;b = a * 6;printf( "%d", b )retunr 0;

}

Existen cuatro errores de sintaxis:Se ha escrito include en vez de #include.Se ha escrito imt en vez de int.Falta un punto y coma (;) después de la llamada a printf.Se ha escrito retunr en vez de return.10.3.- ERRORES DE EJECUCIÓN EN LENGUAJE C

Una vez corregidos los errores de sintaxis en el código fuente de un programa, se deberevisar que no se puede producir ningún error en la ejecución del mismo. Un error de ejecución seproduce cuando el ordenador no puede ejecutar alguna instrucción de forma correcta.

Page 63: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

63

Ejemplo:En el programa:#include <stdio.h>int main(){

int a;float b;a = 0;b = 6.4 / a;printf( "%f", b );return 0;

}se produce un error de ejecución, ya que, al intentar evaluar la expresión:6.4 / aa vale 0, y no se puede dividir entre cero.10.4.- ERRORES DE LÓGICA EN LENGUAJE C.

Los errores de lógica son los más difíciles de detectar. Cuando un programa no tiene erroresde sintaxis ni de ejecución, pero, aún así, no funciona bien, esto es debido a la existencia de algúnerror lógico. De manera que, un error de lógica se produce cuando los resultados obtenidos no sonlos esperados.Ejemplo:Estúdiese el siguiente código:#include <stdio.h>int main(){

float base, altura;base = 6.3;altura = 4.;printf( "El area es: %f", base * altura / 3 );return 0;

} Su salida por pantalla es:El area es: 8.4

No existen errores de sintaxis ni de ejecución, sin embargo, la salida esperada es:El area es: 12.6

Page 64: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

64

Por consiguiente, existe algún error lógico que hay que corregir. El error está en laexpresión:base * altura / 3que, aunque no es incorrecta, no sirve para calcular el área de un triángulo. En su lugar se debeescribir:base * altura / 2

Page 65: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

65

IIIIII..-- IINNSSTTRRUUCCCCIIOONNEESS DDEE CCOONNTTRROOLL1.- INSTRUCCIONES ALTERNATIVAS EN LENGUAJE C

A continuación, se estudian las distintas instrucciones de control alternativas que se puedenutilizar en lenguaje C: doble (if else), simple (if) y múltiple (switch).1.1.- INSTRUCCIÓN DE CONTROL ALTERNATIVA DOBLE (IF ELSE)1.1.1.- Instrucción if else en Lenguaje CEn lenguaje C, para escribir una instrucción alternativa doble (if else) se utiliza la sintaxis:if ( <expresión_lógica> ){

<bloque_de_instrucciones_1>}else{

<bloque_de_instrucciones_2>}

A la <expresión_lógica> de una instrucción alternativa doble (if else) también se ledenomina condición.Para que se ejecute el <bloque_de_instrucciones_1>, la condición tiene que ser verdadera.Por el contrario, si la condición es falsa, se ejecutará el <bloque_de_instrucciones_2>.En resumen, en C una instrucción if else (alternativa doble) permite seleccionar, por mediode una condición, el siguiente bloque de instrucciones a ejecutar, de entre dos posibles.Ejemplo:Se quiere escribir un programa que:1º) Pida por teclado la nota (dato real) de una asignatura.2º) Muestre por pantalla:"APROBADO", en el caso de que la nota sea mayor o igual que 5."SUSPENDIDO", en el caso de que la nota sea menor que 5.De modo que, por pantalla se verá, por ejemplo:Introduzca nota (real): 7.5APROBADO

Page 66: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

66

Otra posibilidad es:Introduzca nota (real): 3.5SUSPENDIDOCuando un bloque de instrucciones sólo contiene una instrucción, los caracteres abrir llave({) y cerrar llave (}) son opcionales. Por tanto, en lenguaje C, para resolver el problema del ejemplose puede escribir:

#include <stdio.h>int main(){

float nota;printf( "\n Introduzca nota (real): " );scanf( "%f", &nota );if ( nota >= 5 )

printf( "\n APROBADO" );else

printf( "\n SUSPENDIDO" );return 0;

} Cuando en el código fuente de un programa existe una condición de la cual depende que acontinuación se ejecuten unas instrucciones u otras, se dice que existe una bifurcación. » Ejerciciosde la Instrucción Alternativa Doble (if else) en Lenguaje C1.1.2.- Listado de Ejercicios Resueltos con la instrucción if elseEJERCICIO - Suma de Dos NúmerosResolver con la Instrucción if elseEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) Calcule la suma de los números introducidos por el usuario.3º) Muestre por pantalla:"LA SUMA SÍ ES MAYOR QUE CERO.", en el caso de que sí lo sea."LA SUMA NO ES MAYOR QUE CERO.", en el caso de que no lo sea.En pantalla:Introduzca primer número (entero): 14Introduzca segundo número (entero): -17LA SUMA NO ES MAYOR QUE CERO.Resuelto con la Instrucción if else

Page 67: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

67

Código fuente del programa:#include <stdio.h>int main(){

int a, b, suma;printf( "Introduzca primer numero (entero): " );scanf( "%d", &a );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &b );suma = a + b;if ( suma > 0 )

printf( "LA SUMA SI ES MAYOR QUE CERO." );else

printf( "LA SUMA NO ES MAYOR QUE CERO." );return 0;

} Una segunda solución es:#include <stdio.h>int main(){

int a, b;printf( "Introduzca primer numero (entero): " );scanf( "%d", &a );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &b );if ( a + b > 0 )

printf( "LA SUMA SI ES MAYOR QUE CERO." );else

printf( "LA SUMA NO ES MAYOR QUE CERO." );return 0;

}EJERCICIO - Número IntermedioResolver con la Instrucción if elseEscribir un programa, en lenguaje C, que:1º) Pida por teclado tres números (datos enteros): <numero1>, <numero2> y<numero3>.2º) Muestre por pantalla:

Page 68: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

68

"<numero2> SÍ ES MENOR QUE <numero3> Y MAYOR QUE <numero1>", en el caso de que sí losea."<numero2> NO ES MENOR QUE <numero3> Y MAYOR QUE <numero1>", en el caso de que no losea. En pantalla:Introduzca primer número (entero): 6Introduzca segundo número (entero): 9Introduzca tercer número (entero): 229 SÍ ES MENOR QUE 22 Y MAYOR QUE 6

Introduzca primer número (entero): 15Introduzca segundo número (entero): 7Introduzca tercer número (entero): 87 NO ES MENOR QUE 8 Y MAYOR QUE 15Solución del Ejercicio - Número Intermedio (en C)Resuelto con la Instrucción if elseCódigo fuente del programa:#include <stdio.h>int main(){

int n1, n2, n3;printf( "Introduzca primer numero (entero): " );scanf( "%d", &n1 );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &n2 );printf( "Introduzca tercer numero (entero): " );scanf( "%d", &n3 );if ( n2 < n3 && n2 > n1 )

printf( "%d SI ES MENOR QUE %d Y MAYOR QUE %d", n2, n3, n1 );else

printf( "%d NO ES MENOR QUE %d Y MAYOR QUE %d", n2, n3, n1 );return 0;

}

Otra solución es:#include <stdio.h>int main(){

int n1, n2, n3;printf( "Introduzca primer numero (entero): " );

Page 69: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

69

scanf( "%d", &n1 );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &n2 );printf( "Introduzca tercer numero (entero): " );scanf( "%d", &n3 );printf( "%d", n2 );if ( n2 < n3 && n2 > n1 )

printf( " SI " );else

printf( " NO " );printf( "ES MENOR QUE %d Y MAYOR QUE %d", n3, n1 );return 0;

}

1.2.- INSTRUCCIÓN DE CONTROL ALTERNATIVA SIMPLE (IF)1.2.1.- Instrucción if en Lenguaje CUna instrucción alternativa simple (if) es una variante (más sencilla) de una instrucciónalternativa doble (if else). En lenguaje C, para escribir una instrucción if se utiliza la sintaxis:if ( <expresión_lógica> ){

<bloque_de_instrucciones>}

Ejemplo:Se quiere escribir un programa que:1º) Pida por teclado la nota (dato real) de una asignatura.2º) Muestre por pantalla:"APROBADO", en el caso de que la nota sea mayor o igual que 5.Introduzca nota (real): 7.5APROBADOObsérvese que, en este problema, no se va a mostrar por pantalla "SUSPENDIDO" en el casode que la nota sea menor que 5, como sí se hacía en el ejemplo del apartado anterior (Instrucción ifelse).Introduzca nota (real): 3.5Al igual que ocurre con una instrucción alternativa doble, cuando el<bloque_de_instrucciones> de una alternativa simple sólo contiene una instrucción, los caracteres

Page 70: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

70

abrir llave ({) y cerrar llave (}) también son opcionales. De modo que, para resolver el problema delejemplo se puede escribir:#include <stdio.h>int main(){

float nota;printf( "\n Introduzca nota (real): " );scanf( "%f", &nota );if ( nota >= 5 )

printf( "\n APROBADO" );return 0;

}

1.2.2.- Ejercicios de la Instrucción Alternativa Simple (if) en Lenguaje CEjercicio - Cambio de Signo (en C)Resolver con la Instrucción ifEscribir un programa, en lenguaje C, que:1º) Pida por teclado un número (dato real).2º) Muestre por pantalla el número introducido, pero, cambiado de signo y, sólo en el casode que el número no sea mayor o igual que cero.En pantalla:Introduzca número (real): -9.69.6

Introduzca número (real): 7.11Solución del Ejercicio - Cambio de Signo (en C)Resuelto con la Instrucción ifCódigo fuente del programa:#include <stdio.h>int main(){

float numero;printf( "Introduzca numero (real): " );scanf( "%f", &numero );if ( numero < 0 )

printf( "%f", -numero );return 0;

Page 71: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

71

}

Ejercicio - Media Aritmética (en C)Resolver con la Instrucción ifEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) Muestre por pantalla la media artimética de los números introducidos, pero, sólo en elcaso de que ambos números sean mayores que cero.En pantalla:Introduzca primer número (entero): 7Introduzca segundo número (entero): 108.5

Introduzca primer número (entero): 6Introduzca segundo número (entero): -2

Solución del Ejercicio - Media Aritmética (en C)Resuelto con la Instrucción ifCódigo fuente del programa:#include <stdio.h>int main(){

int a, b;printf( "Introduzca primer numero (entero): " );scanf( "%d", &a );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &b );if ( a > 0 && b > 0 )

printf( "%f", ( float ) ( a + b ) / 2 );return 0;

}

Page 72: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

72

1.3.- INSTRUCCIÓN DE CONTROL ALTERNATIVA MÚLTIPLE (SWITCH)1.3.1.- Instrucción switch en Lenguaje CUna instrucción switch (alternativa múltiple) permite seleccionar, por medio de unaexpresión, el siguiente bloque de instrucciones a ejecutar de entre varios posibles. En lenguaje C,para escribir una instrucción alternativa múltiple (switch) se utiliza la sintaxis:switch ( <expresión> ){

case <expresión_1> : [ <bloque_de_instrucciones_1> ][ break; ]

case <expresión_2> : [ <bloque_de_instrucciones_2> ][ break; ]

...case <expresión_n> : [ <bloque_de_instrucciones_n> ]

[ break; ][ default : <bloque_de_instrucciones_n+1> ]

}

El resultado de evaluar la <expresión> debe ser un valor perteneciente a un tipo de datofinito y ordenado, es decir, entero, lógico, carácter, enumerado o subrango.Dependiendo del valor obtenido al evaluar la <expresión>, se ejecutará un bloque deinstrucciones u otro.Opcionalmente, se puede escribir un <bloque_de_instrucciones_n+1> después de default :.Este bloque de instrucciones se ejecutará en el caso de que el valor obtenido al evaluar la<expresión>, no se encuentre en ninguna de las expresiones después de cada case.Ejemplo 1:Se quiere escribir un programa que:1º) Pida por teclado el número (dato entero) de un día de la semana.2º) Muestre por pantalla el nombre (dato cadena) correspondiente a dicho día.Nota: Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará elmensaje: "ERROR: Día incorrecto.".En pantalla se podrá ver algo parecido a:

Introduzca dia de la semana: 2

Page 73: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

73

MartesO también:Introduzca dia de la semana: 9ERROR: Dia incorrecto.Solución propuesta:

#include <stdio.h>int main(){

int dia;printf( "\n Introduzca dia de la semana: " );scanf( "%d", &dia );switch ( dia ){

case 1 : printf( "\n Lunes" );break;

case 2 : printf( "\n Martes" );break;

case 3 : printf( "\n Miercoles" );break;

case 4 : printf( "\n Jueves" );break;

case 5 : printf( "\n Viernes" );break;

case 6 : printf( "\n Sabado" );break;

case 7 : printf( "\n Domingo" );break;

default : printf( "\n ERROR: Dia incorrecto." );}return 0;

}

En la sintaxis de una instrucción alternativa múltiple, obsérvese que, después de cadabloque de instrucciones se puede escribir, opcionalmente, la instrucción break. Dicha instrucciónno se va a estudiar con detenimiento en este apartado, ya que, de momento, basta con saber que enuna instrucción switch, la escribiremos, casi siempre, después de cada bloque de instrucciones, aexcepción del último. Para comprender su funcionamiento, pruebe a ver que ocurre si omite algúnbreak en el código del programa del ejemplo 1.Estúdiese también el siguiente ejemplo.Ejemplo 2:En la siguiente tabla se muestran las categorías a las que pertenecen los signos del zodíaco:

Page 74: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

74

Se quiere escribir un programa que:1º) Muestre el listado de los signos del zodíaco, con sus números asociados.2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco,se mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".En pantalla veremos:Listado de signos del zodiaco:1. Aries2. Tauro3. Geminis4. Cancer5. Leo6. Virgo7. Libra8. Escorpio9. Sagitario10. Capricornio12. Acuario13. Piscis

Introduzca numero de signo: 7Es un signo de Aire.

Page 75: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

75

O también:Listado de signos del zodiaco:

1. Aries2. Tauro3. Geminis4. Cancer5. Leo6. Virgo7. Libra8. Escorpio9. Sagitario10. Capricornio12. Acuario13. Piscis

Introduzca numero de signo: 15ERROR: 15 no esta asociado a ningun signo.Una posible solución es:

#include <stdio.h>

int main(){

int numero;printf( "\n Listado de signos del zodiaco:" );printf( "\n\n 1. Aries" );printf( "\n 2. Tauro" );printf( "\n 3. Geminis" );printf( "\n 4. Cancer" );printf( "\n 5. Leo" );printf( "\n 6. Virgo" );printf( "\n 7. Libra" );printf( "\n 8. Escorpio" );printf( "\n 9. Sagitario" );printf( "\n 10. Capricornio" );printf( "\n 11. Acuario" );printf( "\n 12. Piscis" );printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

switch ( numero ){

case 1 :

Page 76: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

76

case 5 :case 9 : printf( "\n Es un signo de Fuego." );

break;case 2 :case 6 :case 10 : printf( "\n Es un signo de Tierra." );

break;case 3 :case 7 :case 11 : printf( "\n Es un signo de Aire." );

break;case 4 :case 8 :case 12 : printf( "\n Es un signo de Agua." );

break;default : printf( "\n ERROR: %d no esta asociado a ningun signo.", numero );

}return 0;

}Otra solución es:#include <stdio.h>#include <string.h>

int main(){

int numero;char categoria[7];printf( "\n Listado de signos del zodiaco:" );printf( "\n\n 1. Aries" );printf( "\n 2. Tauro" );printf( "\n 3. Geminis" );printf( "\n 4. Cancer" );printf( "\n 5. Leo" );printf( "\n 6. Virgo" );printf( "\n 7. Libra" );printf( "\n 8. Escorpio" );printf( "\n 9. Sagitario" );printf( "\n 10. Capricornio" );printf( "\n 11. Acuario" );printf( "\n 12. Piscis" );printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

switch ( numero % 4 )

Page 77: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

77

{case 1 : strcpy( categoria, "Fuego" );

break;case 2 : strcpy( categoria, "Tierra" );

break;case 3 : strcpy( categoria, "Aire" );

break;case 0 : strcpy( categoria, "Agua" );

}

if ( numero >= 1 && numero <= 12 )printf( "\n Es un signo de %s.", categoria );

elseprintf( "\n ERROR: %d no esta asociado a ningun signo.",

numero );return 0;

}

En esta segunda solución existen las siguientes diferencias importantes con respecto a lasolución anterior:En el código se utiliza una alternativa doble (if else), además de una alternativa múltiple(switch).En la alternativa múltiple no se escribe el <bloque_de_instrucciones_n+1>.La <expresión> de la alternativa múltiple es diferente.La expresión "\n Es un signo de " sólo se escribe una vez.Se ha utilizado una variable más (un array de caracteres): categoria.Se ha empleado la función strcpy, que, como ya vimos en el apartado de Operadores yexpresiones, está disponible en la biblioteca estándar de C.1.4.- EJERCICIOS DE LA INSTRUCCIÓN ALTERNATIVA MÚLTIPLE (SWITCH) EN LENGUAJE C1.4.1.- Ejercicio - Número del Dado (en C)Resolver con la Instrucción switchEscribir un programa, en lenguaje C, que:1º) Pida por teclado el resultado (dato entero) obtenido al lanzar un dado de seis caras.2º) Muestre por pantalla el número en letras (dato cadena) de la cara opuesta al resultadoobtenido.Nota 1: En las caras opuestas de un dado de seis caras están los números: 1-6, 2-5 y 3-4.

Page 78: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

78

Nota 2: Si el número del dado introducido es menor que 1 ó mayor que 6, se mostrará elmensaje: "ERROR: Número incorrecto.".En pantalla:Introduzca número del dado: 5En la cara opuesta está el "dos".

Introduzca número del dado: 8ERROR: Número incorrecto.Solución del Ejercicio - Número del Dado (en C)Resuelto con la Instrucción switchCódigo fuente del programa:#include <stdio.h>int main(){

int numero;

printf( "Introduzca numero del dado: " );scanf( "%d", &numero );

switch ( numero ){

case 1 : printf( "En la cara opuesta esta el \"seis\"." );break;

case 2 : printf( "En la cara opuesta esta el \"cinco\"." );break;

case 3 : printf( "En la cara opuesta esta el \"cuatro\"." );break;

case 4 : printf( "En la cara opuesta esta el \"tres\"." );break;

case 5 : printf( "En la cara opuesta esta el \"dos\"." );break;

case 6 : printf( "En la cara opuesta esta el \"uno\"." );break;

default : printf( "ERROR: Numero incorrecto." );}return 0;

}

Page 79: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

79

Una segunda solución es:#include <stdio.h>#include <string.h>int main(){

char letras[7];int numero;printf( "Introduzca numero del dado: " );scanf( "%d", &numero );switch ( numero ){

case 1 : strcpy( letras, "seis" );break;

case 2 : strcpy( letras, "cinco" );break;

case 3 : strcpy( letras, "cuatro" );break;

case 4 : strcpy( letras, "tres" );break;

case 5 : strcpy( letras, "dos" );break;

case 6 : strcpy( letras, "uno" );}if ( numero >= 1 && numero <= 6 )

printf( "En la cara opuesta esta el \"%s\".", letras );else

printf( "ERROR: Numero incorrecto." );return 0;

}

1.4.2.- Ejercicio - Habitaciones de una Casa Rural (en C)Resolver con la Instrucción switchEn la siguiente tabla se muestra el número de camas de las habitaciones de una casa rural,además de la planta donde está ubicada cada una de ellas:

Page 80: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

80

Escribir un programa, en lenguaje C, que:1º) Muestre el listado de las habitaciones de la casa rural.2º) Pida por teclado el número (dato entero) asociado a una habitación.3º) Muestre por pantalla la planta y el número de camas de la habitación seleccionada.Nota: Si el número introducido por el usuario, no está asociado a ninguna habitación, semostrará el mensaje: "ERROR: <número> no está asociado a ninguna habitación.".En pantalla:Listado de habitaciones:1. Azul2. Roja3. Verde4. Rosa5. Gris

Introduzca número de habitación: 3La Verde tiene 3 cama/s y está en la segunda planta.

Listado de habitaciones:1. Azul2. Roja3. Verde4. Rosa5. Gris

Introduzca número de habitación: 7ERROR: 7 no está asociado a ninguna habitación.

Solución del Ejercicio - Habitaciones de una Casa Rural (en C)Resuelto con la Instrucción switchCódigo fuente del programa:#include <stdio.h>int main(){

int numero;printf( "Listado de habitaciones:" );printf( "\n\n1. Azul" );printf( "\n2. Roja" );printf( "\n3. Verde" );printf( "\n4. Rosa" );printf( "\n5. Gris" );printf( "\n\nIntroduzca numero de habitacion: " );

Page 81: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

81

scanf( "%d", &numero );switch ( numero ){

case 1 : printf( "La Azul tiene 2 cama/s y esta en la primera planta." );break;

case 2 : printf( "La Roja tiene 1 cama/s y esta en la primera planta." );break;

case 3 : printf( "La Verde tiene 3 cama/s y esta en la segunda planta." );break;

case 4 : printf( "La Rosa tiene 2 cama/s y esta en la segunda planta." );break;

case 5 : printf( "La Gris tiene 1 cama/s y esta en la tercera planta." );break;

default : printf( "ERROR: %d no esta asociado a ninguna habitacion.", numero );}return 0;

}

Otra solución es:#include <string.h>#include <stdio.h>int main(){

char nombre[6], planta[8];int numero, camas;printf( "Listado de habitaciones:" );printf( "\n\n1. Azul" );printf( "\n2. Roja" );printf( "\n3. Verde" );printf( "\n4. Rosa" );printf( "\n5. Gris" );printf( "\n\nIntroduzca numero de habitacion: " );

scanf( "%d", &numero );

switch ( numero ){

case 1 : strcpy( nombre, "Azul" );camas = 2;strcpy( planta, "primera" );break;

case 2 : strcpy( nombre, "Roja" );camas = 1;strcpy( planta, "primera" );break;

Page 82: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

82

case 3 : strcpy( nombre, "Verde" );camas = 3;strcpy( planta, "segunda" );break;

case 4 : strcpy( nombre, "Rosa" );camas = 2;strcpy( planta, "segunda" );break;

case 5 : strcpy( nombre, "Gris" );camas = 1;strcpy( planta, "tercera" );

}if ( numero >= 1 && numero <= 5 )

printf( "La %s tiene %d cama/s y esta en la %s planta.",nombre, camas, planta );

elseprintf( "ERROR: %d no esta asociado a ninguna habitacion.",

numero );return 0;

}

1.5.- ANIDAMIENTO DE INSTRUCCIONES DE CONTROL ALTERNATIVAS1.5.1.- Anidamiento de Instrucciones Alternativas en Lenguaje CEn programación, las instrucciones alternativas y repetitivas pueden escribirse una dentrode otra. A este hecho se le conoce como anidamiento.En lenguaje C, las instrucciones alternativas permiten realizar las siguientes combinacionesde anidamiento:Doble (if else) en doble (if else).Doble (if else) en simple (if).Doble (if else) en múltiple (switch).Simple (if) en simple (if).Simple (if) en doble (if else).Simple (if) en múltiple (switch).Múltiple (switch) en múltiple (switch).Múltiple (switch) en doble (if else).Múltiple (switch) en simple (if).De ellas, vamos a estudiar, como ejemplo, las siguientes combinaciones:

Page 83: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

83

1.5.2.- Anidamiento if else Dentro de if else en Lenguaje CEn lenguaje C, para anidar una instrucción if else en otra (también if else), se utiliza la sintaxis:if ( <expresión_lógica_1> ){

/* Inicio del anidamiento */if ( <expresión_lógica_2> ){

<bloque_de_instrucciones_1>}else{

<bloque_de_instrucciones_2>}/* Fin del anidamiento */

}else{

<bloque_de_instrucciones_3>}O también:if ( <expresión_lógica_1> ){

<bloque_de_instrucciones_1>{else{

/* Inicio del anidamiento */if ( <expresión_lógica_2> ){

<bloque_de_instrucciones_2>}else{

<bloque_de_instrucciones_3>}/* Fin del anidamiento */

}

Page 84: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

84

Ejemplo:Se quiere escribir un programa que:1º) Pida por teclado la nota (real) de una asignatura.2º) Muestre por pantalla:"APTO", en el caso de que la nota sea mayor o igual que 5 y menor o igual que 10."NO APTO", en el caso de que la nota sea mayor o igual que 0 y menor que 5."ERROR: Nota incorrecta.", en el caso de que la nota sea menor que 0 o mayor que 10.En pantalla se podría ver:

Introduzca nota (real): 7.5APTOO por ejemplo:Introduzca nota (real): 12.2ERROR: Nota incorrecta.

Una solución al problema es:#include <stdio.h>int main(){

float nota;

printf( "\n Introduzca nota (real): " );scanf( "%f", &nota );

if ( nota >= 5 && nota <= 10 )printf( "\n APTO" );

else/* Inicio del anidamiento */if ( nota >= 0 && nota < 5 )

printf( "\n NO APTO" );else

printf( "\n ERROR: Nota incorrecta." );/* Fin del anidamiento */

return 0;}

Fíjese que, en este caso, se puede prescindir de los caracteres abrir llave ({) y cerrar llave(}) de la sintaxis, ya que, los bloques de instrucciones sólo contienen una instrucción.

Page 85: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

85

Como se puede observar, el anidamiento de instrucciones alternativas permite irdescartando valores hasta llegar al bloque de instrucciones que se debe ejecutar.1.5.3.- Anidamiento switch Dentro de if else en Lenguaje CEn lenguaje C, para anidar una instrucción switch en if else, se utiliza la sintaxis:if ( <expresión_lógica> ){

/* Inicio del anidamiento */switch ( <expresión> ){case <expresión_1> : [ <bloque_de_instrucciones_1> ]

[ break; ]case <expresión_2> : [ <bloque_de_instrucciones_2> ]

[ break; ]...case <expresión_n> : [ <bloque_de_instrucciones_n> ]

[ break; ][ default : <bloque_de_instrucciones_n+1> ]

}/* Fin del anidamiento */

}else{

<bloque_de_instrucciones_n+2>}

Ejemplo:Así por ejemplo, el primer ejemplo del apartado Instrucción switch en C, también se puederesolver anidando una instrucción switch (alternativa múltiple) en una instrucción if else(alternativa doble), como se muestra a continuación:#include <stdio.h>int main(){

int dia;printf( "\n Introduzca dia de la semana: " );scanf( "%d", &dia );if ( dia >= 1 && dia <= 7 )

/* Sólo si el día es válido, se ejecuta lainstrucción alternativa múltiple */

/* Inicio del anidamiento */switch ( dia ){

Page 86: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

86

case 1 : printf( "\n Lunes" );break;

case 2 : printf( "\n Martes" );break;

case 3 : printf( "\n Miercoles" );break;

case 4 : printf( "\n Jueves" );break;

case 5 : printf( "\n Viernes" );break;

case 6 : printf( "\n Sabado" );break;

case 7 : printf( "\n Domingo" );}/* Fin del anidamiento */

elseprintf( "\n ERROR: Dia incorrecto." );

return 0;}

1.5.4.- Ejercicios de Anidamiento de Instrucciones Alternativas en Lenguaje CEjercicio - Suma o Multiplicación de Dos Números (en C)Resolver con Anidamiento de Instrucciones AlternativasEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) Calcule la suma y multiplicación de ambos números.3º) Muestre por pantalla:"La suma es mayor.", en caso de que sea mayor que la multiplicación de ambos números."La multpilicación es mayor.", en caso de que sea mayor que la suma de ambos números."La suma y multiplicación son iguales.", en caso de que así sea.En pantalla:Introduzca primer número (entero): -2Introduzca segundo número (entero): 3La suma es mayor.

Introduzca primer número (entero): 2Introduzca segundo número (entero): 2La suma y multiplicación son iguales.

Page 87: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

87

Solución del Ejercicio - Suma o Multiplicación de Dos Números (en C)Código fuente del programa:#include <stdio.h>int main(){

int a, b, suma, multiplicacion;printf( "Introduzca primer numero (entero): " );scanf( "%d", &a );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &b );suma = a + b;multiplicacion = a * b;if ( suma > multiplicacion )

printf( "La suma es mayor." );else

/* Inicio del anidamiento */if ( multiplicacion > suma )

printf( "La multiplicacion es mayor." );else

printf( "La suma y multiplicacion son iguales." );/* Fin del anidamiento */

return 0;} Una segunda solución es:#include <stdio.h>int main(){

int a, b;printf( "Introduzca primer numero (entero): " );scanf( "%d", &a );printf( "Introduzca segundo numero (entero): " );scanf( "%d", &b );if ( a + b > a * b )

printf( "La suma es mayor." );else

/* Inicio del anidamiento */if ( a * b > a + b )

printf( "La multplicacion es mayor." );else

printf( "La suma y multiplicacion son iguales." );/* Fin del anidamiento */

return 0;}

Page 88: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

88

Ejercicio - Número del Dado (en C)Resolver con Anidamiento de Instrucciones AlternativasEscribir un programa, en lenguaje C, que resuelva el problema del ejercicio Número delDado con switch, anidando una alternativa múltiple (switch) en una alternativa doble (if).Solución del Ejercicio - Número del Dado (en C)Resuelto con Anidamiento de Instrucciones AlternativasCódigo fuente del programa:#include <stdio.h>int main(){

int numero;printf( "Introduzca numero del dado: " );scanf( "%d", &numero );if ( numero >= 1 && numero <= 6 )/* Sólo si el número es válido, se ejecuta la instrucción alternativa múltiple */

/* Inicio del anidamiento */switch ( numero ){

case 1 : printf( "En la cara opuesta esta el \"seis\"." );break;

case 2 : printf( "En la cara opuesta esta el \"cinco\"." );break;

case 3 : printf( "En la cara opuesta esta el \"cuatro\"." );break;

case 4 : printf( "En la cara opuesta esta el \"tres\"." );break;

case 5 : printf( "En la cara opuesta esta el \"dos\"." );break;

case 6 : printf( "En la cara opuesta esta el \"uno\"." );}/* Fin del anidamiento */

elseprintf( "ERROR: Numero incorrecto." );

return 0;}

Page 89: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

89

Una segunda solución es:#include <string.h>#include <stdio.h>int main(){

char letras[7];int numero;printf( "Introduzca numero del dado: " );scanf( "%d", &numero );

if ( numero >= 1 && numero <= 6 ){/* Sólo si el número es válido, se ejecuta la instrucción alternativa múltiple */

/* Inicio del anidamiento */switch ( numero ){

case 1 : strcpy( letras, "seis" );break;

case 2 : strcpy( letras, "cinco" );break;

case 3 : strcpy( letras, "cuatro" );break;

case 4 : strcpy( letras, "tres" );break;

case 5 : strcpy( letras, "dos" );break;

case 6 : strcpy( letras, "uno" );}/* Fin del anidamiento */printf( "En la cara opuesta esta el \"%s\".", letras );

}else

printf( "ERROR: Numero incorrecto." );return 0;

}

Page 90: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

90

2.- INSTRUCCIONES REPETITIVAS EN LENGUAJE CA continuación, se estudian las distintas instrucciones de control repetitivas que se puedenutilizar en lenguaje C: mientras (while), hacer...mientras (do while) y para (for).

2.1.- INSTRUCCIÓN WHILE EN LENGUAJE CEn lenguaje C, para escribir una instrucción while (repetitiva mientras) se utiliza la sintaxis:

while ( <expresión_lógica> ){

<bloque_de_instrucciones>} Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrirllave ({) y cerrar llave (}) son opcionales.Por otra parte, al igual que en las instrucciones alternativas doble y simple, a la<expresión_lógica> de una instrucción repetitiva while, también se le llama condición.Para que se ejecute el <bloque_de_instrucciones>, la condición tiene que ser verdadera. Porel contrario, si la condición es falsa, el <bloque_de_instrucciones> no se ejecuta.Por tanto, cuando el flujo de un programa llega a un bucle while, existen dos posibilidades:Si la condición se evalúa a falsa, el bloque de instrucciones no se ejecuta, y el bucle whilefinaliza sin realizar ninguna iteración.Si la condición se evalúa a verdadera, el bloque de instrucciones sí que se ejecuta y, después,se vuelve a evaluar la condición, para decidir, de nuevo, si el bloque de instrucciones sevuelve a ejecutar o no. Y así sucesivamente, hasta que, la condición sea falsa.El <bloque_de_instrucciones> de un bucle while puede ejecutarse cero o más veces(iteraciones). Si el <bloque_de_instrucciones> se ejecuta al menos una vez, seguirá ejecutándoserepetidamente, mientras que, la condición sea verdadera. Pero, hay que tener cuidado de que elbucle no sea infinito.Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se haproducido un bucle infinito, ya que, el programa nunca termina. Un bucle infinito es un error lógico.Es importante hacer hincapié en el hecho de que, en un bucle while, primero se evalúa lacondición y, en el caso de que ésta sea verdadera, entonces se ejecuta el bloque de instrucciones.Veremos que, en el bucle do while, el procedimiento es al revés. En él, primero se ejecuta el bloquede instrucciones y, después, se evalúa la condición.Para que un bucle while no sea infinito, en el bloque de instrucciones debe ocurrir algo paraque la condición deje de ser verdadera. En la mayoría de los casos, la condición se hace falsa alcambiar el valor de una variable.En resumen, una instrucción repetitiva while permite ejecutar, repetidamente, (cero o másveces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.

Page 91: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

91

Ejemplo 1:Se quiere escribir un programa que muestre por pantalla los primeros diez númerosnaturales:1 2 3 4 5 6 7 8 9 10En lenguaje C, para resolver el problema de este ejemplo se puede escribir:

#include <stdio.h>int main(){

int contador;printf( "\n " );contador = 1; /* Inicialización del contador */while ( contador <= 10 ) /* Condición */{

printf( "%d ", contador ); /* Salida */contador++; /* Incremento del contador */

}return 0;

} Se quiere escribir un programa que:1º) Pida por teclado la nota (dato real) de una asignatura.2º) En el caso de que la nota sea incorrecta, muestre por pantalla el mensaje:"ERROR: Nota incorrecta, debe ser >= 0 y <= 10".3º) Repita los pasos 1º y 2º, mientras que, la nota introducida sea incorrecta.4º) Muestre por pantalla:"APROBADO", en el caso de que la nota sea mayor o igual que 5."SUSPENDIDO", en el caso de que la nota sea menor que 5.En pantalla:Introduzca nota (real): 12.4ERROR: Nota incorrecta, debe ser >= 0 y <= 10

Introduzca nota (real): -3.3ERROR: Nota incorrecta, debe ser >= 0 y <= 10

Introduzca nota (real): 8.7APROBADO

Page 92: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

92

El código propuesto es:#include <stdio.h>int main(){

float nota;printf( "\n Introduzca nota (real): " );scanf( "%f", &nota );

/* Si la primera nota introducida por el usuario es correcta, el bucle no itera ninguna vez. */while ( nota < 0 || nota > 10 ){

printf( "\n ERROR: Nota incorrecta, debe ser >= 0 y <= 10\n" );printf( "\n Introduzca nota (real): " );scanf( "%f", &nota );

}

/* Mientras que el usuario introduzca una nota incorrecta, el bucle iterará. Y cuandointroduzca una nota correcta, el bucle finalizará. */

if ( nota >= 5 )printf( "\n APROBADO" );

elseprintf( "\n SUSPENDIDO" );

return 0;} En el programa, el bucle while se ha usado para validar la nota introducida por el usuario.En programación, es muy frecuente usar el bucle while para validar (filtrar) datos. Al bucle que seutiliza para validar uno o más datos, también se le conoce como filtro.2.2.- EJERCICIOS DE LA INSTRUCCIÓN REPETITIVA MIENTRAS (WHILE) EN LENGUAJE C2.2.1.- Ejercicio - Área de una Esfera (en C)Resolver con la Instrucción whileEscribir un programa, en lenguaje C, que:1º) Pida por teclado el radio (dato real) de una esfera.2º) En el caso de que el radio sea menor o igual que 0, muestre por pantalla el mensaje:"ERROR: El radio debe ser mayor que cero.".3º) Repita los pasos 1º y 2º, mientras que, el radio introducido sea incorrecto.4º) Muestre por pantalla:"El área de una esfera de radio <radio> es: <área>".

Page 93: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

93

Nota 1: Área de una esfera = 4 * pi * radio2Nota 2: Utilice un bucle mientras (while).En pantalla:Introduzca radio: 3.6El área de la esfera de radio 3.6 es: 162.860129

Introduzca radio: -2.4ERROR: El radio debe ser mayor que cero.Introduzca radio: 2.4El área de la esfera de radio 2.4 es: 72.382279Solución del Ejercicio - Área de una Esfera (en C)Resuelto con la Instrucción whileCódigo fuente del programa:#include <math.h>#include <stdio.h>int main(){

float radio;printf( "Introduzca radio: " );scanf( "%f", &radio );

/* Filtramos el radio */

while ( radio <= 0 ){

printf( "ERROR: El radio debe ser mayor que cero." );printf( "\nIntroduzca radio: " );scanf( "%f", &radio );

}printf( "El area de la esfera de radio %f es: %f",

radio, 4 * 3.141592 * pow( radio, 2 ) );return 0;

}

Page 94: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

94

2.2.2.- Ejercicio - Volúmenes de Cubos (en C)Resolver con la Instrucción whileEscribir un programa, en lenguaje C, que:1º) Pida por teclado la arista (dato real) de un cubo.2º) En el caso de que la arista sea mayor que cero, muestre por pantalla el mensaje:"El volumen del cubo de arista <arista> es: <volumen>".3º) Repita los pasos 1º y 2º, mientras que, la arista introducida sea mayor que cero.4º) Muestre por pantalla cuantos volúmenes de cubos han sido calculados.Nota 1: Volumen de un cubo = arista3Nota 2: Utilice un bucle mientras (while).En pantalla:Introduzca arista: 7.3El volumen de un cubo de arista 7.3 es: 389.017Introduzca arista: 10.1El volumen de un cubo de arista 10.1 es: 1030.301Introduzca arista: 0Ha calculado el volumen de 2 cubo(s).

Introduzca arista: -5.8Ha calculado el volumen de 0 cubo(s).

Solución del Ejercicio - Volúmenes de Cubos (en C)Resuelto con la Instrucción whileCódigo fuente del programa:#include <math.h>#include <stdio.h>int main(){

int contador;float arista;printf( "Introduzca arista: " );scanf( "%f", &arista );contador = 0; /* Inicialización del contador */while ( arista > 0 ){

printf( "El volumen de un cubo de arista %f es: %f\n",arista, pow( arista, 3 ) );

Page 95: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

95

contador++; /* Incremento*/printf( "Introduzca arista :" );scanf( "%f", &arista );

}printf( "Ha calculado el volumen de %d cubo(s).", contador );return 0;

}

2.3.- INSTRUCCIÓN DE CONTROL REPETITIVA HACER...MIENTRAS (DO WHILE).2.3.1.- Instrucción do while en Lenguaje CEn lenguaje C, para escribir una instrucción do while (repetitiva hacer mientras) se utiliza lasintaxis:do{

<bloque_de_instrucciones>} while ( <expresión_lógica> );Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrirllave ({) y cerrar llave (}) son opcionales.Además, como se puede apreciar, la instrucción repetitiva do while, también hace uso deuna condición.En un bucle do while, primero se ejecuta el bloque de instrucciones y, después, se evalúa lacondición. En el caso de que ésta sea verdadera, se vuelve a ejecutar el bloque de instrucciones. Yasí sucesivamente, hasta que, la condición sea falsa.Por consiguiente, cuando el flujo de un programa llega a un bucle do while, existen dosposibilidades:Se ejecuta el bloque de instrucciones y, después, si la condición se evalúa a falsa, el bloquede instrucciones no se vuelve a ejecutar, de manera que, el bucle do while finaliza, habiendorealizado una sola iteración.Se ejecuta el bloque de instrucciones y, a continuación, si la condición se evalúa a verdadera,el bloque de instrucciones se vuelve a ejecutar. Y así sucesivamente, hasta que la condiciónsea falsa.El <bloque_de_instrucciones> de un bucle do while puede ejecutarse una o más veces(iteraciones). También hay que prevenir que el bucle no sea infinito.En resumen, una instrucción repetitiva do while permite ejecutar repetidamente (una o másveces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.

Page 96: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

96

Ejemplo 1:De modo que, utilizando un bucle do while, el problema del ejemplo 1 del apartado anterior,Instrucción while en C, se puede resolver con el código:#include <stdio.h>int main(){

int contador;printf( "\n " );contador = 1; /* Inicialización del contador */do{

printf( "%d ", contador ); /* Salida */contador++; /* Incremento */

} while ( contador <= 10 ); /* Condición */return 0;

}

Como ya se ha dicho, el bucle do while puede iterar una o más veces, por tanto, cuando unbloque de instrucciones debe iterar al menos una vez, generalmente, es mejor utilizar un bucle dowhile que un bucle while, como por ejemplo, en el siguiente problema.Ejemplo 2:Se quiere escribir un programa que:1º) Pida por teclado un número (dato entero).2º) Pregunte al usuario si desea introducir otro o no.3º) Repita los pasos 1º y 2º, mientras que, el usuario no responda 'n' de (no).4º) Muestre por pantalla la suma de los números introducidos por el usuario.En pantalla:

Introduzca un numero entero: 7¿Desea introducir otro (s/n)?: sIntroduzca un numero entero: 16¿Desea introducir otro (s/n)?: sIntroduzca un numero entero: -3¿Desea introducir otro (s/n)?: nLa suma de los numeros introducidos es: 20

Page 97: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

97

El código propuesto es:#include <stdio.h>int main(){

char seguir;int acumulador, numero;/* En acumulador se va a guardar la suma de los números introducidos por el usuario. */acumulador = 0;do{

printf( "\n Introduzca un numero entero: " );scanf( "%d", &numero);acumulador += numero;printf( "\n Desea introducir otro numero (s/n)?: " );fflush( stdin );scanf( "%c", &seguir);

} while ( seguir != 'n' );/* Mientras que el usuario desee introducir más números, el bucle iterará. */

printf( "\n La suma de los numeros introducidos es: %d",acumulador );

return 0;}

2.3.2.- Ejercicios de la Instrucción Repetitiva hacer...mientras (do..while) en Lenguaje CEjercicio - Media Aritmética de Números Introducidos (en C)Resolver con la Instrucción do whileEscribir un programa, en lenguaje C, que:1º) Pida por teclado un número (dato entero).2º) Muestre por pantalla los mensajes:Ha introducido <cantidad_de_números> número(s)La suma es <suma>3º) Pregunte al usuario si desea introducir otro o no.4º) Repita los pasos 1º, 2º y 3º, mientras que, el usuario no responda 'n' de (no).5º) Muestre por pantalla la media aritmética (dato real) de los números introducidos.Nota: Utilice un bucle hacer mientras (do while).

Page 98: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

98

En pantalla:Introduzca un número entero: 3Ha introducido 1 número(s)La suma es 3

¿Desea introducir otro (s/n)?: sIntroduzca un número entero: 7Ha introducido 2 número(s)La suma es 10

¿Desea introducir otro (s/n)?: sIntroduzca un número entero: 6Ha introducido 3 número(s)La suma es 16

¿Desea introducir otro (s/n)?: sIntroduzca un número entero: 13Ha introducido 4 número(s)La suma es 29

¿Desea introducir otro (s/n)?: nLa media aritmética es 7.25

Introduzca un número entero: 8Ha introducido 1 número(s)La suma es 8

¿Desea introducir otro (s/n)?: nLa media aritmética es 8.000000

Solución del Ejercicio - Media Aritmética de Números Introducidos (en C)Resuelto con la Instrucción do whileCódigo fuente del programa:#include <stdio.h>int main(){

char seguir;int acumulador, contador, numero;acumulador = 0;contador = 0;do{

Page 99: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

99

printf( "Introduzca un numero entero: " );scanf( "%d", &numero );

acumulador += numero;contador++;printf( "Ha introducido %d numero(s).", contador );printf( "\nLa suma es %d", acumulador );printf( "\n\nDesea introducir otro numero (s/n)?: " );fflush( stdin );scanf( "%c", &seguir );

} while ( seguir != 'n' );printf( "La media aritmetica es %f",

( float ) acumulador / contador );return 0;

}

Ejercicio - Cálculo de Sumas (en C)Resolver con la Instrucción do whileEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) Muestre por pantalla el mensaje:La suma es <suma>3º) Pregunte al usuario si desea realizar otra suma o no.4º) Repita los pasos 1º, 2º y 3º, mientras que, el usuario no responda 'n' de (no).5º) Muestre por pantalla la suma total de los números introducidos.Nota: Utilice un bucle hacer mientras (do while).En pantalla:Introduzca primer número: 9Introduzca segundo número: 4La suma es 13

¿Desea realizar otra suma (s/n)?: sIntroduzca primer número: 2Introduzca segundo número: 14La suma es 16

¿Desea realizar otra suma (s/n)?: sIntroduzca primer número: 6Introduzca segundo número: 1La suma es 7

Page 100: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

100

¿Desea realizar otra suma (s/n)?: nLa suma total es 36

Introduzca primer número: 10Introduzca segundo número: 100La suma es 110

¿Desea realizar otra suma (s/n)?: nLa suma total es 110Solución del Ejercicio - Cálculo de Sumas (en C)Resuelto con la Instrucción do whileCódigo fuente del programa:#include <stdio.h>int main(){

char seguir;int acumulador, n1, n2;acumulador = 0;do{

printf( "Introduzca primer numero: " );scanf( "%d", &n1 );printf( "Introduzca segundo numero: " );scanf( "%d", &n2 );printf( "La suma es %d", n1 + n2 );acumulador += n1 + n2;printf( "\n\nDesea realizar otra suma (s/n)?: " );fflush( stdin );scanf( "%c", &seguir );

} while ( seguir != 'n' );printf( "La suma total es %d", acumulador );return 0;

}2.4.- INSTRUCCIÓN DE CONTROL REPETITIVA PARA (FOR)2.4.1.- Instrucción for en Lenguaje CEn lenguaje C, para escribir una instrucción for (repetitiva para) se utiliza la sintaxis:for ( <expresión_1> ; <expresión_2> ; <expresión_3> ){

<bloque_de_instrucciones>}

Page 101: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

101

Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrirllave ({) y cerrar llave (}) son opcionales.Por otro lado, el bucle for es ideal usarlo cuando, de antemano, ya se sabe el número deveces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones.El bucle for es una variante del bucle while y, al igual que éste, puede iterar cero o másveces. Sin embargo, el bucle for sólo se suele usar cuando se conoce el número exacto de veces quetiene que iterar el bucle. Éste es el caso del problema planteado en el ejemplo 1 del apartadoInstrucción while en C, en el cual, se sabe de antemano que el bucle tiene que iterar, exactamente,diez veces.Ejemplo:Por tanto, dicho problema, se puede resolver con una instrucción repetitiva for de lasiguiente forma:#include <stdio.h>int main(){

int contador;printf( "\n " );for ( contador=1 ; contador<=10 ; contador++ )

printf( "%d ", contador );return 0;

} En este caso, <expresión_1>, <expresión_2> y <expresión_3>, se corresponden,respectivamente, con:la inicialización de la variable contador,la condición de salida del bucle yel incremento de la variable contadorde una instrucción repetitiva mientras (while).

Page 102: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

102

2.4.2.- » ¿Cuándo usar un Bucle u otro?En programación, a la hora de elegir un bucle u otro, debemos hacernos la siguientepregunta:¿Se conoce, de antemano, el número de veces (iteraciones) que tiene que ejecutarse undeterminado bloque de instrucciones?Si la respuesta es afirmativa, habitualmente se usa un bucle for. En caso contrario, nosplantearemos la siguiente pregunta:¿El bloque de instrucciones debe ejecutarse al menos una vez?En este caso, si la respuesta es afirmativa, generalmente haremos uso de un bucle do while,y si la respuesta es negativa, usaremos un bucle while.2.4.3.- Ejercicios de la Instrucción Repetitiva para (for) en Lenguaje CEjercicio - Cubos de Números Pares (en C)Resolver con la Instrucción forEscribir un programa, en lenguaje C, que muestre por pantalla los cinco primeros númerosnaturales pares elevados al cubo.Nota 1: Cubo de un número = número3Nota 2: Utilice un bucle para (for).En pantalla:8 64 216 512 1000

Solución del Ejercicio - Cubos de Números Pares (en C)Resuelto con la Instrucción forCódigo fuente del programa:#include <math.h>#include <stdio.h>int main(){

int numero;for ( numero = 2 ; numero <= 10 ; numero += 2 ){

printf( "%.f ", pow( numero, 3 ) );}return 0;

}

Page 103: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

103

Ejercicio - Números Múltiplos de 3 del -15 al -3 (en C)Resolver con la Instrucción forEscribir un programa, en lenguaje C, que muestre por pantalla todos los números múltiplosde 3 que hay entre el -15 y el -3, ambos inclusive.Nota: Utilice un bucle para (for).En pantalla:-15 -12 -9 -6 -3

Solución del Ejercicio - Números Múltiplos de 3 del -15 al -3 (en C)Resuelto con la Instrucción forCódigo fuente del programa:#include <stdio.h>int main(){

int numero;for ( numero = -15 ; numero <= -3 ; numero += 3 ){

printf( "%d ", numero );}return 0;

}

2.5.- ANIDAMIENTO DE INSTRUCCIONES DE CONTROL REPETITIVAS Y ALTERNATIVAS.Al igual que las instrucciones alternativas, las instrucciones repetitivas también se puedenanidar, permitiendo las siguientes combinaciones de anidamiento:while en whilewhile en do whilewhile en fordo while en do whiledo while en fordo while en whilefor en forfor en whilefor en do whileDe ellas, vamos a estudiar, como ejemplo, la combinación:

Page 104: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

104

2.5.1.- Bucle for en do whilePor otro lado, las instrucciones alternativas y repetitivas también se pueden anidar entre sí,permitiendo realizar 18 combinaciones más de anidamiento:while en if elsewhile en ifwhile en switchdo while en if elsedo while en ifdo while en switchfor en if elsefor en iffor en switchif else en whileif else en do whileif else en forif en whileif en do whileif en forswitch en whileswitch en do whileswitch en forDe ellas, vamos a estudiar, como ejemplo, la combinación:2.5.2.- Instrucción if Anidada en Bucle for del Lenguaje CEn lenguaje C, para anidar una instrucción if en un bucle for, se utiliza la sintaxis:for ( <expresión_1> ; <expresión_2> ; <expresión_3> ){

/* Inicio del anidamiento */if ( <expresión_lógica> ){

<bloque_de_instrucciones>}/* Fin del anidamiento */

}

Page 105: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

105

Ejemplo:Se quiere escribir un programa que muestre por pantalla todos los números enteros del 1 al100 (ambos inclusive) que sean divisibles entre 17 ó 21:17 21 34 42 51 63 68 84 85Anidando una instrucción if en un bucle for, el problema se puede resolver con el código:

#include <stdio.h>int main(){

int numero;printf( "\n " );for ( numero = 1 ; numero <= 100 ; numero++ ){

/* Inicio del anidamiento */if ( numero % 17 == 0 || numero % 21 == 0 )

printf( "%d ", numero );/* Fin del anidamiento */

}return 0;

}

2.5.3.- Ejercicios de Anidamiento de Instrucciones de Control Repetitivas y Alternativas.Ejercicio - Cantidad y Suma de Números Enteros (en C)Resolver con Anidamiento de Instrucciones Repetitivas y AlternativasEscribir un programa, en lenguaje C, que:1º) Pida por teclado un número (dato entero).2º) Repita el paso 1º, mientras que, el número introducido sea distinto de cero.3º) Muestre cuántos números mayores que cero han sido introducidos por el usuario, asícomo, la suma de todos ellos.En pantalla:Introduzca un número entero: 4Introduzca un número entero: 8Introduzca un número entero: -6Introduzca un número entero: 12Introduzca un número entero: 0Ha introducido 3 número(s) mayor(es) que cero.La suma es 24

Introduzca un número entero: -3Introduzca un número entero: 0Ha introducido 0 número(s) mayor(es) que cero.La suma es 0

Page 106: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

106

Solución del Ejercicio - Cantidad y Suma de Números Enteros (en C)Resuelto con Anidamiento de Instrucciones Repetitivas y AlternativasCódigo fuente del programa:#include <stdio.h>int main(){

int numero, contador, suma;printf( "Introduzca un numero entero: " );scanf( "%d", &numero );contador = 0;suma = 0;while ( numero != 0 ){

if ( numero > 0 ){

contador++;suma += numero;

}printf( "Introduzca un numero entero: " );scanf( "%d", &numero );

}printf( "Ha introducido %d numero(s) mayor(es) que cero.",

contador );printf( "\nLa suma es %d", suma );return 0;

}

Ejercicio - Mostrar y Sumar Números Enteros (en C)Resolver con Anidamiento de Instrucciones Repetitivas y AlternativasEscribir un programa, en lenguaje C, que:1º) Pida por teclado dos números (datos enteros).2º) En el caso de que el primer número introducido por el usuario, no sea mayor que cero yel segundo menor que cero, muestre por pantalla el mensaje:"ERROR: El primer número debe ser mayor que cero y el segundo menor que cero."En caso contrario, muestre por pantalla los números que hay entre los dos númerosintroducidos por el usuario, ambos inclusive, así como, la suma de todos ellos.

Page 107: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

107

En pantalla:Introduzca primer número entero: 5Introduzca segundo número entero: -2-2 -1 0 1 2 3 4 5La suma es 12

Introduzca primer número entero: 17Introduzca segundo número entero: 8ERROR: El primer número debe ser mayor que cero y el segundo menor que cero.

Page 108: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

108

3.- INSTRUCCIONES DE SALTO EN LENGUAJE CA continuación, se estudian las distintas instrucciones de control de salto que se puedenutilizar para escribir programas en lenguaje C: break, continue, goto y return.

3.1.- INSTRUCCIÓN BREAK EN LENGUAJE CEn lenguaje C, para escribir una instrucción de salto break (interrumpir), se utiliza lasintaxis:

break; La instrucción de salto break se usa para interrumpir (romper) la ejecución normal de unbucle, es decir, la instrucción break finaliza (termina) la ejecución de un bucle y, por tanto, elcontrol del programa se transfiere (salta) a la primera instrucción después del bucle.Ejemplo 1:Estúdiese el siguiente código fuente:#include <stdio.h>int main(){

int n, a;a = 0;do{

printf( "Introduzca un numero entero: " );scanf( "%d", &n );if ( n == 0 ){

printf( "ERROR: El cero no tiene opuesto.\n" );break;/* En el caso de que n sea un cero,

el bucle se interrumpe. */}printf( "El opuesto es: %d\n", -n );a += n;

} while ( n >= -10 && n <= 10 );printf( "Suma: %d", a );return 0;

}

Page 109: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

109

El programa puede ser la solución del problema siguiente:Escriba un programa que:1º) Pida por teclado un número (dato entero).2º) Si el número introducido por el usuario es distinto de cero, muestre por pantalla elmensaje:"El opuesto es: <-número>".3º) Repita los pasos 1º y 2º, mientras que, el usuario introduzca un número mayor o igualque -10 y menor o igual que 10.Pero, si el usuario introduce un cero, el bucle también finaliza, mostrándose por pantalla elmensaje:"ERROR: El cero no tiene opuesto.".4º) Muestre por pantalla la suma de los números introducidos por el usuario.En pantalla:Introduzca un número entero: 15El opuesto es: -15Suma: 15

La traza del programa es:

Page 110: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

110

El bucle ha finalizado porque la condición ( n >= -10 && n <= 10 ) es falsa, ya que, 15 no esmayor o igual que -10 y menor o igual que 10.Sin embargo, el bucle también puede finalizar, no porque sea falsa la condición ( n >= -10&& n <= 10 ), sino, porque se ejecute la instrucción break. Esto ocurrirá cuando el usuariointroduzca un cero. Por ejemplo:Introduzca un número entero: 8El opuesto es: -8Introduzca un número entero: -7El opuesto es: 7Introduzca un número entero: 0ERROR: El cero no tiene opuesto.Suma: 1La traza en este caso es:

Normalmente, cuando en un bucle se utiliza una instrucción break, la ejecución de ésta secondiciona.En el ejemplo 1, el bucle se interrumpe si la condición ( n == 0 ) es verdadera. Nótese que,dicha condición no está contemplada en la condición de salida estándar del bucle, por lo que, a lacondición ( n == 0 ) se le considera condición de salida interna del bucle.

Page 111: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

111

Ejemplo 2:No obstante, el problema también se puede resolver sin hacer uso de la instrucción break:#include <stdio.h>int main(){

int numero, acumulador;acumulador = 0;do{

printf( "Introduzca un numero entero: " );scanf( "%d", &numero );if ( numero == 0 ){

printf( "ERROR: El cero no tiene opuesto.\n" );}else{

printf( "El opuesto es: %d\n", -numero );acumulador += numero;

}} while ( numero >= -10 && numero <= 10 && numero != 0 );printf( "Suma: %d", acumulador );return 0;

} Obsérvese que, en este programa, sí se contempla en la condición de salida del bucle laposibilidad de que el usuario teclee un cero, en cuyo caso, el bucle deja de iterar de forma natural.Los resultados por pantalla de este código fuente son idénticos a los del código anterior.Por otra parte, en lenguaje C, como ya vimos en el apartado Instrucción switch en C, lainstrucción break también se usa para interrumpir (salir de) una alternativa múltiple.3.2.- INSTRUCCIÓN CONTINUE EN LENGUAJE C.

En lenguaje C, para escribir una instrucción de salto continue (continuar), se utiliza lasintaxis:continue;La instrucción de salto continue siempre se usa para interrumpir (romper) la ejecuciónnormal de un bucle. Sin embargo, el control del programa no se transfiere a la primera instruccióndespués del bucle (como sí hace la instrucción break, véase el apartado anterior Instrucción breaken C), es decir, el bucle no finaliza, sino que, finaliza la iteración en curso, transfiriéndose el controldel programa a la condición de salida del bucle, para decidir si se debe realizar una nueva iteracióno no.

Page 112: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

112

Por tanto, la instrucción continue finaliza (termina) la ejecución de una iteración de unbucle, pero, no la ejecución del bucle en sí. De forma que, la instrucción continue salta (no ejecuta)las instrucciones que existan después de ella, en la iteración de un bucle.Ejemplo 1:En el programa siguiente se muestra como se puede utilizar la instrucción continue:#include <stdio.h>

int main(){

int n, a;a = 0;do{printf( "Introduzca un numero entero: " );scanf( "%d", &n );if ( n == 0 ){printf( "ERROR: El cero no tiene opuesto.\n" );continue;/* En el caso de que n sea un cero,

la iteración en curso del buclese interrumpe aquí. */

}printf( "El opuesto es: %d\n", -n );a += n;

} while ( n >= -10 && n <= 10 );printf( "Suma: %d", a );return 0;

} El código del programa es el mismo que el del ejemplo 1 del apartado anterior, Instrucciónbreak en C, excepto por la instrucción break, que ha sido sustituida por la instrucción continue. Elprograma puede ser la solución para el problema siguiente, el cual se diferencia del ejemplo 1 delapartado anterior en que si el usuario introduce un cero, el bucle no deja de iterar.Diseñe el algoritmo de un programa que:1º) Pida por teclado un número (dato entero).2º) Si el número introducido por el usuario es distinto de cero, muestre por pantalla elmensaje: "El opuesto es: <-número>".En caso contrario, muestre el mensaje:"ERROR: El cero no tiene opuesto.".3º) Repita los pasos 1º y 2º, mientras que, el usuario introduzca un número mayor o igualque -10 y menor o igual que 10.4º) Muestre por pantalla la suma de los números introducidos por el usuario.

Page 113: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

113

En pantalla:Introduzca un número entero: 2El opuesto es: -2Introduzca un número entero: 0ERROR: El cero no tiene opuesto.Introduzca un número entero: -59El opuesto es: 59Suma: -57La traza del programa es:

La instrucción continue se ejecuta cuando el usuario introduce un cero, interrumpiendo laiteración en curso; pero, el bucle solamente finaliza cuando la condición ( n >= -10 y n <= 10 ) seafalsa.

Page 114: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

114

Normalmente, al igual que ocurre con la instrucción break, cuando en un bucle se utiliza unainstrucción continue, la ejecución de ésta también se condiciona.En el ejemplo 1, la iteración en curso del bucle se interrumpe si es verdadera la condición (n = 0 ).Ejemplo 2:No obstante, el problema también se puede resolver sin hacer uso de la instruccióncontinue:#include <stdio.h>int main(){

int numero, acumulador;acumulador = 0;do{printf( "Introduzca un numero entero: " );scanf( "%d", &numero );if ( numero == 0 ){printf( "ERROR: El cero no tiene opuesto.\n" );

}else{printf( "El opuesto es: %d\n", -numero );acumulador += numero;

}} while ( numero >= -10 && numero <= 10 );printf( "Suma: %d", acumulador );return 0;

} Los resultados por pantalla de este programa son idénticos a los del algoritmo anterior.

Page 115: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

115

3.3.- INSTRUCCIÓN GOTO EN LENGUAJE C.En lenguaje C, para escribir una instrucción de salto goto (ir a), se utiliza la sintaxis:

goto <nombre_de_la_etiqueta>La instrucción de salto goto se puede usar en un programa, para transferirincondicionalmente el control del mismo a la primera instrucción después de una etiqueta, o dichode otra forma, al ejecutar una instrucción goto, el control del programa se transfiere (salta) a laprimera instrucción después de una etiqueta. Una etiqueta se define mediante su nombre(identificador) seguido del carácter dos puntos (:).Ejemplo:En el siguiente programa se utiliza la instrucción goto para resolver el mismo problema queel del ejemplo 1 del apartado Instrucción break en C:#include <stdio.h>int main(){

int n, a;

a = 0;do{printf( "Introduzca un numero entero: " );scanf( "%d", &n );if ( n == 0 ){printf( "ERROR: El cero no tiene opuesto.\n" );goto etiqueta_1;/* En el caso de que n sea un cero,

el control de programa salta a laprimera instrucción después deetiqueta_1. */

}printf( "El opuesto es: %d\n", -n );a += n;

} while ( n >= -10 && n <= 10 );etiqueta_1:printf( "Suma: %d", a );return 0;

} Los resultados por pantalla de este programa son idénticos a los de los programas de losejemplos 1 y 2 del apartado Instrucción break en C.

Page 116: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

116

En pantalla:Introduzca un número entero: -4El opuesto es: 4Introduzca un número entero: 12El opuesto es: -12Introduzca un número entero: 0ERROR: El cero no tiene opuesto.Suma: 8

La traza del programa es:

Normalmente, al igual que ocurre con las instrucciones break y continue, cuando en unalgoritmo se utiliza una instrucción goto, la ejecución de ésta también se condiciona.

Page 117: Tutorial Lenguaje C

Tutorial Lenguaje de Programación C.

INSTITUTO PROFESIONAL VIRGINIO GÓMEZESCUELA TECNOLÓGICA INDUSTRIAL

117

3.4.- INSTRUCCIÓN RETURN EN LENGUAJE CEn lenguaje C, para escribir una instrucción de salto return (volver), se utiliza la sintaxis:

return <expresión>;La instrucción de salto return es utilizada en lenguaje C para indicar el valor de retorno deuna función. Por tanto, vamos a hacer uso de la instrucción return cuando definamos subprogramasde tipo función, que estudiaremos más adelante en el apartado Llamadas a subprogramas.Por otra parte, recuérdese que, en el apartado Mi primer programa en C de estecurso/tutorial, ya estudiamos la utilidad de la instrucción return en la función main.3.5.- VENTAJAS DE NO USAR LAS INSTRUCCIONES DE SALTO EN LENGUAJE C

Las ventajas de no usar las instrucciones de salto, especialmente la instrucción goto, sepueden resumir en:La legibilidad del código fuente de los programas es mayor.La probabilidad de cometer errores en el algoritmo diseñado es menor.Es más fácil realizar cambios o corregir errores en el algoritmo del programa.Nunca se altera (rompe) la secuencia de ejecución normal del programa. Dicho de otromodo, el programa siempre se ejecuta de un modo natural.