我也是c++新手,我必须设计一个程序来确定前四个三角形平方数,输出结果就是我想要的样子,但它不会在打印前四个平方数后退出。我想不出会是什么。我不能按CTRL C,因为我会被扣分。这里的问题是什么?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
//Prints name line
cout<<"*********** BY: ********"<<endl;
//Initializing
const int HOW_MANY=4;
int num=1;
int tsn=0;
int z=1;
int x=0;
//How many TSN it will find and be printed
while (x<=HOW_MANY)
{
//
int sum=0;
for (int y=0;y<512;y++)
{
sum+=y;
tsn=pow(num,2);
//Tests if the numbers are TSN
if ((sum==tsn) || (num+1)/sqrt(num)==sqrt(num))
{
//Prints 1-HOW_MANY TSN and what they are
cout<<"Square Triangular Number "<< z <<" is: "<< tsn <<endl;
z++;
x++;
}
}
num++;
}
return 0;
}发布于 2018-02-08 06:18:59
x从0开始。每次你找到并打印一个数字,它就会递增。您将继续执行此操作,只要使用x<=HOW_MANY。
你说你的程序找到了4个数字,但仍在运行。命中4次后,x将为4。是4 <= 4吗?答案是肯定的,所以你的程序一直在运行。
将条件更改为x < HOW_MANY,或将x初始化为1。
编辑
我做了一点小实验,结果是1,512范围内所有数字的总和是131328。第5个square triangle number是1413721。
这意味着在你找到第四个三角形数后,你将永远不会求出足够高的和来找到下一个三角形数。(译者注:这句话的意思是“never sum”)。这将导致您所看到的无限循环。
上面的答案仍然是正确的修复方法,但这就是您最终会出现无限循环的原因。
发布于 2018-02-08 06:19:35
如果为x = 0,那么您需要编写while (x<HOW_MANY)而不是while (x<=HOW_MANY)。
发布于 2018-02-08 08:37:37
for应该用于迭代,while应该用于条件测试。
如前所述,问题在于您的x条件变量永远不会递增,从而使您走出外部循环。这是一个逻辑错误,可以通过为作业使用适当的控制结构来避免。
https://stackoverflow.com/questions/48674163
复制相似问题