Hola, aquí dejo una posible solución a este ejercicio CU00546F del curso de programador en Lenguaje C.
EJERCICIO Nº1
Estudia el siguiente código y responde a las preguntas:
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/* C program to demonstrate the working of goto statement. */
int main(){
float num,average,sum;
int i,n;
printf("Maximum no. of inputs: ");
scanf("%d",&n);
for(i=1;i<=n;++i){
printf("Enter n%d: ",i);
scanf("%f",&num);
if(num<0.0)
goto jump; /* control of the program with goto */
sum=sum+num;
}
jump:
average=sum/(i-1);
printf("Average: %.2f",average);
return 0;
}
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?
Programa que calcula la media de n números enteros. Sumará esos tres números y el resultado lo dividirá entre 3, para mostrar por pantalla la media de esos tres números. Que calculará la media de solo un número, en este caso el 10, y dará como resultado 10, porque el goto hace que el programa salga del for, sin que se pueda seguir introduciendo datos después de introducir un número negativo.
b) Ejecutando el código ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?
Que "average = 5.67", por lo explicado en el apartado anterior. Que average vale 10, por lo explicado en la pregunta anterior.
c) ¿Qué signficado tiene ++i en el contexto de este programa?
El mismo que si usamos i++, es decir, sumamos 1 a i.
d) ¿Es equivalente escribir if( num<0.0) goto jump; y if( num < 0.0) { goto jump; } ?
Si.
e) Haz que el código ofrezca los mismos resultados evitando el uso de goto.
int main(){
float num,average,sum;
int i,n;
printf("Maximum no. of inputs: ");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("Enter n%d: ",i);
scanf("%f",&num);
if(num==0 || num>0){sum=sum+num;}
}
average=sum/(i-1);
printf("Average: %.2f",average);
return 0;
}
EJERCICIO Nº2
Estudia el siguiente código y responde a las preguntas:
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/* C program to demonstrate the working of goto statement. */
int main() {
int age;
Vote:
printf("you are eligible for voting");
NoVote:
printf("you are not eligible to vote");
printf("Enter you age:");
scanf("%d", &age);
if(age>=18)
goto Vote;
else
goto NoVote;
return 0;
}
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos el número 22?
Para comprobar si se tiene mayoría de edad para poder votar.
Que se imprimirá por pantalla los tres printf que hay, y nos vuelve a preguntar otra vez lo mismo, y dependiendo de si la edad es menor o mayo que 18, el programa se ejecutará sobre el primer printf o el segundo, generando una especie de recursión de la cual el programa no saldrá nunca, según está diseñado.
b) Crea otro programa equivalente (que produzca los mismos resultados) sin hacer uso de la sentencia goto.
int main() {
int age;
printf("Enter you age:");
scanf("%d", &age);
if(age>=18){
printf("you are eligible for voting");
} else {
printf("you are not eligible to vote");
}
return 0;
}
Saludos.