-1

好的,所以我已经在保留功能的同时简化/压缩了它,但我只做了一个半月的 C++。有 100 行代码。是否可以在函数争论中声明变量,然后在没有的情况下调用它们将值传递给arguemnets?

#include <iostream>
#include <windows.h>
using namespace std;


int primeCheck10 (int j)
{
    int count=0;
    cout<<"Enter a number between 1 and 10___";
    cin>>j;

    if(j<1 ||j>10)
    {
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n"; 
}
int primeCheck100(int j)
{
int count=0;
cout<<"Enter a number between 1 and 100___";
    cin>>j;

    if(j<1 || j>100){
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n";
}
int checkPrime1000(int j)
{
int count=0;
cout<<"Enter a number between 1 and 1000___";
    cin>>j;
    if(j<1 || j>1000){
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n"; 
}

int main ()
{
    system("pause");
    return 0;
}
4

3 回答 3

3

是的,您可以很容易地将所有质数检查浓缩到一个函数中。我会更改代码的结构以检查给定数字是否为质数,并返回 abool以指示它是否是:'

bool isprime(int n) {
    int limit = sqrt(n)+1;   // only need to check up to sqrt(n)

    if (n == 2)
        return true;
    if (n == 1 || n % 2 == 0)  // check if it's 1 or even
        return false;
    for (int i = 3; i <= limit; i += 2) // not even -- only check odd numbers
        if (n % i == 0)
            return false;
    return true;
}

然后获取输入和显示结果的代码将是分开的:

void primecheck(int limit) {
    std::cout << "Please enter a number between 1 and " << limit;
    int j;
    std::cin >> j;
    if (j<1 || j > limit) 
        std::cerr << "Invalid value";
    static char const *labels [] = { "Not a prime number\n", "Prime number\n" };
    std::cout << labels[isprime(j)];
}

让它比这更短并不是什么难事,但我们已经到了这样的地步,如果你这样做,它最终可能会变得不那么可读。

于 2013-11-14T23:39:12.613 回答
0

你可以只做一种方法......并添加一个界限

int primecheck(int value, int bounds){
    int count=0;
    cout <<"Enter a number between 1 and " << bounds << "___";
    cin>>value;
    if(j<1 || value>bounds){
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<value/2; i++)
    {
        if(value%i==0)
        {
         count++;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n"; 
    return count;
}

不过,这个算法可能不是检查素数的最佳方法。例如for(int i=2; i<j/2; i++)在你的循环中优化它。例如32, 6x6 = 32, 2x16 = 32, 4x8 = 32.,可以被 j 或 value 整除的最大数字是它的一半,因为1不被认为是可整除的,所以最小的数字是 2。这是一半。

于 2013-11-14T23:28:34.373 回答
0

如果我没有正确理解您,那么您是在询问默认参数。例如

#include <iostream>

void f( int i = 10 )
{
   std::cout << "i = " << i << std::endl;
}


int main()
{
   f();
}
于 2013-11-14T23:29:08.780 回答