#include <stdlib.h>
#include <limits.h>
#include<malloc.h>
#define maxsize 6 //每个波形数据最大采集个数 默认6
typedef struct array1
{
int *data
struct array1 *next
}ARR1
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据节点 返回尾节点
int findMaxF(ARR1 *arrHead)//查找最大峰值
int removeMinF(ARR1 *arrHead)//移除最小峰值数据组 返回最小峰值
void printfArr(ARR1 *arrHead)//打印数据链表
int main()
{
ARR1 *arrHead=(ARR1 *)malloc(sizeof(ARR1))
arrHead->next=NULL
ARR1 *arrTail=NULL
arrTail=addNewArr(arrHead,arrTail)//想插入几组,就调用几次 我就测试6组
arrTail=addNewArr(arrHead,arrTail)
arrTail=addNewArr(arrHead,arrTail)
arrTail=addNewArr(arrHead,arrTail)
arrTail=addNewArr(arrHead,arrTail)
arrTail=addNewArr(arrHead,arrTail)
printf("采集的原数据组为:\n")
printfArr(arrHead)
printf("最大峰值:%d,最小峰值值:%d\n",findMaxF(arrHead),removeMinF(arrHead))
printf("删除最小峰值数据组后的数据为:\n")
printfArr(arrHead)
return 0
}
void printfArr(ARR1 *arrHead)//打印数据链表
{
while(arrHead->next!=NULL)
{
printf("%d,%d,%d,%d,%d,%d\n",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5])
arrHead=arrHead->next
}
}
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据 返回尾节点
{
int *data=(int *)malloc(sizeof(int)*maxsize),i
printf("采集一组波形数据(最大采集个数%d):",maxsize)
for(i=0i<maxsizei++)
scanf("%d",&data[i])
ARR1 *arrNew=(ARR1 *)malloc(sizeof(ARR1))
arrNew->data=data
arrNew->next=NULL
if(arrHead->next==NULL)//插入第一组数组 作为首节点
arrHead->next=arrNew
else
arrTail->next=arrNew
arrTail=arrNew
return arrTail
}
int findMaxF(ARR1 *arrHead)//查找最大峰值
{
int i,maxNum=0,maxf=0
while(arrHead->next!=NULL)
{
maxNum=0
for(i=0i<maxsizei++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i]
}
if(maxNum>maxf)//获取最大峰值
maxf=maxNum
arrHead=arrHead->next
}
return maxf
}
int removeMinF(ARR1 *arrHead)//移除最小峰值数据组 返回最小峰值
{
int i,maxNum=0,minf=INT_MAX
ARR1 *minDataSave=NULL,*arrHeadSave=arrHead
while(arrHead->next!=NULL)
{
maxNum=0
for(i=0i<maxsizei++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i]
}
if(maxNum<minf)//获取最小峰值
{
minDataSave=arrHead->next
minf=maxNum
}
arrHead=arrHead->next
}
arrHead=arrHeadSave
//移除最小峰值数据组
while(arrHead->next!=NULL)
{
if(arrHead->next==minDataSave)//删除节点重组链表
{
arrHead->next=minDataSave->next
minDataSave->next=NULL
free(minDataSave->data)//释放节点内存
free(minDataSave)
break
}
arrHead=arrHead->next
}
return minf
}
输出 y = H* sin( 2*pi*f*t + 45.0/180.0*pi) 的信号即可。下面程序产生 360个点。
#include <stdio.h>
#include <math.h>
int main () {
double f=160.0
double h=45.0,om
double phase=45.0//degrees
double pi
double t,dt
double s[360] //存放生成的信号
int i
pi = 4.0*atan(1.0) //圆周率
om = 2.0*pi*f //圆频率
phase = 45.0/180.0*pi //相位
printf("pi=%f om=%f phase=%f\n",pi,om,phase)
dt = 0.00002 //时间步长
for (i=0i<360i++) s[i]= h * sin(om * dt * i + phase)
for (i=0i<360i++) {printf("%8.3f ",s[i])if (i%5==0) printf("\n")}
return 0
}