Está en la página 1de 29

TECNOLÓGICO NACIONAL DE MÉXICO

CAMPUS TOLUCA

Instrucciones condicionales
Sentencia if…else

Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación


TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

La utilizamos cuando tenemos una condición que nos arroja dos resultados:
Verdadero o Falso.
Por ejemplo: Escribir un programa en C que lea una edad e indique si la persona
puede votar o no

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h> La instrucción if abre un paréntesis que dentro


lleva una condición: edad >= 18.
int main() No lleva punto y coma.
{ Si colocaras el punto y coma, el error lo
int edad; encontraría hasta la sentencia else.
printf("Escriba su edad: "); Justo después de la condición que está entre
scanf("%d", &edad); paréntesis, se abre una llave {, todo lo que siga a
partir de aquí y hasta que se cierre la llave, son las
if (edad >= 18) instrucciones que se ejecutarán si la condición es
{ verdadera.
printf("Ya puedes votar"); Después del cierre de la llave } , encontramos la
} sentencia else, que no lleva condición. Else abre
else una llave y todo lo que siga a partir de esta llave y
{ hasta su cierre }, son las instrucciones que se
printf("Todavia eres un niño"); ejecutarán si la condición es falsa.
}
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h>
Operadores condicionales
int main(){
Las condiciones que van dentro de los paréntesis usan
float saldo, deposito, retiro;
operadores condicionales, que son los siguientes: <, >, <=, >=,
saldo = 300;
==, !=.
printf("Cuanto deposita: ");
(Menor, mayor, menor-igual, mayor-igual, igual, diferente)
scanf("%f", &deposito);
En el siguiente ejemplo utilizamos una instrucción if…else y un
saldo = saldo + deposito;
operador menor-igual <=
printf("Cuanto retira: ");
Ejemplo: Realizar programa que utilice un saldo lea un deposito,
scanf("%f", &retiro);
agrege el deposito al saldo, lea un retiro, verifique que hay
if (retiro <= saldo){
suficiente saldo. Si hay suficiente saldo, realiza la operación.
saldo = saldo - retiro;
printf ("Su nuevo saldo es: %.2f",
saldo);
}
else{
printf("No hay suficiente saldo");
}
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Ifs anidados

Los if pueden contener cualquier tipo de instrucción, incluidos


otros if.
En el siguiente ejemplo utilizaremos dos if. Uno va dentro de la
parte del else (cuando da falso la condición).
Consiste en identificar cuando un número es nulo, positivo o
negativo.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h>
int main() El primer if utiliza un operador
{ igual == para determinar si el
int n; número es cero. (Tiene que escribir
printf("Escriba un numero"); ==, si escribe un solo signo = está
scanf("%d", &n); indicando una operación de
if (n==0){ asignación, no de comparación).
printf("Es nulo"); Cuando no es cero (la parte else)
} quiere decir que es positivo o
else negativo. Para saber si es positivo o
if (n<0){ negativo usamos otro if. En este
printf("Es negativo"); segundo if solo tenemos que
preguntar si es menor que cero
else{ (n<0), la parte else por lógica indica
printf("Es positivo"); que el número es positivo.
}
}
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Operadores lógicos
Los operadores lógicos son Y, O, y NO (AND, OR y NOT). En
lenguaje C se utilizan estos símbolos: &&, || y !
Se utilizan para que evaluar dos o más condiciones en un solo if.
Vea el siguiente ejemplo:
Hacer un programa que realice descuentos en base a lo
siguiente:
•Si la compra es menor a 500 no hay descuento
•Si es entre 500 y 1000, 10% de descuento
•Si es entre 1000 y 2000, 20% de descuento
•Si es mayor a 2000, 30% de descuento

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h> Usamos 4 if, uno por cada descuento del


int main(){ programa. Estos if no utilizan la sentencia
float compra, descuento, total; else, por lo que se evalúan siempre los 4.
printf("Monto de la compra: ");
El segundo if utiliza el operador lógico &&
scanf("%f",&compra);
if (compra < 500){ (and), para unir dos condiciones: ¿compra
descuento = 0; es mayor-igual a 500 Y compra es menor
} que 1000?
if (compra >= 500 && compra < 1000){ Si el usuario introdujera en compra el valor
descuento= compra-(compra * .10); de 800, el if cumple las dos condiciones (es
} mayor-igual a 500 y al mismo tiempo
if (compra >= 1000 && compra < 2000){ menor que 1000), por lo que se
descuento= compra-(compra * .20);
ejecutarían las instrucciones que están
}
if (compra >= 2000){ entre sus llaves. De lo contrario continúa
descuento =compra-(compra * .30); en la siguiente línea después del cierre de
} la llave }
total = compra - descuento; El tercer if hace algo parecido.
printf("Su descuento es: %f", descuento);

printf("\nEl total a pagar es: %f", total);


}
Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Operador AND
Tabla de verdad
V && V = V
V && F = F
F&& V =F
F && F= F
Si el usuario introdujera el valor de compra de 1200, y la
instrucción fuese:
if (compra >= 500 && compra < 1000)
la primera condición sí da verdadero (compra es mayor que
500), pero la segunda da falso (compra no es menor que 1000),
por lo que la sentencia completa da falso y no se ejecutaría la
sección de código correspondiente.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Comparación de cadenas en C

En los ejemplos anteriores hemos utilizado comparación de números. Si deseamos utilizar


cadenas de caracteres, necesitamos algunas instrucciones adicionales.

Vea el siguiente ejemplo:


Cree un programa que lea una clave.

Si la clave es itsa es correcta, si no, es incorrecta.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Utilizamos una nueva biblioteca


#include <stdio.h>
llamada string.h. También utilizamos la
#include <string.h>
instrucción strcmp que nos sirve para
comparar cadenas.
main(){
Se utiliza así
char clave[10];
if (strcmp(clave, “itsa”)==0){
printf("Escriba su clave: ");
se escribe strcmp y entre paréntesis se
scanf("%9s", clave); // Solo admitira 9 caracteres
anotan las dos cadenas que deseamos
comparar, en este ejemplo, la clave
if (strcmp(clave, "itsa")==0){
que el usuario introdujo y la cadena
printf("La clave es correcta");
“itsa”; si el resultado de esta
}
comparación es 0, quiere decir que no
else{
hay diferencias.
printf("La clave es incorrecta");
}
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Utilizamos una nueva biblioteca llamada string.h. También


utilizamos la instrucción strcmp que nos sirve para comparar
cadenas. Se utiliza así if (strcmp(clave, “itsa”)==0){
se escribe strcmp y entre paréntesis se anotan las dos cadenas
que deseamos comparar, en este ejemplo, la clave que el
usuario introdujo y la cadena “itsa”; si el resultado de esta
comparación es 0, quiere decir que no hay diferencias.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Operador OR || (Ó)
.

Supongamos que deseamos utilizar dos claves distintas. La


instrucción completa quedaría así
if (strcmp(clave, “itsa”)==0 || strcmp(clave,”1234”)==0){
Observe que utilizamos el operador lógico or ||, que evalúa dos
condiciones. El operador or nos permite que con que una sola de las
dos instrucciones de verdadero, la sentencia completa se evalúa
como verdadera.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Tabla de verdad
V || V = V
V || F = V
F || V = V
F || F = F

Si el usuario escribe como clave 1234, la primera condición se


evalúa a falso, pues clave no es igual a “itsa”, pero la segunda
condición sí se evalúa a verdadero, porque clave es igual a
1234, por lo que toda la condición es verdadera y se ejecutan
las instrucciones que siguen a la llave.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Estructuras iterativas: repetir mientras,


hasta, desde.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

El control de flujo se logra mediante instrucciones iterativas o cíclicas, donde una secuencia de instrucciones se ejecuta una y
otra vez mientras se cumpla una condición. Cuando esa condición no se cumple, se finaliza la ejecución de la estructura de
iteración (García, 2002).

Ciclo For
Un ciclo for es una estructura de iteración. Esto quiere decir que nos permitirá ejecutar una
instrucción (o serie de instrucciones) un número determinado de veces.

Su sintaxis es: for (expresión 1; expresión 2; expresión 3){


secuencia de instrucciones
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Cuando el número de iteraciones es conocido


Ejemplo: Escriba un programa que imprima los números del 1 al 30 escribiendo un salto de línea cada 7 números
Explicación: En el ejemplo anterior el número de
iteraciones o vueltas está controlado por la variable x.
#include <stdio.h>
int main(){ Al ser declarada, x vale 0. Sin embargo, cuando
int x=0; comienza el ciclo x adquiere el valor de 1.
for (x=1; x<=30; x++){
printf("%d \t",x); El ciclo terminará cuando x valga 30 (x<=30). Además, x
if (x%7==0){ recibirá incrementos de 1 (x++). Dentro del cuerpo de
printf ("\n"); la instrucción for se imprime el valor de x (printf(“%d
} \t”, x)).
}
Se evalúa si x es múltiplo de 7 (x%7==0), de ser así se
}
imprime un salto de línea (printf (“\n”)).

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Cuando el número de iteraciones es determinado por el usuario.


Ejemplo: Escriba un programa que imprime los números del 1 a n, donde n es la cantidad de días que tiene un mes que el
usuario selecciona previamente.
#include <stdio.h>
Explicación: Se pregunta al usuario el
int main(){ mes que deseas visualizar.
int x, mes, dias=0;
int aa = 2017; Si el número introducido corresponde
printf ("Que mes desea: ");
scanf("%d", &mes); a un mes con 31 días, la variable días
if (mes == 1|| mes == 3 || mes == 5 || recibe el valor 31. (Se deberá incluir
mes == 7 || mes == 8 || mes == 10 || código si desea validar los meses con
mes == 12 ){
dias = 31;
30 días y el mes de febrero).
}
Se inicializa el ciclo for usando la
for (x=1; x<=dias; x++){ variable x con valor inicial de 1. El ciclo
printf("%d\t", x);
if (x % 7 == 0){ terminará cuando la variable x sea
printf ("\n"); igual al valor de días del mes
} seleccionado.
}
}

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Ciclo while

Un ciclo while realiza un conjunto de instrucciones mientras una condición sea cierta
(sea diferente de 0). Cuando la instrucción es 0 (o falso) se suspende la ejecución del
ciclo.

Ejemplo: Realizar un programa que muestre un menú de opciones. Se realizará la


opción elegida y se volverá a mostrar el menú. El programa termina cuando el
usuario elige la opción 5 del menú.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h>
int main(){
int saldo=0, deposito=0, retiro=0, opcion=0; Explicación: La variable que controla el ciclo es opción, que
printf("Introduzca saldo inicial: "); inicialmente tiene un valor de 0.
scanf("%d", &saldo);
while(opcion != 5){
Se utiliza la instrucción while para evaluar si la variable opción es
printf("===Bienvenido al banco===");
printf("\nElija una opcion"); diferente de 5, el valor con el que se cierra el programa
printf("\n1. Depositar"); (while(opcion != 5)).
printf("\n2. Retirar");
printf("\n3. Ver saldo");
printf("\n4. Abonar intereses");
printf("\n5. Salir"); Mientras no sea 5 se muestra el menú y se ejecutan las opciones.
printf("Su opcion: "); Cuando el usuario escribe 5, el programa realiza la opción 5, y
scanf("%d", &opcion);
finaliza.
if (opcion == 1){
printf("Monto a depositar: ");
scanf("%d", &deposito);
saldo = saldo + deposito;
}
if (opcion == 3){
printf("\nSu saldo es: %d", saldo);
}
if (opcion == 5){
printf("\nGracias por usar este programa");
}
Docente:} Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Ciclo do-while

La principal diferencia con los otros dos ciclos (for y while) es que el ciclo do-while evalúa
la condición al final del bloque de instrucciones.

Esto implica que realizará por lo menos 1 vez el conjunto de instrucciones que forman el
cuerpo del ciclo.

Ejemplo: Solicitar una calificación al usuario, si está no está en el intervalo 0 a 10, se


deberá volver a pedir la calificación.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Explicación: El ciclo es controlado por la


#include <stdio.h> variable cal.
int main(){
int cal=0; Como se nos solicita un rango de valores, se
escriben dos condiciones (cal < 0 || cal >
do{
10).
printf("Deme la calif");
scanf("%d", &cal); Se solicita al usuario una calificación, por lo
} while (cal < 0 || cal > 10); menos una vez, si no está en el rango de
printf("\n Gracias"); valores, el ciclo while evalúa a verdadero
} por lo que volverá a repetirse el conjunto de
instrucciones para solicitar una calificación.

Cuando la calificación está en el rango, el


ciclo evalúa a falso, por lo que se saldrá y
continuará en la instrucción siguiente.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Ciclos anidados

Dado que una instrucción iterativa puede incluir cualquier tipo de instrucción, un ciclo puede
contener a otro ciclo en su cuerpo de instrucciones.

Ejemplo: Se desea leer las calificaciones de 5 alumnos, por cada alumno se leen 3 calificaciones.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

#include <stdio.h> Explicación: Se utilizan dos ciclos for, uno dentro


int main(){ del otro.
int i,j;
int calif; El primer ciclo utiliza la variable i como contador.
int suma1=0, suma2=0;
La variable i va de 1 a 5 (los alumnos).
float promedio1, promedio2;
for (i=1; i<=5; i++){
printf("\nCalificaciones alumno %d\n", i); El segundo ciclo utiliza la variable j. Esta variable
for (j=1; j<=3; j++ ){ va de 1 a 3 (las calificaciones).
printf("\tDeme calif %d: ",j);
scanf("%d",&calif); Como está dentro el primer ciclo, leerá 3
suma1=suma1+calif; calificaciones por cada uno de los 5 alumnos. En el
} ejemplo anterior se utilizan dos variables suma.
promedio1 = suma1 / 3;
printf("\tEl promedio es %.2f", promedio1);
suma2=suma2+promedio1; La primera lleva la suma de 3 calificaciones, para
suma1=0; obtener un promedio. La segunda lleva la suma de
} los promedios obtenidos, lo que permite tener un
promedio2 = suma2 / 5; promedio general de las calificaciones de los
printf("\nEl promedio general es: alumnos.
%.2f",promedio2);
}
Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Ejemplo: Se desea leer 10 calificaciones aceptando únicamente las calificaciones que estén en el rango de 0 a 10.
#include <stdio.h> Explicación: Se utiliza un for para las 10
int main(){
int calif=0;
calificaciones.
int erronea=0;
int i; Ahora bien, para aceptar únicamente
for (i = 1; i<=10; i++){ calificaciones válidas se utiliza un do-while. Si usas
do{ un if, también realiza la validación, pero continúa
printf("\nEscriba una calificacion correcta: con la siguiente calificación. Un do-while vuelve a
"); pedir (una y otra vez) la calificación, mientras no
scanf("%d", &calif); se le de una calificación correcta. En este ejemplo
if (calif <0 || calif > 10){
erronea=1;
se utiliza una varible centinela llamada errónea,
printf("\nLa calificacion es erronea, que es inicializada en 0 (no es errónea). Se utiliza
introduzca de nuevo: "); un if para hacer la evaluación de si el número está
} fuera del rango. Si está fuera del rango errónea se
else{ cambia a 1. Volverá a pedir la calificación
erronea = 0; mientras errónea tenga ese valor de 1.
}
} while (erronea != 0); La única forma de que errónea vuelva a ser cero
printf("\nGracias!!");
}
es dando una calificación correcta.
} Docente: M en ED. Carmen Fabiola Jiménez Govea
Docente: Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

Esta estructura permite considerar decisiones para más de dos


#include<stdio.h> posibilidades. El formato general de esta sentencia es:
main() {
char ch; Cada case admite distintas sentencias, y a su vez, podemos
printf("Introduzca una vocal: "); poner distintas etiquetas case para distintas opciones dentro de
ch=getchar(); un mismo switch.
switch(ch) { La variable <ch> se evalúa y compara sucesivamente con todas
case 'a': puts("Se ha pulsado una a."); las constantes que aparecen junto a la palabra reservada case.
break; Si alguna de ellas es igual al valor de <ch>se ejecuta la sentencia
case 'e': puts("Se ha pulsado una e."); o bloque de sentencias correspondientes. Si no aparece la
break; palabra reservada break, continúa la comparación con el resto
case 'i': puts("Se ha pulsado una i."); de las opciones. Si aparece break, se termina la ejecución de la
break; estructura switch. La opción default, es opcional, indica la
case 'o': puts("Se ha pulsado una o"); sentencia que se ejecuta en caso de que el valor de la variable
break; <ch> no se corresponda con ninguna de las constantes
case 'u': puts("Se ha pulsado una u."); expresadas. La estructura switch no permite que dos constantes
break; tengan el mismo valor. Si se evalúan constantes de caracteres,
default: puts("Error"); se emplean sus equivalentes numéricos
}
}
Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
CAMPUS TOLUCA

NOTA: Vamos seleccionando una determinada opción del case,


según sea a, e, i, o, u, si no es ninguna de ellas la que hemos
introducido por teclado por medio de la función getchar(),
ejecutaremos la opción default, que visualizará: Error.

Docente: Docente: M en ED. Carmen Fabiola Jiménez Govea Departamento de Sistemas y Computación

También podría gustarte