C语言中的函数调用定义..........高人解释下

作者&投稿:岳阳 (若有异议请与网页底部的电邮联系)
C语言中能否在一个自定义函数中调用另一个自定义函数?~

当然可以!
C语言程序的最基本的模块就是函数,
该程序规定:任意函数都可以调用其它任意一个函数,包括函数本身;
1、函数调用自己本身, 这种称为递归;
通过递归,计算1+2+3+...+n值的代码:

2、自定义函数调用其它自定义函数的例子:
这个例子就是主函数调用自定义函数fun2,然后fun2调用另一个自定义函数fun1;

函数说明:“说明”的意思,即表明当前的程序文件中有这个函数。
函数定义:“定义”的意思,即为该函数下定义——这个函数具体有什么功能(函数体)。
2. 具体请先看代码:
#includeint sum(int a, int b); // 函数声明void main(){ int num1, num2; scanf("%d%d", &num1, &num2); printf("两个数的和为%d", sum(num1, num2)); }int sum(int a, int b) // 函数定义{ return a + b;}解释一下:
由于C语言的编译,是对c/cpp文件的内容从上至下编译。一般子函数(用户定义的函数)放在主函数(main函数)后面的话,main函数前面就该有声明,不然编译系统将无法识别到子函数。
例如上面这个例子,如果将前面的函数声明注释掉,这个程序运行到main函数中的sum(num1, num2)时就会报错,因为没有在main函数前编译到sum(a, b)这个函数,所以运行中就会识别不了sum这个函数。(如下图所示)

3. 当然,通常情况下,我们也可以直接将整个子函数的函数体(函数定义)放在main前面,这样就可以省略掉函数声明的部分。
#includeint sum(int a, int b) // 函数定义{ return a + b;}void main(){ int num1, num2; scanf("%d%d", &num1, &num2); printf("两个数的和为%d", sum(num1, num2)); }以上这个程序同样是可以正确编译运行的。

函数的调用
8.4.1 函数调用的一般形式
前面已经说过,在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。
C语言中,函数调用的一般形式为:
函数名(实际参数表)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
8.4.2 函数调用的方式
在C语言中,可以用以下几种方式调用函数:
1. 函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。
2. 函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf ("%d",a);scanf ("%d",&b);都是以函数语句的方式调用函数。
3. 函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。介绍printf 函数时已提到过,这里从函数调用的角度再强调一下。
【例8.3】
main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
}

如按照从右至左的顺序求值。运行结果应为:
8
7
7
8
如对printf语句中的++i,--i,i++,i--从左至右求值,结果应为:
9
8
8
9
应特别注意的是,无论是从左至右求值, 还是自右至左求值,其输出顺序都是不变的, 即输出顺序总是和实参表中实参的顺序相同。由于Turbo C现定是自右至左求值,所以结果为8,7,7,8。上述问题如还不理解,上机一试就明白了。
8.4.3 被调用函数的声明和函数原型
在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。
其一般形式为:
类型说明符 被调函数名(类型 形参,类型 形参…);
或为:
类型说明符 被调函数名(类型,类型…);
括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。
例8.1 main函数中对max函数的说明为:
int max(int a,int b);
或写为:
int max(int,int);
C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
1) 如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8.2的主函数中未对函数s作说明而直接调用即属此种情形。
2) 当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8.1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b)。
3) 如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。例如:
char str(int a);
float f(float b);
main()
{
……
}
char str(int a)
{
……
}
float f(float b)
{
……
}
其中第一,二行对str函数和f函数预先作了说明。因此在以后各函数中无须对str和f函数再作说明就可直接调用。
4) 对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。
8.5 函数的嵌套调用
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。

图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。
【例8.4】计算s=22!+32!
本题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。
long f1(int p)
{
int k;
long r;
long f2(int);
k=p*p;
r=f2(k);
return r;
}
long f2(int q)
{
long c=1;
int i;
for(i=1;i<=q;i++)
c=c*i;
return c;
}
main()
{
int i;
long s=0;
for (i=2;i<=3;i++)
s=s+f1(i);
printf("\ns=%ld\n",s);
}

在程序中,函数f1和f2均为长整型,都在主函数之前定义,故不必再在主函数中对f1和f2加以说明。在主程序中,执行循环程序依次把i值作为实参调用函数f1求i2值。在f1中又发生对函数f2的调用,这时是把i2的值作为实参去调f2,在f2 中完成求i2!的计算。f2执行完毕把C值(即i2!)返回给f1,再由f1返回主函数实现累加。至此,由函数的嵌套调用实现了题目的要求。由于数值很大,所以函数和一些变量的类型都说明为长整型,否则会造成计算错误。


C语言中反三角函数的调用
包含头文件 math.h 反3角函数有 acos(double),asin(double),atan(double),atan(double,double),返回值 double 型,弧度值。转角度要 *180.0\/3.1416 例如:include <stdio.h> include<stdlib.h> include<math.h> int main(){ double x=0.5;printf("acos=%.2lf degrees\\n",acos(x) * ...

在C语言中怎么将子函数中的数组和函数调用出来?
3、通过全局变量来传递数组。声明全局变量用于存储子函数中的数组,此时可以在全局变量作用域中读取调用子函数的数组。注意:子函数是C语言模块化编程思想的核心,其方法是通过输入接口和输出接口实现对黑盒的调用,故对其内部数据的输入和调用也需要通过输入接口、输出接口和程序的公共区域实现。

c语言中函数的定义和调用哪个可以嵌套哪个不可以嵌套!还是全部都可以嵌 ...
函数定义不可以嵌套,函数调用可以嵌套

c语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多 ...
可以调用多个函数,没有限制,除了main函数不可以调用。还有就是,它自己也可以调用自己。也可以调用一些库函数,比如“max(int,int)”,总之,除了main不可以,其他的都可以。不过在调用之前记得要声明。

c语言中函数调用XXXX时参数太少是什么意思?
就是说主函数调用自定义函数时,传递的参数数量要一致。比如:\\x0d\\x0avoid fun()\\x0d\\x0a{??}\\x0d\\x0amain()\\x0d\\x0a{\\x0d\\x0afun(); \/\/调用的时候没有参数,上面自定义函数fun后面的括号里就没有参数\\x0d\\x0a}\\x0d\\x0a\\x0d\\x0a再比如:\\x0d\\x0avoid fun(i...

C语言函数的调用函数名后面的形式参数表列可以是数字常量吗
函数名后面的形式参数表列不可以是常量!C语言中函数有三个概念:定义 声明 调用 函数定义:自定义一个函数,并完成相应的代码实现,如:int max( int a, int b ) \/\/小括号中的 a, b被称为形参,用来对应相应的实参,因为这里的形参可对应任意的实参值,所以,必须以变量形式体现。{ return ...

C语言 定义调用函数 求分段函数
int sign(int x){ int y; scanf("%d",&x); if(x>0) y=1; else if(x==0)\/\/判断语句是==不是=号 y=0; else y=-1; return y; }

关于c语言 在c中调用函数时,只能把实参的值传递给形参,形参的值不能...
C语言中的自动变量是默认的变量,实际上是函数中的局部变量,所以D选项正确。全局变量一经定义都是需要分配内存单元,在程序运行过程中自始至终都会占用固定的空间,在未知内存情况下,最好不要使用全局变量。函数调用时,值可以双向传递,并没有限制使用全局变量还是局部变量,需要根据程序的逻辑需要进行...

在c语言中自定义了一个函数,在main中调用时提示找不到标识符,怎么办...
把定义的函数放在,main函数之前即可。自定义的函数需要声明在调用之前,比如说在main函数里调用自定义的fun(),则fun()的方法体需要写在main函数之前。在C语言中的执行总是从main函数开始的,无论main函数在哪个位置都肯定从它开始。如果你定义的函数在main函数之后。而且在main函数前没有进行该调用函数...

c语言 现在定义了一个函数void xxxxx() 要在主函数中调用它 应该...
有两种形式,举个例子(假设,我定义了 void f()函数):1.void f(){ ...} ...int main () \/\/主函数 { ...return 0;} 这种情况下,可以在main函数里面,直接用f()来使用;2...int main () \/\/主函数 { ...return 0;} ...void f(){ ...} 这种情况下,编译时错误的...

襄城区13130349423: C语言中的函数调用定义..........高人解释下 -
虞吴博尔: 函数的调用 8.4.1 函数调用的一般形式 前面已经说过,在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似. C语言中,函数调用的一般形式为:函数名(实际参数表) 对无参函数调用时则无实际参数表.实际...

襄城区13130349423: 在C语言程序中,被调用的函数必须在main( )函数中定义 这句话对吗、、、 -
虞吴博尔: 不对.C语言中函数可以定义在main()函数外面,如下列代码中定义的swap函数,就是在main()函数外面. 示例代码:#include<stdio.h> void swap(int *a,int *b){ int t; t = *a; *a = *b; *b = t; } int main(){ int a=23,b = 43; printf("输入的两个...

襄城区13130349423: c语言如何实现函数的调用 -
虞吴博尔: 函数名加(实参),这样吧...举个例子你看一下...int add(int x,int y) { int x,y; int z; z=x+y; return z; }//定义一个z=x+y的函数int main()//主函数 { int a=10,b=20; int m; m=add(a,b);//这句就是函数的调用...调用了add函数 printf("%d",m); return m; }理解了没...还没的话...仔细看下教材...这个问题很容易解决的...

襄城区13130349423: 搞不懂C语言 函数的定义,嵌套,调用. -
虞吴博尔: 举个简单的例子 比如我想得到两个三个数种最小的一个,我就可以把这个计算过程编写为一个函数,这个函数有三个参数,就是这三个数,通过函数的计算,返回这个最小的数.在使用的时候,我只需要通过函数名调用这个函数,就可以得到返回的最小值. 嵌套,可以理解为函数里面含有函数.比如我想在计算最小值得过程中间得到平均值,我就可以在刚才那个函数里面,引用另外一个函数,就是计算平均值,这样就是嵌套了.

襄城区13130349423: C语言中的函数调用介绍?
虞吴博尔: 如果一个函数要使用参数,它就必须定义接受参数值的变量. 形式参数与实际参数 函数定义时填入的参数我们称之为形式参数,简称形参,它们同函数内部的局部变量作用相同.形参的定义是在函数名之后和函数开始的花括号之前. 调用时填...

襄城区13130349423: c语言中如何在一个函数中调用在另个文件中定义的函数
虞吴博尔: 一、前提条件: 1、两个文件必须编入同一个可执行文件; 2、被调用函数必须是全局函数,即不能是static函数.如果有static修饰,那么必须写在头文件中,并被另一个文件引用. 二、声明: 1、可以声明在头文件中,并在调用文件中引用该头文件; 2、可以直接在调用文件声明,形式为 extern RET_TYPE FUNC_NAME(PARAM_LIST); 其中extern非必须,但一般都会写上,表示这个是其它文件定义的. 三、调用: 声明后,直接调用即可,和本文件函数调用方式并无区别.

襄城区13130349423: C语言语法中函数的定义与调用 -
虞吴博尔: 在调用之前必须看到函数的原型(声明)或定义.

襄城区13130349423: C 语言函数定义调用 -
虞吴博尔: 你要搞明白什么是函数定义,什么是函数声明?函数定义在函数调用之前,则该函数定义也起到了函数声明的作用,但是函数定义必须有参数类型和参数变量名(也称形参),函数声明可以只声明参数类型,而不写明变量名.这是你的定义,那你觉得对不对?int sub(int ,int ) { int c=c*c; int d=d*d; printf("c=%d\td=%d\n",c,d); return c-d; }

襄城区13130349423: C语言函数调用定义
虞吴博尔: 选D. 因为 double x[10] 可以看成 double* x

襄城区13130349423: C语言如何调用函数 -
虞吴博尔: 1. 打开Ubuntu,并在目标路径下开启一个终端. 2. 选定一个路径,使用touch命令创建三个文件,function.h,function.c,test.c,分别用来做函数头文件、函数源文件以及测试文件. 3. 首先用vim命令与vsplit依次打开三个文件. 4. 在头文件...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网