c ++ bool函数返回true时无限循环

时间:2017-10-30 14:10:34

标签: c++ boolean infinite-loop

我正在为大学c ++作业编写代码。该程序应该打印斐波纳契序列的前5个素数。继续我到目前为止所拥有的。

#include <iostream>
#include <cmath>
using namespace std;
int fibonacci(int x){
 int y=1, z=1, sum=0;
  for(int a=1; a<=x;a++){
    sum=(z+y);
z=y;
y=sum;
  }
  return sum;
}
bool isPrime(int x){
  double z=x;
  for(int y=2;y<=sqrt(z);y++){
    if(x%y==0){
      return false;
    }
  }
  return true;
}
int main(){
  int primes=0, check=0;
  for(int x=1;x<=10;x++){
    check=0;
    while(primes<5 && check==0){
      if(isPrime(fibonacci(x))){
       cout<<fibonacci(x)<<endl;
       primes++;
       check=1;
      }
    }
  }
  return 0;
}

代码返回前3个斐波纳契素数,2,3和5.程序然后进入无限循环。确保isPrime函数返回true消除了无限循环,但显然不会产生所需的输出。 任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

你找到Fibonacci并检查它是否是素数的功能很好。为了提高效率,它们本来可以进行一些修改,但它们看起来还不错。问题在于main内部正在运行的事情。你在那里做了太多不必要的变量和比较。 我研究了代码,现在似乎正在运行。请记住,我在课堂上,所以可能会有一些错误哈哈。

#include <iostream>
#include <cmath>
using namespace std;
int fibonacci(int x) {
    int y = 1, z = 1, sum = 0;
    for (int a = 1; a <= x; a++) {
        sum = (z + y);
        z = y;
        y = sum;
    }
    return sum;
}
bool isPrime(int x) {
    double z = x;
    for (int y = 2; y <= sqrt(z); y++) {

        if (x%y == 0) {
            return false;
        }
    }
    return true;
}
int main() {
    int primes = 0, check = 0;
    for (int x = 1; primes < 5; x++) {

        if (isPrime(fibonacci(x)))
        {
            cout << fibonacci(x) << endl;
            primes++;
        }
    }
    system("PAUSE");
    return 0;
}

我相信你的check被置于不正确的位置并导致无限循环。

相关问题