Lenguaje de programación C (V). Estructuras de control II

Tras analizar en el capítulo anterior las estructuras condicionales F y switch y las estructuras repetitivas while y do-while, el objetivo en este capítulo se centra en las explicaciones.

IF

Tras analizar las estructuras condicionales y repetitivas de while y do-while en el capítulo anterior, el objetivo de este capítulo se centra en las siguientes explicaciones:

  • Estructura for repetitiva
  • break y uso de sentencias continue en estructuras repetitivas.
  • Utilización de las estructuras y expresiones analizadas en ejemplos de interés: if cavadas, manejo de bits.
  • La cadena de caracteres y la definición y utilización de tablas en estructuras repetitivas.

Estructura FOR

En esta compleja estructura repetitiva se admiten expresiones de inicialización y actualización por ciclo sobre el cuerpo del ablandamiento y la condición de repetición, resultando en algunos casos una estructura muy cómoda.

La sintaxis es la siguiente:

Su funcionamiento es el siguiente:

  1. evaluar la expresión inicial (inicialización).
  2. evaluar la expresión de los baldines. Si es falso pasar a la siguiente sentencia (fin).
  3. si la expresión de baldin es cierta, se realiza la expresión o expresiones corporales.
  4. evaluar la expresión diaria (actualización) y 2) al punto.

Por tanto, la primera expresión entre paréntesis (inicialización) se ejecuta una vez, la segunda al inicio de cada ciclo y la tercera (actualización) al final de cada ciclo. No obstante, lo que se realiza con la estructura for se puede realizar mediante while y asignación como se puede ver a continuación.

El cálculo del factorial descrito en el Programa 1 en el capítulo anterior se puede ver utilizando la estructura for.

Programa 1. Factorial por for.

Si las expresiones de la estructura son opcionales, la expresión de la baldin debe aparecer siempre, ya que de lo contrario el ablandamiento sería infinito. Cuando la primera y la tercera expresión no aparecen, for y while son totalmente equivalentes.

El cuerpo puede estar formado por una sola expresión o por un conjunto de expresiones separadas por{ y}, admitiéndose también el cuerpo vacío (en este caso el cuerpo está formado por el carácter).

Break y Continue

En estructuras repetitivas, aunque a veces se cumpla la expresión que controla el bigal (expresión de baldin), es conveniente que salga del bigal si se ha producido alguna excepción. Para ello se utiliza la sentencia break en estructuras repetitivas.

Un ejemplo se puede ver en el programa 2. En él se leen 80 caracteres y se cuenta el número de mayúsculas que hay. No obstante, si se lee el carácter ‘.’ no se deben leer más caracteres.

Programa 2. Uso de la sentencia Break.

En otros casos, cuando el cuerpo de la estructura repetitiva es complejo, puede suceder que, a pesar de querer seguir ablandándose en una situación, no sea necesario ejecutar una parte del cuerpo, para lo que se produce una sentencia continue muy adecuada.

En el 3er programa se leen 20 números y hay que calcular su producto, pero si el número es Ø no se tiene en cuenta.

Programa 3. Uso de la sentencia Continue.

Ejemplos

Enunciado 1: Leer tres números enteros y grandes (Programa 4).

Programa 4. Cavados If.

En este ejemplo, en las ramas de una if se muestran las estructuras if ( if cavadas) y al considerar cada estructura como una expresión simple, no se necesita llave.

Enunciado 2: Leer un carácter y calcular cuántos bits hay en estado cero. (Programa 5).

Programa 5. Cavados If.

El manejo de bits resulta muy difícil en lenguajes superiores, mientras que Cz es extremadamente sencillo (and), | (or), interactivo (xor), (desplazamiento izquierdo) y (desplazamiento derecho). En el ejemplo, mediante la operación and se analiza un bit, ya que cuando en la operación and emparejamos un dato con una máscara con un único bit en estado 1, si el bit del dato correspondiente a 1 es cero, y si es uno, el resultado distinto es cero. La operación se encuentra en un bigal ( con la estructura for) que se repite 8 veces, pero para analizar los diferentes bits es necesario desplazar dentro del bigal los bits de la máscara (como lo que se ha hecho en el programa) o desplazar el mismo dato.

Enunciado 3: Leer 40 caracteres y contar los bits en Ø.

Ante este ejemplo se plantean 2 preguntas:

  • ¿Se pueden leer los caracteres a la vez o uno por uno? Es posible leer todos a la vez, pero para ello hay que utilizar el tipo de datos cadena de caracteres, que no hemos analizado hasta ahora.
  • ¿Es posible utilizar el código utilizado en el enunciado 2 para resolver esto? La respuesta es afirmativa, pero para ello, en lugar de ser el programa principal 5 (main), debe definirse como una acción no primitiva (también conocida como función, procedimiento o rutina), que analizaremos en el capítulo siguiente.

Cadenas de caracteres y tablas

Los datos básicos vistos hasta el momento son caracteres (char), números enteros (short, int, long) y reales (float, double). Sobre ellos se pueden definir conjuntos de datos formando tablas o vectores, como se puede observar en el siguiente ejemplo:

char [8Ø];

/* Cadena Ø 8 caracteres */

Tabla int [Ø 2], matriz [M] [N];

La cadena de caracteres (string en inglés) es una tabla de caracteres en la que el último carácter es constante ‘\Ø’. Este carácter final de cadena permite detectar el final de la cadena cuando la cadena es de longitud variable.

Las tablas pueden ser unidimensionales (string o tabla en el ejemplo) o múltiples (la matriz en el ejemplo es binaria). En el uso se menciona el nombre y el índice (entre macos), estando el índice entre Ø y el número de componentes menos uno. En la definición se debe indicar el nombre y el número de componentes (entre macos) siendo opcional la inicialización. En el Programa 6 se puede ver un ejemplo.

Programa 6. Utilizando tablas.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila