在用C 中的变量乘以小数时误差
Error while multiplying decimals with variables in C++
我是一名学生,最近开始学习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;}
到处使用此技巧,您就完成了。
相关文章:
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在浮点中从大到小会引入更多的误差
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 计算 PI 最多 42 位小数
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 返回浮点数的小数位数
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 在数学上将浮点数四舍五入到 N 位小数
- 打印双精度的整个非小数部分
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何在C++中对OpenCV垫的小数进行四舍五入?
- 将 int 数组转换为带有小数C++的双精度数组
- 基于相邻元素 c++ 的分段误差范围的循环
- Arduino如何制作返回固定大小数组的函数
- 从浮点数中删除小数部分但保留类型的有效方法
- 分配新的零大小数组可以具有有效价值吗?
- 在用C 中的变量乘以小数时误差
- C 分配小数误差