UNIDAD I      Paradigmas de la Programación Estructurada

 1.1       Programación modular y programación estructurada

Los términos programación modular, programación descendente y programación estructurada se introdujeron en la segunda mitad de la década de los sesenta y a menudo sus términos se utilizan como sinónimos aunque no significan lo mismo. La programación estructurada significa escribir un programa de acuerdo a las siguientes reglas:

El programa tiene un diseño modular
Los módulos son diseñados de modo descendente
Cada módulo se codifica utilizando las tres estructuras de control básicas: secuencia, selección y repetición.

El término programación estructurada se refiere a un conjunto de técnicas que han ido evolucionando desde los primeros trabajos de Edgar Dijkstra. Estas técnicas aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los programas y, por consiguiente, reducen los errores; hacen los programas más fáciles de escribir, verificar, leer y mantener. Los programas deben estar dotados de una estructura.

            La programación estructurada es el conjunto de técnicas que incorporan:

·         Recursos abstractos,

·         Diseño descendente (top-down),

·         Estructuras básicas.

Recursos abstractos consiste en descomponer una determinada acción  compleja en términos de un número de acciones más simples capaces de ejecutarlas.

El diseño descendente es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodología descendente consiste en efectuar una relación entre las sucesivas etapas de estructuración de modo que se relacionasen unas con otras mediante entradas y salidas de información. Es decir, que se descompone el problema en etapas o estructuras jerárquicas, de modo que se puede considerar cada estructura desde dos puntos de vista: ¿qué hace? y ¿cómo lo hace?

          Las estructuras de control de un lenguaje de programación son métodos de especificar el orden en que las instrucciones de un algoritmo se ejecutarán. El orden de ejecución de las sentencias (lenguaje) o instrucciones determinan el flujo de control. Estas estructuras de control son, por consiguiente, fundamentales en los lenguajes de programación y en los diseños de algoritmos especialmente los pseudocódigos.

Las tres estructuras de control básico son:

·         Secuencia

·         Selección

·         Repetición

La programación estructurada hace los programas más fáciles de escribir, verificar, leer mantener, utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas.

1.2               Funciones generales

Cada programa en C tiene una función main( )  que es el punto de entrada al programa. Su estructura es:

main( )

                                                     bloque de sentencias

 
{

. . .   

}

Las sentencias incluídas entre llaves { . . .] se denominan bloque. Un programa debe de tener sólo una función main(). Si se intenta hacer dos funciones main( ) se produce un error. Además de la función main( ), un programa en C consta de una colección de funciones. Todas los programas se construyen a partir de una o más funciones que se integran para crear una aplicación. Todas las funciones contienen una o más sentencias C y se crean generalmente para realizar una única tarea, tales como imprimir la pantalla, escribir un archivo o Cambiar el color de la pantalla. Se puede declarar y ejecutar un número de funciones casi ilimitado en un programa C.

1.3        Estructura básica de un programa

    Un programa en C se descompone de una o más funciones. Una de las funciones debe ser obligatoriamente main. Una función en C es un grupo de instrucciones que realizan una o más acciones. Asimismo, un programa contendrá una serie de directivas #include que permitirán incluir en el mismo archivo de cabecera que a su vez constarán de funciones y datos predefinidos en ellos.

Un programa en C puede incluir:

·         Directivas de preprocesador

·         Declaraciones globales;

·         La función main();

·         Funciones definidas por el usuario;

·         Comentarios del programa (utilizados en totalidad). 

La estructura típica completa de un programa en C se muestra en el siguiente programa sencillo en C.

#include <stdio.h>

/* Este programa imprime: Bienvenido a la programación en C*/

int main()

{

     print(“Bienvenido a la programación en C\ n”);

     return 0;

}

La directiva #include de la primera línea es necesaria para que el programa tenga salida. Se refiere a un archivo externo denominado stdio.h en el que proporciona la información relativa a la función printf(). Obsérvese que los ángulos < y > no son parte del nombre del archivo; se utilizan para indicar que el archivo es un archivo de la biblioteca estándar en C.

La segunda línea es un comentario, identificado por los caracteres /*  y */. Los comentarios se incluyen en programas que proporcionan explicaciones a los lectores de los mismos. Son ignorados por el compilador.

La tercera línea contiene la cabecera de la función main(), obligatoria en cada programa en C. Indica el comienzo del programa y requieren los paréntesis ( ) a continuación del main.

La cuarta y séptima línea contienen sólo llaves { y }  que cierran el cuerpo de la función main()  y son necesarias en todos los programas C.

La quinta línea contiene la sentencia

    printf(“Bienvenido a la programación en C \n”);

Que indica al sistema que se escriba el mensaje “Bienvenido a la programación en C\n”. printf() es la función más utilizada para dar salida de datos por el dispositivo estándar, la pantalla. La salida será

Bienvenido a la programación en C

    El símbolo ´ \ es el símbolo de nueva línea. Poniendo este símbolo final de la cadena entre comillas, indica al sistema que comience una nueva línea después de imprimir los caracteres precedentes, terminado, por consiguiente, la línea actual.

    La sexta línea contiene la sentencia return 0. Esta sentencia termina la ejecución del programa y devuelve el control al sistema operativo de la computadora. El número 0 se utiliza para señalar que el programa ha terminado correctamente (con éxito).

Obsérvese el punto y coma (;) al final de la quinta y sexta línea. C requiere que cada sentencia termine con un punto y coma. No es necesario que esté al final de una línea. Se pueden poner varias sentencias en la misma línea y se puede hacer que una sentencia se extienda sobre varias líneas.

 

ELEMENTOS DE UN PROGRAMA EN C

    Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución de macros. El preprocesador se controla por directivas introducidas por líneas que contienen # como primer carácter. El resultado del preprocesado es una secuencia de tokens.

Tokens (elementos léxicos de los programas). Existen cinco clases de tokens: identificadores, palabras reservadas, operadores y separadores. 

Identificadores. Un identificador es una secuencia de caracteres, letras, dígitos y subrayados(_). El primer carácter debe ser una letra (algún compilador admite carácter de subrayado). Las letras mayúsculas y minúsculas son diferentes.

nombre_clase                            Indice                                     Dia_Mes_Anyo

elemento_mayor                       Cantidad_Total                   Fecha_Compra_Casa

a                                                   Habitacion120                    i

En Borland C/C++ el identificador puede ser de cualquier longitud; sin embargo, el compilador ignora cualquier carácter fuera de los 32 primeros. Un consejo que puede servir de posible reglas puede ser:

1.       Escribir identificadores de variables en letras minúsculas.

2.       Constantes en mayúsculas.

3.       Funciones con tipo de letra mixto: mayúscula/minúscula.

Palabras reservadas. Una palabra reservada es una característica del lenguaje C asosicada con algún significado especial. Una palabra reservada no se puede utilizar como nombre de identificador o función. Ejemplos de identificadores reservados:

break                    float                              for                     signed                           do

case                     char                              struct                else                              void

const                    typedef                          switch               while                             return 

Comentarios. Los comentarios en C tienen el formato /* y */

Signos de puntuación y separadores. Todas las sentencias deben de terminar con un punto y coma. Otros signos de puntuación son:

%             *          &          {           }           ~          [           ]                      >          <         

\               !           ^           :           ,           .           =          +          -           ;          

Archivos de Cabecera

 Un archivo de cabecera es un archivo especial que contiene declaraciones de elementos y funciones de la biblioteca. Para utilizar macros, constantes, tipos y funciones almacenadas en biblioteca, un programa debe utilizar la directiva #include para insertar el archivo de cabecera correspondiente. Por ejemplo, si un programa utiliza la función pow que se almacena en la biblioteca math.h, debe contener la directiva

#include <math.h>

 para hacer que el contenido de la biblioteca matemática esté disponible a un programa. La mayoría de los programas contienen líneas como ésta al principio incluyen en el momento de compilación. 

#include <stdio.h>

/* o bien*/

#include “stdio.h”

 

 TIPOS DE DATOS EN C

    C no soporta un gran número de datos predefinidos, pero tiene la capacidad para crear sus propios tipos de datos. Todos los tipos de datos simples o básicos de C, esencialmente, números.

Los tres tipos de datos básicos son: 

·         Enteros

·         Números de coma flotante (reales);

·         Caracteres 

Tipos de datos simples de C

Tipo

Ejemplo

Tamaño en bytes

Rango

Mínimo    . .Máximo

char

‘C’

1

0

. . 255

short

-15

2

-128

. . 127

int

1024

2

-32768

. . 32767

unsigned int

42325

2

0

. . 65535

long

262144

4

-2147483648

. . 2147483637

float

10.5

4

3.4*(10-38)

. .3.4*(10308)

double

0.00045

8

1.7*(-38)

. .1.7*(10308)

long double

1e-8

8

igual que doble

Los tipos de datos fundamentales en C son:

·         enteros: (números complejos y sus negativos), de tipo int.

·         variantes enteros: tipos short, long y unsigned.

·         reales: números decimales, tipos float, double o long double.

·         caracteres: letras, dígito, símbolos y signos de puntuación, tipo char.

 

1.4            Zonas de Memoria

Variables

En C una variable es una posición con nombre en memoria donde se almacena un valor de un cierto tipo de dato. Las variables pueden almacenar todo tipo de datos: cadenas, números y estructuras. Una constante, por el contrario, es una variable cuyo valor no puede ser modificado.

 

Declaración de Variables

    La forma más simple de una declaración de variables en C es poner primero el tipo de dato y a continuación el nombre de la variable. Si se desea dar un valor inicial a la variable, éste se pone a continuación. El formato de la declaración es:

<tipo de dato>         <nombre de variable> = <valor inicial>

 Se pueden también declarar  múltiples variables en la misma línea:

<tipo de dato>         <nom_var1>,       <nom_var2> . . . <nom-varn>

 Así, por ejemplo,

int longitud; int valor=99;

int valor1, valor2;

int num_parte=1141, num_items=45;

 Los tipos básicos de variables en C son:

·         variables locales

·         variables globales

·         variables dinámicas

Las variables locales son aquéllas definidas en el interior de una función y son visibles sólo en esa función específica. Las reglas por las que rigen las variables locales son:

1.                  En el interior de una función, una variable local no puede ser modificada por ninguna sentencia externa a la función.

2.                  Los nombres de las variables locales no han de ser únicos. Dos, tres o más funciones pueden definir variables de nombre Interruptor. Cada variable es distinta y pertenece  a la función en que está declarada.

3.                  Las variables locales de las funciones no existen en memoria hasta que se ejecuta la función. Esta propiedad permite ahorrar memoria, ya que permite que varias funciones compartan la misma memoria para sus variables locales (pero no a la vez).

 

Variables globales

Las variables globales son variables que se declaran fuera de la función y por defecto (omisión) son visibles a cualquier función, incluyendo main( ). La memoria asignada a una variable global permanece asignada a través de la ejecución del programa, tomando como espacio válido según se utilice. Por esta razón, se debe evitar utilizar muchas variables globales dentro de un programa. Otro problema que surge con variables globales es que una función puede asignar un valor específico a una variable global. Posteriormente, en otra función, y por olvido, se pueden hacer cambios en la misma variable. Estos cambios dificultarán la localización de errores. 

Variables dinámicas

Las variables dinámicas tienen características que en algunos casos son similares tanto a variables locales como a globales. Al igual que una variable local, una variable dinámica se crea y libera durante la ejecución del programa. La diferencia entre una variable local y una variable dinámica es que la variable dinámica se crea tras su petición, es decir, a su voluntad, y se libera cuando ya no se necesita. Al igual que una variable global, se pueden crear variables dinámicas que son accesibles desde múltiples funciones. Las variables dinámicas se examinan en detalle en la unidad de PUNTEROS. 

Constantes

En C existen cuatro tipos de constantes: 

·         constantes literales,

·         constantes definidas,

·         constantes enumeradas,

·         constantes declaradas.

 Las constantes literales son las más usuales; toman valores tales como 45.32564, 222 o bien “Introduzca sus datos” que se describen directamente en el texto del programa. Las constantes definidas son identificadores que se asocian con valores literales constantes y que toman determinados nombres. Las constantes declaradas son como variables: sus valores se almacenan en memoria, pero no se pueden modificar. Las constantes enumeradas permiten asociar un identificador, tal como Color, con una secuencia de otros nombres, tales como Azul, Verde, Rojo y Amarillo. 

Las constantes literales o constantes, en general, se clasifican también en cuatro grupos, cada uno de los cuales puede ser de cualquiera de los tipos:

·         constantes enteras

·         constantes caracteres

·         constantes de coma flotante

·         constantes cadena

Las constantes definidas pueden recibir nombres simbólicos mediante la directiva #define

#define PI 3.141592

        #define VALOR 54

Las constantes enumeradas permiten crear listas de elementos afines. Un ejemplo típico es una constante enumerada de lista de colores, que se puede declarar como:

enum Colores {Rojo, Naranja, Amarillo, Verde, Azul, Violeta}

Cuando se procesa esta sentencia, el compilador asigna un valor que comienza en 0 a cada elemento enumerado; así, Rojo equivale a 0, Naranja es 1, etc. El compilador enumera los colores por usted.

Las constantes declaradas utilizan el cualificador const que permite dar nombres simbólicos a constantes a modo de otros lenguajes. El formato general es const tipo nombre = valor;

Si se otite tipo, C utiliza int (entero por defecto). Ejemplos:

const char CARÁCTER=’@’;

const int OCTAL=0233;

const char CADENA []=”Curso de C”;

 Las definiciones const especifican tipos de datos, terminan con punto y coma y se inicializan como variables. La directiva #define no especifica tipos de datos, no utiliza el operador de asignación (=) y no termina con punto y coma.

Una constante carácter (char) es un carácter del código constantes o ASCII encerrado en apóstrofes.

‘A’            ‘b’         ‘c’

Además de los caracteres ASCII estándar, una constante carácter soporta caracteres especiales que no se pueden representar utilizando su declarado, como, por ejemplo, los códigos ASCII altos y las secuencias de escape.

Código de escape

Significado

‘\n’

nueva línea

‘\t’

tabulación

‘\b’

retroceso de espacio

*Investigar todos los códigos de escape. 

1.5            Operadores

Los programas C constan de datos, sentencias de programas y expresiones. Una expresión es, normalmente, una ecuación matemática, tal como 3+5. En esta expresión, el símbolo más (+) es el operador suma, y los números 3 y 5 se llaman operadores u operandos. En síntesis, una expresión es una secuencia de operaciones y operadores que especifica un cálculo. 

Sintaxis

variable =   expresión

variable                 identificador válido C declarado como variable

expresión              una constante, otra variable a la que se ha asignado previamente un valor o una fórmula que se ha evaluado y cuyo tipo es el de variable.

 

Una expresión es un elemento de un programa que toma un valor. En algunos casos puede también realizar una operación.

Las expresiones pueden ser valores constantes o variables simples, tales como 25 o ‘z’; pueden ser valores o variables combinadas con operadores (a++, m==n, etc); o bien pueden ser valores combinados con funciones tales como toupper(‘b’).

 

1.5.1         Operadores de Asignación y Expresión

El operador = asigna el valor de la expresión derecha a la variable situada a su izquierda.

codigo = 3467;

Fahrenheit = 123.456;

coordX = 525;

coordY = 725;

 

Este operador es asociado por la derecha, eso permite realizar asignaciones múltiples. Así,

a=b=c=45;

equivale a

a=(b=(c=45));

o dicho de otro modo, a las variables a, b y c se asigna el valor 45.

Esta propiedad permite inicializar varias variables con una sentencia

int a, b, c;

a=b=c=5;  /*se asigna 5 a las variables a, b y c*/ 

 

1.5.2                 Operadores aritméticos, de relación y lógicos

Los operadores aritméticos sirven para realizar operaciones aritméticas básicas. Los operadores aritméticos C siguen las reglas algebraicas típicas de jerarquía o prioridad. Estas reglas especifican la precedencia de las operaciones aritméticas. 

Operadores aritméticos

Operador

Tipos enteros

Tipos reales

Ejemplo

+

Suma

Suma

x + y

-

Resta

Resta

b – c

*

Producto

Producto

x * y

/

División entera: cociente

División en coma flotante

b / 5

%

División entera: resto

 

b % 5

 Precedencia de operadores matemáticos básicos

Operador

Operación

Nivel de precedencia

+, -

+25, -6.745

1

*, /, %

5*5        es   25

2

 

25/5      es    5

 

 

25 % 6  es   1

 

+, -

2 + 3     es   5

3

 

2 – 3     es   -1

 

 

Operadores de relación

C no tiene tipos de datos lógicos o boléanos, como Pascal, para representar los valores verdadero (true) y falso (false). En su lugar se utiliza el tipo int para este propósito, con el valor entero 0 que representa a falso y distinto de cero a verdadero.

Operadores tales como >= y == que comprueban una relación entre dos operandos se llaman operadores relacionales y se utilizan en expresiones de forma

expresión1                        operador_relacional     expresión2 

Los operadores relacionales se usan normalmente en sentencias de lección (if) o de iteración (while, for), que sirven para comprobar una condición. Utilizando operadores relacionales se realizan operaciones de igualdad, desigualdad y diferencias relativas. 

Operadores relacionales de C

Operador

Significado

Ejemplo

==

Igual a

a == b

!=

No igual a

a != b

>

Mayor que

a > b

>

Menor que

b < b

>=

Mayor o igual que

a >= b

<=

Menor o igual que

a <= b

 Operadores Lógicos

Estos operadores se utilizan con expresiones para devolver un valor verdadero (cualquier entero distinto de cero) o un valor falso (0). Los operadores lógicos se denominan también operadores boléanos, en honor de George Boole, creador de álgebra de Boole.

    Los operadores lógicos de C son: not (!), and (&&) y or (||). El operador lógico ! (not, no) produce falso (cero) si su operando es verdadero (distinto de 0) y viceversa. El operador lógico && (and, y) produce verdadero sólo si ambos operandos son verdadero (no cero); si cualquiera de los operandos es falso produce falso. El operador lógico || (or, o) produce verdadero si cualquiera de los operandos es verdadero (distinto de cero) y produce falso sólo si ambos operandos son falsos. Con operadores lógicos existen sólo dos valores posibles para expresiones: verdadero y falso. La forma más usual de mostrar los resultados de operaciones lógicas es mediante las denominadas tablas de verdad, que muestran como funcionan cada uno de los operadores lógicos.

 

1.5.3                 Operadores de incremento y decremento

De las características que incorpora C, una de las más útiles son los operadores de incremento ++ y decremento --. Los operadores ++ y --, denominados de incremento y decremento, suman o restan 1 a su argumento, respectivamente, cada vez que se aplican a una variable.

Operadores de incremento (++) y decremento (- -)

Incremento

Decremento

++n

- -n

n += 1

n -= 1

n =n +1

n = n -1

 Ejemplos:

a++          es igual que        a=a+1

    Estos operadores tienen la propiedad de que pueden utilizarse como sufijo prefijo, el resultado de la expresión puede ser distinto, dependiendo del contexto.

Las sentencias  ++n;     n++;

tienen el mismo efecto; así como

- -n;          n- -;

Si los operadores ++ y - - están de prefijos, las operaciones de incremento o decremento se efectúa antes que la operación de asignación; si los operadores ++ y - - están sufijos, la asignación se efectúa en primer lugar y el incremento o decremento a continuación.

 

1.5.4                 Jerarquía de operadores

La prioridad o precedencia de operadores determina el orden en el que se aplican los operadores a un valor. Los operadores C vienen en una tabla de dieciséis grupos. Los operadores del grupo 1 tienen mayor prioridad que los del grupo 2, y así sucesivamente:

·         Si dos operadores se aplican al mismo operando, el operador con mayor prioridad se aplica primero.

·         Todos los operadores del mismo grupo tienen igual prioridad y asociatividad.

·         La asociatividad izquierda-derecha significa aplicar el operador más a la izquierda primero, y en la asociatividad derecha-izquierda se aplica primero el operador más a la derecha.

·         Los paréntesis tienen la máxima prioridad. 

Prioridad

Operadores

Asociatividad

1

x  ->  []  ( )

I –D

2

++  -- ~ ! - + & * sizeof

D – I

3

. *  -> *

I –D

4

*  /  %

I –D

5

+   -

I –D

6

<<  >>

I –D

7

<  <=  >  >=

I –D

8

== ! =

I –D

9

&

I –D

10

^

I –D

11

|

I –D

12

&&

I –D

13

||

I –D

14

?: (expresión condicional)

D – I

15

= *= /= %= += -=

 

 

<<=  >>= &= /= ^=

D – I

16

, (operador coma)

I –D

I-D                Izquierda –Derecha

D – I             Derecha -Izquierda

 

1.6                      Expresiones básicas

1.6.1                         Instrucciones de entrada/salida

Los programas interactúan con el exterior, a través de datos de entrada o datos de salida. La biblioteca C proporciona facilidades para entrada y salida, para lo que todo programa deberá tener el archivo de cabecera stdio.h. En C la entrada y la salida se lee y se escribe de los dispositivos estándar de entrada y salida stdin y stdout respectivamente. La salida, normalmente, es a pantalla del ordenador, la entrada se capta del teclado.

Salida

La salida de los datos de un programa se puede dirigir a diversos dispositivos, pantalla, impresora, archivos. La salida que se trata a continuación va a ser a pantalla, además será formateada. La función printf( ) visualiza a pantalla datos del programa, transforma los datos, que están en representación binaria, a ASCII según los códigos transmitidos.

        La forma general que tiene la función printf ( )

printf(“Cadena_de_control_, dato1, dato2, . . .)

cadena_de_control     contiene los tipos de datos y forma de mostrarlos.

dato1, dato2 . . .          variables, constantes, datos de salida. 

Códigos de formato más utilizados

%d                El dato se convierte en entero decimal.

%o                El dato entero se convierte a octal.

%x                El dato entero se convierte a hexadecimal.

%u                El dato entero se convierte en entero sin signo.

%c                El dato se considera de tipo caracter.

%e                El dato se considera de tipo flota. Se convierte a notación científica, de la forma

{-}n.mmmmmmE{+¦-}dd. 

%f                  El dato se considera de tipo flota. Se convierte a notación decimal, con parte entera y los dígitos de precisión.

%g                El dato se considera de tipo float. Se convierte según el código %e o %f dependiendo de cual sea la representación más corta.

%s                 El dato ha de ser una cadena de caracteres.

%lf                El dato se considera de tipo double.

 

Entrada

La entrada de datos a un programa puede tener diversas fuente, teclado, archivos en disco. La entrada que consideramos ahora es a través del teclado, asociado al archivo estándar de entrada stdin. La función más utilizada, por su versatilidad, para entrada formateada es scanf( ). El archivo de cabecera stdio.h de la biblioteca C proporciona la definición (el prototipo) de

scanf( ), así como de otras funciones de entrada o de salida. La forma general que tiene la función scanf( )

scanf(cadena_de_control, var1, var2, var3, . . .)

cadena_de_control                 contiene los tipos de datos y se desea su anchura.

var1, var2, . . .             variables de tipo de los códigos de control.

 

1.6.2                         Expresiones aritméticas

Las expresiones aritméticas  son las que se utilizan junto con los operadores aritméticos. Ejemplos:

x + y

b – c

x * y

b / 5

b % 5

 

1.6.3                         Funciones matemáticas

Las funciones matemáticas usuales en la biblioteca estándar son:

·                     ceil(x)

redondea el entero más cercano.

·                     fabs(x)

devuelve el valor absoluto de x(un valor positivo).

·                     floor(x)

redondea por defecto al entero más próximo.

·                     fmod(x,y)

calcula el resto f en una coma flotante para la división x/y, de modo que x=i*y+f, donde i es un entero, f tiene el mismo signo qye x y el valor absoluto de f es menor que el valor absoluto de y.

·                     pow(x,y)

calcula x elevado a la potencia y(xy). Si es menor que o igual a cero, y debe ser entero. Si x es igual a cero, y no puede ser negativo.

·                     poe10(x)

calcula 10 elevado a la potencia x(10x); x debe ser de tipo entero.

·                     sqrt(x)

devuelve la raíz cuadrada de x; x debe ser mayor o igual a cero.

 

1.7                              Estructuras selectivas (estructura de control)

Las estructuras de control controlan el fuljo de ejecución de un programa o función. Las estructuras de control permiten combinar instrucciones o sentencias individuales en una simple unidad lógica con un punto de entrada y un punto de salida.

Las instrucciones o sentencias se organizan en tres tipos de estructuras de control que sirven para controlar el flujo de la ejecución: secuencia, selección(decisión) y repetición. Hasta este momento sólo se ha utilizado el flujo secuencial.

1.7.1                         if( )

En C, la estructura de control de selección principal es una sentencia if. La sentencia if tiene dos alternativas o formatos posibles. El formato más sencillo tiene la sintaxis siguiente:

 

if(Expresión)        Acción

                                                        Acción se ejecuta si la expresión lógica es verdadera

Expresión lógica que determina si la acción se ha de ejecutar

 

 

Cuando se alcanza la sentencia if dentro de un programa, se evalúa la expresión entre paréntesis que viene a continuación de if. Si Expresión es verdadera, se ejecuta Acción; en caso contrario no se ejecuta Acción (en su formato más simple, Acción es una sentencia simple y en los restantes formatos con la siguiente sentencia del programa.

condición     es una expresión entera(lógica).

sentencia     es cualquier sentencia ejecutable, que se ejecutará sólo si la condición toma un valor                         distinto de cero.

1.7.2                         if( )-else

Un segundo formato de la sentencia if es la sentencia if-else. Este formato de la sentencia if tiene la siguiente sintaxis:

if(Expresión)   Acción1   else       Acción2

 

 

 

En este formato Acción1 y Acción2 son individualmente, o bien una única sentencia que termina en un punto y coma (;) o un grupo de sentencias encerrado entre llaves. Cuando se ejecuta la sentencia if-else, se evalúa Expresión. Si la Expresión es verdadera, se ejecuta Acción1 y en caso contrario se ejecuta Acción2.

 

1.7.3                         switch-case

La sentencia switch es una sentencia C que se utiliza para seleccionar una de entre múltiples alternativas. La sentencia switch es especialmente útil cuando la selección se basa en el valor de una variable simple o de una expresión simple denominada expresión de control o selector. El valor de esta expresión puede ser de tipo int o char, pero no de tipo flota ni double.

Sintasix:

switch( )

{

                case        etiqueta1; sentencia1;

                case        etiqueta2; sentencia2;

                .

                .

                .

                case        etiquetan; sentencian;

                default:                               sentenciasd;            /*opcional*/

}

switch( )

{

                case        etiqueta1; sentencia1;

                                                                break;

                case        etiqueta2; sentencia2;

                                                                break;

                .

                .

                .

                case        etiquetan; sentencian;

                                                                break;

                default:                               sentenciasd;            /*opcional*/

}

 

           

La expresión de control o selector se evalúa y se compara con cada una de las etiquetas de case. La expresión selector debe ser un tipo ordinal (por ejemplo, int, char, pero no float o string). Cada etiqueta es un valor único, constante y cada etiqueta debe tener un valor diferente de los otros. Si el valor de la expresión selector es igual a una de las etiquetas case –por ejemplo, etiquetai- entonces la ejecución comenzará con la primera sentencia de la secuencia sentenciai y continuará hasta que se encuentra el final de la sentencia control switch, o hasta encontrar la sentencia break. Es habitual que después de cada bloque de sentencias correspondiente a una secuencia se desee terminar la ejecución del switch; para ello se sitúa la sentencia break hace que siga la ejecución en la siguiente sentencia switch( ).

 

1.8                              Anidación

Una sentencia if es anidada cuando la sentencia de la rama verdadera o la rama falsa, es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias alternativas o multi-alternativas.

Sintaxis:

if(condición1)

                sentencia1

else if(condición2)

                sentencia2

                                .

                                .

                                .

else if(condiciónn)

                sentencian

else

                sentenciae


Página elaborada por Ing. G. Angélica Flores Rivera

basados en el libro de Programación en C de Luis Joyanes