Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bucles anidados
Ciclos anidados
Bucles anidados
Los bucles anidados constan de un bucle externo con uno o ms bucles internos. Cada vez
que se repite el bucle externo, los bucles internos se repiten, se vuelven a evaluar los
componentes de control y se ejecutan todas las iteraciones requeridas.
Ejemplo # 1
#include <stdio.h>
void main(void)
{
int i, y;
for(i = 1; i< =3; i++)
{
for(y = 1; y < =2; y++)
printf("#\t");
printf("\n");
}
}
Ejemplo # 2
#include<stdio.h>
void main(void)
{
int i, y;
for(i = 1; i<=2; i++)
{
for(y = 1; y<=3; y++)
printf("$\t");
printf("\n");
}
}
Ciclos anidados
Ejemplo #3:
//anidamiento1.c
#include <stdio.h>
int x,y, xultimo = 2, yultimo = 4;
void main(void)
{
for(x = 1; x <= xultimo; x++)
for(y = 1; y <= yultimo; y++)
{
int producto;
producto = x * y;
printf(" %d * %d = %d \n",x,y,producto);
}
}
Ejemplo #4:
//anidamiento2.c
#include <stdio.h>
int i,j;
void main(void)
{
printf("\n \t\t i \t j \n");
for(i = 0; i < 4; i++)
{
printf("Externo \t %d \n",i);
for(j = 0; j < i; j++)
printf("Interno \t\t %d \n",j);
}
}
Ciclos anidados
Ejemplo #5:
Realice un programa que calcule el promedio de tres notas para 10 alumnos. El ejemplo
de una salida puede ser:
Nombre del alumno #1: Luis Prez
Materia: Matemtica Bsica
Nota 1: 100
Nota 2: 90
Nota 3: 90
El promedio es: 93.33
//alumnosanidados2.c
#include<stdio.h>
#include <string.h>
char nombre[100];
char materia[70];
int i,k,nota;
float promedio,sumparc;
Ciclos anidados
void main(void)
{
for(i=1;i<=5;i++)
{
printf("Nombre del alumno #%d: ",i);
fflush(stdin);
gets(nombre);
sumparc=0;
printf("Materia: ");
fflush(stdin);
gets(materia);
for(k=1;k<=3;k++)
{
printf("Nota %d: ",k);
scanf("%d",¬a);
sumparc=sumparc + nota;
}//fin del for k
promedio=sumparc/3;
printf("El promedio es:%.2f\n\n\n",promedio);
}//fin del for padre
}
Ciclos anidados
Ejemplo #6:
La funcin factorial se aplica a enteros positivos. El factorial de un entero positivo n es
(!n) es igual al producto de los enteros positivos del 1 al n. Escriba un programa que
calcule los factoriales de los enteros del 1 al 5.
Ejemplo:
!3 = 1*2*3 = 6
Sugerencia: Primero calcular el factorial para un solo nmero, luego introducir un
ciclo que vaya del 1 al 5.
//factorialanidado3.c
#include <stdio.h>
void main(void)
{
int num, i;
long fac;
//printf("Ingrese el numero: ");
//scanf("%d",&num);
for(num = 1; num <= 5; num++)
{
fac = 1;
for(i = 1; i <= num; i++)
fac = fac * i;
printf("\nEl factorial de %d es: %ld\n",num,fac);
}
}
Ciclos anidados
Ejemplo #7:
Escriba un programa que calcule y visualice:
1! + 2! + 3! + + (n 1)! + n!
//factorialanidado2.c
#include <stdio.h>
void main(void)
{
int n, i = 1, m;
float fact, suma = 0;
printf("Ingrese el valor de n: ");
scanf("%d",&n);
do
{
fact = 1;
m = i;
while(m > 1)
{
fact *= m;
m--;
}
suma+=fact;
printf("\t %d! = %0.f \n",i,fact);
i++;
}while(i <= n);
printf("\n\tsuma = %0.f\n\n",suma);
}
Ciclos anidados
Ejemplo #8:
El siguiente programa imprime una tabla de m filas por n columnas y un carcter de
entrada.
//filascolumnas.c
#include <stdio.h>
int filas, columnas;
int i, j;
char elCar;
void main()
{
printf("Cuantas filas?: ");
scanf("%d",&filas);
printf("Cuantas columnas?: ");
scanf("%d",&columnas);
printf("Que caracter?:");
fflush(stdin);
elCar=getchar();
/* bucle externo */
for(i = 0; i < filas; i++)
{
/*bucle interno */
for(j = 0; j < columnas; j++)
putchar(elCar);
putchar('\n');
}
}
Ciclos anidados
Ejercicios resueltos
1.
Disear e implementar un programa que solicite a su usuario un valor no
negativo n y visualice la siguiente salida:
1
1
.
1
2
2
3
3
n-1
n-1
Solucin en Lenguaje C:
//triangulonum.c
#include <stdio.h>
int k, i ,n;
void main(void)
{
do
{
printf("Introduzca un valor entero:");
scanf("%d",&n);
}while(n<=0);
i = n;
while(i >= 1)
{
k = 1;
while(k <= i)
{
printf("%d\t",k);
k++;
}
printf("\n");
i--;
}
}
Ciclos anidados
2.
Una aplicacin de las computadoras es dibujar grficos de barra(llamados
histogramas). Escriba un programa que dibuje un grfico como el siguiente donde la
cantidad de asteriscos de cada lnea corresponda al nmero que est a la par.
3. | ***
|
5. | *****
|
7. | *******
|
9. | *********
|____________
Solucin en Lenguaje C:
/*histogra.c*/
#include<stdio.h>
int naster,nlineas,i;
void main(void)
{
for(nlineas=3;nlineas<=9;nlineas++)
{
if(nlineas % 2!=0)
{
printf("%d.| ",nlineas);
for(naster=1;naster<=nlineas;naster++)
printf("*");
printf("\n");
}
else
printf(" |\n");
}//fin del for padre
10
Ciclos anidados
printf(" |");
for(i=1;i<=12;i++)
printf("_");
printf("\n\n");
}//fin del programa
3.
ZYXWVUTSRQPONMLKJIHGFEDCBA
YXWVUTSRQPONMLKJIHGFEDCBA
XWVUTSRQPONMLKJIHGFEDCBA
WVUTSRQPONMLKJIHGFEDCBA
VUTSRQPONMLKJIHGFEDCBA
UTSRQPONMLKJIHGFEDCBA
TSRQPONMLKJIHGFEDCBA
SRQPONMLKJIHGFEDCBA
RQPONMLKJIHGFEDCBA
QPONMLKJIHGFEDCBA
PONMLKJIHGFEDCBA
ONMLKJIHGFEDCBA
NMLKJIHGFEDCBA
MLKJIHGFEDCBA
LKJIHGFEDCBA
KJIHGFEDCBA
JIHGFEDCBA
IHGFEDCBA
HGFEDCBA
GFEDCBA
FEDCBA
EDCBA
DCBA
CBA
BA
A
11
Ciclos anidados
Solucin en Lenguaje C:
//abc.c
#include <stdio.h>
int i , fila;
char caracter = 'Z';
void main(void)
{
for(fila = 1; fila <= 28; fila++)
{
for(i = caracter; i >= 'A'; i--)
{
printf("%c",i);
}
caracter--;
printf("\n");
}
}
4.
* *
*
* *
*
* *
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
12
*
*
*
*
*
*
*
*
*
*
*
*
*
* *
*
* *
*
* *
Ciclos anidados
Solucin en Lenguaje C:
//diamanteirregular.c
#include <stdio.h>
int fil, col;
void main(void)
{
for(fil = 1; fil <= 6; fil++)
{
if(fil %2 == 0)
printf(" ");
for(col = 1; col <= 9; col++)
printf("* ");
printf("\n");
}
}
13
Ciclos anidados
Ejercicios propuestos
1. Escribir un programa que visualice la siguiente salida:
1
1
1
1
1
1
1
2
2
2
2
2
3
3
3
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* *
* * *
* *
*
14
Ciclos anidados
(A)
(B)
(C)
*
**
***
****
*****
******
*******
********
*********
**********
**********
*********
********
*******
******
*****
****
***
**
*
**********
*********
********
*******
******
*****
****
***
**
*
(D)
*
**
***
****
*****
******
*******
********
*********
**********
7. Una compaa de seguros tiene contratados a n vendedores. Cada uno hace tres
ventas a la semana. Su poltica de pagos es que un vendedor recibe un sueldo
base, y un 10% extra por comisiones de sus ventas. El gerente de su compaa
desea saber cunto dinero obtendr en la semana cada vendedor por concepto de
comisiones por las tres ventas realizadas, y cuanto tomando en cuenta su sueldo
base y sus comisiones.
15