¿Agregar dos condiciones C?

Lo que pretendo es hacer un programa en C, que me dé la nota final de una materia y dependiendo del nùmero, me muestre en pantalla un mensaje.

#include<stdio.h>
#include<conio.h>

main (){

    float cal1=0, cal2=0, cal3=0, cal4=0;
    float notafinal=0;

    printf("Ingrese la Nota del 1er Corte:  \n\n");
    scanf("%f",&cal1);
    printf ("Ingrese la Nota del 2do Corte:  \n\n");
    scanf("%f",&cal2);
    printf("Ingrese la Nota del 3er Corte:  \n\n");
    scanf("%f",&cal3);
    printf("Ingrese la Nota del 4to Corte:  \n\n");
    scanf("%f",&cal4);

    notafinal=((cal1*0.2)+(cal2*0.2)+(cal3*0.3)+(cal4*0.4));

    if (notafinal > 18){
        printf ("\nYOUR A FUCKING GENIUS\n\n");
        printf ("Su nota es: %f\n\n",notafinal);
    }

    if (notafinal > 12){
        printf("\nAPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
    }
    else {

        printf("\nREPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
    }

    return 0;
}

El problema es que me muestra tanto el mensaje de aprobado como el mensaje de un genio, y quiero que solo me coloque el primero.

Pseudocódigo: Necesito traducir algo como esto pero en C.

Si notafinal > 12 escribir APROBADO, SU N...
Si notafinal < 12 escribir DESAPROBADO, SU N...
Si notafinal > 18 escribir GENIO, SU N.. (SIN ESCRIBIR APROBADO, SU NOTA ES...).
3
задан 31.10.2016, 13:17
5 ответов

Не запутывать:

  • if {...} if{...} он спросит Всегда dos разы если переменная выполняет условие (как это Ваш случай) так первое условие было verdadera, поэтому встречается ошибочное сообщение, потому что он подтверждает, что замечание было больше 18 потом вновь спроси, если он больший, чем 12 две истинные, если замечания 19, например напечатай двойное сообщение
  • if{...} else if{...} он спросит dos разы да первое условие if он не выполняется, взамен, если выполняется первое условие, только он войдет там и уже вновь не спросит того, что в else if()

Изменять Ваш if из-за одного else if и оно было бы должно функционировать очень хорошо. Имея в рассуждении, что утверждение >18 будь должен идти в первом if и потом >12 в else if если он меняет порядок, алгоритм вновь не удается. и он был бы должен использовать интервалы для утверждения.

if (notafinal > 18){
     printf ("\nYOUR A FUCKING GENIUS\n\n");
     printf ("Su nota es: %f\n\n",notafinal);
}
else if (notafinal > 12 ){
     printf("\nAPROBADO\n\n");
     printf("Su nota es: %f\n\n",notafinal);
}
else {
     printf("\nREPROBADO\n\n");
     printf("Su nota es: %f\n\n",notafinal);
}
5
ответ дан 24.11.2019, 12:50

Я это предлагаю как soluciГіn:

int main()
{
    float cal1=0, cal2=0, cal3=0, cal4=0;
    float notafinal=0;

printf("Ingrese la Nota del 1er Corte:  \n\n");
scanf("%f",&cal1);
printf ("Ingrese la Nota del 2do Corte:  \n\n");
scanf("%f",&cal2);
printf("Ingrese la Nota del 3er Corte:  \n\n");
scanf("%f",&cal3);
printf("Ingrese la Nota del 4to Corte:  \n\n");
scanf("%f",&cal4);

notafinal=((cal1*0.2)+(cal2*0.2)+(cal3*0.3)+(cal4*0.4));

if (notafinal > 18)
{
    printf ("\nYOUR A FUCKING GENIUS\n\n");
    printf ("Su nota es: %f\n\n",notafinal);
}
else if(notafinal > 12)
{
    printf("\nAPROBADO\n\n");
    printf("Su nota es: %f\n\n",notafinal);
}
else
{

    printf("\nREPROBADO\n\n");
    printf("Su nota es: %f\n\n",notafinal);
}
 return 0;
}
2
ответ дан 24.11.2019, 12:50

Он был должен оставаться, таким образом, ты condiciГіn:

    if (notafinal > 12 && notafinal<=18){
        printf("\nAPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
    }
    else if (notafinal <=12){
        printf("\nREPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
}
1
ответ дан 24.11.2019, 12:50
  • 1
    rfrp спасибо bro, но сейчас он показывает мне " Ты Genio" и " Reprobado" jajaja. – Romasanta 31.10.2016, 06:24
  • 2
    @Romasanta проверь ах и # 237; – rfrp 31.10.2016, 07:05

Простой, только ты должен добавлять return в первом if так что, если он - гений, там он только заканчивается. Код должен оставаться таким:

    #include<stdio.h>
    #include<conio.h>

    main (){

    float cal1=0, cal2=0, cal3=0, cal4=0;
    float notafinal=0;

    printf("Ingrese la Nota del 1er Corte:  \n\n");
    scanf("%f",&cal1);
    printf ("Ingrese la Nota del 2do Corte:  \n\n");
    scanf("%f",&cal2);
    printf("Ingrese la Nota del 3er Corte:  \n\n");
    scanf("%f",&cal3);
    printf("Ingrese la Nota del 4to Corte:  \n\n");
    scanf("%f",&cal4);

    notafinal=((cal1*0.2)+(cal2*0.2)+(cal3*0.3)+(cal4*0.4));

    if (notafinal > 18){
        printf ("\nYOUR A FUCKING GENIUS\n\n");
        printf ("Su nota es: %f\n\n",notafinal);
        return 0;
    }

    if (notafinal > 12){
        printf("\nAPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
    }
    else {

        printf("\nREPROBADO\n\n");
        printf("Su nota es: %f\n\n",notafinal);
    }

    return 0;
}

Вероятно предыдущие решения функционировали, не они probГ©, но, таким образом, вот то, что меньше он изменяет в tГє собственный cГіdigo. Я надеюсь, что он помогает тебе!

0
ответ дан 24.11.2019, 12:50

Главным образом он был бы как уже они сказали тебе менять последовательность if... if...из-за if... else if... else.... Давайте видеть:

if (notafinal > 18){//Entra si es mayor que 18
    printf ("\nYOUR A FUCKING GENIUS\n\n");
    printf ("Su nota es: %f\n\n",notafinal);
}
else if (notafinal > 12){//Aquí te entraría si no ha entrado en el anterior,
    /*Es decir, si notafinal > 12 y <= 18
    *Si sólo pones if, entrará también ya que no importa 
    *la condición anterior, entra al ser mayor que 12
    */
    printf("\nAPROBADO\n\n");
    printf("Su nota es: %f\n\n",notafinal);
}
else {//Y aquí entra si no ha entrado en ninguno de los anteriores
    printf("\nREPROBADO\n\n");
    printf("Su nota es: %f\n\n",notafinal);
}

return 0;
0
ответ дан 24.11.2019, 12:50