【发布时间】: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)
(我添加了counter、upper_bound、lower_bound、n_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