Download Práctica 3

Document related concepts
no text concepts found
Transcript
INGENIERÍA INFORMÁTICA
Lenguajes de Programación
E.P.S
PRÁCTICAS de Lenguaje C
Curso 02-03
Tema: Estructuras de Control I
Lenguajes de Programación
Estructuras de Control I
ESTRUCTURAS DE CONTROL I
1 Preparación previa y objetivos
1.1 Preparación Previa

Editar + Compilar + Depurar errores Sintácticos y Semánticos

Declarar variables con tipos simples y usarlas en expresiones simples

Entrada/Salida reducida con printf y scanf

Iniciación y motivación a la programación estructurada
1.2 Objetivos de la Sesión
Principales

Aprender el uso de las variables lógicas y los operadores de relación.

Aprender la sintaxis y semántica de las estructuras de control condicionales (if / else;
switch / case).
Secundarios

Aprender a analizar el código desarrollado por otras personas

Aprender a modificar el código desarrollado por otras personas
Prácticas
Pág. 2
Lenguajes de Programación
Estructuras de Control I
2 Operadores relacionales y variables/ sentencias lógicas
Los operadores de relación (>, >=, <, <=, = =, != ) devuelven un “valor  0” (1 generalmente)
para una condición VERDADERA y un CERO para una condición de FALSA. Mediante los
operadores lógicos ‘AND ‘ (&&) y ‘OR’ (| |) podemos combinar variables lógicas para obtener
expresiones lógicas más elaboradas. Veamos dos ejemplos:
Ejemplo 1:
Predecid el resultado de los programas sin ejecutarlos. A continuación, compilarlos y
ejecutarlos para comprobar la predicción.
#include <stdio.h>
/* Resultado de una expresión lógica. Funcion AND*/
void main()
{
float resultado;
resultado = 0 &&
printf("0 && 0 =
resultado = 0 &&
printf("0 && 1 =
resultado = 1 &&
printf("1 && 0 =
resultado = 1 &&
printf("1 && 1 =
}
0;
%f\n",resultado);
1;
%f\n",resultado);
0;
%f\n",resultado);
1;
%f\n",resultado);
¿Cuándo una sentencia con “&&” es verdadera? ¿Cuándo es falsa?
#include <stdio.h>
/* Resultado de una expresión lógica. Funcion OR*/
void main()
{
float resultado;
resultado = 0 ||
printf("0 || 0 =
resultado = 0 ||
printf("0 || 1 =
resultado = 1 ||
printf("1 || 0 =
resultado = 1 ||
printf("1 || 1 =
}
0;
%f\n",resultado);
1;
%f\n",resultado);
0;
%f\n",resultado);
1;
%f\n",resultado);
¿Cuándo una sentencia con “||” es verdadera? ¿Cuándo es falsa?
Prácticas
Pág. 3
Lenguajes de Programación
Estructuras de Control I
Para averiguar el resultado de una expresión lógica basta sustituir los operadores relacionales
por su valor (0 o 1) y aplicar los criterios sobre el AND y el OR.
Ejemplo 2:
Editad el programa, analizadlo y predecid su resultado sin ejecutarlo. A continuación,
compiladlo y ejecutadlo para comprobar la predicción.
#include <stdio.h>
void main()
{
int variable_logica;
variable_logica = (5 < 7) && ((8 > 5) || (7 > 3));
printf("Que es esto => %d",variable_logica);
}
Ejercicio 1: Substituid en el programa anterior los valores 7 y 5 por dos variables enteras, n1
y n2, asignadas por el usuario por medio de instrucciones de entrada/salida. Probad los
siguientes valores: n1=5, n2=7; n1=9, n2=8; n1=1, n2=9. Intentad predecir el valor de la
variable lógica antes de ejecutar. (No olvideis de adjuntar todos los programas que hayais
escrito o modificado en vuestra practica)
Ejercicio 2: Dada la sentencia lógica:
((numero>=1.0) && (numero <=10.0))||((numero>=90.0) && (numero<=100.0))
Qué resultado obtendremos para: numero=11, numero=5, numero=105, numero=-1?
Qué rango de valores podemos darle a la variable numero para que el resultado de la
expresión sea: 1 | | 0, 1 | | 1?
3 Sentencias condicionales
3.1 La sentencia if / else
Las sentencias lógicas son utilizadas por las sentencias condicionales if / else para controlar
nuestro programa. Veamos un primer ejemplo:
Ejemplo 3:
#include <stdio.h>
void main()
{
float numero;
/* Valor proporcionado por el usuario. */
printf("Deme un numero del 1 al 10 => ");
scanf("%f",&numero);
if (numero > 5)
printf("El numero es mayor que 5.\n");
printf("El numero leido fue %f.",numero);
Prácticas
Pág. 4
Lenguajes de Programación
Estructuras de Control I
}
Editad el programa y analizadlo. Predecid el resultado del programa sin ejecutarlo, suponiendo
que se introduzca como entrada el valor 6. A continuación compilad el programa y ejecutadlo
para comprobar la predicción. Repetid la ejecución con los valores de entrada 5 y 4. Si tenéis
problemas para entender el funcionamiento de la nueva estructura de control, utilizad la ayuda
para obtener información sobre la palabra reservada (“keyword”) if, y/o preguntad al profesor
de prácticas.
Ejercicio 3: Añadid una condicional al programa anterior para controlar que el número
introducido está entre 1 y 10. Sólo imprimiremos por pantalla en este caso.
Ejercicio 4: Modificad el programa propuesto en el Ejercicio 8 de la práctica anterior para
evitar la división por cero.
Podemos dotar a nuestros programas de una estructura más rica mediante el uso de la sentencia
else:
Ejemplo 4.A:
#include <stdio.h>
void main()
{
float numero;
/* Valor proporcionado por el usuario. */
printf("Deme un numero del 1 al 10 => ");
scanf("%f",&numero);
if (numero > 5)
printf("El numero es mayor que 5.\n");
else
printf("El numero es menor que 5.\n");}
Ejemplo 4.B: Predecid el resultado del siguiente programa sin ejecutarlo, suponiendo que se
introduzca como entrada el valor 11. A continuación compilad el programa y ejecutadlo para
comprobar la predicción. Si es necesario ejecutadlo paso a paso para comprender su
funcionamiento. Repetid la ejecución con los valores de entrada 5 y 93.
#include <stdio.h>
void main()
{
float numero;
/* Valor proporcionado por el usuario. */
printf("\n\nDeme un numero del 1 al 100 => ");
scanf("%f",&numero);
if ((numero >= 1.0) && (numero <= 10.0))
printf("El numero es inferior a 10.");
else if ((numero >= 90.0) && (numero <= 100.0))
printf("El numero es superior a 90.");
else printf("El numero está entre 10 y 100.");
}
Prácticas
Pág. 5
Lenguajes de Programación
Estructuras de Control I
Ejercicio 5: Modificad el programa del Ejercicio 4 de manera que de producirse una
división por cero el programa de un mensaje de error y efectúe la operación en caso
contrario.
3.2 La sentencia switch / case
Mediante el uso de varias sentencias if / else, podemos implementar una selección entre varias
alternativas:
Ejemplo 5:
Editad el programa y analizadlo. Predecid el resultado del programa sin ejecutarlo, suponiendo
que se introduzca como entrada el valor ‘A’. A continuación compilad el programa y ejecutadlo
para comprobar la predicción. Si es necesario ejecutadlo paso a paso para comprender su
funcionamiento.
#include <stdio.h>
void main()
{
char eleccion;
/* Elección del usuario. */
printf("\n\nElija la forma de la ley de Ohm que corresponda:\n");
printf("A] Voltaje B] Intensidad C] Resistencia\n");
printf("Su eleccion (A, B, o C) => ");
eleccion = getche();
if (eleccion == 'A')
printf("V = I * R");
else
if (eleccion == 'B')
printf("I = V / R");
else
if (eleccion == 'C')
printf("R = V / I");
else
printf("Eleccion incorrecta.\n");
}
Sin embargo, el lenguaje C dispone de una instrucción que permite codificar varias sentencias
if / else:
Ejercicio 6: Añadid un switch / case al programa del Ejercicio 5 que permita al usuario
escoger la operación a realizar.
El Ejercicio 7 os ayudará a preparar la prueba de la siguiente práctica. Los Ejercicios 8 y 9 son
opcionales.
Ejercicio 7: Programad el juego de adivinar un número. Utilizad las funciones random y
randomize para generar un número aleatorio entre 1 y 20. Si el usuario lo acierta felicitadle,
sino decidle que número había generado el ordenador. (La ayuda del compilador debe
proporcionaros toda la información necesaria sobre random y randomize).
Prácticas
Pág. 6
Lenguajes de Programación
Estructuras de Control I
Ejercicio 8: Acceso aleatorio a un vector. Definid el vector de caracteres
char premios[ ]={‘c’,’m’, ‘a’,’v’, ‘d’,’n’};
Debemos interpretarlos como sigue:
‘c’= coche, ‘m’= moto, ‘a’= apartamento, ‘v’= viaje, ‘d’= dinero, ‘n’= nada.
Usad la generación de números aleatorios para simular una Lotería. Generad un número
del 0 al 5 e imprimid el número y el premio correspondiente (usad un switch/case para
seleccionar el premio a partir del caracter). Si no ha tocado nada, dadle el pésame. Si el
premio es “dinero”, decid al jugador que pulse una tecla para saber la cantidad que le ha
tocado y generad un número entre 0 y el premio máximo (en euros) que queráis otorgar.
Ejercicio 9: Usad las funciones standard ceil( ), floor( ) para hacer un programa que dado
un número real positivo (introducido por el usuario) devuelva (por pantalla) el entero más
cercano (esto es, Implementad una función round( )). (La ayuda del compilador debe
proporcionaros toda la informaci’on necesaria sobre random y randomize)..
Prácticas
Pág. 7
Lenguajes de Programación
Estructuras de Control I
Agradecimientos: Esta práctica está basada en las prácticas de Ingeniería informática realizadas por el
Dept. Informàtica, Escola Tècnica Superior d'Enginyeria, Universitat Autònoma de Barcelona
Prácticas
Pág. 8
Related documents