Capítulo II.
Lenguaje de Programación 19
1.5 SENTENCIAS DE CONTROL
Son las estructuras básicas necesarias para organizar el flujo de control en un
programa. Tres de éstas son: la secuencial, la de alternativa y de repetición. En este
punto revisaremos las sentencias de alternativa, la cual controla la ejecución de uno o
varios bloques de instrucciones, dependiendo de si se cumple o no alguna
condición, o del valor final de una expresión.
Una Condición es una expresión lógica, es decir, una combinación de variables
y/o constantes con operadores lógicos y relacionales que producen resultados
ciertos o falsos.
1.5.1. Operadores relacionales y lógicos
Se utilizan para comparar dos operandos, que pueden ser constantes, variables,
cadenas, números con las cuales podemos formar expresiones lógicas que
representan condiciones que pueden ser ciertas o falsas.
OPERADORES RELACIONALES: relacionan un término con otro para definir su
igualdad, jerarquía o cualquier otra relación que guarden.
Operador Propósito
< Menor que
<= Menor o igual a
> Mayor que
>= Mayor o igual a
== Igual a
!= No igual a , distinto de
o Siempre se devuelve un valor entero que puede ser 1 ó 0
o La asociatividad es de izquierda a derecha
o Su precedencia es menor que la de los operadores aritméticos y monarios.
o Cuando se utilizan los operadores relacionales con operandos lógicos, falso
siempre es menor que verdadero.
Ejemplo:
Res = ((7 > 8) > (9 >6)); /* 0 > 1 (falso) */
Ejemplos :
int a,b ;
float x = 15.0, y = 18.0, z = 20.0;
char ch1 = ‘A’, ch2 = ‘B’;
a) a=x ==y 0
b) x < y 1
c) y <= z 1
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 20
d) ch2 > ch1 1
1.5.2. OPERADORES LÓGICOS
Un operador lógico permite asociar una o más expresiones relacionales. Si
tenemos más de una expresión relacional, ésta se conoce como condición
compuesta, porque estarán relacionadas a través de operadores lógicos.
Operador Propósito
&& AND (Y), da como resultado 1, si ambas comparaciones son
ciertas (1)
|| OR (O), Si una de las comparaciones es 1 (cierta) , el resultado
es 1
! NOT, da 0, si el resultado es 1;
da 1, si el resultado es 0
Reglas .
Los operandos pueden ser enteros, real o puntero.
Los tipos pueden ser diferentes.
El resultado es de tipo int.
Ej. int p, q, r1, r2 ;
float x=15, y= 18, z= 20;
p= x==y; /* resultado 0 */
q= (x< y) && (y<=z); /* resultado 1 */
p=10;
q=0;
r1=p&&q ; /* resulta 0 */
r2 = p|| q ; /* resulta 1 */
r1= !p; /* resulta 0 */
Ejemplo 2:
Int 1 = 7;
Flota f = 5.5;
Char c = ‘w’;
(i >= 6) && (c==w) 1
Ejemplo :
10>5&& !(10<9) || 3<=4 cierto
1&& !0 || 1 cierto
1&& !(0 || 1) falso
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 21
Jerarquía de los operadores relacionales y lógicos
1) !
2) <, <=, >, >=
3) ==, !=
4) &&
5) ||
Ejemplo :
10>5&& !(10<9) || 3<=4 cierto 1&& !(0 || 1) falso
1&& !0 || 1 cierto
1.5.3. EXPRESIONES CONDICIONALES
C tiene un operador ternario (?: ), para escribir una expresión condicional.:
Formato :
operando1 ? operando2 : operandon 3;
o la expresión operando1 debe ser de tipo entero, real o puntero.
Evaluación :
o Si el resultado de la evaluación de operando1 es distinta de 0, se realiza
operando2.
o Si el resultado de la evaluación de operando1 es 0, se realiza operando3.
Ejemplo:
mayor = (a>b)? a : b; /* si a>b, mayor = a, de lo contrario mayor= b */
c+= ((a>0)&& (a<=10))? ++a: a/b;
Práctica:
a) (i < 0) ?0: 100; b) (a>0 && a<=10)?++a:a/b;
c) (f < g)?f:g;
1.6 TIPOS DE ESTRUCTURAS DE ALTERNATIVA
1.6.1. EJECUCIÓN CONDICIONAL – SENTENCIA IF:
Toma una condición referente a la acción a ejecutar basándose en el resultado
(verdadero o falso) de una expresión.
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 22
formato: if (cond) sentencia (s);
else sentencia(s); /* opcional*/
Si se presenta más de una instrucción (sentencia) por el bloque cierto (que la
cond. se cumpla) o por el bloque falso( que la cond. no se cumpla), debe ponerse
entre { }.
Ej. if(x==7)
printf(“ igual \n”);
else
printf(“Desigual \n”);
Ej. main()
{int y;
printf(“Introduzca un número”);
scanf(“%d”, &y);
if(i < 1000) || (estado == ‘R’))
printf(“%d”, y);
}
Existen las expresiones condicionales en C que compara si un término es distinto
de cero (!= 0).
Ej. float a, b;
If (b) /* equivale b!= 0 */
printf(“El cociente = %f \n”, a/b);
Ej float a,b;
If (b)
{ printf(“ a = %f b=%f \n”,a,b);
printf(“a/b = %f \n”, a/b); }
Ej. #include <stdio.h>
main()
{ int x;
scanf(“%d”, &x);
if ((x>3) && (x<4))
printf(“Entre tres y cuatro \n”);
else
if((x>6 )&& (x<8)) printf(“Entre seis y ocho\n”);
else
printf(“Restantes casos \n”); }
Como regla general la opción else pertenece siempre a la sentencia if más
cercana, a no ser que se indique otra cosa mediante el empleo de llaves {}.
If (x)
If (y)
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 23
printf(“ 1”);
else
printf(“2”);
ó if(x)
{if (y) printf(“1”); }
else
printf(“2”);
a. Anidamiento de if
Las sentencias if…..else pueden estar anidadas.
Formato.
If (expresión) sentencia1
else
If (expresión) sentencia2
else
If (expresión) sentencia3
Else
Sentencia 4
Cuando se encuentra una expresión con valor no nulo(cierta) dentro de un grupo
de sentencias if – else anidados, se ejecutará la sentencia correspondiente y el
resto de las sentencias if – else anidadas se ignorarán. Por tanto se transferirá el
control fuera del conjunto de sentencias anidadas una vez que reencuentre una
condición cierta.
Ejemplo .
If (c ==1)
printf (“soltero”);
else
If (c ==2)
printf (“casado”);
else
if ……..
Como regla general la opción else pertenece siempre a la sentencia if más
cercana, a no ser que se indique otra cosa mediante el empleo de llaves {}.
Caso 1:
If ______________ Ejemplo 1
else
If ____________ If ( a > b)
printf(“%d es mayor que %d”, a, b);
else Else
If ( a < b)
printf(“%d es mayor que %d”, b, a);
Apuntes de Programación C Else Prof. Mitzi de Velásquez
Printf(“%d es igual que %d”, a, b);
Capítulo II. Lenguaje de Programación 24
If _____________
Else
:…..
Sentencia 4
Caso 2 :
Ejemplo 2
If (expression)
If ( a == b)
If (expresión2) If ( b == c)
Sentencias 1; printf(“a = b =a”);
else else
Sentencias 2; printf(“b < > c”);
Caso 3: Si quisiera asociar el else a expresión1 en vez de a expresión 2 se define
If (expression) Ejemplo 3 :
{ If (expresión2) Sentencias 1;
If ( a == 0)
} { If ( b != 0)
else s++;
Sentencias 2; }
else
1.6.2. SENTENCIA switch r = r + 1;
Permite ejecutar una de varias acciones, dependiendo del valor de una
expresión
formato:
switch (expresión)
{ case expresión:
sentencia 1;
sentencia 2;
sentencia n;
break;
case expresión 1:
case expresión 2:
break;
case expresión m;
sentencias
default:
sentencia(s); (OPCIONAL)
expresión: debe ser un valor entero (incluyendo el tipo char).
sentencia: es una sentencia simple o compuesta.
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 25
La sentencia representa opciones posibles a seguir. Cada opción se expresa
como un grupo de una o más sentencias individuales dentro de la sentencia global
incluida.
Hay dos cosas importantes sobre la sentencia switch:
1. La sentencia switch sólo puede comprobar por igualdad.
2. No puede tener dos constantes case con idénticos valores
en el mismo switch.
EJEMPLO: Selección múltiple con variable tipo entero.
int tipo;
switch (tipo)
{
case 1:
printf (“casado”);
break;
case 2:
printf (“soltero”);
break;
case 3:
printf (“viudo”);
break;
}
EJEMPLO: Selección con variable tipo caracter.
char car;
car = getchar();
switch (car) {
case ‘r’ :
case ‘R’:
printf (“Estoy en case r”);
break;
case ‘a’:
case ‘A’ :
printf (“Estoy en case a”);
default:
printf (“ERROR”);
}
- No se requiere un orden secuencial al definir las variables del case
Sentencias de Repetición
1.6.3. Sentencia WHILE:
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 26
Ejecuta una sentencia, simple o compuesta, cero o más veces dependiendo del
valor de una expresión.
Formato: while (expresión)
{ sentencia; }
La ejecución sucede así:
1. se evalúa la expresión
2. si el resultado es cero (falso), no se ejecuta la sentencia y se pasa a
ejecutar la siguiente sentencia.
3. si el resultado es = 0 ( cierto), se ejecuta la sentencia del while y se repite el
proceso.
Ejemplo 1: Aceptar un carácter diferente de a :
#include <stdio.h>
main()
{
char c;
c = ‘\0’; caracter nulo
while (c!=’a’)
c = getchar( );
Ejemplo 2: Rutina que solicita Ejemplo 3 :
obligatoriamente la respuesta ( s/ n) --------
---- #define FIN '\n' /* FIN = '\n' es el ENTER */
char car; main()
printf(“\n desea continuar? s/n”); {char ch; int contador = 0;
while ((( car = getchar())!= ‘s’ && car!= ‘n’)) printf("Ingrese una frase : ");
printf(“\n desea continuar? s/n”); while((ch=getchar()) != FIN)
{ putchar(ch);
contador ++;
}
printf(" \n Se han impreso %d caracteres
\n ", contador );
}
1.6.4. Sentencia for:
Permite ejecutar una sentencia simple o compuesta repetidamente un número
específico de veces.
formato:
for(ini ; cond ; incre/decre)
{ sentencia(s);}
Ini = valor inicial de la variable de control, puede ser una constante o el valor de
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 27
una variable.
cond= es una expresión que comprueba la variable de control (debe ser cierta)
incre/decre = define la manera en que cambia la variable de control.
Cuando se ejecuta la sentencia for, la condición se evalúa y se comprueba
antes de entrar al ciclo, el incremento es evaluado al final del ciclo.
La ejecución del ciclo continuará mientras el valor de expresión 2 no sea
cero, o sea mientras la condición sea cierta.
Caso 1: Sentencia simple. Se imprimen los números del 1 al 100
------
main ( )
{
int x;
for(x=1 ; x<=100 ; x++)
printf(“%d”,x);
}
Desde el punto de vista sintáctico no es necesario que se encuentren presentes
las 3 expresiones en la sentencia for, aunque deben aparecer los (;). La expresión
primera y tercera se puede omitir si se inicializa y/o altera el índice de alguna
forma. Si es la condición, se asume que ésta tiene un valor permanente de 1
(cierto), así que el ciclo se ejecutará independientemente a menos que se utilice
un mecanismo como la sentencia break o return. No es lo usual o ideal.
Ejemplo del caso anterior:
int dígito;
digito =0;
for( ; digito<=100 ; )
printf(“%d”,digito++);
Caso 2 : presentación de un ejemplo con sentencias compuestas.
----
int k, x ;
for(k=7 ; k<=122 ; k+=7)
{
printf(“Se imprime el valor de k: %d”,k);
printf(“Cuadrado de k: %d”,k *k);
printf(“número de veces ejecutado: %d”,x=x+1);
}
a. Bucles Anidados
Un bucle for colocado dentro de otro bucle for. El bucle interno se ejecutará
totalmente por cada valor del bucle que lo contiene.
Ejemplo: Imprimir una matriz 5*6 y rellenarla de asteriscos.
main( )
{
int fila col;
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 28
char c = ‘*’;
printf(“imprimir matriz \n ”);
for(fila=1;fila<=5,fila++)
{
for(col=1; col <= 6; col++)
printf(“%c”,c);
}
printf(“\n”);
}
Práctica
Escribir un programa que imprima un triángulo de n filas. Aceptar el número de
filas por pantalla.
1.6.5. Sentencia DO WHILE
Evalúa una condición al final de la estructura. Ejecuta una sentencia simple o
compuesta una o más veces mientras la condición es cierta.
Formato: do{
Sentencia(s);
}while(condición);
Al contrario de los ciclos for y while que comprueban la condición en lo alto del
bucle, el bucle do/while la comprueba en la parte baja del mismo. Se repite hasta
que la condición de prueba se hace falsa o cero.
Ej. #include<stdio.h>
main() /* Leer un conjunto de números mientras éste sea menor de 100*/
{ int num;
do
{
scanf("%d", &num);
}
while(num<100);
}
El uso más común para el do/while es una rutina de selección en un menú.
/* control de una entrada correcta */
do{printf(" CONVERSION \n");
printf(" 1: Decimal a Hexadecimal \n");
printf(" 2: Hexadecimal a Decimal \n");
printf(" 3: Decimal a Octal \n");
printf(" 4: Octal a Decimal \n");
printf(" 5: Salir \n");
printf(" Teclee su opción : ");
scanf("%d", &op);
}while(op<1 || op > 5);
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 29
Práctica:
Encuentre el error en cada uno de los segmentos de código y corrija:
a) x=1;
while(x<=10);
x++;
b) for(y=1 y!=10; y+=1)
printf("%d \n" y);
c) imprimir del 1 al 10
n=1;
while(x<10)
printf("%d \n", n++);
d) Elabore un programa en C que genere las 12 tablas de multiplicar con 10
elementos cada una. Debe imprimir del título de la tabla que está generando y
todos los elementos de la tabla(1 x 1 =1). Haga un programa con el for, while y
do/while.
SALTOS EN PROGRAMAS.
1.6.7. SENTENCIA BREAK (Rompiendo el bucle)
break;
La sentencia break fuerza la terminación inmediata de un bucle (do, for,
switch, while) y transfiere el control a la sentencia siguiente del bucle.
Cuando estas sentencias están anidadas, el break solamente finaliza la
ejecución de la sentencia donde está incluida.
EJEMPLO:
#include <studio.h>
main ( )
{ int t;
for ( t = 0; t< 100; t + +)
{ printf (“%d”, t);
if (t = = 10) break;
}
}
do For (cont = 0; cont <= n; ++cont)
{ printf(“%d”, t); While (c = getchar( ) != ‘\n’)
++t; {
if (t==4) If (c = ‘*’)
break; Break;
while( t <=9); }
Apuntes de Programación C Prof. Mitzi de Velásquez
Capítulo II. Lenguaje de Programación 30
1.6.8. La Sentencia CONTINUE
continue;
No ejecuta las sentencias que se encuentran a continuación de él y se salta a la
siguiente pasada a través del bucle. Puede incluirse en una sentencia do, while y
for.
EJEMPLO:
- do {
scanf(“%d”, &num);
if (num < 0) continue;
printf(“%d”,num);
}
while (num!= 100)
Esta rutina imprime sólo los números positivos.
En los ciclos while y do/while, una sentencia continue hace que el control del
programa pase a la prueba condicional y continúe el proceso de iteración.
Ejemplo : Ejecuta un ciclo mientras no se da control z. Imprime cualquier carácter
a excepción de blancos.
- while ( ( ch = getchar ( ) ) ! = EOF )
{
if (ch = = ‘ ‘ )
continue;
putchar (ch)
}
Para el ciclo for, hace que se ejecute la parte del incremento del ciclo, seguida de
la prueba condicional y finalmente hace que el ciclo continúe.
for (x =0;x <= 100; x + +)
{
if ( x % 2)
continue;
printf (“%d”, x);
}
Apuntes de Programación C Prof. Mitzi de Velásquez