将小数与C ++中的变量相乘时出错

时间:2017-02-16 09:37:54

标签: c++ decimal

我是一名学生并且最近开始学习C ++。我正在为C ++中的青少年制作一个GPA计算器但是我遇到了错误。当我将小数乘以变量时,我每次都得到相同的答案。这只发生在小数上。精确整数工作正常。 如果我放置变量" cal"的值,我会得到正确答案。如果我放置85,则输出12作为输出但是当我输入低于85的值时,我每次都得到3.1。

你能指出我的错误吗?

这是我的开始源代码:

#include <iostream>
#include <string>
using namespace std;
    int main()
        {double cal,calh,c1;
        cout<< "How many marks you obtained in calculus? \n";
        cin >>cal;
        cout<<"Enter the credit hours of Calculus? \n";
        cin>>calh;
        if (cal>85 || cal==85){c1=4*calh;}
        else if (cal>80 || cal==80 || cal<85){c1=3.7*calh;}
        else if (cal>75 || cal==75 || cal<80){c1=3.3*calh;}
        else if (cal>70 || cal==70 || cal<75){c1=3*calh;}
        else if (cal>65 || cal==65 || cal<70){c1=2.7*calh;}
        else if (cal>61 || cal==61 || cal<65){c1=2.3*calh;}
        else if (cal>58 || cal==58 || cal<61){c1=2*calh;}
        else if (cal>55 || cal==55 || cal<58){c1=1.7*calh;}
        else if (cal>50 || cal==50 || cal<55){c1=1*calh;}
        else if (cal<50 || cal==49){cout<<"Sorry but you are failed in calculus.";}
        cout<<"your total gpa in calculus is "<< c1<<endl;
        system("pause");
        return 0;
    }

2 个答案:

答案 0 :(得分:1)

让我们看看你的前两个条件行:

if (cal>85 || cal==85){c1=4*calh;}
else if (cal>80 || cal==80 || cal<85){c1=3.7*calh;}

在第二个中,您正在为每个可能的值输入条件,因为您要求&#34;任何大于80的值,以及任何低于85&#34;的值。所以你总是有c1 = 3.7 * calh,除非cal高于85.这就是为什么你每次都得到相同的值。

我认为问题在于你误解了||的逻辑运营商。如果在if语句中有多个条件用||分隔,则表示只有一个条件需要为true才能输入条件。如果你想保持这个逻辑,删除&#34; ==&#34;和&#34;&gt;&#34;测试并用&#34;&gt; =&#34;替换它们一,并替换你的||运营商与&amp;&amp;。

现在让我们再看看你的代码。你在那里重复一些条件。如果cal小于85,你已经开始输入第一个了,所以你不需要再次验证它。然后,最后,您可以替换

else if (cal>80 || cal==80 || cal<85){c1=3.7*calh;}

使用:

else if(cal >=80) {c1=3.7*calh;}

在任何地方都应用这个技巧,你就完成了。

答案 1 :(得分:1)

想想你写的是什么

else if (cal>80 || cal==80 || cal<85){c1=3.7*calh;}

这将匹配所有内容(任何数字大于80 小于85)

你想要这样的东西

#include <iostream>
#include <string>
using namespace std;
int main()
{
  double cal, calh, c1;
  cout << "How many marks you obtained in calculus? \n";
  cin >> cal;
  cout << "Enter the credit hours of Calculus? \n";
  cin >> calh;
  if (cal >= 85) { c1 = 4 * calh; }
  else if (cal >= 80) { c1 = 3.7*calh; }
  else if (cal >= 75) { c1 = 3.3*calh; }
  else if (cal >= 70) { c1 = 3 * calh; }
  else if (cal >= 65) { c1 = 2.7*calh; }
  else if (cal >= 61) { c1 = 2.3*calh; }
  else if (cal >= 58) { c1 = 2 * calh; }
  else if (cal >= 55) { c1 = 1.7*calh; }
  else if (cal >= 50) { c1 = 1 * calh; }
  else { cout << "Sorry but you are failed in calculus."; c1 = 0; }
  cout << "your total gpa in calculus is " << c1 << endl;
  system("pause");
  return 0;
}