关于C语言中的函数调用问题,出现了以下错误,现贴出程序,请大家帮忙看一看,我是菜鸟....万分感谢!

关于C语言中的函数调用问题,出现了以下错误,现贴出程序,请大家帮忙看一看,我是菜鸟....万分感谢!,第1张

怀疑你这段代码是不是书上摘来的,连main()函数都没有,修改了下代码,上面四个错误不再出现了,你再把main()函数补上,应该可以运行了。

#include <stdioh>

#include "mathh"

#include "stdlibh"

void iirbcfpass(ns,n,f1,f2,f3,f4,db,b,a)

double b[],a[],f1,f2,f3,f4,db;

int ns,n;

{

int k;

double d,c;

double omega,lamda,esslon,fl,fh; //带通不需要omega;lamda;warp();bpsub();omin(),cosh1()

void bwtf();//函数声明

//double cosh1(),warp(),bpsub();omin();

void fblt();//函数声明

fl=f2;

fh=f3;

for (k=0;k<ns;k++)

{

bwtf(2ns,k,4,d,c); //求归一化L阶的每一阶的分子、分母系数

fblt(d,c,n,fl,fh,&b[k(n+1)+0],&a[k(n+1)+0]); //计算出低通滤波器系数,然后转化成为带通系数

}

}

static void bwtf(ln,l,k,n,d,c) //求归一化L阶的每一阶的分子、分母系数

int ln,k,n;

double d[],c[];

{

int i;

double pi,tmp;

pi=40atan(10);

d[0]=10;

c[0]=10;

for (i=1;i<n;i++)

{

d[i]=00;

c[i]=00;

}

tmp=(k+1)-(ln+10)/20;

if (tmp==00)

{

c[1]=10;

}

else

{

c[1]=-20cos((2(k+1)+ln-1)pi/(2ln));

c[2]=10;

}

}

static void fblt(d,c,n,fln,fhn,b,a)//计算出低通滤波器系数,然后转化成为带通系数

int n;

double fln,fhn,d[],c[],b[],a[];

{

int i,k,m,n1,n2,ls;

double pi,w,w0,w1,w2,tmp,tmpd,tmpc,work;

double combin();

void bilinear();

pi=40atan(10);

w1=tan(pifln);

for (i=n;i>=0 ;i-- )

{

if(c[i]!=00 || (d[i]!=00))

break;

}

m=i; //标示非0值的位置

n2=2m;

n1=n2+1;

work=malloc(n1n1sizeof(double));

w2=tan(pifhn);

w=w2-w1;

w0=w1w2;

for (i=0;i<=n2 ;i++ )

{

work[0n1+i]=00; //小心1与l

work[1n1+i]=00;

}

for (i=0;i<=m ;i++ )

{

tmpd=d[i]pow(w,(m-i));

tmpd=c[i]pow(w,(m-i));

for (k=0;k<=i ;k++ )

{

ls=m+i-2k;

tmp=combin(i,i)/(combin(k,k)combin(i-k,i-k));

work[0n1+ls]+=tmpdpow(w0,k)tmp;

work[1n1+ls]+=tmpcpow(w0,k)tmp;

}

}

for (i=0;i<=n2 ;i++ )

{

d[i]=work[0n1+i];

c[i]=work[1n1+i];

}

free(work);

bilinear(d,c,b,a,n);//合并每个级的系数到一个大的传递函数系数集合

}

static double combin(i1,i2)

int i1,i2;

{

int i;

double s;

s=10;

if (i2==0) return(s);

for (i=i1;i>(i1-i2) ;i-- )

{

s=i;

}

return(s);

}

static void bilinear(d,c,b,a,n)

int n;

double d[],c[],b[],a[];

{

int i,j,n1;

double sum,atmp,scale,temp;

n1=n+1;

temp=malloc(n1n1sizeof(double));

for (j=0;j<=n ;j++ )

{

temp[jn1+0]=10;

}

sum=10;

for (i=1;i<=n;i++)

{

sum=sum(double)(n-i-1)/(double)i;

temp[0n1+i]=sum;

}

for (i=1;i<=n ;i++ )

for (j=1;j<=n ;j++ )

{

temp[jn1+i]=temp[(j-1)n1+i]-temp[jn1+i-1]-temp[(j-1)n1+i-1];

}

for (i=n;i>=0 ;i-- )

{

b[i]=00;

atmp=00;

for (j=0;j<=n ;j++ )

{

b[i]=b[i]+temp[jn1+i]d[j];

atmp=atmp+temp[jn1+i]c[j];

}

scale=atmp;

if (i!=0)

{

a[i]=atmp;

}

}

for (i=0;i<=n ;i++ )

{

b[i]=b[i]/scale;

a[i]=a[i]/scale;

}

a[0]=10;

free(temp);

}

对于声明,4个选项中A、B(如果a后面的';'不是误写的话)不正确。函数声明与定义唯一区别是声明无须函数体。所以可以省略形参的名字。函数的三要素(返回类型、函数名、形参类型)描述了函数的接口,说明了调用该函数所需的全部信息。函数声明也称作函数原型。 A选项错误。形参类型不能省略 B选项错误(如果a后面的';'是误写的话,float fun(int a,int b); 是正确的),还可以写成 float fun(int, int ); C选项正确。是无参函数。 D选项正确。是表示形参是一个二维数组

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12462451.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存