所以,我讨厌问,但是,我遇到了一些问题,我是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;
}
答案 0 :(得分:2)
除了这里的未初始化变量,其他人已经指出,计算都是错误的。
取出纸和笔,然后用老式的方式运行一些自己的计算。
让我们说有五个投掷,三个头,两个尾巴。这意味着(在修复未初始化的变量之后):
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 ++中不会产生小数量。它是整数除法。但那不是你唯一的问题。
答案 1 :(得分:1)
首先,你必须纠正你的数学基础知识。
计算%age意味着 例 (获得的商标)/(总商标)* 100 不(总分/标记obt)* 100
未定义任何0除以0。因此,如果你的当前代码随机分配toss或head = 0,那么显然你会有错误。
其次谈论代码,U应该从0初始化i,或者你应该使用
for (i=1; i<=userInput; i++)
否则head + toss值将为userInput-1。
还记得初始化像
这样的变量Int headsCount=0;
等。如果未初始化为固定的no,变量将采用任意随机值。 (虽然这不会产生问题)
只需更改数据类型
即可int userInput,
toss,
headsCount,
tailsCount;
到
double userInput,
toss,
headsCount,
tailsCount;
这将解决您的问题。
建议:请使用
using namespace std;
在你的程序启动时你必须输入很多std ::
答案 2 :(得分:0)
欢迎使用C ++。您需要初始化变量。你的编译器应该警告你,你在使用一个变量而没有初始化它。如果不初始化值,则程序具有未定义的行为。
我在谈论headsCount
和tailsCount
。这样的事应该没问题:
int headsCount = 0, tailsCount = 0;
另请注意,您的循环应该从0开始,而不是1,因为您在最终条件下使用<
运算符。
最后,您的百分比计算是倒退的。它应该是:
headsPercent = headsCount * 100 / userInput;
tailsPercent = tailsCount * 100 / userInput;
现在,因为你使用整数除法,所以可能会发生一些奇怪的事情。也就是说,您的百分比可能不等于100.这里发生的是整数截断。请注意,我使用100x比例 first 隐式处理了其中的一些内容。
或者,由于百分比本身是double
,您可以通过强制转换其中一个操作数来强制计算为double
,从而避免整数截断:
headsPercent = static_cast<double>(headsCount) / userInput * 100;
事实上,由于只有两种可能性是头部和尾部,因此您只需计算其中一种。然后你可以这样做:
tailsPercent = 100 - headsPercent;
答案 3 :(得分:-1)
1)此循环应从0开始:
ParseQuery query = ParseInstallation.getQuery();
query.whereEqualTo("user_id", "1234567890");
ParsePush push = new ParsePush();
push.setQuery(query);
push.sendPushInBackground();
2)分歧不正确:
for(int i = 1; i < userInput; i++)
3)最后:
//headsPercent = userInput / headsCount * 100;
//tailsPercent = userInput / tailsCount;
headsPercent = headsCount / userInput * 100;
tailsPercent = tailsCount / userInput * 100;