在众多峰值中找最大的峰值

来源:百度知道 编辑:UC知道 时间:2024/08/23 02:30:42
1.定义函数TopPoints。
函数原型: int TopPoints(int d[],int n)
功能说明: 计算数组d中峰值的个数。
参数说明: d 数组的起始地址。
n 数组d中数据的个数(n>2)。
返回值: 数组d中最大的一个峰值的个数(d中不止一个峰值)。
说明: 若数组成员d[i]中的数据既大于它的前一个数据d[i-1],也大于它的
后一个数据d[i+1],则d[i]是数组内的一个峰值。
例:设数组data中前6个数据如下:
100 76 83 58 86 72
则该数组的6个数据内有2个峰值(如上带下划线的数据),因此,函数调用
TopPoints(data,6)
的返回值应该是86
哎呀,功能说明说错了,是计算峰值中的最大值

本题的一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include <stdio.h>
#include <stdlib.h>
#define N 80
int num,b[N]; /* num表示峰值的个数,定义为全局变量,初值为0 */
/* b[]存储所有找大的峰值 */
int TopPoints(int d[],int n)
{int i,j;
int peakmax=-32768; /* 峰值最大值,初值设为整型最小值 */
for(i=0;i<n-2;i++)
if(d[i+1]>d[i]&&d[i+1]>d[i+2])
{ b[num]=d[i+1];
if(d[i+1]>peakmax)
peakmax=d[i+1];
num++;
}
return peakmax;
}
int main()
{int i,n,max,d[N];
printf("Please input number of digits:\n");/*输入数字个数*/
scanf("%d",&n);
printf("Please input %d digits one by one:\n",n); /*输入各个数字*/
for(i=0;i<n;i++)
scanf("%d",&d[i]);
max=TopPoints(d,n);
printf("There are %d peak values.They are:\n",num);
for(i=0;i<num;i++)
printf("%-5d",b[i]);
printf("\nThe largest is: %d\n"