在用C 中的变量乘以小数时误差

Error while multiplying decimals with variables in C++

本文关键字:小数 误差 变量 在用      更新时间:2023-10-16

我是一名学生,最近开始学习C 。我正在为C 的大三学生制作GPA计算器,但我面临错误。当我将小数乘以变量时,每次都会得到相同的答案。这仅在小数中发生。确切的整数工作正常。如果我将可变" cal"的值放在和整数的范围内。P>

你能指出我的错误吗?

这是我的开始源代码:

#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;
    }

考虑一下您写的

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;
}

让我们看一下您的前两个条件行:

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

在第二个可能的情况下,您正在以每个可能的值进入条件,因为您询问的是"任何大于80的值,但也低于85的值。因此,您将始终拥有C1 = 3.7*CalH,除非Cal优于85。这就是为什么您每次都获得相同的值。

我认为问题是您误解了||的逻辑操作员。当您在用||分离的IF语句中有几个条件时,这意味着只有一个条件才能正确进入条件。如果要保留此逻辑,请删除" =="answers">"测试,然后用"> ="替换它们,然后替换您的||&amp;&amp;。

的操作员

现在让我们再次查看您的代码。您在那里有些条件。如果CAL少于85,您已经进入了第一个,因此您无需再次验证它。然后,最后,您可以替换

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

with:

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

到处使用此技巧,您就完成了。