2012-02-26 56 views
-3

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

我试着把开关语句放到自己的函数中,只是把开关语句本身放在它们自己的函数中,当然,这也产生了大量的语法错误(例如counter,random_number)。我不知道该怎么做,如何将适当的值返回到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); 

} 
+1

你应该读好C++的书,了解数组,向量,和一般的集合。做任何你想做的事情都有更好的方法。 – Mat 2012-02-26 19:18:33

+0

@Mat - 我确定有更好的方法来完成这个任务,但是这个任务专门用来“用两个或多个函数调用替换每个switch语句”。这就是我以这种方式提出问题的原因。 – Danny 2012-02-26 19:21:35

+0

如果您要为我们发布一个任务,您至少可以发布需求的全文,而不仅仅是重复的“用两个或多个函数调用替换每个switch语句”的短语。 – 2012-02-26 19:31:37

回答

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]; 
} 
+0

虽然你的解决方案非常干净,并且是一种更好的编程方式,但我确定,这个任务专门用于“用两个或更多函数调用替换每个开关语句”,正如教授的指令所定义的(我知道这很愚蠢) 。不过谢谢你。 – Danny 2012-02-26 19:22:47

+0

“用两个或多个函数调用替换每个switch语句”,并不合理...... – ronag 2012-02-26 19:29:27

+0

指令对我来说似乎也很奇怪。以上面的数组和'for'语句,如何将其放入函数中?你会返回什么程序?那么函数中的'random(upper_bound,lower_bound)'函数将被读取?你可以在一个函数内调用一个函数吗? – Danny 2012-02-26 19:39:29