在计算百分比时具有垃圾数
Having garbage numbers while calculating percentage
所以,我不想问,但是,我对此有一些问题,我是C++新手,我才刚刚开始。大部分都已完成。期待一件小事。第 35-36 行应该计算平均值(由于某种原因,我无法让它工作。第 41-47 行应将正面/反面落地的百分比精确地打印到小数点后一位,然后打印出正确的 * 数字来表示百分比。 但是,当我运行它时,我的头/尾数被搞砸了。以及我的百分比数字。我只是在寻找朝着正确方向前进的动力。
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <iomanip>
using std::cout; using std::cin; using std::endl;
using std::fixed; using std::setprecision;
int main()
{
srand(time(0));
int userInput,
toss,
headsCount,
tailsCount;
double headsPercent = 0,
tailsPercent = 0;
cout << "How many times do you want to toss the coin? ";
cin >> userInput;
while(userInput < 0)
{
cout << "Please enter a positive number: ";
cin >> userInput;
}
for(int i = 1; i < userInput; i++)
{
toss = rand() % 2;
if(toss == 0)
headsCount++;
else
tailsCount++;
}
headsPercent = userInput / headsCount * 100;
tailsPercent = userInput / tailsCount;
cout << "Heads: " << headsCount << endl
<< "Tails: " << tailsCount << endl << endl;
cout << "Heads Percentage: " << fixed << setprecision(1) << headsPercent << " ";
for(int b = 0; b < headsPercent; b++)
cout << "*";
cout << "nTails Percentage: " << tailsPercent << " ";
for(int b = 0; b < tailsPercent; b++)
cout << "*";
return 0;
}
除了其他人指出的未初始化变量之外,计算都是错误的。
拿出纸和铅笔,用老式的方式进行一些自己的计算。
假设有五次抛掷,三次正面,两次反面。 这意味着(在修复未初始化的变量之后(:
userInput=5
headsCount=3
tailsCount=2
现在,以下是您计算假定百分比的方法:
headsPercent = userInput / headsCount * 100;
tailsPercent = userInput / tailsCount;
因此,使用您自己的号码,您将获得:
headsPercent = 5 / 3 * 100
tailsPercent = 5 / 2;
这对你来说合适吗?当然不是。你可以自己算术。将 5 除以 3 并乘以 100。这是整数除法,所以五除以三是1,乘以100是100。五除以二是二。所以你在这里得到 100% 和 2%。
当然,这是错误的。五分之二和三次分别为40%和60%。
编写程序意味着:
A( 弄清楚需要如何进行计算
B( 编写代码进行计算。
您仍在步骤 A 上。首先,您需要弄清楚如何进行这些计算,以便它们是正确的。
这与C++无关。如果你使用任何其他语言,并以这种方式编码,你会得到同样的错误答案。
这可能与C++有关的唯一事情是整数除法,在C++中不会产生分数。这是整数除法。但这不是你唯一的问题。
你必须纠正你的数学基础。
计算年龄百分比均值例(获得的分数(/(总分(*100不是(总标记/标记 obt(*100
未定义将任意 no 除以 0。因此,如果您当前的代码随机分配 toss 或 head =0,那么显然您会遇到错误。
其次说代码,U 应该从 0 初始化 i,或者 u 应该使用
for (i=1; i<=userInput; i++)
否则,head+toss值将为userInput-1。
还要记住初始化变量,例如
Int headsCount=0;
等。因为如果未初始化为固定编号,该变量将采用任何随机值。(虽然它不会在这里产生问题(
只需更改数据类型
int userInput,
toss,
headsCount,
tailsCount;
自
double userInput,
toss,
headsCount,
tailsCount;
这将解决您的问题。
建议:请使用
using namespace std;
在程序开始时,您必须键入大量 std::
欢迎来到C++。 您需要初始化变量。 编译器应该警告您,您正在使用一个变量而没有初始化它。 如果不初始化值,则程序具有未定义的行为。
我说的是headsCount
和tailsCount
. 像这样的东西应该没问题:
int headsCount = 0, tailsCount = 0;
另请注意,循环应从 0 开始,而不是 1,因为您在最终条件下使用 <
运算符。
最后,您的百分比计算是倒退的。 它应该是:
headsPercent = headsCount * 100 / userInput;
tailsPercent = tailsCount * 100 / userInput;
现在,可能会发生一件奇怪的事情,因为您使用的是整数除法。 也就是说,您的百分比加起来可能不会达到 100。 这里发生的是整数截断。 请注意,我首先使用 100x 刻度隐式处理了其中的一些问题。
或者,由于百分比本身是double
的,您可以通过强制转换其中一个操作数来强制double
计算,从而避免整数截断:
headsPercent = static_cast<double>(headsCount) / userInput * 100;
事实上,由于只有两种可能性是正面和反面,因此您只需要计算其中一种。 然后你可以做:
tailsPercent = 100 - headsPercent;
1(这个循环应该从0开始:
for(int i = 1; i < userInput; i++)
2(划分不正确:
//headsPercent = userInput / headsCount * 100;
//tailsPercent = userInput / tailsCount;
headsPercent = headsCount / userInput * 100;
tailsPercent = tailsCount / userInput * 100;
3(最后:
cout << "nTails Percentage: " << fixed << setprecision(1) << tailsPercent << " ";
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- 如何计算单个元素在向量<float>中所有元素之和中的百分比
- 使用C 来计算您的工作中出现字母及其百分比的次数
- 计算百分比 C++ 时产生的 inf%
- C++:计算每次迭代期间的概率百分比
- 计算中的百分比
- 在计算百分比时具有垃圾数
- 有没有更有效的方法来计算百分比
- 如何使用opencv计算人脸识别的百分比格式预测置信度
- C++快速百分比计算
- 计算概率百分比