Sei sulla pagina 1di 48

1.

Que pida un nmero del 1 al 5 y diga si es primo o no. #include <stdio.h> #include <stdlib.h> int main(void) { int i; printf("Introduzca nmero del 1 al 5:"); scanf("%d",&i); if (i!=4) { printf("Es primo."); } else { printf("No es primo."); } system("PAUSE"); return 0; }

2.

Que pida un nmero y diga si es par o impar. #include <stdio.h> #include <stdlib.h> int main(void) { int i; printf("Introduzca nmero:"); scanf("%d",&i); if (i%2==0) { printf("Es par."); } else { printf("Es impar."); } system("PAUSE"); return 0; }

3.

Que pida un nmero del 1 al 7 y diga el da de la semana correspondiente. #include <stdio.h> #include <stdlib.h> int main(void) { int i; printf("Introduzca nmero del 1 al 7:"); scanf("%d",&i);

switch(i){ case 1: printf ("Lunes\n"); break; case 2: printf ("Martes\n"); break; case 3: printf ("Mircoles\n"); break; case 4: printf ("Jueves\n"); break; case 5: printf ("Viernes\n"); break; case 6: printf ("Sbado\n"); break; case 7: printf ("Domingo\n"); break; default: printf ("Opcin no vlida\n"); break; } system("PAUSE"); return 0; } 4. Que pida un nmero del 1 al 12 y diga el nombre del mes correspondiente. #include <stdio.h> #include <stdlib.h> int main(void) { int i; printf("Introduzca nmero del 1 al 12:"); scanf("%d",&i); switch(i){ case 1: printf ("Enero\n"); break; case 2: printf ("Febrero\n"); break; case 3: printf ("Marzo\n"); break; case 4: printf ("Abril\n"); break;

case 5: printf ("Mayo\n"); break; case 6: printf ("Junio\n"); break; case 7: printf ("Julio\n"); break; case 8: printf ("Agosto\n"); break; case 9: printf ("Septiembre\n"); break; case 10: printf ("Octubre\n"); break; case 11: printf ("Noviembre\n"); break; case 12: printf ("Diciembre\n"); break; default: printf ("Opcin no vlida\n"); break; } system("PAUSE"); return 0; } 5. Que pida 3 nmeros y los muestre en pantalla de menor a mayor. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1<num2 && num1<num3) { if (num2<num3) { printf("%d",num1);

printf("%d",num2); printf("%d",num3); } else { printf("%d",num1); printf("%d",num3); printf("%d",num2); } } else if (num2<num1 && num2<num3) { if (num1<num3) { printf("%d",num2); printf("%d",num1); printf("%d",num3); } else { printf("%d",num2); printf("%d",num3); printf("%d",num1); } } else if (num3<num1 && num3<num2) { if (num1<num2) { printf("%d",num3); printf("%d",num1); printf("%d",num2); } else { printf("%d",num3); printf("%d",num2); printf("%d",num1); } } system("PAUSE"); return 0; } 6. Que pida 3 nmeros y los muestre en pantalla de mayor a menor. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1);

printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1>num2 && num1>num3) { if (num2>num3) { printf("%d",num1); printf("%d",num2); printf("%d",num3); } else { printf("%d",num1); printf("%d",num3); printf("%d",num2); } } else if (num2>num1 && num2>num3) { if (num1>num3) { printf("%d",num2); printf("%d",num1); printf("%d",num3); } else { printf("%d",num2); printf("%d",num3); printf("%d",num1); } } else if (num3>num1 && num3>num2) { if (num1>num2) { printf("%d",num3); printf("%d",num1); printf("%d",num2); } else { printf("%d",num3); printf("%d",num2); printf("%d",num1); } } system("PAUSE"); return 0; }

7.

Que pida 3 nmeros y los muestre en pantalla de mayor a menor en lneas distintas. En caso de haber nmeros iguales se pintan en la misma lnea. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1>num2 && num1>num3) { if (num2>num3) { printf("%d\n",num1); printf("%d\n",num2); printf("%d\n",num3); } else if (num3>num2) { printf("%d\n",num1); printf("%d\n",num3); printf("%d\n",num2); } else { printf("%d\n",num1); printf("%d",num3); printf("%d\n",num2); } } else if (num2>num1 && num2>num3) { if (num1>num3) { printf("%d\n",num2); printf("%d\n",num1); printf("%d\n",num3); } else if (num3>num1) { printf("%d\n",num2); printf("%d\n",num3); printf("%d\n",num1); } else

{ printf("%d\n",num2); printf("%d",num3); printf("%d\n",num1); } } else if (num3>num1 && num3>num2) { if (num1>num2) { printf("%d\n",num3); printf("%d\n",num1); printf("%d\n",num2); } else if (num2>num1) { printf("%d\n",num3); printf("%d\n",num2); printf("%d\n",num1); } else { printf("%d\n",num3); printf("%d",num2); printf("%d\n",num1); } } else { printf("%d",num1); printf("%d",num2); printf("%d",num3); } system("PAUSE"); return 0; } 8. Que pida un nmero y diga si es positivo o negativo. #include <stdio.h> #include <stdlib.h> int main(void) { int num1; printf("Introduzca nmero 1:"); scanf("%d",&num1); if (num1>0){ printf("Es positivo\n"); } else if (num1<0){ printf("Es negativo\n"); }

else { printf("Es cero\n"); } system("PAUSE"); return 0; } 9. Que slo permita introducir los caracteres S y N. #include <stdio.h> #include <stdlib.h> int main(void) { char c; printf("Introduzca un carcter:"); scanf("%c",&c); if (c=='s' || c=='n' ){ printf("Es correcto\n"); } else { printf("Es incorrecto\n"); } system("PAUSE"); return 0; } 10. Que pida un nmero y diga si es mayor de 100. #include <stdio.h> #include <stdlib.h> int main(void) { int num1; printf("Introduzca un nmero:"); scanf("%d",&num1); if (num1>100){ printf("Es mayor\n"); } else { printf("Es menor\n"); } system("PAUSE"); return 0; }

11. Que pida una letra y detecte si es una vocal. #include <stdio.h> #include <stdlib.h> int main(void) { char c; printf("Introduzca un carcter:"); scanf("%c",&c); switch (c) { case 'a': printf ("Es vocal\n"); break; case 'e': printf ("Es vocal\n"); break; case 'i': printf ("Es vocal\n"); break; case 'o': printf ("Es vocal\n"); break; case 'u': printf ("Es vocal\n"); break; default: printf ("No es vocal\n"); break; } system("PAUSE"); return 0; } 12. Que pida tres nmeros y detecte si se han introducido en orden creciente. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3);

if (num1<num2) { if (num2<num3) { printf("Orden creciente"); } else { printf("No estn introducidos en orden creciente "); } } else { printf("No estn introducidos en orden creciente "); } system("PAUSE"); return 0; } 13. Que pida tres nmeros y detecte si se han introducido en orden decreciente. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1>num2) { if (num2>num3) { printf("Orden decreciente"); } else { printf("No estn introducidos en orden decreciente "); } } else { printf("No estn introducidos en orden decreciente "); } system("PAUSE");

return 0; } 14. Que pida 10 nmeros y diga cul es el mayor y cual el menor. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,mayor,menor; mayor=0; menor=10; printf("Introduzca nmero 1:"); scanf("%d",&num1); if (num1>mayor) { mayor=num1; } else if (num1<menor) { menor=num1; } printf("Introduzca nmero 2:"); scanf("%d",&num2); if (num2>mayor) { mayor=num2; } else if (num2<menor) { menor=num2; } printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num3>mayor) { mayor=num3; } else if (num3<menor) { menor=num3; } printf("Introduzca nmero 4:"); scanf("%d",&num4); if (num4>mayor) {

mayor=num4; } else if (num4<menor) { menor=num4; } printf("Introduzca nmero 5:"); scanf("%d",&num5); if (num5>mayor) { mayor=num5; } else if (num5<menor) { menor=num5; } printf("Introduzca nmero 6:"); scanf("%d",&num6); if (num6>mayor) { mayor=num6; } else if (num6<menor) { menor=num6; } printf("Introduzca nmero 7:"); scanf("%d",&num7); if (num7>mayor) { mayor=num7; } else if (num7<menor) { menor=num7; } printf("Introduzca nmero 8:"); scanf("%d",&num8); if (num8>mayor) { mayor=num8; } else if (num8<menor) { menor=num8; } printf("Introduzca nmero 9:");

scanf("%d",&num9); if (num9>mayor) { mayor=num9; } else if (num9<menor) { menor=num9; } printf("Introduzca nmero 10:"); scanf("%d",&num10); if (num10>mayor) { mayor=num10; } else if (num10<menor) { menor=num10; } printf("El mayor es:%d\n",mayor); printf("El menor es:%d\n",menor); system("PAUSE"); return 0; } 15. Que pida tres nmeros e indicar si el tercero es igual a la suma del primero y el segundo. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1+num2==num3) { printf("El tercer nmero es la suma de los dos primeros.\n"); } else { printf("El tercer nmero NO es la suma de los dos primeros.\n"); }

system("PAUSE"); return 0; } 16. Que muestre un men que contemple las opciones Archivo, Buscar y Salir, en caso de que no se introduzca una opcin correcta se notificar por pantalla. #include <stdio.h> #include <stdlib.h> int main(void) { int opcion; printf("Seleccione opcin:\n"); printf("1 - Archivo\n"); printf("2 - Buscar\n"); printf("3 - Salir\n"); scanf("%d",&opcion); if (opcion!=1 && opcion!=2 && opcion!=3) { printf("La opcin NO es correcta.\n"); } else { printf("La opcin es correcta.\n"); } system("PAUSE"); return 0; } 17. Que tome dos nmeros del 1 al 5 y diga si ambos son primos. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2; printf("Introduzca nmero del 1 al 5:"); scanf("%d",&num1); printf("Introduzca nmero del 1 al 5:"); scanf("%d",&num2); if (num1!=4 && num2!=4) { printf("Ambos son primos.\n"); } else { printf("Los nmeros, o uno de ellos, no son primos.\n"); }

system("PAUSE"); return 0; } 18. Que tome dos nmeros y diga si ambos son pares o impares. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2; printf("Introduzca primer nmero:"); scanf("%d",&num1); printf("Introduzca segundo nmero:"); scanf("%d",&num2); if (num1%2==0 && num2%2==0) { printf("Ambos son pares.\n"); } else { printf("Los nmeros, o uno de ellos, no son pares.\n"); } system("PAUSE"); return 0; } 19. Que tome tres nmeros y diga si la multiplicacin de los dos primeros es igual al tercero. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1*num2==num3) { printf("El tercer nmero es la multiplicacin de los dos primeros.\n"); } else { printf("El tercer nmero NO es la multiplicacin de los dos primeros.\n"); }

system("PAUSE"); return 0; } 20. Que tome tres nmeros y diga si el tercero es el resto de la divisin de los dos primeros. #include <stdio.h> #include <stdlib.h> int main(void) { int num1,num2,num3; printf("Introduzca nmero 1:"); scanf("%d",&num1); printf("Introduzca nmero 2:"); scanf("%d",&num2); printf("Introduzca nmero 3:"); scanf("%d",&num3); if (num1%num2==num3) { printf("El tercer nmero es el resto de la divisin de los dos primeros.\n"); } else { printf("El tercer nmero NO es el resto de la divisin de los dos primeros.\n"); } system("PAUSE"); return 0; } 21. Que muestre un men donde las opciones sean Equiltero, Issceles y Escaleno, pida una opcin y calcule el permetro del tringulo seleccionado. Sirva de aclaracin que el permetro de un tringulo es siempre la suma de sus lados, pero he preferido hacerlo as para ver las tres formas diferentes de calcularlo. #include <stdio.h> #include <stdlib.h> int main(void) { int lado, base, opcion; printf("Introduzca lado del tringulo:"); scanf("%d",&lado); printf("Introduzca base del tringulo:"); scanf("%d",&base); printf("Seleccione opcin:\n"); printf("1 - Equiltero\n");

printf("2 - Issceles\n"); printf("3 - Escaleno\n"); scanf("%d",&opcion); switch (opcion) { case 1: printf("El permetro es:%d\n",3*lado); break; case 2: printf("El permetro es:%d\n",(2*lado)+base); break; case 3: printf("El permetro es:%d\n",lado + lado + lado); break; default: printf("Opcin no vlida."); break; } system("PAUSE"); return 0; } 22. Que pase de Kg a otra unidad de medida de masa, mostrar en pantalla un men con las opciones posibles. #include <stdio.h> #include <stdlib.h> int main(void) { int peso; printf("Introduzca peso en kilogramos:"); scanf("%d",&peso); printf("Seleccione opcin:\n"); printf("1 - Hectogramos\n"); printf("2 - Decagramos\n"); printf("3 - Gramos\n"); printf("4 - Decigramos\n"); printf("5 - Centigramos\n"); printf("6 - Miligramos\n"); scanf("%d",&opcion); switch (opcion) { case 1: printf("El peso es:%d\n",peso/10); break; case 2: printf("El peso es:%d\n",peso/100); break;

case 3: printf("El peso es:%d\n",peso/1000); break; case 4: printf("El peso es:%d\n",peso/10000); break; case 5: printf("El peso es:%d\n",peso/100000); break; case 6: printf("El peso es:%d\n",peso/1000000); break; default: printf("Opcin no vlida."); break; } system("PAUSE"); return 0; } 23. Que lea un importe bruto y calcule su importe neto, si es mayor de 15.000 se le aplicar un 16% de impuestos, en caso contrario se le aplicar un 10%. #include <stdio.h> #include <stdlib.h> int main(void) { float importe, deduccion; printf("Introduzca Importe:"); scanf("%f",&importe); if (importe>15000) { deduccion=importe*0.16; } else { deduccion=importe*0.1; } printf("El importe neto es %f euros\n",importe-deduccion); system("PAUSE"); return 0; } 24. Que lea una hora en hora:minutos:segundos y diga la hora que es un segundo despus. #include <stdio.h> #include <stdlib.h> int main(void) {

int horas, minutos, segundos; printf("Introduzca Hora:"); scanf("%d",&horas); printf("Introduzca Minutos:"); scanf("%d",&minutos); printf("Introduzca Segundos:"); scanf("%d",&segundos); segundos=segundos+1; if (minutos>59) { minutos=0; } if (horas>23) { horas=0; } if (segundos>59) { segundos=0; minutos=minutos+1; if (minutos>59) { minutos=0; horas=horas+1; if (horas>23) { horas=0; } } } printf("La hora (un segundo despus) es: %02d:%02d:%02d \n", horas, minutos, segundos); system("PAUSE"); return 0; } 25. Que calcule el sueldo que le corresponde al trabajador de una empresa que cobra 40.000 euros anuales, el programa debe realizar los clculos en funcin de los siguientes criterios: a. b. c. d. Si lleva ms de 10 aos en la empresa se le aplica un aumento del 10%. Si lleva menos de 10 aos pero ms que 5 se le aplica un aumento del 7%. Si lleva menos de 5 aos pero ms que 3 se le aplica un aumento del 5%. Si lleva menos de 3 aos se le aplica un aumento del 3%. #include <stdio.h> #include <stdlib.h> int main(void) {

float importe, aumento; int antiguedad; importe=40000; printf("Introduzca la antigedad del trabajador:"); scanf("%d",&antiguedad); if (antiguedad>=10) { aumento=importe*0.1; } else if (antiguedad<10 && antiguedad>=5) { aumento=importe*0.07; } else if (antiguedad<5 && antiguedad>=3) { aumento=importe*0.05; } else { aumento=importe*0.03; } printf("El sueldo que le corresponde al trabajador es de %f euros\n",importe+aumento); system("PAUSE"); return 0; } - See more at: http://programavideojuegos.blogspot.com/2013/05/25-ejercicios-resueltos-deestructuras.html#sthash.VaqMk5Wq.dpuf

3.2. Estructuras repetitivas


Hemos visto cmo comprobar condiciones, pero no cmo hacer que una cierta parte de un programa se repita un cierto nmero de veces o mientras se cumpla una condicin (lo que llamaremos un bucle). En C tenemos varias formas de conseguirlo.
3.2.1. while

Si queremos hacer que una seccin de nuestro programa se repita mientras se cumpla una cierta condicin, usaremos la orden while. Esta orden tiene dos formatos distintos, segn comprobemos la condicin al principio o al final. En el primer caso, su sintaxis es
while ( condicin ) sentencia;

Es decir, la sentencia se repetir mientras la condicin se cierta. Si la condicin es falsa ya desde un principio, la sentencia no se ejecuta nunca. Si queremos que se repita ms de una sentencia, basta agruparlas entre { y }. Un ejemplo que nos diga si cada nmero que tecleemos es positivo o negativo, y que pare cuando tecleemos el nmero 0, podra ser: /*---------------------------*/ /* Ejemplo en C n 26: */ /* C026.C */ /* */ /* La orden "while" */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/

#include <stdio.h> int numero; main() { printf("Teclea un nmero (0 para salir): "); scanf("%d", &numero); while (numero!=0) { if (numero > 0) printf("Es positivo\n"); else printf("Es negativo\n"); printf("Teclea otro nmero (0 para salir): "); scanf("%d", &numero); } } En este ejemplo, si se introduce 0 la primera vez, la condicin es falsa y ni siquiera se entra al bloque del while, terminando el programa inmediatamente. Nota: si recordamos que una condicin falsa se evala como el valor 0 y una condicin verdadera como una valor distinto de cero, veremos que ese while (numero != 0) se podra abreviar como while (numero). Ejercicio propuesto: Crear un programa calcule cuantas cifras tiene un nmero entero positivo (pista: se puede hacer dividiendo varias veces entre 10).
3.2.2. do ... while

Este es el otro formato que puede tener la orden while: la condicin se comprueba al final. El punto en que comienza a repetirse se indica con la orden do, as:

do sentencia; while ( condicin)

Al igual que en el caso anterior, si queremos que se repitan varias rdenes (es lo habitual), deberemos encerrarlas entre llaves. Como ejemplo, vamos a ver cmo sera el tpico programa que nos pide una clave de acceso y nos nos deja entrar hasta que tecleemos la clave correcto. Eso s, como todava no sabemos manejar cadenas de texto, la clave ser un nmero: /*---------------------------*/ /* Ejemplo en C n 27: */ /* C027.C */ /* */ /* La orden "do..while" */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int valida = 711; int clave; main() { do { printf("Introduzca su clave numrica: "); scanf("%d", &clave); if (clave != valida) printf("No vlida!\n"); }

while (clave != valida); printf("Aceptada.\n"); } En este caso, se comprueba la condicin al final, de modo que se nos preguntar la clave al menos una vez. Mientras que la respuesta que demos no sea la correcta, se nos vuelve a preguntar. Finalmente, cuando tecleamos la clave correcta, el ordenador escribe Aceptada y termina el programa.

Ejercicio propuesto: Crear un programa que pida nmeros positivos al usuario, y vaya calculando la suma de todos ellos (terminar cuando se teclea un nmero negativo o cero).

3.2.3. for

sta es la orden que usaremos habitualmente para crear partes del programa que se repitan un cierto nmero de veces. El formato de for es
for ( valorInicial; CondicinRepeticin; Incremento) Sentencia;

As, para contar del 1 al 10, tendramos 1 como valor inicial, <=10 como condicin de repeticin, y el incremento sera de 1 en 1. Por tanto, el programa quedara: /*---------------------------*/ /* Ejemplo en C n 28: */ /* C028.C */ /* */ /* Uso bsico de "for" */ /* */ /* Curso de C, */

/* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int contador; main() { for (contador=1; contador<=10; contador++) printf("%d ", contador); } Recordemos que contador++ es una forma abreviada de escribir contador=contador+1, de modo que en este ejemplo aumentamos la variable de uno en uno. Ejercicios propuestos:

Crear un programa que muestre los nmeros del 15 al 5, descendiendo (pista: en cada pasada habr que descontar 1, por ejemplo haciendo i-- ). Crear un programa que muestre los primeros ocho nmeros pares (pista: en cada pasada habr que aumentar de 2 en 2, o bien mostrar el doble del valor que hace de contador).

En un for, realmente, la parte que hemos llamadoIncremento no tiene por qu incrementar la variable, aunque se es su uso ms habitual. Es simplemente una orden que se ejecuta cuando se termine la Sentencia y antes de volver a comprobar si todava se cumple la condicin de repeticin. Por eso, si escribimos la siguiente lnea:

for (contador=1; contador<=10; )

la variable contador no se incrementa nunca, por lo que nunca se cumplir la condicin de salida: nos quedamos encerrados dando vueltas dentro de la orden que siga al for. Un caso todava ms exagerado de algo a lo que se entra y de lo que no se sale sera la siguiente orden:
for ( ; ; )

Los bucles for se pueden anidar (incluir uno dentro de otro), de modo que podramos escribir las tablas de multiplicar del 1 al 5 con: /*---------------------------*/ /* Ejemplo en C n 29: */ /* C029.C */ /* */ /* "for" anidados */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int tabla, numero; main() { for (tabla=1; tabla<=5; tabla++) for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); }

En estos ejemplos que hemos visto, despus de for haba una nica sentencia. Si queremos que se hagan varias cosas, basta definirlas como un bloque (una sentencia compuesta) encerrndolas entre llaves. Por ejemplo, si queremos mejorar el ejemplo anterior haciendo que deje una lnea en blanco entre tabla y tabla, sera: /*---------------------------*/ /* Ejemplo en C n 30: */ /* C30.C */ /* */ /* "for" anidados (2) */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int tabla, numero; main() { for (tabla=1; tabla<=5; tabla++) { for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); printf("\n"); } } Para contar no necesariamente hay que usar nmeros. Por ejemplo, podemos contar con letras as:

/*---------------------------*/ /* Ejemplo en C n 31: */ /* C031.C */ /* */ /* "for" que usa "char" */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> char letra; main() { for (letra='a'; letra<='z'; letra++) printf("%c", letra); } En este caso, empezamos en la a y terminamos en la z, aumentando de uno en uno. Si queremos contar de forma decreciente, o de dos en dos, o como nos interese, basta indicarlo en la condicin de finalizacin del for y en la parte que lo incrementa: /*---------------------------*/ /* Ejemplo en C n 32: */ /* C032.C */ /* */ /* "for" que descuenta */ /* */ /* Curso de C, */ /* Nacho Cabanes */

/*---------------------------*/ #include <stdio.h> char letra; main() { for (letra='z'; letra>='a'; letra-=2) printf("%c", letra); } Ejercicios propuestos:

Crear un programa que muestre las letras de la Z (mayscula) a la A (mayscula, descendiendo). Crear un programa que escriba en pantalla la tabla de multiplicar del 5. Crear un programa que escriba en pantalla los nmeros del 1 al 50 que sean mltiplos de 3 (pista: habr que recorrer todos esos nmeros y ver si el resto de la divisin entre 3 resulta 0).

3.3. Sentencia break: termina el bucle


Podemos salir de un bucle for antes de tiempo con la orden break: /*---------------------------*/ /* Ejemplo en C n 33: */ /* C033.C */ /* */ /* "for" interrumpido con */

/* "break" */ /* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int i; main() { for (i=0; i<=10; i++) { if (i==5) break; printf("%d ", i); } } El resultado de este programa es: 01234 (en cuanto se llega al valor 5, se interrumpe el for, por lo que no se alcanza el valor 10).

3.4. Sentencia continue: fuerza la siguiente iteracin


Podemos saltar alguna repeticin de un bucle con la orden continue: /*---------------------------*/ /* Ejemplo en C n 34: */ /* C034.C */ /* */ /* "for" interrumpido con */ /* "continue" */

/* */ /* Curso de C, */ /* Nacho Cabanes */ /*---------------------------*/ #include <stdio.h> int i; main() { for (i=0; i<=10; i++) { if (i==5) continue; printf("%d ", i); } } El resultado de este programa es: 0 1 2 3 4 6 7 8 9 10 En l podemos observar que no aparece el valor 5.

1. Calcula Los numeros Pares comprendidos entre 1 y 50

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N=50; int i; cout<<"Los Numeros Pares Comprendidos entre 1 y 50 son:"; for (i=2;i<N;i++) { if (i%2==0) cout<<" \a"<<endl<<endl<<i; } getch(); }

2.Calcula Los Numeros Comprendidos entre un Determinado Rango.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int Ni,Nf; int i; cout<<"Ingrese Numero Inicial:"; cin>>Ni; cout<<"Ingrese Numero Final:"; cin>>Nf; for (i=Ni+1;i<Nf;i++) { cout<<" \a"<<endl<<i; } getch(); }

3. Calcula Una suma Infinita

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); double N,i,suma=0; cout<<"Ingrese Denominador Final:"; cin>>N; for (i=1;i<=N;i++) { suma=suma+1/i; } cout<<"La Suma Es:\a"<<suma; getch(); }

4. Calcula La Minima Unidad de Un numero. ej. 546=5+4+6=15=1+5=6.

Cdigo: #include<iostream.h> #include<conio.h> void main() { clrscr(); unsigned N,r; gotoxy(4,4); cout<<"Ingrese Numero:"; cin>>N; do { r=0; while(N>0) {r=r+N%10; N=N/10;} N=r; } while(r>9);

gotoxy(4,8); cout<<"Lo Min Es:"<<r; getch (); }

5. Calcula Los Numeros Comprendidos en una serie.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); double N,i; cout<<"Ingrese Cantidad de Terminos de la serie:"; cin>>N; for (i=1;i<=N;i++) cout<<" \a"<<endl<<(i*i+i+8)/2; getch(); }

6. Calcula la cantidad de nuemros pares y impares.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N; int P=0; int I=0; cout<<"Ingrese Numero:"; cin>>N; if(N%2==0) P=P+1; else

I=I+1; while (N>0) { cout<<"Ingrese Numero:"; cin>>N; if(N%2==0) P=P+1; else I=I+1; } cout<<"La Cantidad de Numeros Pares Es:\a"<<P<<endl; cout<<"La Cantidad de Numeros Impares Es:\a"<<I<<endl; getch(); }

7. Calcula la suma de los cuadrados de los numeros naturales.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N; int R; do {cout<<"Ingrese La Cantidad de Numeros:"; cin>>N; } while(N<0); R=N*(N+1)*(2*N+1)/6; cout<<"La Suma de los Cuadrados de los Numeros Es:\a"<<R<<endl; getch(); }

8. Calcula la suma comprendida de numeros en un determinado rango.

Cdigo:

#include<conio.h> #include<iostream.h> void main() { clrscr(); int vi,vf,i,pares; int suma=0; cout<<"Ingrese Numero Inicial:"; cin>>vi; cout<<"Ingrese Segundo Final:"; cin>>vf; i=vi+1; while ((i>vi) && (i<vf)) { if ((i%2)==0) { suma=suma+i; i++; } else i++; } cout<<"La suma de los Numeros Comprendidos en ese Rango es:"<<suma; getch(); }

9. Simula un reloj Digital.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); unsigned h,m,s; for(h=0;h<1;h++) for(m=0;m<60;m++) for(s=0;s<60;s++) cout<<h<<":"<<m<<":"<<s<<endl;

getch(); }

10. Mueve el Cursor por pantalla.

Cdigo: #include<iostream.h> #include<conio.h> void main() { clrscr(); char tecla; cout<<"Presione Tecla (s)ubir,(b)ajar,(d)erecha,(i)zquierda:"; gotoxy(20,4); cout<<"s"; gotoxy(18,6); cout<<"i";

gotoxy(22,6); cout<<"d";

gotoxy(20,8); cout<<"b"; gotoxy(20,12); cin>>tecla; switch (tecla) { case 's': gotoxy(20,11); break; case 'b': gotoxy(20,13); break; case 'd': gotoxy(21,12); break; case 'i': gotoxy(19,12);

break; case 't': cout<<"Fin - Presione enter para Terminar"; break; default: cout<<"---Presiona Tecla Correcta Please---"; } getch (); }

11. Calcula el factorial de un numero.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N,i; int f=1; do { cout<<"Ingrese Un Numero:"; cin>>N; } while(N<=0);

for (i=1;i<=N;i++) f=f*i; cout<<"El Factorial del Numero Es:"<<f; getch(); }

12. Calcula si un numero es primo o compuesto

Cdigo: #include<conio.h> #include<iostream.h> void main()

{ clrscr(); int N; int i=2; int C=0; do { cout<<"Ingrese Un Numero:"; cin>>N;} while(N<=0); for (i=1;i<=N;i++) { if (N%i==0) C++; } if (C==1) cout<<"El Numero es Primo"; else cout<<"El Numero es Compuesto"; getch(); }

13. Calcula la Potencia de un numero.

Cdigo: #include<conio.h> #include<iostream.h> void main () { clrscr(); int b; int exp; int i=1; double resultado=1; cout<<"Ingrese Base:"; cin>>b; cout<<"Ingrese Exponente:"; cin>>exp; while (i<=exp) {

resultado=resultado*b; i++; } cout<<"El Resultado Es:"<<resultado; getch(); }

14. Calcula los divisores comunes de dos numeros.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N1,N2,menor; int i=2; int divisor=1; do {cout<<"Ingrese Primer Numero:"; cin>>N1; cout<<"Ingrese Segundo Numero:"; cin>>N2;} while (N1<=1||N2<=1); cout<<"Los Divisores son:"; if (N1>0 && N2>0) { if (N1>N2) menor=N2; else menor=N1; while (i<=menor) { if (N1%i==0 && N2%i==0) { divisor=i; cout<<endl<<divisor; i++; } else i=i+1; }

} else cout<<"No Hay Divisores Porque son Negativos"; getch(); }

15. Calcula el inverso de un numero. ej. 541 su inverso es 145.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); unsigned N,inv=0; do { cout<<"Ingrese Numero:"; cin>>N; } while(N<=0); while(N>0) { inv=inv*10+N%10; N=N/10; } cout<<"El Inverso Del nUMERO"<<inv; getch(); }

16. Calcula si un ao es bisiesto.

Cdigo: #include<iostream.h> #include<iostream.h> #include<conio.h> void main() { clrscr();

int N; cout<<"Ingrese Ao:"; cin>>N; if ((N%4==0) && (N%100!=0) || (N%400==0)) cout<<"Es Bisiesto"; else cout<<"No Es Bisiesto"; getch(); }

17. Calcula el Minimo Comun Multiplo.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N1,N2,menor,mayor,r; cout<<"Ingrese Primer Numero:"; cin>>N1; cout<<"Ingrese Segundo Numero:"; cin>>N2; if(N1>N2) {mayor=N1; menor=N2;} else {mayor=N2; menor=N1;} while (menor>0) { r=mayor%menor; mayor=menor; menor=r; } cout<<"El MCM es:"<<N1*N2/mayor; getch(); }

18. Calcula el MCD.

Cdigo: #include<conio.h> #include<iostream.h> void main() { clrscr(); int N1,N2,menor,mayor,r; cout<<"Ingrese Primer Numero:"; cin>>N1; cout<<"Ingrese Segundo Numero:";

Qu es un Ciclo Do-While?
Los ciclos do-while son una estructura de control cclica, los cuales nos permiten ejecutar una o varias lneas de cdigo de forma repetitiva sin necesidad de tener un valor inicial e incluso a veces sin siquiera conocer cuando se va a dar el valor final, hasta aqu son similares a los ciclos while, sin embargo el ciclo do-while nos permite aadir cierta ventaja adicional y esta consiste que nos da la posibilidad de ejecutar primero el bloque de instrucciones antes de evaluar la condicin necesaria, de este modo los ciclos do-while, son ms efectivos para algunas situaciones especificas. En resumen un ciclo do-while, es una estructura de control cclica que permite ejecutar de manera repetitiva un bloque de instrucciones sin evaluar de forma inmediata una condicin especifica, sino evalundola justo despus de ejecutar por primera vez el bloque de instrucciones

Cmo funciona un Ciclo Do-While?


Para comprender mejor el funcionamiento del ciclo while, usemos de nuevo el ejemplo de la seccin anterior sobre el ciclo while. Imaginemos entonces que por algn motivo, queremos pedirle a un usuario una serie de nmeros cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un nmero mayor a 100. Como vimos anteriormente, esto se puede hacer por medio de un ciclo while, pero vamos ahora a ver como lo podemos hacer usando un ciclo do-while mejorando as un poco nuestro algoritmo, evitando ciertos comandos, tal como se dijo con el ciclo while, en efecto aqu estamos en la situacin de no tener ni idea de cundo al usuario se le va a ocurrir ingresar un nmero mayor que 100, pues es algo indeterminado para nosotros, sin embargo el ciclo while y en efecto el do-while nos permite ejecutar cierta accin de forma infinita hasta que se cumpla alguna condicin especifica, en nuestro caso sera que el numero ingresado sea mayor a 100. De modo que si el usuario nos ingresa de manera sucesiva los siguientes numero 1,50,99, 49, 21, 30, 100 ..., nuestro programa no finalizara, pues ninguno de estos nmeros es mayor que 100, sin embargo si nos ingresara el numero 300, el programa finalizara inmediatamente. Vamos a ver ahora como es la sintaxis de un ciclo do-while en C++, as estaremos listos para usarlos en nuestros programas de ahora en adelante cada vez que lo necesitemos

Sintaxis del Ciclo Do-While en C++:


La sintaxis de un ciclo do-while es un tanto ms larga que la del ciclo while en C++, sin embargo no se hace ms complicado, de hecho con tan solo tener bien clara una condicin de finalizacin para el ciclo tendremos prcticamente todo terminado.

? 1 2 3 4 5 6 7 8 9
} while(condicin de finalizacin); //por ejemplo numero != 23 do { .... .... Bloque de Instrucciones.... .... ....

Vamos entonces a ver lnea por lnea el anterior cdigo para comprender todo y quedar claros. Posteriormente veremos el ejemplo planteado anteriormente y su solucin. Lnea 1: Esta lnea es por decirlo as, la parte novedosa del ciclo do-while, esta expresin no evala ninguna condicin ni nada, simplemente da paso directo al bloque de instruccin y luego permite la evaluacin de la condicin. Lnea 2: En la lnea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que all comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se ejecutar dentro de nuestro ciclo la primera lnea inmediatamente posterior a la instruccin do, de modo que si deseamos que se ejecuten varias lneas dentro de nuestro ciclo, debemos usar las llaves. En lo personal, es preferible poner siempre las llaves sin importar cuantas lneas se vayan a ejecutar, es una buena prctica de programacin y te puede evitar dolores de cabeza Lnea 3 a 7: En estas lneas es donde estarn todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecucin del ciclo, este bloque podr tener la cantidad de lneas necesarias incluso, como veremos ms adelante dentro de estas podra haber uno o ms ciclos, as que podras tener todo un programa dentro de un ciclo. Lnea 8: En esta ltima lnea hacemos uso de la llave cerrando "}", una vez ms como seguramente ya debemos saber esta nos indica que all termina el

bloque de instrucciones que se ejecutarn de manera cclica y se dar por terminada la ejecucin de este para continuar ejecutando el resto del algoritmo. Lnea 9: La lnea 9 en el ciclo do-while, tiene la misma importancia y funcin que l alinea 1 en la seccin del ciclo while, cabe resaltar que simplemente evala la condicin y define si se cumple o no para seguir con la ejecucin del ciclo o con la del resto del algoritmo, de este modo podemos ver que el ciclo while y el do-while son muy similares, con la pequea diferencia en que en uno se evala la condicin desde el principio y en la otra al final de cada ciclo. No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un par de ejemplos que veremos a continuacin, te va a quedar todo claro

Ejemplos de Ciclo Do-While en C++


A continuacin vamos a ver unos cuantos ejemplos para comprender de manera adecuada el uso de los ciclos while en c++, recuerda que si no comprendes alguno de estos ejemplos o tienes alguna pregunta o sugerencia sobre estos o cualquier contenido de la seccin, puedes dejarlas en la seccin
de comentarios

Ejemplo 1: Pedir nmeros por pantalla hasta que alguno sea mayor a 100 Vamos a retomar el ejemplo anterior, donde queremos hacer que nuestro programa le pida a un usuario una serie de nmeros cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un nmero mayor a 100, una vez mas es un ejemplo sencillo con el que nos aseguraremos de haber comprendido bien todos los conceptos anteriores, vamos a ver cmo hacer lo mismo con dos tipos de ciclos diferentes (el while y el do-while), sin embargo vamos a ver como con uno es ms eficiente que con el otro: Solucin Ejemplo 1: Para solucionar esto, debemos tener clara cul va a ser la condicin que se debe cumplir para que el ciclo este pidiendo el numero contantemente, el ciclo se va a detener solo cuando el numero ingresado sea mayor que 100, as que la condicin para que se siga ejecutando es que el numero sea menor a 100, Comprender la lgica?, es simple si para que se detenga el numero debe ser mayor a 100, entonces para seguirse ejecutando el numero debe ser menor o igual a 100, vemoslo entonces
?

1 2 3 4 5 6 7

int numero; do { cout << } while(numero <= 100); "Ingrese un numero "; cin >> numero;

El cdigo funcional completo y un tanto ms amigable para el usuario sera el siguiente:


? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
} } while(numero <= 100); system("PAUSE"); return 0; using namespace std; int main() { int numero; do { cout << "Ingrese un numero "; cin >> numero; #include "iostream"

Nota: Como podrs comprobar, ambos cdigos hacen lo mismo, haciendo uso del ciclo while o del ciclo do while, sin embargo con el ciclo do-while, hemos obtenido un beneficio interesante, primero que todo hemos podido evitar tener que inicializar la variable numero, segundo tambin pudimos eliminar las lneas repetidas donde se peda el numero por fuera del ciclo y luego al interior del ciclo, aqu lo hicimos solo al interior, pues la condicin se evaluaba mucho ms abajo. Nota 2: Si no comprendes alguna de las lneas de estos cdigos, te recomiendo visitar los contenidos anteriores (Entrada y Salida de Datos, Libreras Comentarios, Estructura de un Programa) o tambin puedes dejar un comentario al final de la seccin con tu pregunta.

En efecto los ciclos do-while, son bastante tiles, sin embargo como con cualquier ciclo desde el punto de vista de la eficiencia al igual que con los ciclos for, es recomendable evitarlos en la medida de lo posible, siempre que vayas a usar un ciclo do-while o cualquier tipo de ciclo en realidad, deberas preguntarte primero si es totalmente necesario o si existe una manera ms efectiva de hacerlo. Evidentemente habr situaciones en las que ser casi que imprescindible usar el ciclo, pues por algo existen, est entonces en nuestra habilidad determinar cundo usarlos y mejor aun como usarlos de manera efectiva. Muy bien de momento, es todo en esta seccin, podemos entonces continuar ahora con el siguiente contenido que son las estructuras de datos en C++, recuerda tambin dejar tus comentarios y/o preguntas en la seccin de
comentarios

Potrebbero piacerti anche