Professional Documents
Culture Documents
PC2 2021-2, Butler
PC2 2021-2, Butler
Condicionales+PC2
General S01: Lenguaje C S02: Tipo de Datos y Variables S03: Constantes, Operadores y Teclado
S04: Funciones Matemáticas Predefinidas S05: Estruc. Repetitivas+PC1 S06: Estruc. Condicionales+PC2
S10: Aplicaciones de Arreglos S11: Arreglo con Funciones+PC3 S12: Arreglos Bidimensionales
S13: Funciones con Arreglos Bidimensionales S14: Aplicaciones Arreglos Bidimensionales+PC4 S15: Cadenas
FINAL SUSTI
INTRODUCCIÓN
Todos los programas que hemos desarrollado han sido lineales, esto significa que empezaban por la primera
instrucción y finalizaba en la última instrucción. Pero resulta que muchas veces queremos que ciertas
instrucciones se ejecuten en función a ciertas condiciones. Para esto están las sentencia de control de flujo
o sentencias de condición.
Estas instrucciones permiten "elegir un camino" en nuestro programa e implementar algoritmos más
complejos.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 1/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
if
Su formato es el siguiente:
if (condición){
<bloque de instrucciones>
}
Cuando se cumple la condición entre paréntesis se ejecuta el bloque inmediatamente siguiente al if (bloque de
instrucciones).
Ejemplo 01F: Programa que solicita el ingreso por teclado de dos números enteros y los compara, indicando
si el primero es mayor, menor o igual que el segundo número ingresado.
#include <stdio.h>
main() {
int num1,num2;
system("PAUSE");
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 2/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Ejemplo 02F: Programa que solicita el ingreso de dos opciones (tecla S o N) y displaya que opción hemos
elegido. Para la solución usaremos un variable tipo char:
#include <stdio.h>
main() {
char opcion;
do {
opcion = getch();
printf("%c\n",opcion);
if(opcion=='S')
if(opcion=='N')
printf("\n");
system("PAUSE");
main() {
int opcion;
do {
opcion = getch();
printf("%c\n",opcion);
if(opcion==83)
if(opcion==78)
printf("\n");
system("PAUSE");
if - else
Tenemos un bloque de instrucciones que se ejecuta si la condición es verdadera y otro bloque de instrucciones
que se ejecuta si la condición es falsa.
El formato es el siguiente:
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 3/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
if ( condición ){
else{
Ejemplo 03F: Programa que solicita el ingreso de un número entero e indica si es un número par o impar.
#include <stdio.h>
main() {
int num;
else
system("PAUSE");
Ejemplo 04F: Programa que lee tres números enteros: hora (H), minutos (M) y segundos (S)
respectivamente, y comprueba si la hora especificada es una hora válida. La hora se especifica en modo de 24
horas.
#include <stdio.h>
main() {
int H,M,S;
scanf("%i",&H);
scanf("%i",&M);
scanf("%i",&S);
if(H>=0 && H<24 && M>=0 && M<60 && S>=0 && S<60)
else
printf("Hora incorrecta\n");
system("PAUSE");
Ejemplo 05F: Una variante al programa anterior es imprimir la hora bajo el formato HH:MM:SS. Para ello se
debe tener en cuenta cuando H, M o S ingresado es menor a 10.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 4/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main() {
int H,M,S;
scanf("%i",&H);
scanf("%i",&M);
scanf("%i",&S);
if(H>=0 && H<24 && M>=0 && M<60 && S>=0 && S<60){
if (H<10)
printf("0%i:",H);
else
printf("%i:",H);
if (M<10)
printf("0%i:",M);
else
printf("%i:",M);
if (S<10)
printf("0%i\n",S);
else
printf("%i\n",S);
}
else
printf("Hora incorrecta\n");
system("PAUSE");
Ejemplo 06F: Programa al cual se le ingresa un año y calcula si es bisiesto o no. Un año es bisiesto si
cumple lo siguiente: El año es divisible entre 400 o si es divisible entre 4, pero no entre 100. Esto lo podemos
expresar mediante el siguiente algoritmo:
En la solución empleamos un solo if para realizar las dos preguntas las cuales están "unidas" por el operador
OR.
Observar que para imprimir la ñ debemos emplear su correspondiente código ASCII: Alt-164
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 5/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main(){
int anio;
scanf("%i",&anio);
else
Ejemplo 07F: Programa que solicite el ingreso del lado de un cuadrado (número mayor o igual a cero) e
imprime la diagonal principal con asteriscos. Ejemplo: Cuadrado de lado 5:
#include <stdio.h>
main() {
int lado,x,y;
do {
} while (lado<0);
for(y=1;y<=lado;y++) {
for(x=1;x<=lado;x++){
if(y==x)
}
printf("\n");
}
system("PAUSE");
Ejemplo 08F: Programa que solicite el ingreso del lado de un cuadrado (número mayor o igual a cero) e
imprime la diagonal secundaria con asteriscos. Ejemplo: Cuadrado de lado 5:
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 6/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main() {
int lado,x,y;
do {
} while (lado<0);
for(y=1;y<=lado;y++) {
for(x=1;x<=lado;x++){
if(x+y==(lado+1))
else
}
printf("\n");
}
system("PAUSE");
if else if
La instrucción if else if significa podemos colocar un if dentro de otros if y así sucesivamente. Esto se llama
anidamiento.
Ejemplo 09F: Programa al cual se le ingresan dos números enteros e indica si el primero es mayor, menor o
igual que el segundo.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 7/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main() {
int num1,num2;
else {
if (num1 < num2)
else
}
system("PAUSE");
Ejemplo 10F: Programa que solicita el ingreso de un número entero e indica si es menor a 10, si esta entre
10 y 100 o si es mayor o igual a 100.
#include <stdio.h>
main() {
int a;
if ( a<10 ) {
}
else {
if ( a>10 && a<100 ){
}
else {
if ( a>=100 ){
printf( "El numero es mayor o igual a 100\n" );
}
}
}
system("PAUSE");
Ejemplo 11F: Programa al cual se le ingresa una letra y envía a pantalla un mensaje indicando si es un letra
mayúscula o minúscula.
#include <stdio.h>
main() {
char letra;
scanf("%c",&letra);
else{
else
}
system("PAUSE");
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 8/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main() {
scanf("%c",&letra);
else{
else
}
system("PAUSE");
Ejemplo 12F: Programa que determina el mayor de tres números enteros positivos previamente ingresados
por el teclado.
#include <stdio.h>
main() {
do {
} while (n1<0);
do {
} while (n2<0);
do {
} while (n3<0);
else
else
system("PAUSE");
Ejemplo 13F: Programa que indica si un número entero mayor a 1 ingresado por teclado, es primo o no.
Para calcular si un número es primo o no se utiliza el concepto de divisiones sucesivas y contabilizar cuando
divisores existen.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 9/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
main() {
int i,numero,divisor=0;
do{
for (i=2;i<numero;i++){
if (numero%i==0){
divisor++;
}
printf("%i,",i);
}
printf("\n");
if(divisor==0)
else
system("PAUSE");
El "problema" con el programa anterior es que si se encuentra un divisor, el for continúa hasta terminar. Como
podemos hacer que el for termine apenas encuentre un divisor?
#include <stdio.h>
main() {
int i,numero,divisor=0;
do{
for (i=2;(i<numero)&&(divisor==0);i++){
if (numero%i==0){
divisor++;
}
printf("%i,",i);
}
printf("\n");
if(divisor==0)
else
system("PAUSE");
Ejemplo 14F: Programa al cual se le ingresa un número entero positivo mayor a uno y displaya todos sus
divisores.
#include <stdio.h>
main() {
int i,numero;
do{
for (i=1;i<=numero;i++){
if (numero%i==0)
printf("%i,",i);
}
printf("\n");
system("PAUSE");
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 10/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Ejemplo 15F: Programa que imprime en pantalla todos los números primos existentes hasta un número
entero n, el cual ha sido ingresado por teclado (n debe ser mayor a 1). Problema tomado en el Examen Parcial
del semestre 2014-1
#include <stdio.h>
main() {
int i,j,numero,divisor;
do{
scanf("%i", &numero);
}while (numero<2);
for(j=2;j<=numero;j++){
divisor=0;
for (i=2;i<j;i++){
if (j%i==0)
divisor++;
}
if(divisor==0)
printf("%i,",j);
}
printf("\n");
system("PAUSE");
Como z debe ser un número entero qeu tenga raíz cuadrada exacta,
entonces debe cumplir con los siguiente:
z = round (z)
#include <stdio.h>
#include <math.h>
#define EXP 2
main() {
double z;
int x,y;
for(x=1;x<=NUM;x++){
for(y=1;y<=NUM;y++){
z=sqrt(pow(x,EXP)+pow(y,EXP));
if (z==round(z)){
}
}
}
system("PAUSE");
Ejemplo 17F: Halle todos los enteros positivos menores que 1000 tales que, el cubo de la suma de sus
dígitos es igual al cuadrado de dicho entero. Tener en cuenta que el CERO no es considerado ni positivo ni
negativo.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 11/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
#include <stdio.h>
#include <math.h>
main(){
int i,j,k=0,uni,dec,cen;
for(i=1;i<10000;i++){
uni=i%10;
dec=(i/10)%10;
cen=(i/100);
if(pow(uni+dec+cen,3)==pow(i,2))
printf("%i, ",i);
}
printf("\n");
system("PAUSE");
Estos primeros ejercicios trate de hacerlos por su cuenta y luego compare su solución
con las mostradas en el enlace inferior de cada pregunta.
Ejercicio 01F: Elaborar un programa que solicite el ingreso del largo y ancho de un rectángulo y que
imprima asteriscos en los vértices. Los números ingresados deben ser mayores o iguales a cero, de no ser así
el programa debe solicitar nuevamente el ingreso.
Solución E01F
Ejercicio 02F: Elaborar un programa que solicite el ingreso del largo y ancho de un rectángulo y lo imprima
en pantalla (solo el borde) empleando el caracter asterisco. Los números ingresados deben ser mayores o
iguales a cero, de no ser así el programa debe solicitar nuevamente el ingreso (Problema tomado en el
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 12/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
En el siguiente gráfico podemos observar como sería el rectángulo para los datos: largo = 8 y ancho = 4
Solución E02F
Ejercicio 03F: Elaborar un programa que solicite el ingreso del valor del lado de un cuadrado e imprima
asteriscos según la secuencia mostrada. El número ingresado debe ser mayor a cero (Problema tomado en la
Examen Parcial del semestre 2016-3).
Solución E03F
Ejercicio 04F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando un triángulo invertido.
Solución E04F
Ejercicio 05F: Elaborar un programa que encuentre los denominados números perfectos, menores a 10000.
Un número perfecto es un número natural que es igual a la suma de sus divisores (sin considerar al número
mismo). (Problema tomado en la Examen Parcial del semestre 2015-2).
Ejemplo:
6=1+2+3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064
Solución E05F
Ejercicio 06F: Elaborar un programa que calcule que el valor de e elevado a la x. El programa debe solicitar
el ingreso de x (real positivo) y n (entero mayor a cero).
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 13/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Solución E06F
Ejercicio 07F: Elaborar un programa que solicite el ingreso de una letra mayúscula (A<=letra<=Z). Luego
genere en forma aleatoria 20 letras mayúsculas y las imprima en una fila. Finalmente imprima cuantas veces
se repite la letra ingresada.
Solución E07F
Ejercicio 08F: Elaborar un programa que calcule que números desde 1 a 100, tienen la mayor cantidad de
divisores.
Si hay varios números con el número máximo de divisores, estos deben ser impresos en pantalla.
Por cada número que se imprime, se debe imprimir la cantidad de divisores que tiene.
Solución E08F
Ejercicio 09F: En matemáticas, se conoce como Producto de Wallis una
expresión utilizada para representar el valor de PI que fue descubierta por John
Wallis en 1655 y que establece que:
Elaborar un programa el cual solicite el ingreso por teclado del número n (mayor
a cero) y calcule el valor de PI.
Solución E09F
Ejercicio 10F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando una cruz (Problema tomado en la Segunda Práctica Calificada 2017-1).
Solución E10F
Ejercicio 11F: Elaborar un programa que calcule que el valor del seno hiperbólico de x. El programa debe
solicitar el ingreso de x (real positivo) y n (entero mayor a cero).
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 14/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Solución E11F
Ejercicio 12F: Elaborar un programa que simule el resultado de lanzar tres dados (considerar las variables
dado1, dado2 y dado3) 10 veces.
Dichos valores deben ser impresos en pantalla junto con la suma de dichos valores.
El programa debe imprimir cuantas lanzadas obtuvieron un número primo como suma.
Solución E12F
Ejercicio 13F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando un rombo.
Solución E13F
Ejercicio 14F: Elaborar un programa que imprima en pantalla todos los números primos de dos cifras, cuya
suma de dígitos sea múltiplo de 5.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 15/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Solución E14F
Ejercicio 15F: Elaborar un programa que solicite el ancho y largo (mayor o igual a cero) de una rectángulo
he imprima en pantalla lo siguiente:
Solución E15F
Ejercicio 16F: Elaborar un programa que genere en forma aleatoria 20 letras mayúsculas (A<=letra<=Z) y
las imprima en una fila y adicionalmente que imprima cuantas vocales se generaron.
Solución E16F
Ejercicio 17F: Elaborar un programa que simule el resultado de lanzar cuatro dados (considerar las
variables dado1, dado2, dado3 y dato4) 10 veces.
Dichos valores deben ser impresos en pantalla junto con la suma de dichos valores.
El programa debe imprimir el valor máximo y mínimo de las sumas obtenidas.
Solución E17F
Ejercicio 18F: Elaborar un programa que calcule que el valor del seno hiperbólico de x. El programa debe
solicitar el ingreso de x (real positivo) y n (entero mayor a cero).
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 16/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Solución E18F
Pregunta 19F: Elaborar un programa que encuentre "números amigos" considerando que deben ser
números enteros. Ejemplo: Los pitagóricos ya habían observado una rara relación entre los números 220 y
284.
Los divisores de 220 son(sin incluir el mismo número): 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110
Los de 284 son: 1, 2, 4, 71 y 142.
En apariencia no tiene mucho parecido, salvo por este curioso hecho:
220, 284
1184, 1210
2620, 2924
5020, 5564
6232, 6368
Si queremos calcular con este método lo primero que hacemos es asignarle el número cuadrado
perfecto cuyo cuadrado se acerque más a 10.5, ese número va a ser 3, ya que 3^2 da como resultado 9 y se
acerca más que 4^2, que da 16:
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 17/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
1000 = a2+b2+c2+d2
Y asumiendo que a, b, c, d son números enteros mayores o iguales a cero, calcule e imprima:
Nombre cada programa son las iniciales de su nombre seguido del número de la pregunta. Ejemplo: JGBB1,
JGBB2, etc.
Solo debe enviar al aulavirtual, el archivo *.c de cada programa.
No debe comprimir el archivo.
La sesión de Zoom no debe tener habilitado la opción de "Fondo de Pantalla".
Cualquiera de los programas enviados que tenga errores de compilación se le evaluará con nota CERO.
P01: Elaborar un programa que calcula cuantos números primos de 3 cifras son capicúas. El programa debe
imprimir en una fila todos los números que cumplen con la condición, separados por comas. En una siguiente
linea imprimir cuantos números son.
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 18/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
PC2-01
P02: Elaborar un programa que calcule cuántos números primos de cuatro dígitos cumplen con la condición
de que la suma de sus dígitos sea un cuadrado perfecto. El programa imprime en una fila todos los números
primos que cumplen la condición y en una segunda fila el número total.
PC2-02
P03: Elaborar un programa que solicite el ingreso por teclado el valor del lado de un cuadrado "T" (valor
entero mayor o igual a 2) y el valor de "N" (número entero mayor a cero). Con esos dos valores debe imprimir
en pantalla la siguiente secuencia de asteriscos.
Ejemplo 1: Para "T" igual a 7. Observar que "N" no puede ser 4 porque los asteriscos se superponen.
PC2-03
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 19/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2
Mantente en contacto
UNI VIRTUAL
http://univirtual.uni.pe
univirtual@uni.edu.pe
https://univirtual.uni.pe/course/view.php?id=5350§ion=6#tabs-tree-start 20/20