-1

这是我在 Stackoverflow 上的第一个问题,如果我做错了什么,请见谅。:) 你能帮我处理这段代码吗?谢谢!:)

#include <iostream>
using namespace std;

1)

int divisor(int a) // function that checks the divisors of a number *)
{
int i=1; // counter
while(i<=a) // while the counter is less than the number given
{
    int i;
    if(primes(i)) // here i get the error "primes was not declared in this scope
    {
        if(a%i==0) // if the remainder of the operation is 0, the number is a divisor
        {
            cout<<"The divisors of the number are: "<<i<<endl; // prints the divisors
            ++i; // counter is incremented
        }
    }
    else // else it is not, and the counter i is incremented
    {
        ++i;
    }
}
}

2)

int primes(int number) // checks if a number is prime
{
int i; 
for(i=2;i<number;i++) // for loop until the counter i is less than a number
{
    if(number%i==0) // if the remainder of the operation is 0, the number is not prime
    {
        break;
    }
    else //else the number is prime
                    cout<<number;
        break;
    }
}
}

3)

int main()
{
int n,i;
cout<<"Give the number: ";
cin>>n;
for(i=2;i<n;i++)
{
    divisor(n);
}

}
4

2 回答 2

2

有几个问题:

1)您需要在primes()之前声明divisors()

int primes(int number);

2)您的primes()函数无法返回值。

3) 不是所有的代码路径都是divisor()递增的i

我相信还有更多问题,但这应该让你开始......

于 2013-03-02T10:33:38.607 回答
0

假设您在上面给出的顺序与您在文件中使用的顺序相同,问题是您的除数函数首先出现并使用稍后声明的素数函数。最简单的(我猜也是最常见的)解决方案是使用“前向递减”。这意味着您在文件的顶部声明:

int divisor(int);
int primes(int);

此外,您忘记让 primes() 返回一个值。(因为这个问题被标记为 C++,你甚至可以考虑让它返回一个 bool 而不是一个 int)。

同样在素数中, else 子句现在会导致中断,但我认为这并不完全明智。像 9 这样的数字在除以 2 时会出现在该子句中,但它不能被 2 整除的事实并不能使它成为质数……

在寻找素数时还有其他“聪明的技巧”,但也许这超出了这个问题的范围。

于 2013-03-02T10:39:47.443 回答