如何使用 switch 语句 (C++) 测试一个数是否为素数或可被 7 整除

How to test if a number is prime or divisible by 7 using switch statements (C++)

我有点被问题困住了。我正在尝试测试输入的数字是质数还是可被 7 整除。

基本上,我的程序要求用户输入一个数字,然后要求用户输入以下字母之一:"a"、"b" 或 "c"。字母对应以下选项:

a) 输入的数字是偶数还是奇数(算出来) b) 数是素数或合数 c) 检查数字是否可以被 7 整除(算出来)

比如用户输入的数字是5,然后选择字母"b",我应该得到输出"The number is Prime"。另一方面,如果他选择字母 "a",我应该得到输出 "The number is Odd".

如果有任何帮助,我将不胜感激。提前致谢!!

这是我到目前为止设法创建的:

#include <iostream>
using namespace std;


int main ()
{
    int number;
    char letter = 0;

    cout << "Input number: ";
    cin >> number;

    cout << "Enter (a) to check for even or odd.\n"
         << "Enter (b) to check for prime or not.\n"
         << "Enter (c) to check for divisible by 7 or not.\n";
    cin >> letter;

    switch (letter) 
    {
        case 'a':
            switch (number % 2)
            {
                case 0:
                    cout << "The number is Even.\n";
                    break;
                case 1:
                    cout << "The number is Odd.\n";
                    break;
            }
            break;

        case 'b':
            switch ()// Don't know what to put for condition
            {
                case 0:
                    cout << "The number is Prime.\n";
                    break; 
                case 1:
                    cout << "The number is composite.\n";
                    break;
            }
            break;

        case 'c':
            switch (number % 7) 
            {
                case 0:
                    cout << "The number is Divisible by 7.\n";
                    break;
                case 1: 
                    cout << "The number is not Divisible by 7.\n";
                    break;
            }
            break;      
    }   
    return 0;
}

您已经有了 c 的解决方案,它与 a 的解决方案相同。

如果 (number % 2) == 0,一个数可以被二整除。类似地,如果 (number % 7) == 0.

,则数字可以被 7 整除

所以,使用第一种情况,并意识到 switch 有一个默认子句:

switch (number % 7) {
    case 0:
        cout << "The number is a multiple of seven.\n";
        break;
    default:
        cout << "The number is NOT a multiple of seven.\n";
        break;
}

您会注意到我在那里使用了 switch,因为您的问题需要它,但除了您的问题之外,实际上 不需要它。使用 if-else.

可以很容易地完成一个二选一或 switch 语句

b(素数)的解稍微复杂一些。如果数字不是 any 数字的倍数,则该数字是质数,从 2 到但不包括数字本身(有一些效率,例如只达到数字的平方根,并且只检查质数而不是所有数字,但如果您愿意,可以稍后添加它们)。

因此,您将有一个循环 x = 2..(n-1),在该循环中您将检查余数是否为零,如果是这样,则说它不是素数 ((n % x) == 0)。

如果您检查范围内的所有数字,但没有找到一个余数为零的数字,则您有一个质数。

这种野兽的伪代码将是(使用 switch,不过,这里也没有必要):

is_prime = true
for x = 2..n-1:                // C++: for (int x = 2; x < n; x++)
    if (n % x) == 0:
        is_prime = false
        break for
switch (is_prime):
    case true:
        print "Number is prime"
        break switch
    default:
        print "Number is NOT prime"
        break switch

只计算数字的平方根是对 for 循环的一个非常小的修改:

is_prime = true
for x = 2..∞ until x * x > n:  // C++: for (int x = 2; x * x <= n; x++)
    if (n % x) == 0:
        is_prime = false
        break for

您的代码还有 另一个 问题。当您使用 break 来防止内部开关掉线时,您没有用于外部开关。

case 'b':case 'c': 行之前,您应该插入 break; 行以防止漏掉。否则,选择选项 a 将导致完成所有三个测试,而选项 b 将同时执行 bc.

正如其他人已经指出的那样,您可以使用模数 (%) 运算符来确定一个数字是否可以被其他数字整除。但是,没有内置函数或运算符来确定数字是否为素数。互联网上有大量示例可用于确定这一点,但此类函数的一个简单示例是:

bool is_prime(int number){
    if( number <= 2 ){
        return number == 2;
    }
    for( int divisor = 3; divisor < number / 2; divisor += 2 ){
        if( number % divisor == 0 ){
            return false;
        }
    }
    return true;
}

然后您可以在条件中使用此函数来确定数字是否为质数。如果您想测试大量不同的数字,筛子会更省时,但这适用于大多数用途。

代码如下:

#include <iostream>
using namespace std;
int main ()
{
    int number;
    char letter = 0;

    cout << "Input number: ";
    cin >> number;

    cout << "Enter (a) to check for even or odd.\n"
         << "Enter (b) to check for prime or not.\n"
         << "Enter (c) to check for divisible by 7 or not.\n";
    cin >> letter;

    switch (letter) 
    {
        case 'a':
            if (number % 2 == 0)
            {
              cout << "The number is Even.\n";
            }
            else
            {
              cout << "The number is Odd.\n";
            }
            break;

        case 'b':
            if(number > 0 ) //Only positive numbers
            {
                int count = 0; //dummy variable

                for(int i = 2; i < number; i++) // loop till one less than number entered
                { 
                  if(number % i == 0) //Number is divisible by other number
                  { 
                      count++;  // increment the count
                      break;
                  } 
               }
               if(count == 0)   // since prime numbers cannot be divided by any other number except 1 and the number itself
               {
                   cout << "Prime number.\n";
               }
               else
               {
                  cout << "Not a Prime number.\n"; 
               }
            }
            else
            {
                cout << "Please enter a positive integer.\n";
            }
            break;

        case 'c':
            if (number % 7 == 0)
            {
              cout << "The number is Divisible by 7.\n";
            }
            else
            {
              cout << "The number is not Divisible by 7.\n";
            }
            break;
    }   
    return 0;
}