编一个程序,用来求2个或3个正整数中的最大数。 1用不带默认参数的函数实现。 2用带有默认参数的函数实现。
时间: 2024-09-28 08:10:19 浏览: 37
gongyueshu.zip_gongyueshu_函数调用
要编写两个版本的程序,一个不使用默认参数,另一个使用默认参数,我们可以分别创建一个没有默认值的模板函数`findMax`和一个带有默认参数的模板函数`findMaxWithDefault`。
**1. 不带默认参数的函数实现(template without default arguments)**
```cpp
#include <iostream>
// 模板函数,寻找任意数量的正整数中的最大值
template<int N, int... Args>
int findMax(int a, int b, Args... rest) {
return (a > b) ? a : (rest == Args() || *std::max_element(rest.begin(), rest.end()) < a) ?
a : findMax<N - 1>(b, rest...);
}
// 入口函数,处理2个或3个参数
int findMaxNoDefaults(int a, int b, int c = 0) {
if (c == 0) { // 如果只有两个参数
return findMax<2>(a, b);
} else { // 如果有三个参数
return findMax<3>(a, b, c);
}
}
int main() {
int num1, num2, num3;
std::cout << "Enter 2 or 3 positive integers: ";
std::cin >> num1 >> num2;
if (num3 != 0) { // 如果用户输入了第三个数
std::cin >> num3;
std::cout << "The maximum number is: " << findMaxNoDefaults(num1, num2, num3) << std::endl;
} else {
std::cout << "The maximum number between " << num1 << " and " << num2 << " is: " << findMaxNoDefaults(num1, num2) << std::endl;
}
return 0;
}
```
**2. 带有默认参数的函数实现(template with default arguments)**
```cpp
#include <iostream>
#include <algorithm> // for std::max_element
// 模板函数,带有默认参数,用于查找最大值
template<int N, int... Args>
int findMaxWithDefault(int a, int b = INT_MIN, Args... rest) {
return (a > b) ? a : (rest == Args() || *std::max_element(rest.begin(), rest.end()) < a) ?
a : findMaxWithDefault<N - 1>(b, rest...);
}
int main() {
int num1, num2;
std::cout << "Enter 2 or 3 positive integers (up to 3): ";
std::cin >> num1 >> num2;
int num3;
if (std::cin >> num3 && num3 != 0) { // 用户可能输入三个数
std::cout << "The maximum number is: " << findMaxWithDefault<3>(num1, num2, num3) << std::endl;
} else { // 只有两个数
std::cout << "The maximum number between " << num1 << " and " << num2 << " is: " << findMaxWithDefault<2>(num1, num2) << std::endl;
}
return 0;
}
```
阅读全文