13.07.2015 Views

Boletín 2 - Estructuras de control selectivas

Boletín 2 - Estructuras de control selectivas

Boletín 2 - Estructuras de control selectivas

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Boletín 21. Escriba el siguiente código , compílelo y ejecútelo. ¿Obtiene el resultado esperado?Modifíquelo para que se comporte como <strong>de</strong>be:#inclu<strong>de</strong> int main (){int i, j;scanf("%d%d",&i,&j);if (i = j)printf("los números leídos son iguales\n");elseprintf("los números leídos son distintos\n");return 0;}2. Escriba el siguiente código, compílelo y ejecútelo. Modifíquelo para que funcionecorrectamente:#inclu<strong>de</strong> int main (){int i, j, k=5;}scanf("%d%d",&i,&j);if (i


}}case (-1):printf("i es igual a -1\n");case (0):printf("i es igual a cero\n");<strong>de</strong>fault:printf("i toma otro valor\n");4. El siguiente código <strong>de</strong>bería mantener el valor <strong>de</strong> a como 20, pero no lo hace. Expliqueel porqué, y modifique el código para que funcione correctamente:#inclu<strong>de</strong> int main (){int a = 20;if (a > 0)if (a < 15)a = a * 2;elsea = 0;}printf("a vale %d\n",a);5. Escriba un programa que lea un dato <strong>de</strong> la entrada estándar y calcule e imprima suinverso. Consi<strong>de</strong>re el caso especial <strong>de</strong>l valor 0, en cuyo caso el programa (¡no elsistema operativo!) <strong>de</strong>berá mostrar el mensaje “ERROR – división por cero”.6. Escriba un programa que lea un número entero <strong>de</strong>s<strong>de</strong> la entrada estándar ycompruebe si es correcto. En caso negativo, el programa imprimirá el mensaje “ERROR– número incorrecto”. Consi<strong>de</strong>re los siguientes casos para <strong>de</strong>cidir si un número es o nocorrecto:a) El número es correcto si se encuentra en el rango <strong>de</strong>finido por dos valoresconstantes MINIMO y MAXIMO.b) El número es correcto si es uno <strong>de</strong> los tres valores constantes VALOR1, VALOR2 oVALOR3.c) El número es correcto si se encuentra en el rango <strong>de</strong>finido por dos valoresconstantes MINIMO y MAXIMO, o bien es igual al valor constante VALOR1.d) El número es correcto si se encuentra en el rango <strong>de</strong>finido por dos valoresconstantes MINIMO1 y MAXIMO1, o bien en el <strong>de</strong>finido por los valores constantesMINIMO2 y MAXIMO2.7. Escriba un programa que lea un instante <strong>de</strong> tiempo expresado en horas y minutos yescriba como respuesta uno <strong>de</strong> los mensajes “Buenos días”, “Buenas tar<strong>de</strong>s” o“Buenas noches, <strong>de</strong> acuerdo con las siguientes reglas:a) Se consi<strong>de</strong>ra que es <strong>de</strong> día <strong>de</strong>s<strong>de</strong> las 7:30 horas hasta las 14:00 horas.b) Se consi<strong>de</strong>ra que es por la tar<strong>de</strong> <strong>de</strong>s<strong>de</strong> las 14:01 hasta las 20:30 horas.c) Se consi<strong>de</strong>ra que es <strong>de</strong> noche <strong>de</strong>s<strong>de</strong> las 20:31 horas hasta las 7:29 horas.


8. El siguiente programa incompleto indica si un número que se ha leído <strong>de</strong>s<strong>de</strong> la entradaestándar es par:#inclu<strong>de</strong> int main (){int numero;scanf("%d", &numero);if (?????)printf("Es un número par");elseprintf("Es un número impar");}Reemplace los interrogantes por la expresión lógica a<strong>de</strong>cuada para que el programacumpla su cometido.9. Modifique el programa anterior para que compruebe si el número es múltiplo <strong>de</strong> unnúmero variable n, que se habrá leído previamente <strong>de</strong> la entrada estándar.10. Escriba un programa que lea dos números <strong>de</strong> la entrada estándar y los escriba en lasalida estándar or<strong>de</strong>nados <strong>de</strong> mayor a menor.11. Escriba un programa que lea un carácter <strong>de</strong> la entrada estándar e indique su tipo, quepodrá ser uno <strong>de</strong> los siguientes: letra mayúscula (<strong>de</strong> la ‘A’ a la ‘Z’), letra minúscula (<strong>de</strong>la ‘a’ a la ‘z’), dígito (<strong>de</strong>l ‘0’ al ‘9’) u otro. Si se trata <strong>de</strong> una letra minúscula escribirá,a<strong>de</strong>más, la correspondiente letra mayúscula.12. Desarrolle un programa que lea <strong>de</strong> la entrada estándar las coor<strong>de</strong>nadas cartesianas(x, y) <strong>de</strong> un punto <strong>de</strong>l plano y calcule e imprima el cuadrante al cual pertenece elpunto. Hágalo <strong>de</strong> dos formas distintas:a. Utilizando 4 estructuras <strong>selectivas</strong> simples.b. Utilizando 2 estructuras dobles anidadas.13. Generalice el programa anterior al espacio tridimensional. Cada punto tiene ahora 3coor<strong>de</strong>nadas (x, y, z) y pue<strong>de</strong> estar situado en 8 cuadrantes diferentes. Finalmenteincluya la posible coinci<strong>de</strong>ncia con los ejes <strong>de</strong> coor<strong>de</strong>nadas y el origen (0, 0, 0).14. Escriba un programa que lea un número x <strong>de</strong> la entrada estándar y lleve a cabo lassiguientes operaciones:a. Si es positivo, calculará e imprimirá su raíz cuadrada (use la función sqrt).b. Si es distinto <strong>de</strong> cero, calculará e imprimirá su inverso (1/x).c. Si es par, calculará e imprimirá su cociente entre 2 (x/2).d. Si es positivo y menor que 10, imprimirá el mensaje “sólo tiene un dígito”.e. Si está comprendido entre 32 y 127 (ambos inclusive) imprimirá el caráctercuyo código ASCII representa.


15. Sea el siguiente programa incompleto:#inclu<strong>de</strong> int main (){int ca, ce, ci, co, cu;char caracter;scanf("%c", &caracter);...printf("%d%d%d%d%d\n", ca, ce, ci, co, cu);}Complete el programa para que imprima 10000 si el carácter leído es una ‘a’, 01000 sies una ‘e’, 00100 si es una ‘i’, 00010 si es una ‘o’, 00001 si es una ‘u’ y ‘00000’ encualquier otro caso. Hágalo en primer lugar con estructuras <strong>selectivas</strong> anidadas, yposteriormente con una estructura switch.16. Se <strong>de</strong>sea escribir un programa para el cálculo <strong>de</strong>l área <strong>de</strong> diversas superficies:cuadrado, rectángulo, círculo, triángulo y trapecio. El programa mostrará al inicio elsiguiente menú:============================================CÁLCULO DE SUPERFICIES (versión 1.0)============================================1. Cuadrado lado*lado2. Círculo pi*radio*radio3. Rectángulo base*altura4. Trapecio (base1+base2)*altura/25. Triángulo (base*altura)/2============================================Seguidamente leerá <strong>de</strong> la entrada estándar un valor que estará comprendido entre 1 y5, indicando el tipo <strong>de</strong> superficie cuya área se <strong>de</strong>sea calcular. El programa leeráentonces los datos que necesite para calcular el área en cuestión. El resultado semostrará en la salida estándar, tras lo cual el programa terminará.17. El siguiente programa lee dos números enteros <strong>de</strong> la entrada estándar y calcula eimprime el mayor <strong>de</strong> ellos. Complételo utilizando una estructura selectiva doble.#inclu<strong>de</strong> int main (){int a, b, maximo;scanf("%d%d", &a, &b);?????printf("\nEl máximo <strong>de</strong> %d y %d es %d", a, b, maximo);}


18. Modifique el programa anterior para que, en caso <strong>de</strong> igualdad <strong>de</strong> los dos númerosleídos, escriba el mensaje “ambos números son iguales”.19. Escriba un programa que lea tres números a, b, c <strong>de</strong> la entrada estándar y los escribaen la salida estándar or<strong>de</strong>nados <strong>de</strong> mayor a menor. Utilice el siguiente esquema comoayuda:{{{{{Consi<strong>de</strong>re ahora 4 números en lugar <strong>de</strong> 3. Construya un esquema similar al anteriorpara ayudarse.20. Escriba un programa que convierta <strong>de</strong> grados Fahrenheit a Celsius y viceversa. Elprograma <strong>de</strong>berá leer en primer lugar un número entero que indicará si se va aconvertir <strong>de</strong> grados Fahrenheit a Celsius (1) o <strong>de</strong> grados Celsius a Fahrenheit (2).Seguidamente leerá el valor <strong>de</strong> la temperatura, realizará la conversión aplicando lafórmula a<strong>de</strong>cuada y mostrará el resultado en la salida estándar.21. Escriba un programa que lea dos fechas dadas por un día, mes y año e indique cuál <strong>de</strong>ellas es anterior en el tiempo a la otra.22. Escriba un programa que lea dos fechas <strong>de</strong> un mismo año dadas por un día y un mes ycalcule el número <strong>de</strong> días transcurridos entre ambas. Tenga en cuenta que el añopue<strong>de</strong> ser bisiesto.23. Escriba un programa que lea dos instantes <strong>de</strong> tiempo expresados en horas, minutos ysegundos e indique cuál <strong>de</strong> ellos es anterior al otro. Hágalo <strong>de</strong> dos formas:a. Calcule los segundos transcurridos <strong>de</strong>s<strong>de</strong> las 00:00 horas hasta cada uno <strong>de</strong>ellos y compárelos.b. Compare directamente las horas, los minutos y los segundos <strong>de</strong> ambosinstantes <strong>de</strong> tiempo.24. Escriba <strong>de</strong> la entrada estándar tres números enteros que representan las longitu<strong>de</strong>s <strong>de</strong>tres segmentos rectilíneos, e indique si dichos segmentos pue<strong>de</strong>n formar o no untriángulo (la condición necesaria pero no suficiente es que ninguno <strong>de</strong> los segmentostenga una longitud superior a la suma <strong>de</strong> los otros dos).


25. El siguiente programa en pseudocódigo obtiene las soluciones <strong>de</strong> una ecuación <strong>de</strong>segundo grado (sin consi<strong>de</strong>rar las soluciones imaginarias). La ecuación es:Y las soluciones vienen dadas por√Leer a, b, cd b 2 – 4acsid = 0:x -b / (2.0a)| d > 0:x1 (-b+raiz2(d))/(2.0a)x2 (-b+raiz2(d))/(2.0a)escribir x1, x2| d < 0:nulafsiEscriba el programa correspondiente en lenguaje C.26. Modifique el programa anterior para que consi<strong>de</strong>re las soluciones imaginarias. Paraello, consi<strong>de</strong>re el siguiente fragmento <strong>de</strong> código:......int signo = 0;...d = b*b - 4*a*c;if (d > 0)signo = 1;else if (d < 0)signo = -1;Utilice la variable signo calculada <strong>de</strong> esta forma como la expresión <strong>de</strong> una estructuraswitch (Pista: compare los tres posibles valores <strong>de</strong> signo con los tres casos a consi<strong>de</strong>raren el problema).27. Escriba una sentencia switch que a partir <strong>de</strong> una nota expresada en forma numéricaimprima su correspondiente literal, según la siguiente correspon<strong>de</strong>ncia: 0 a 4SUSPENSO, 5 y 6 APROBADO, 7 y 8 NOTABLE, 9 y 10 SOBRESALIENTE. Para cualquierotro valor <strong>de</strong> la nota numérica se imprimirá el mensaje VALOR INCORRECTO.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!