问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求c 语言编程高手 帮看看那里出错了

发布网友 发布时间:2023-02-11 14:11

我来回答

5个回答

热心网友 时间:2024-11-26 02:39

改了以下几个地方:
1、把3个声明函数的地方的注释去掉了
2、把函数定义时的参数名字由m改成m1(因为m已经被定义成常量)

下面是修改后的源代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 1199
#define m 81
#define NN 1500

void main()
{
FILE *fp1,*fp2,*fp3;
double s[NN],b[NN],rxx[2397],y[NN],y1[NN],a;
int i,k;

void conv(double w[],int m1,double r[],int n,double s[],int l);
void cor(double *x,int n,double *h,int m1,double *y);
int lvs(double t[], int n,double b[],double x[]);
if((fp1=fopen("E:\\Seis.txt","r"))==NULL) //读地震合成记录
printf("Can't open file.\n");
else
{
for(i=0;i<N;i++)
{ fscanf(fp1,"%f",&a);
s[i]=a;}
}

for(i=0;i<m;i++) //右端项
{
if(i==0) b[i]=1.0;
else b[i]=0.0;
}

//调用相关函数,计算地震记录的自相关rxx[l]
cor(s,N,s,N,rxx);

//调用莱文森算法,计算反滤波因子,并输出
k=lvs(rxx,m,b,y);
printf("%d\n",k);

fp2=fopen("E:\\fanzibo.txt","w");
if(fp2==NULL) {printf("can't open file\n"); exit(0);}
for(i=0;i<m;i++)
{ fprintf(fp2,"%f\n",y[i]);}
fclose(fp2);

//调用褶积函数,计算反射系数
conv(y,m,s,N,y1,m+N-1);

fp3=fopen("E:\\fanzheji.txt","w");
if(fp3==NULL) {printf("can't open file\n"); exit(0);}
for(i=0;i<m+N-1;i++)
{ fprintf(fp3,"%f\n",y1[i]); }
fclose(fp3);
}
void conv(double w[],int m1,double r[],int n,double s[],int l) //褶积
{ int k,i;
for(k=0;k<l;k++)
{ s[k]=0.0; //初始化
for(i=0;i<m;i++)
{if(k-i>=0&&k-i<=n-1)
s[k]=s[k]+w[i]*r[k-i];}
}
}
//相关计算(计算x[n]与h[m]的互相关,结果为y[n])
void cor(double *x,int n,double *h,int m1,double *y)
{
int i,j;
for(i=0;i<n;i++)
{
y[i]=0.0;
for(j=0;j<m;j++)
{
if(i<=j)
y[i]+=x[j]*h[j-i];
}
}
}
int lvs(double t[], int n,double b[],double x[])
{
int i,j,k;
double a,beta,q,c,h,*y,*s;
s=(double *)malloc(n*sizeof(double));
y=(double *)malloc(n*sizeof(double));
a=t[0];
if(fabs(a)+1.0==1.0)
{
free(s);free(y);
printf("fail\n");
return(-1);
}
y[0]=1.0;x[0]=b[0]/a;
for(k=1;k<=n-1;k++)
{
beta=0.0;q=0.0;
for(j=0;j<=k-1;j++)
{
beta=beta+y[j]*t[j+1];
q=q+x[j]*t[k-j];
}
if(fabs(a)+1.0==1.0)
{
free(s);free(y);
printf("fail\n");
return(-1);
}
c=-beta/a;s[0]=c*y[k-1];y[k]=y[k-1];
if(k!=1)
for(i=1;i<=k-1;i++) s[i]=y[i-1]+c*y[k-i-1];
a=a+c*beta;
if(fabs(a)+1.0==1.0)
{
free(s);free(y);
printf("fail\n");
return(-1);
}
h=(b[k]-q)/a;
for(i=0;i<=k-1;i++)
{
x[i]=x[i]+h*s[i];
y[i]=s[i];
}
x[k]=h*y[k];
}
free(s);free(y);
return(1);
}

热心网友 时间:2024-11-26 02:40

你就是个高手了,直接看不懂,为啥用c语言呢,c#也很强呀

热心网友 时间:2024-11-26 02:40

将出错提示也贴出来才能告诉你啊

热心网友 时间:2024-11-26 02:41

//void conv(double w[],int m,double r[],int n,double s[],int l);
//void cor(double *x,int n,double *h,int m,double *y);
//int lvs(double t[], int n,double b[],double x[]);
这几个函数的声名你干嘛要注释掉?
注释掉了就没法儿调用了~~~~

另,像这样的程序干嘛不用FORTRAN啊。。。

热心网友 时间:2024-11-26 02:41

同上面,函数声明是不能注释掉的。
还有,你函数定义时引用的参数是数组,但是调用时用的是数组名,就是相当于首地址,个人觉得可能是这个错误吧~~~可以试试在函数定义时把数组参数改成地址参数~~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 2q币抵用券怎么用 单位没有劳动合同违法吗 单位没有签订劳动合同 qq农场捕鱼宝石最高多少级 手机qq农场捕鱼枪哪个比较好 qq农场捕鱼水晶炮怎么不暴击 海报的格式是怎样的? 做梦梦见自己在水龙头接水预示着什么 jj象棋单骑绝尖57关怎么过? QQ象棋五十七关破解 为什么有的人一吃人参就上火,口腔溃疡 梦见自己办理护照,准备出国是什么预兆? win+alt+r录制不工作,怎么办 pvc阻燃管可以用浴室冷水管吗 蜜雪冰城门口两个男的推荐饿了么下单返现是骗局吗 潍坊哪个医院治疗白癜风比较好 划拳怎么划,怎么判定赢,怎么输啊。 产品利润计算公式 手机掉了怎么找回照片和视频你好? 冥府判官这一角色是戏曲中的什么 求助:问一个专业点的问题 翡翠原石切片后怎么保养 翡翠原石怎么收藏 漫威幻影猫是不是无敌 漫威罗南 TCL D32E161液晶电视怎么样 TCL P3161 手机4G怎么开 tcl d32e161 32英寸内置wifi互联网led液晶电视电源关了怎么灯关不掉... 天天象棋138关残局怎么破解 你跟谁俩呢?啥意思? 象棋闯关138怎么过 你跟他们一样吗是什么意思 郑州教师资格面试报考条件是什么? 手工具的注意事项 我的世界七项修改器怎么用 血怎么清洗 被单 游戏中弓箭威力比枪械要大很多,现实中真的是这样吗 逆战,说明 复合弓 的优点和缺点! 乔家大院在什么地方? 没时间扎头发?10种发饰让你通勤照样也时髦