程序用于查找一组数中呈现峰值的数及其个数。所谓呈现峰值的数,是指满足下列条件的数组元素a[i]: a[i-1]<a[i] 且 a[i]>a[i+1] 或者 a[i-1]>a[i] 且 a[i]<a[i+1]。其中:1<=i<=n-1 例如,数组: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 12 13 21 34 32 41 24 12 11 中a[3]既大于a[2]又大于a[4],a[4]既小于a[3]又小于a[5]。故a[3]、a[4]、a[5]即为正、负峰值(不含第0个和最后一个) 运行时可输入如下数据调式程序: 12 13 21 34 32 41 24 12 11 //3个峰值 11 12 13 14 15 16 17 18 19 //0个峰值 要求: 1. 在主函数中,数组a[10]中的数据由文件file1.txt中读入后由屏幕输出;由主函数调用voud find(int a[ ],int b[ ])函数,找出结果,并存入数组b中,并输出查找的结果(包括文件输出和屏幕输出)输出的文件为file2.txt。 2. voud find(int a[ ],int b[ ])函数根据以上算法找出峰值,并返回峰值的个数 3. 输出格式如下: 【运行结果】 测试数据如下: a[i]= 12 13 21 34 32 41 24 12 11 计算结果: b[i]= 34 32 41 有3个峰值
时间: 2023-09-18 21:13:52 浏览: 41
以下是代码实现:
```c++
#include <iostream>
#include <fstream>
using namespace std;
int find(int a[], int b[]) {
int count = 0;
for (int i = 1; i < 9; i++) {
if ((a[i] > a[i - 1] && a[i] > a[i + 1]) || (a[i] < a[i - 1] && a[i] < a[i + 1])) {
b[count] = a[i];
count++;
}
}
return count;
}
int main() {
int a[10], b[10];
ifstream infile("file1.txt");
for (int i = 0; i < 10; i++) {
infile >> a[i];
}
infile.close();
int count = find(a, b);
ofstream outfile("file2.txt");
outfile << "测试数据如下:\na[i]= ";
for (int i = 0; i < 10; i++) {
outfile << a[i] << " ";
}
outfile << "\n计算结果:\nb[i]= ";
for (int i = 0; i < count; i++) {
outfile << b[i] << " ";
}
outfile << "\n有" << count << "个峰值";
outfile.close();
cout << "测试数据如下:" << endl;
for (int i = 0; i < 10; i++) {
cout << "a[" << i << "]=" << a[i] << " ";
}
cout << "\n计算结果:" << endl;
for (int i = 0; i < count; i++) {
cout << "b[" << i << "]=" << b[i] << " ";
}
cout << "\n有" << count << "个峰值" << endl;
return 0;
}
```
解释一下代码:
- `find` 函数用于查找峰值,并将结果存入数组 `b` 中。函数返回峰值的个数。
- `main` 函数从文件 `file1.txt` 中读入数据,并调用 `find` 函数查找峰值。然后将结果输出到文件 `file2.txt` 中,并在屏幕上输出。