Sei sulla pagina 1di 0

2012

M.Sc. Ana Mara Salgado G.


UNAN - LEON
24/04/2012
Bucles anidados
Ciclos anidados

2

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

3


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

4







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

5

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",&nota);
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

6

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

7


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

8


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

9

Ejercicios resueltos

1. Disear e implementar un programa que solicite a su usuario un valor no
negativo n y visualice la siguiente salida:

1 2 3 n-1 n
1 2 3 n-1
.
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

10



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.










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

3. | ***
|
5. | *****
|
7. | *******
|
9. | *********
|____________

Ciclos anidados

11
printf(" |");
for(i=1;i<=12;i++)
printf("_");

printf("\n\n");

}//fin del programa


3. Disear un programa que produzca la siguiente salida:

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






Ciclos anidados

12



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. Escribir un programa que d como resultado la siguiente figura:


* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *







Ciclos anidados

13

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");
}
}















Ciclos anidados

14
Ejercicios propuestos

1. Escribir un programa que visualice la siguiente salida:

1
1 2
1 2 3
1 2 3 4
1 2 3
1 2
1


2. Se desea obtener el promedio de g grupos que estn en un mismo ao escolar;
siendo que cada grupo puede tener n alumnos, que cada alumno puede llevar m
materias y que en todas las materias se promedian tres calificaciones para obtener
el promedio de la materia. Lo que se desea desplegar es el promedio de los grupos,
el promedio de cada grupo y el promedio de cada alumno.

3. El profesor de una materia desea conocer la cantidad de sus alumnos que no
tienen derecho al examen de nivelacin.
Disee un programa que lea las calificaciones obtenidas en las 5 unidades por cada
uno de los 40 alumnos y escriba la cantidad de ellos que no tienen derecho al
examen de nivelacin.

4. Escriba un programa que imprima la forma en diamante siguiente. Puede utilizar
enunciados printf que impriman ya sea un (*), o un espacio en blanco. Maximice
su utilizacin de repeticiones(utilizando estructuras for anidadas) y minimice el
nmero de enunciados printf.

*
* *
* * * *
* * * * * *
* * * * * * * *
* * * * * *
* * * *
* *
*





Ciclos anidados

15



5. Realice un programa que d como salida lo siguiente:











6. Escriba un programa que imprima los siguientes patrones por separado, uno
debajo del siguiente. Utilice ciclos for para generar los patrones. Todos los
asteriscos debern ser impresos por un solo enunciado printf de la forma
printf(*); esto hace que los asteriscos se impriman uno al lado del otro.
Sugerencia: los dos ltimos patrones requieren que cada lnea empiece con un
nmero correcto de espacios en blanco.


(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.
*
**
***
****
*****
******
*******
********
*********

Potrebbero piacerti anche