#include #include #include #include using namespace std; #define MAX 40 const char* taskNames[] = { "factorial", "fibonacci", "power", "productof", "sumfromzeroto", "sumof" }; enum tasks { Factorial, Fibonacci, Power, ProductOf, SumFromZeroTo, SumOf, EndOfTask }; tasks nextTask(tasks&); tasks taskOf(char*); void dispMainMenu(); double factorial(const int); int fibonacci(int); double power(int, int); int productOf(const int, const int, const int, const int); double sumFromZeroTo(int); int sumof(const int, const int, const int, const int); tasks nextTask(tasks &Task) { switch (Task) { case Factorial: Task = Fibonacci; break; case Fibonacci: Task = Power; break; case Power: Task = ProductOf; break; case ProductOf: Task = SumFromZeroTo; break; case SumFromZeroTo: Task = SumOf; break; case SumOf: Task = EndOfTask; break; case EndOfTask: Task = EndOfTask; break; } return Task; } tasks taskOf(char* str) { tasks task; for (task = Factorial; task < EndOfTask; task = nextTask(task)) { if (strcmp(str, taskNames[task]) == 0) return task; } return EndOfTask; } int main() { cout << "Enter command: "; char cmdStr[MAX], cmd[MAX / 2]; gets(cmdStr); cout << "You typed: " << cmdStr << endl; int count, data[4]; count = sscanf(cmdStr, "%s %d %d %d %d", cmd, &data[0], &data[1], &data[2], &data[3]); cout << count << " parts parsed: " << cmd; for (int i = 0; i < count - 1; i++) cout << " " << data[i]; cout << endl;

if (count < 2) //incorrect input { cout << "incorrect input..."; dispMainMenu(""); system("pause"); return 0; } // get lowercase string in taskStr for (int i = 0; cmd[i] != '\0'; ++i) { if (isalpha(cmd[i])) cmd[i] = (char)(isupper(cmd[i])) ? tolower(cmd[i]) : cmd[i]; } cout << "Normalized command: " << cmd; for (int i = 0; i < count - 1; i++) cout << " " << data[i]; cout << endl << endl; switch (taskOf(cmd)) { case Factorial: // 'factorial', if (count < 2) cout << "Usage: Factorial ofSomeNum" << endl; else { cout << "task: " << taskNames[Factorial] << " of " << data[0] << endl; cout << " " << data[0] << "! = " << factorial(data[0]) << endl << endl; } break; case Fibonacci: // 'fibonacci', if (count < 2) cout << "Usage: Fibonacci numOfItems" << endl; else { cout << "task: " << taskNames[Fibonacci] << " numbers of the first " << data[0] << " terms:" << endl; for (int i(0); i <= data[0]; i++) { cout << "f(" << i << ")=" << fibonacci(i) << endl; } } cout << endl; break; case Power: // 'power', if (count < 3) cout << "Usage: Power baseNum powerNum" << endl; else { cout << data[0] << " to the power of " << data[1] << " = " << power(data[0], data[1]) << endl; } break; case ProductOf: // 'productof', if (count < 3) cout << "Usage: ProductOf num1 num2 [num3 [num4] ]" << endl; else { cout << "task: " << taskNames[ProductOf] << endl; int Max; if (count > 5) Max = 5; else Max = count; cout << " "; for (int i = 0; i < Max - 1; i++) { if (i < Max - 2) cout << data[i] << " * "; else cout << data[i] << " = "; // << sum << endl; } switch (Max) { case 5: cout << productOf(data[3], data[2], data[1], data[0]) << endl; break; case 4: cout << productOf(data[2], data[1], data[0]) << endl; break; case 3: cout << productOf(data[1], data[0]) << endl; break; } } cout << endl; break; case SumFromZeroTo: // 'sumfrom0to' , if (count < 2) cout << "Usage: SumFromZeroTo num" << endl; else { cout << "task: " << taskNames[SumFromZeroTo] << " " << data[0] << endl << endl; cout << " 0 + " << "... + (" << data[0] << ") = " << sumFromZeroTo(data[0]) << endl << endl; } break; case SumOf: // 'sumof' if (count < 3) cout << "Usage: SumOf num1 num2" << endl; else { cout << "task: " << taskNames[SumOf] << endl; int Max; if (count > 5) Max = 5; else Max = count; cout << " "; for (int i = 0; i < Max - 1; i++) { if (i < Max - 2) cout << data[i] << " + "; else cout << data[i] << " = "; // << sum << endl; } switch (Max) { case 5: cout << sumof(data[0], data[1], data[2], data[3]) << endl; break; case 4: cout << sumof(data[0], data[1], data[2]) << endl; break; case 3: cout << sumof(data[0], data[1]) << endl; break; } } cout << endl; break; default: cout << "No such task in the taskList..." << endl; break; } system("pause"); return 0; }

// 函数定义 void dispMainMenu() { // TODO: 实现显示主菜单的功能 } double factorial(const int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int fibonacci(int n) { if (n <= 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } double power(int x, int n) { if (n == 0) { return 1; } else { return x * power(x, n - 1); } } int productOf(const int a, const int b, const int c, const int d) { return a * b * c * d; } double sumFromZeroTo(int n) { if (n == 0) { return 0; } else { return n + sumFromZeroTo(n - 1); } } int sumof(const int a, const int b, const int c, const int d) { return a + b + c + d;

C++ Enum 详解:nextTask, taskOf 函数和 main 函数解析

原文地址: https://www.cveoy.top/t/topic/nxpb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录