Capítulo 5 ESTRUCTURAS DE SELECCIÓN: SENTENCIAS IF Y SWITCH

Anuncio
Capítulo 5
ESTRUCTURAS DE SELECCIÓN: SENTENCIAS IF Y SWITCH
EJEMPLO 5.1..
int main()
{
int n, d;
printf( "Introduzca dos enteros: ");
scanf("&d &d",&n,&d);
if (n%d == 0) printf(" %d es divisible por %d\n",n,d);
return 0;
}
Ejecución
Introduzca dos enteros: 24 4
24 es divisible por 4
EJEMPLO 5.2..
#include <stdio.h>
int main()
{
int x, y;
printf( "Introduzca dos enteros: ");
scanf("%d %d",&x,&y);
if ( x > y)
printf("%6d\n", x);
else
printf("%6d\n", y);
return 0;
}
Ejecución
Introduzca dos enteros: 17 54
54
EJEMPLO 5.3
x == y ? f1(x) : f(x,y);
es equivalente a la siguiente sentencia:
if ( x == y )
1
f1( x );
else
f2( x , y);
PROBLEMAS RESUELTOS
5.1.
La expresión correcta debe ser la siguiente:
if (x > 25.0 )
y = x;
else
y = z;
Por tanto le falta los paréntesis en la expresión lógica y un punto y coma después de la sentencia
de asignación y = x
5.2 .
Si velocidad toma el valor de 120 entonces necesariamente consumo debe tomar el valor de 12.00
5.3.
El error que presente la sentencia es que x < y < z no es una expresión lógica. Debería haberse
puesto (x < y) && (y < z).
5.4.
Para el primer caso aparece escrito Chuleta lechal
Para el segundo caso aparece escrito Chuletón y en la siguiente línea Postre de pastel, ya que
case 3: no lleva la orden break.
5.5.
#include <stdio.h>
int main()
{
int nota;
printf(" dame nota: ");
scanf("%d", &nota);
if (nota < 100)
printf(" Baja ");
else if (x >100)
printf("Alta");
return 0;
}
5.6.
2
#include <stdio.h>
int main()
{
int n1,n2,n3, mayor;
puts(" introduzca tres nuumeros ");
scanf(" %d %d %d", &n1, &n2,&n3);
mayor = n1;
if(mayor < n2)
mayor = n2;
if(mayor < n3)
mayor = n3;
printf(" el mayor es %d\n", mayor);
return 0;
}
5.7:
#include <stdio.h>
int main()
{
int x = 10;
if (x < 0)
printf("%d es negativo\n",x);
else if (x <= 100)
printf("0 <= x = %d <= 100\n", x);
else
printf("x = %d > 100\n", x);
return 0;
}
5.8.
#include <stdio.h>
// función primo
int primo( int x)
{
int d = 2;
// los únicos primos son los que son divisibles
// por si mismos y por la unidad.
while ( x %d != 0)
d++;
return (d == x);
}
// función potencia de dos
int p2( int x)
{
int d = 2;
while ( x %d == 0)
x = x / 2;
return (x == 1);
}
// programa principal
int main()
3
{
int x;
puts(" introduzca numero entero \n");
scanf(" %d ", &x);
if (x < 0)
printf("%d es negativo\n", x);
else if (x > 30)
printf(" x = %d > 30\n",x);
elseif (primo(x))
{
if (x == 2)
printf("x= %d es primo y potencia de dos\n",x);
else
printf("x = %d es primo y no potencia de dos \n", x);
}
else if (p2( x ))
printf("x = %d es compuesto y potencia de dos\n", x);
else
printf("x = %d es compuesto y no potencia de dos\n",x);
return 0;
}
5.9.
#include <stdio.h>
int bisiesto( int x);
int main()
{
int x;
puts(" introduzca año entero \n");
scanf(" %d", &x);
if (bisiesto(x))
printf("%d es bisiesto\n", x);
else
printf (" %d no es un año bisiesto \n", x);
return 0;
}
int bisiesto( int x)
{
if (x % 400 ==0)
return 1;
else if (x % 100 == 0)
return 0;
else
return (x % 4 == 0);
}
5.10.
#include <stdio.h>
int bisiesto( int a);
int ndd( int m, int a)
4
{
switch (m)
{
case 1,3,5,7,8,10,12:
return (31);
case 2:
if (bisiesto(a))
return (29);
else
return (28);
default: return (30);
}
}
int main()
{
int m, a;
do
{
puts(" introduzca año entero \n");
scanf(" %d", &a);
} while (a < 0);
do
{
puts(" introduzca mes entero \n");
scanf(" %d", &m);
} while (( m < 1) || (m > 12));
puts( "el numero de días");
printf(" del mes %d del año %d es:\n", m, a);
printf (" %d ", ndd(m,a));
return 0;
}
5.11.
#include <stdio.h>
int bisiesto( int x) ;
int main()
{
int mes, ano;
puts(" introduzca mes entre 1 y 12 \n");
scanf(" %d", &mes);
puts(" introduzca año \n");
scanf(" %d", &ano);
if (mes == 2)
if(bisiesto(ano))
printf(" tiene 29 dias\n");
else
printf(" tiene 28 dias\n");
else
if((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11))
printf(" tiene 30 dias \n");
else printf(" tiene 31 dias \n");
return 0;
}
5
5.12 .
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, d, x1,x2;
puts(" introduzca los tres coeficientes\n");
scanf("%f %f %f", &a, &b, &c);
if (a != 0)
{
d = b * b – 4 * a * c;
if (d > 0)
{
printf( " dos soluciones reales y distintas\n");
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);
printf(" x1= %6.2f x2= %6.2f\n", x1, x2);
}
else if(d == 0)
{
printf( " dos soluciones reales e iguales\n");
x1 = (-b) / (2 * a);
printf( " x= %6.2f\n", x1);
}
else
{
printf(" no tiene solucion real\n");
printf( " tiene dos soluciones complejas \n");
x1 = -b / (2 * a);
x2 = sqrt(-d) / (2 * a);
printf(" primera solucion\n");
printf(" parte real %6.2f\n", x1);
printf(" parte imaginaria %6.2f\n",x2);
printf(" segunda solucion\n");
printf(" parte real %6.2f\n", x1);
printf(" parte imaginaria %6.2f \n",-x2);
}
}
else if (b != 0)
printf (" una solucion simple= %6.2f \n", -c / b);
else if (c == 0)
printf( " se introdujo la identidad 0 = 0\n");
else
printf(" sin solucion\n");
return 0;
}
5.13.
#include <stdio.h>
void main()
{
float x;
printf(" dame dato\n");
scanf("%f", &x);
6
if( x < 0 )
printf(" menor que cero ");
if ( x > 0 )
printf("mayor que cero");
}
5.14 .
#include <stdio.h>
void main()
{
float x, y, z;
printf(" dame tres datos\n");
scanf("%f %f %f", &x,&y,&z);
if( ( x <= y) && ( y <= z) )
printf(" ordenados ");
else
printf("no ordenados");
}
5.15
#include <stdio.h>
void main()
{
float nota;
printf(" dame nota\n");
scanf("%f", &nota);
if(( nota < 0.0 ) || ( nota > 10 ))
printf(" error en nota ");
else if ( nota < 5.0 )
printf("Suspenso");
else if( nota < 6.5 )
printf("Aprobado");
else if ( nota < 8.5)
printf("Notable");
else if ( nota < 10)
printf("Sobresaliente");
else
printf("Matricula de Honor");
}
5.16 .
#include <stdio.h>
void main()
{
float x, Mayor;
int i;
printf(" dame numero\n");
scanf("%f" , &Mayor);
for(i = 2; i <= 5; i++)
{
printf(" dame numero\n");
scanf("%f" , &x);
if( Mayor < x)
7
Mayor = x;
}
printf(" el mayor es %f\n", Mayor);
}
5.17:
#include <stdio.h>
void main()
{
float Horas, Extras, Tasa, SalarioBruto, SalarioNeto;
printf(" dame Horas\n");
scanf("%f" , &Horas);
if ( Horas <= 38 )
Extras = 0;
else
{
Horas = 38;
Extras = Horas - 38;
}
printf("introduzca Tasa\n");
scanf("%f",&Tasa);
SalarioBruto = Horas * Tasa + Extras * Tasa * 1.5;
if (SalarioBruto < 50000.0)
SalarioNeto = SalarioBruto;
else
SalarioNeto = SalarioBruto * 0,9;
printf(" Salario bruto %f \n", SalarioBruto);
printf(" Salario neto %f \n", SalarioNeto) ;
}
5.18 .
Arranque
Hola desde el segundo if
Fin
Arranque de nuevo
De nuevo fin
5.19 .
El error está determinado porque el else no está bien enlazado con el if. O bien se elimina una
de las dos sentencias o bien se pone llaves, como se indica a continuación.
#include <stdio.h>
void main()
{
int n;
printf("Introduzca n:");
scanf("%d", &n);
if ( n < 0 )
{
puts("Este número es negativo. Pruebe de nuevo .");
scanf("%d", &n);
}
8
else
printf("conforme. n= %d\n", n);
}
5.20 .
La sentencia anterior tiene de incorrecta que x = 0 es una sentencia de asignación y no es una
expresión lógica. Lo que el programador es probable que haya querido poner es:
if (x == 0)
printf("%d = 0\n", x);
else
printf("%d = 0\n", x);
5.21
#include <stdio.h>
void main()
{
int nota1,nota2,nota3,nota4;
float media;
printf("Dame nota 1 ");
scanf("&d", &nota1);
printf("Dame nota 2 ");
scanf("&d", &nota2);
printf("Dame nota 3 ");
scanf("&d", &nota3);
printf("Dame nota 4 ");
scanf("&d", &nota4);
media = (float)(nota1 + nota2 + nota3 + nota4) / (float)4;
if(( media < 0) || ( media > 100 ))
printf("fuera de rango ");
else if( media >= 90)
printf(" media = %f A", media);
else if(media >= 80)
printf(" media = %f B", media);
else if(media >= 70)
printf(" media = %f C", media);
else if(media >= 60)
printf(" media = %f D", media);
else
printf(" media = %f E", media);
}
9
Descargar