Autor Tema: diferencia entre ++i y i++ C (LenguajeC) Instrucción goto ejemplo CU00546F  (Leído 4415 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola, aquí dejo una posible solución a este ejercicio CU00546F del curso de programador en Lenguaje C.

Citar
EJERCICIO Nº1
Estudia el siguiente código y responde a las preguntas:
Código: [Seleccionar]
#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;
}

Citar
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.

Citar
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.

Citar
c) ¿Qué signficado tiene ++i en el contexto de este programa?
El mismo que si usamos i++, es decir, sumamos 1 a i.

Citar
d) ¿Es equivalente escribir      if( num<0.0) goto jump;      y      if( num < 0.0) { goto jump; }  ?
Si.

Citar
e) Haz que el código ofrezca los mismos resultados evitando el uso de goto.
Código: [Seleccionar]
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;
}

Citar
EJERCICIO Nº2
Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#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;
}

Citar
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.

Citar
b) Crea otro programa equivalente (que produzca los mismos resultados) sin hacer uso de la sentencia goto.
Código: [Seleccionar]
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. ;D
« Última modificación: 27 de Junio 2016, 22:11 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Una cosa interesante: ++i a veces tiene el mismo efecto que i++, pero otras veces no.

Básicamente la cuestión a tener en cuenta es qué se hace primero cuando se trata de asignaciones:

i++ --> primero asigno, luego incremento.
++i -->primero incremento, luego asigno.

Ejemplo:

i=0;
a=i++;
Resultado a=0, i=1

i=0;
a=++i;
Resultado a=1, i=1


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".