#include<stdio.h>

#include<math.h>
#define N 300  /*N为谱数据的总道数*/


char head[155];
double ypu[N],lvbo[N],bdi[N],jfeng[N],zj[N];  

void main(void)
   {    
    
    
        int ci;
        FILE   *fp,*fp1;                    /*fp为原谱数据文件指针,fp1为写文件指针*/
        double    w1,w2;
        int i,j,k;            /*i为道数,k为迭代次数*/
        
        char name[20];                /*文件名*/

    
        printf("Enter ci\n");
        scanf("%d",&ci);
    
    printf("Enter the name\n");
    scanf("%s",name);
    if((fp=fopen(name,"r"))==NULL)               /*打开一个文件读数据*/
         {
        printf("cannot open file:");
        exit(0);
         }
    fread(head,1,155,fp);
    printf("%s\n",head);
    
    for(i=0;i<N;i++)
        fscanf(fp,"%ld",&ypu[i]);
        
                                

        for(i=0;i<N;i++)
        bdi[i]=log(1+log(1+sqrt(ypu[i]+1)));    /*原谱数据对数变换*/
    
for(k=1;k<=ci;k++)                    /*k次迭代*/
    {
        for(j=0;j<N;j++)
            {
                lvbo[j]=bdi[j];                        
            }    
        for(i=k;i<N-k;i++)            /*对第i个数据滤波*/            {
                    w1=lvbo[i];
                    w2=(lvbo[i-k]+lvbo[i+k])/2;
                    bdi[i]=w1<w2?w1:w2;
                }    

        }
        
    
    for(i=0;i<N;i++)
        bdi[i]=(exp(exp(bdi[i]-1)-1))*(exp(exp(bdi[i]-1)-1))-1;/*指数转换后即本底*/

        
 
    for(i=0;i<N;i++)
        jfeng[i]=ypu[i]-bdi[i];

  
if((fp1=fopen("zjtai.txt","w+"))==NULL)               /*净峰计数*/
        {
        printf("cannot open file:");
        exit(0);
        }        
      for(i=0;i<N;i++)
        fprintf(fp1,"%f\n",jfeng[i]); 
                 
      fclose(fp);    
      fclose(fp1);
      getch();
        }
        
        
        
    小弟学物理的,这个编程不熟悉,高手指点下,感激不尽~~~