04 de Junio, 2016
□
LENGUAJE C |
Ejemplo de lenguaje C - Menú de opciones |
Si en lenguaje C se quiere escribir un programa que: 1º) Muestre un menú con 4 opciones: - 1. Calcular el doble de un número entero.
- 2. Calcular la mitad de un número entero.
- 3. Calcular el cuadrado de un número entero.
- 4. Salir.
2º) Pida por teclado la opción deseada (dato entero). 3º) Ejecute la opción del menú seleccionada. 4º) Repita los pasos 1º, 2º y 3º, mientras que, el usuario no seleccione la opción 4 (Salir) del menú. En pantalla se verá, por ejemplo:  Solución 1: anidando una instrucción switchen un bucle do...whilewhile/* Programa: Tabla de multiplicar de un número (Solución 1) */
#include <math.h>
#include <stdio.h>
int main()
{
int n, opcion;
do
{
printf( "
1. Calcular el doble de un n%cmero entero.", 163 );
printf( "
2. Calcular la mitad de un n%cmero entero.", 163 );
printf( "
3. Calcular el cuadrado de un n%cmero entero.", 163 );
printf( "
4. Salir." );
printf( "
Introduzca opci%cn (1-4): ", 162 );
scanf( "%d", &opcion );
/* Inicio del anidamiento */
switch ( opcion )
{
case 1: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El doble de %d es %d
", n, n * 2 );
break;
case 2: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
La mitad de %d es %f
", n, ( float ) n / 2 );
break;
case 3: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El cuadrado de %d es %d
", n, ( int ) pow( n, 2 ) );
}
/* Fin del anidamiento */
} while ( opcion != 4 );
return 0;
}
- Véase que, se han realizado dos castings, ( float ) y ( int ), para cambiar, respectivamente, los tipos de datos de los valores resultantes de las expresiones n / 2 y pow( n, 2 ).
- Por otra parte, fíjese que el bucle do...while iterará, mientras que, opción sea distinto del valor 4. Normalmente, en un menú, la opción de salir (opción 4 en este caso) no se debe contemplar en la alternativa múltiple, es decir, si el usuario introduce un 4, no se debe hacer nada. Pero, ¿qué ocurre si el usuario teclea un número mayor que 4 ó menor que 1? En pantalla se verá algo parecido a:
 - Al introducir un número menor que 1 ó mayor que 4, se muestra de nuevo el menú. Para evitar que ocurra esto, es conveniente utilizar un filtro al leer la opción que introduce el usuario.
Solución 2: filtrando la opción introducida por el usuario/* Programa: Menú de opciones (Solución 2) */
#include <math.h>
#include <stdio.h>
int main()
{
int n, opcion;
do
{
printf( "
1. Calcular el doble de un n%cmero entero.", 163 );
printf( "
2. Calcular la mitad de un n%cmero entero.", 163 );
printf( "
3. Calcular el cuadrado de un n%cmero entero.", 163 );
printf( "
4. Salir." );
/* Filtramos la opción elegida por el usuario */
do
{
printf( "
Introduzca opci%cn (1-4): ", 162 );
scanf( "%d", &opcion );
} while ( opcion < 1 || opcion > 4 );
/* La opción sólo puede ser 1, 2, 3 ó 4 */
switch ( opcion )
{
case 1: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El doble de %d es %d
", n, n * 2 );
break;
case 2: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
La mitad de %d es %f
", n, ( float ) n / 2 );
break;
case 3: printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El cuadrado de %d es %d
", n, ( int ) pow( n, 2 ) );
}
} while ( opcion != 4 );
return 0;
}
- La variable opción, también puede ser un dato de tipo carácter, en vez de tipo entero.
Solución 3: declarando la variable opcion de tipo carácter/* Programa: Menú de opciones (Solución 3) */
#include <math.h>
#include <stdio.h>
int main()
{
char opcion;
int n;
do
{
printf( "
1. Calcular el doble de un n%cmero entero.", 163 );
printf( "
2. Calcular la mitad de un n%cmero entero.", 163 );
printf( "
3. Calcular el cuadrado de un n%cmero entero.", 163 );
printf( "
4. Salir." );
do
{
printf( "
Introduzca opci%cn (1-4): ", 162 );
fflush( stdin );
scanf( "%c", &opcion );
} while ( opcion < '1' || opcion > '4' );
switch ( opcion )
{
case '1': printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El doble de %d es %d
", n, n * 2 );
break;
case '2': printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
La mitad de %d es %f
", n, ( float ) n / 2 );
break;
case '3': printf( "
Introduzca un n%cmero entero: ", 163 );
scanf( "%d", &n );
printf( "
El cuadrado de %d es %d
", n, ( int ) pow( n, 2 ) );
}
} while ( opcion != '4' );
return 0;
}
|
|
publicado por
mariof2005 a las 18:24 · Sin comentarios
· Recomendar |
|
|
◊ SOBRE MÍ |
Héctor Mario Freschinaldi
Mail DESDE SEGUNDO CUATRIMESTRE 2024: prof.asigampa@gmail.com En AS.: 2024JVG PROG1 LUNES TT (su nombre y apellido)
En un mundo donde los cambios se suceden vertiginosamente, incluso los tecnológicos, es menester asimilar las nuevas tecnologías para su aplicación inmediata y su proyección a futuro.
»
Ver perfil
|
|
|
◊ CALENDARIO |
 |
Abril 2025 |
 |
|
DO | LU | MA | MI | JU | VI | SA | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|
|
| |
◊ AL MARGEN |
¡Bienvenidos! |
Este será un canal de comunicación entre nosotros. Tendrá diferentes instancias dinamizadoras, y utilidades para trabajar los diferentes trabajos prácticos en diversas modalidades. |
| |
|