三九宝宝网宝宝教育教学论文

C语言中的函数调用定义

12月23日 编辑 39baobao.com

[c语言常用函数]你说的那是数据结构吧 常用函数: 函数名: abs 功 能: 求整数的绝对值 用 法: int abs(int i); 程序例: #include #include int main(void) { int number = -1234; printf("number:...+阅读

函数的调用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语言程序要求找出原函数中的函数函数中需要函数名的地方写上 宏 __func__就可以了 #include const char* func1() { return __func__; //这语句类似return (char *)"func1"; } void func2() { printf("call f...

C语言函数递归调用问题算法思路,比如说10个圆盘,需要从a处移到c处,就是先把上面的9个盘移到b处,(怎么移呢,再调用函数move)再把第十个盘移到c处,再把b里面的9个移到c处,(怎么移呢,再调用函数move)。 经典的函...

二级C语言一道上机题关于函数的递归调用if (n > 1) return (n*fun(n-1)); return 1; 如果 n>1 执行 return (n*fun(n-1)); 否则执行 return 1; 因为 main 函数调用的是 fun(10); 所以对于 fun 函数,入口参数 n 等于10;...

C语言函数递归调用错误你这毛病太多!! 首先没看明白你的主函数怎样调用的change函数。 再者函数参数不够详细啊!!光有一个参数是不够的,还得有个数组下标作参数,好能表示你的字符要存到数组的哪个元素里...

c语言中数组名作为函数参数要将数组长度作为一个参数传给average函数,不能在average函数内部通过int arrLen = sizeof(a) / 4;来计算数组长度。因为float average(float a[10])就相当于float average(fl...

C语言函数模板中的非类型参数问题这些都是C++的玩意 T min( T (&arr)[size] ); //T (&arr)[size] arr是个数组的引用, 如果去掉括号,就变成引用的数组,而引用的数组是不存在的,改成T*就成了第二种定义了 用引用...

c语言主函数中的参数有什么用下面是两年前对一网友的回答,供参考,希望有帮助。 main是C/C++的一重要函数,叫主函数。无论程序多复杂,代码中必须有这么一个函数,也只能有一个这样的函数;程序执行时就是从这个函...

C语言二维数组做函数参数数组行和列都是自己输入的#include "stdio.h" main() { int i,j,a[2][2],max,flag=0; printf("enter the grade.\n"); for(i=0;ifor(j=0;jscanf("%d",&a[i][j]); max=a[0][0]; for(i=0;ifor(j=0;jif(max fo...

C语言调用函数以下是采用在主函数中进行size变化的代码 #define MO 5 int before_insert(int value, int array[], int max, size_t size, size_t index){ size_t moveIndex = 0; if (siz...

推荐阅读
图文推荐