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 展开
#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 展开
2个回答
展开全部
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);
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);
展开全部
高斯函数定义可以写在
#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)())
{
程序块
}
这些问题解决后再研究别的问题,否则,错得太多,找不到家了。
#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 , 需要 用 一个 变量来接收。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询