程序产生的奇怪输出

时间:2012-10-30 19:53:01

标签: c++ visual-c++

我认为我的代码有效。但是,它会输出01111E5或17B879DD等。

有人可以告诉我原因吗。

我知道我设置了P的限制而不是10,001。我的代码是这样的,因为我从3开始,跳过素数2。

#include <iostream>
bool prime (int i)
{
bool result = true;
int isitprime = i;
for(int j = 2; j < isitprime; j++)              ///prime number tester
{
    if(isitprime%j == 0) result = false;
}   
return result;
}


int main (void)
{
using namespace std;
int PrimeNumbers = 1;
int x = 0;
for (int i = 3 ; PrimeNumbers <=10000; i++)
{
    if(prime(i))
    {
        int prime = i;
        PrimeNumbers +=1;
    }
}   
cout<<prime<<endl;
system ("pause");
return 0;
}

5 个答案:

答案 0 :(得分:7)

cout<<prime<<endl;

打印函数bool prime (int i)的地址,而不是您声明的变量。只需重命名函数或变量(请注意,您还必须更改其范围,或者在循环内移动cout - 如果您想要全部打印它们):

for (int i = 3 ; PrimeNumbers <=10000; i++)
{
    if(prime(i))
    {
        cout << i << endl;
        PrimeNumbers++;
    }
}  

此外:

for(int j = 2; j < isitprime; j++)              ///prime number tester
{
    if(isitprime%j == 0) result = false;
}   

可以进行优化,因为(1)您不需要检查isitprime之前的所有数字,但最多只检查sqrt(isitprimt)和(2)您只需要检查{{1} 1}}是result,此时您可以false退出循环。

答案 1 :(得分:3)

输出并不奇怪。

cout<<prime<<endl;

您正在此处打印prime的函数指针。

您可能打算打印您在此处创建的变量:

 int prime = i;

但这是在循环范围内。实际上,如果在启用警告的情况下进行编译,则编译器应该告诉您此变量从未使用过。另外,给C或C ++中的变量赋予与函数相同的名称(或更高级别范围内的任何其他变量)是不好的做法。

答案 2 :(得分:0)

主程序中的循环未正确停止,因为测试变量PrimeNumbers可能不会更改 尝试:

  for (int i = 3; i < 10000; i++)
  {
   //...
  }

另外,因为您在prime语句中声明了变量if,所以在执行if语句后它会消失:

  if (prime(i))
  {
      int prime = i; // <-- Declare the variable before the for loop.
  //...

答案 3 :(得分:0)

从第n到2找到素数的代码(1既不是素数也不是复合素)写在下面,我没有使用math.h头文件,做了不同的事情,并且令人惊讶的是它的工作非常酷.... 代码是:

             #include<iostream.h>
             #include<stdio.h>
             #include<conio.h>
             class prime
                 {
                  int a;
                  int i;
                  public:
                    void display();
                  };

                void prime::display()
                    {
                      cout<<"Enter the number to see primes less than it till 2";
                      cin>>a;
                      int count=0;
                      for(int j=a;j>=1;j--)
                        {
                           for(int i=1;i<=j;i++)
                              {
                                if(j%i==0)
                                  {
                                    count++;
                                   }
                               }
                                if(count==2)
                                  {
                                      cout<<"\t"<<j;
                                   }
                              count=0;
                              }
                            }
                           void main()
                              {
                                  clrscr();
                                  prime k;
                                  k.display();
                                  getch();
                               }

答案 4 :(得分:-1)

如果你想找到从1到n的素数,希望这对你有帮助。

   #include <iostream>

#include <vector>
static bool _isprime (int number)
{   
    if(number==1)
    {
        return false;
    }
    bool flag=true;
    if(number==2||number%2!=0)
    {
        for(int i=2;i<number;i++)
        {
            if(number%i==0)
            {
                flag=false;
            }
        }
    }
    else flag=false;
    return flag;
}
int main (void)
{
using namespace std;
vector<int> primenumber;
cout<<"prime number between 1 and ?"<<endl;
int x=0;
cin>>x;
    for(int i=0;i<=x;i++)
    {
        if(_isprime(i)==true)
        {
        //cout<<x<<" is a prime number"<<endl;
            primenumber.push_back(i);
        }
        //else cout<<x<<" is not a prime number"<<endl;
    }
    for(int i=0;i<primenumber.size();i++)
    {
        cout<<primenumber[i]<<endl;
    }
    cout<<"the number of prime number is "<<primenumber.size()<<endl;
system("pause");
return 0;
}