2017-02-12 19 views
-5

привет, меня попросил мой инструктор написать код, который может получить среднее значение 3 класса ученика и вывести определенную строку для каждый интервал средней (например, если AVG b/w 70 cout < < «Отлично \ n»;), но есть условие, в котором нормально для того, чтобы студент пропустил один из трех тестов. Я настраивал для часов, и я не знаю, как создать два условия (два разных эквалайзера для средних значений (один, если вы пропустите тест, а другой, если вы этого не сделаете) также, я не знаю, как создать петлю, он продолжает навсегда, я не> знаю, почему лол СпасибоСредние значения, использующие циклы, а если есть заявления

#include <iostream> 
using namespace std; 

int main() 
{ 
    double test1(0),test2(0),test3(0),AVG,AVG2,counter(1); 
    cout << " please write score of test1\n"; 
    cin >> test1; 

    cout << "Please enter test 2 grade\n"; 
    cin >> test2; 

    cout << "Please enter test 3 grade\n"; 
    cout << "if test 3 is not there please write in 0\n"; 
    cin >>test3; 

    cout << "test1 score:"<< test1<<"\n"; 
    cout << "test2 score:"<< test2<<"\n"; 
    cout << "test3 score:"<< test3<<"\n"; 

    AVG=(test1+test2+test3)/3; 
    AVG2=(test1+test2+test3)/2; 

    if (test3==0) 
    { 
     while (counter<=20) 
      cout <<" Average2 : "<<AVG2<<"\n"; 

     if (test3 <=0) 
      cout<<"Result (average of two tests):"; 

     if ((AVG2 <=100) && (AVG2>=70)) 
      cout<<"Excellent !\n"; 
     else 
      if ((AVG2 <70) && (AVG2>=50)) 
       cout << "Moderate !\n"; 
      else 
       if ((AVG2 <50) && (AVG2>0)) 
        cout << "Fail !\n"; 
       else 
        if ((AVG2 <0) || (AVG2>100)) 
         cout << "Error for avg2!\n"; 
     counter= counter +1; 
    } 
    else (!(test3==0)); 
    { 
     while (counter<=20) 
     { 
      cout<<"Average of three tests: "<<AVG<<"\n"; 
      if ((AVG <=100) && (AVG>=70)) 
       cout<<"Excellent !\n"; 
      else 
       if ((AVG <70) && (AVG>=50)) 
        cout << "Moderate !\n"; 
      else 
       if ((AVG <50) && (AVG>0)) 
        cout << "Fail !\n"; 
      else 
       if ((AVG <0) || (AVG>100)) 
        cout << "Error for avg1!\n"; 
      counter = counter +1; 
     } 

     return 0; 
    } 
} 
+1

'else' * what * ?? –

+0

цикл while в if длится вечно, потому что вам нужно использовать скобку {} – peval27

+0

, что означает 'counter'? Можете ли вы уточнить, что вы делаете? – peval27

ответ

0

Здесь и там вы допустили некоторые ошибки. Но не беспокойтесь, это нормально.

Вы предположили, что учащийся не принимает только test3. Но это может быть test1 или test2.

Еще одна вещь, чтобы заметить, что вы назначили 0, как оценка для теста, который не был taken.Again это может создать проблему, так как это может быть, что студент появился, но набрал 0.

У меня есть уточнил код и позаботился о всех угловых случаях, и он делает именно то, чего хочет ваш инструктор.

#include<iostream> 
using namespace std; 

int main() 
{ 
int avg,test1,test2,test3,left=0; 
cout<<"Enter the test scores.\n"; 
cout<<"If a student has not appeared in a test, please enter -1\n"; 
cout<<"\nTest 1 : "; 
cin>>test1; 
if(test1==-1) 
    left++; 

cout<<"\nTest 2 : "; 
cin>>test2; 
if(test2==-1) 
    left++; 

cout<<"\nTest 3 : "; 
cin>>test3; 
if(test3==-1) 
    left++; 

if(left>1) 
{ 
    cout<<"FAIL : The student has not appeared in more than one tests"; 
    return 0; 
} 
else if(left==1) 
{ 
    if(test1==-1) 
    { 
     avg=(test2+test3)/2; 

    } 
    else if(test2==-1) 
    { 
     avg=(test1+test3)/2; 
    } 
    else if(test3==-1) 
    { 
     avg=(test1+test2)/2; 
    } 
} 
else if(left==0) 
{ 
    avg=(test1+test2+test3)/3; 
} 

if(avg>=70 && avg<=100) 
{ 
    cout<<"Excellent !\n"; 
} 
else if(avg>=50 && avg<70) 
{ 
    cout<<"Moderate !\n"; 
} 
else if(avg>=0 && avg<50) 
{ 
    cout<<"Fail !\n"; 
} 
else 
{ 
    cout<<"Internal Computation Error"; 
    return 0; 
} 
return 0; 
} 
+0

Спасибо, ты не знаешь, какую помощь ты предоставляешь! Я только начал программировать две недели назад, и я не полностью понял все. Еще раз спасибо, Джоэл. – maycarbon

+1

не могли бы вы объяснить новый код? Спасибо. – maycarbon

+0

. Хорошо. Посмотрим. Есть два случая, когда студент проходит весь тест или уходит из одного из тестов. Но есть и один скрытый случай, если ученик покидает более двух тестов. Из естественной интуиции я принял студент в этом случае потерпит неудачу, и я создал программу в манере. Хорошо, давайте теперь погрузимся в программу. Я взял три переменные 'test1',' test2' и 'test3' для хранения значений тестов. Я взял еще одну переменная 'left', чтобы подсчитать количество тестов, не принятых учеником. –

0

Вы испытываете бесконечный цикл, так как в следующем операторе:.

while (counter<=20) 
    cout <<" Average2 : "<<AVG2<<"\n"; 

на выполнение цикла только эта строка кода навсегда (т.е. cout). Вам нужно добавить скобки вокруг кода, который вы хотите выполнить в каждом исполнении:

while (counter<=20) 
{ 
    // cout <<" Average2 : "<<AVG2<<"\n"; 
    // all you logic with if-else 

    counter = counter +1; // or counter++; 
} 

В этом случае весь код между { и } выполняется, в том числе приращения счетчика.

+0

Большое вам спасибо, ваша помощь очень ценится – maycarbon

+0

, кстати, вы можете помочь с линией, где я написал – maycarbon

+0

else (! (Test3 == 0)) компилятор говорит, что результат выражения не используется, я не понимаю, что это значит .. еще раз спасибо – maycarbon