C语言子程序的定义和调用

#include"stdio.h"#include"stdlib.h"#include"math.h"#include"time.h"#defineu12.5#defin... #include"stdio.h"
#include"stdlib.h"
#include"math.h"
#include"time.h"
#define u1 2.5
#define u2 2.5
#define f20 0
#define f21 0.5
#define uc1 4.5
#define uc2 4.5
#define l 0.1
#define v 1.555
#define R 0.85
#define R1 0.024
#define PI 3.1415926
void rkt2(t,h,y,n,eps,s,f)
void (*f)();
int n;
double t,h,eps,guassian(double t),s[],y[];(这句的guassian不对)
{int m,i,j,k;
double hh,p,dt,x,tt,q,r,z,a[4],*g,*b,*c,*d,*e;
g=malloc(n*sizeof(double));
b=malloc(n*sizeof(double));
c=malloc(n*sizeof(double));
d=malloc(n*sizeof(double));
e=malloc(n*sizeof(double));
。。。运算程序

}
}
}
子程序用在这里:
{ guassian(t);

y[3]=((1-u1*(R+R1*z))*y[3])/(1+u1)+(u1*(1+(R+R1*z))*y[5])/(1+u1);
y[5]=((1+(R+R1*z))*y[3])/(1+u1)+((u1-(R+R1*z))*y[5])/(1+u1);
s[0]=t;}
}
else
{s[0]=0;}
free(g);free(b);free(c);free(d);free(e);
return;
}

主程序删减
需调用的子程序如下
double guassian(double t)
{
double z;
double aa,bb;
srand( (unsigned)time( NULL ) );
aa=sqrt(-2.0*log(rand()/32767.0));
bb=2*PI*rand()/32767.0;
z=0.4*aa*cos(bb)+0;
return z;
}
如果不清楚的话,这个上边的子程序怎么调用
{ double guassian(double t);

guassian(t);
y[3]=((1-u1*(R+R1*z))*y[3])/(1+u1)+(u1*(1+(R+R1*z))*y[5])/(1+u1);
y[5]=((1+(R+R1*z))*y[3])/(1+u1)+((u1-(R+R1*z))*y[5])/(1+u1);
s[0]=t;}
这样调行不,其他的0错0警告,可上边的z,下边提示
local variable 'z' used without having been initialized
展开
 我来答
tattackor
推荐于2017-09-28 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:878万
展开全部
1、在C/C++中,没有子程序的说法,而叫做函数。函数可以有返回值,不需要时,可定义为void类型。函数的使用与子程序的用法相同,没有什么特殊之处。
2、例如
.............................................................................
int max(int a, int b) { /* 返回a和b的最大值 */
return (a > b) ? a : b;
}
.............................................................................
int a = 5,b = 8,c = 3;
printf("a,b,c中的最大值是 : %d\n",max(max(a,b),c);
金色潜鸟
2015-06-05 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5634万
展开全部
高斯函数定义可以写在
#define PI 3.1415926 这行的下一行
double guassian(double t)
{
double z;
double aa,bb;
srand( (unsigned)time( NULL ) );
aa=sqrt(-2.0*log(rand()/32767.0));
bb=2*PI*rand()/32767.0;
z=0.4*aa*cos(bb)+0;
return z;
}
接下来,原来写的 void rkt2(t,h,y,n,eps,s,f) 显然有错,需纠正。
猜想是非常古老的函数写法。新写法是
void rkt2(double t, double h, double *y, int n, double eps, double *s, void (*f)())
{
程序块
}
这些问题解决后再研究别的问题,否则,错得太多,找不到家了。
追问
{ double guassian(double t);

guassian(t);
y[3]=((1-u1*(R+R1*z))*y[3])/(1+u1)+(u1*(1+(R+R1*z))*y[5])/(1+u1);
y[5]=((1+(R+R1*z))*y[3])/(1+u1)+((u1-(R+R1*z))*y[5])/(1+u1);
s[0]=t;}
这样调行不,其他的0错0警告,可上边的z,下边提示
追答
删掉函数原型声明  double guassian(double t); 
--------------------
调用 时,如果 实际参数 double t 已有 值, 那么 调用 是
double some_z_value;
some_z_value = guassian(t);
由于函数参数不是指针,t 只能进入函数,不能带回值。
函数返回 double , 需要 用 一个 变量来接收。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式