编制如下两个函数模板,用于完成所指定的功能;并编制主函数对它们进行调用: template <class T> Print(T *p, int n) {...} template <class T> void GtLever(T *p, int n, T lever){...} 其中,函数模板Print将数组p的前n个元素显示在屏幕上;函数模板Gtlever将p数组前n个元素中大于lever的各个元素, 依次移动到该数组的最前部,而后通过调用Print将p中大于lever的各元素显示在屏幕上。对于char型变量,按对应的ascii码比较大小。 输入 输入一共有两行,第一行为输入数组类型 (只需考虑int, float, char),数组长度,n的取值; 第二行为数组每一位的取值,lever的取值
时间: 2024-03-04 08:49:05 浏览: 80
根据题目要求,我们可以编写如下的函数模板:
```c++
#include <iostream>
using namespace std;
template <class T>
void Print(T *p, int n) {
for (int i = 0; i < n; i++) {
cout << p[i] << " ";
}
cout << endl;
}
template <class T>
void GtLever(T *p, int n, T lever) {
int j = 0;
for (int i = 0; i < n; i++) {
if (p[i] > lever) {
T temp = p[i];
p[i] = p[j];
p[j] = temp;
j++;
}
}
Print(p, j);
}
int main() {
char type;
int n, m;
cin >> type >> n >> m;
if (type == 'i') {
int *arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int lever;
cin >> lever;
GtLever(arr, n, lever);
delete [] arr;
} else if (type == 'f') {
float *arr = new float[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
float lever;
cin >> lever;
GtLever(arr, n, lever);
delete [] arr;
} else if (type == 'c') {
char *arr = new char[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
char lever;
cin >> lever;
GtLever(arr, n, lever);
delete [] arr;
}
return 0;
}
```
在主函数中,我们首先从输入中读取数组类型、数组长度和lever的值。然后根据数组类型动态申请一个数组,并读取每个元素的值。接下来,我们调用GtLever函数,将大于lever的元素移动到数组前面,并调用Print函数输出这些元素。最后,记得释放动态申请的数组。
测试样例:
```
i 5 3
1 3 2 4 5
3
```
输出结果:
```
4 5
```
我们可以看到,程序正确地输出了大于3的元素4和5。
阅读全文