【问题标题】:Change switch statements to two or more functions, each [closed]将 switch 语句更改为两个或多个函数,每个 [关闭]
【发布时间】:2012-02-26 19:16:09
【问题描述】:

对于 3 个 switch 语句,我将用两个或多个函数调用替换每个 switch 语句。这是为了替换我上学期开始的 C++ 课程中的“不完整”,这样我就可以获得贷款,但我不知道从哪里开始。

我尝试从字面上理解 switch 语句并将它们放入它们自己的函数中,仅包含 switch 语句本身,当然,这会产生许多语法错误(例如 counter、random_number)。我不知道该怎么做,如何将正确的值返回给main() 并让程序与程序的其他部分进行通信(例如,在 main 中定义/初始化的变量)。正如人们所看到的,我在这里很迷茫,想要一些指导来解决这个问题。我不是要求任何人为我做这件事,只是一些指导(我对 C++ 的了解有限,而且有时间限制)。

// random.cpp : Defines entry point for the console application.
//

#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

//random number generator prototypes
void randomize(void);
void randomize(int seed);
int random(void);
int random(int upper_bound);
int random(int upper_bound, int lower_bound);

int main()
{
int upper_bound = 999;
int lower_bound = 100;
int n_random_numbers = 1000;

randomize();

int counter_0 = 0;
int counter_1 = 0;
int counter_2 = 0;
int counter_3 = 0;
int counter_4 = 0;
int counter_5 = 0;
int counter_6 = 0;
int counter_7 = 0;
int counter_8 = 0;
int counter_9 = 0;

for(int counter = 1; counter <= n_random_numbers; counter++)
{
    int random_number = random(upper_bound, lower_bound);
    int digit_1 = random_number % 10; random_number = random_number / 10;
    switch(digit_1)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }
    int digit_2 = random_number % 10; random_number = random_number / 10;
    switch(digit_2)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }

    int digit_3 = random_number % 10; random_number = random_number / 10;
    switch(digit_3)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }

}
cout << "0 occurs " << counter_0 << " times" << endl;
cout << "1 occurs " << counter_1 << " times" << endl;
cout << "2 occurs " << counter_2 << " times" << endl;
cout << "3 occurs " << counter_3 << " times" << endl;
cout << "4 occurs " << counter_4 << " times" << endl;
cout << "5 occurs " << counter_5 << " times" << endl;
cout << "6 occurs " << counter_6 << " times" << endl;
cout << "7 occurs " << counter_7 << " times" << endl;
cout << "8 occurs " << counter_8 << " times" << endl;
cout << "9 occurs " << counter_9 << " times" << endl;

system("pause");

return 0;
}

//random number generators
void randomize(void)
{
srand(unsigned(time(NULL)));
}

void randomize(int seed)
{
srand(unsigned(seed));
}

int random(void)
{
return rand();
}

int random(int upper_bound)
{
return rand() % (upper_bound + 1);
}

int random(int upper_bound, int lower_bound)
{
    if(upper_bound < lower_bound)
        {
    int t = upper_bound;
    upper_bound = lower_bound;
    lower_bound = t;
        }
int range = upper_bound - lower_bound + 1;
int number = rand() % range + lower_bound;
return number;
}

我添加了这些功能,看看它是否可以工作(图 1.1) (我添加了counterupper_boundlower_boundn_random_numbers,因为我不知道如何让函数从main() 中读取这些变量。我尝试将它们变成一个函数,在 main 中调用它们, 并在我创建的函数中调用它们,但这肯定不起作用。这些添加的函数用函数调用替换了原来的开关(参见:图 1.2)。它编译,但输出返回“0 出现 0 次, 1 出现 0 次,以此类推。”

图 1.1

int switch1 (int switch_1)
{
int upper_bound = 999;
int lower_bound = 100;
int n_random_numbers = 1000;
int counter = 0;

randomize();

int counter_0 = 0;
int counter_1 = 0;
int counter_2 = 0;
int counter_3 = 0;
int counter_4 = 0;
int counter_5 = 0;
int counter_6 = 0;
int counter_7 = 0;
int counter_8 = 0;
int counter_9 = 0;

int random_number = random(upper_bound, lower_bound);

int digit_1 = random_number % 10; random_number = random_number / 10;
    switch(digit_1)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }

}

int switch2 (int switch_2)
{
int upper_bound = 999;
int lower_bound = 100;
int n_random_numbers = 1000;
int counter = 0;

randomize();

int counter_0 = 0;
int counter_1 = 0;
int counter_2 = 0;
int counter_3 = 0;
int counter_4 = 0;
int counter_5 = 0;
int counter_6 = 0;
int counter_7 = 0;
int counter_8 = 0;
int counter_9 = 0;

int random_number = random(upper_bound, lower_bound);

int digit_2 = random_number % 10; random_number = random_number / 10;
    switch(digit_2)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }

}

int switch3 (int switch_3)
{
int upper_bound = 999;
int lower_bound = 100;
int n_random_numbers = 1000;
int counter = 0;

randomize();

int counter_0 = 0;
int counter_1 = 0;
int counter_2 = 0;
int counter_3 = 0;
int counter_4 = 0;
int counter_5 = 0;
int counter_6 = 0;
int counter_7 = 0;
int counter_8 = 0;
int counter_9 = 0;

int random_number = random(upper_bound, lower_bound);

int digit_3 = random_number % 10; random_number = random_number / 10;
    switch(digit_3)
    {
        case 0:
            counter_0++;
            break;
        case 1:
            counter_1++;
            break;
        case 2:
            counter_2++;
            break;
        case 3:
            counter_3++;
            break;
        case 4:
            counter_4++;
            break;
        case 5:
            counter_5++;
            break;
        case 6:
            counter_6++;
            break;
        case 7:
            counter_7++;
            break;
        case 8:
            counter_8++;
            break;
        case 9:
            counter_9++;
            break;
    }

}

图 1.2

for(int counter = 1; counter <= n_random_numbers; counter++)
{
    int random_number = random(upper_bound, lower_bound);
    int digit_1 = random_number % 10; random_number = random_number / 10;
    int digit_2 = random_number % 10; random_number = random_number / 10;
    int digit_3 = random_number % 10; random_number = random_number / 10;

switch1 (digit_1);
switch2 (digit_2);
switch3 (digit_3);

}

【问题讨论】:

  • 您应该阅读一本好的 C++ 书籍并了解有关数组、向量和集合的一般知识。有更好的方法来做任何你想做的事情。
  • @Mat - 我确信有更好的方法来做这个赋值,但这个赋值是专门“用两个或多个函数调用替换每个 switch 语句”。这就是为什么我以这种方式提出这个问题。
  • 如果您要发布一个作业让我们为您做,您至少可以发布需求的全文,而不仅仅是重复的“将每个 switch 语句替换为两个或多个函数电话,”短语。
  • @NicolBolas - 这是要求的精确文本:“第二个测试的第二个问题的解决方案,test2p2solution.cpp,包含3个switch语句。替换每个带有两个或多个函数调用的 switch 语句。你必须编写函数。你的程序和原始程序必须在给定相同的输入时产生相同的输出。我认为其余的可以省略。

标签: c++ function switch-statement


【解决方案1】:

无需开关:

int counters[10] = {};

for(int counter = 1; counter <= n_random_numbers; counter++)
{
    int random_number = random(upper_bound, lower_bound);
    int digit_1 = random_number % 10; random_number = random_number / 10;
    ++counters[digit_1];

    int digit_2 = random_number % 10; random_number = random_number / 10;
    ++counters[digit_2];

    int digit_3 = random_number % 10; random_number = random_number / 10;
    ++counters[digit_3];
}

【讨论】:

  • 虽然您的解决方案非常简洁,并且是一种更好的编程方式,但我敢肯定,任务是专门为“用两个或多个函数调用替换每个 switch 语句”,正如教授定义的那样说明(愚蠢,我知道)。不过,谢谢。
  • “用两个或多个函数调用替换每个 switch 语句”,没有多大意义......
  • 这些说明对我来说也很奇怪。以上面的数组和for 语句为例,如何将其放入函数中?你会回到节目中什么?以及如何在函数中读取random(upper_bound, lower_bound) 函数?可以在函数中调用函数吗?
  • 是的,你可以在一个函数中调用一个函数,main是一个函数,你正在调用它里面的其他函数。
  • 哦,你是对的!就在我头上。好吧,我试图将int upper_bound = 999; int lower_bound = 100; int n_random_numbers = 1000; 放在一个函数中,在 main 中调用它,然后在我为 switch 语句创建的函数中调用它,它没有从中读取任何变量,从而提供语法错误。我正在用我尝试过的输出更新原始帖子)。
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多