c语言子函数互相调用 c语言子函数调用主函数数组( 二 )


4、所有递归问题都可以用非递归的方法来解决 , 但对于一些比较复杂的递归问题用非递归的方法往往使程序变得十分复杂难以读懂,而函数的递归调用在解决这类 问题时能使程序简洁明了有较好的可读性;但由于递归调用过程中 , 系统要为每一层调用中的变量开辟内存空间、要记住每一层调用后的返回点、要增加许多额外的 开销,因此函数的递归调用通常会降低程序的运行效率 。
五、程序流程
fac(int n) /*每次调用使用不同的参数*/
{ int t; /*每次调用都会为变量t开辟不同的内存空间*/
if(n==1)||(n==0) /*当满足这些条件返回1 */
return 1;
else
{ t=n*fac(n-1); /*每次程序运行到此处就会用n-1作为参数再调用一次本函数,此处是调用点*/
return t; /*只有在上一句调用的所有过程全部结束时才运行到此处 。*/
}
}
C语言子函数是否可以互相调用语法上可以的 , 但工程上会尽量避免 。
另外,递归就相当于一种子函数相互调用的极限形式,相当于两个子函数相同 。
C语言中一个子函数怎么调用另一个子函数的运算?方法很多 。
主要是要将不同类型传递给fun2处理 。
最简单float类型最大 , fun2的参数类型就定义为float,然后运算结果返回float类型 。在main函数用a3,b3,c3接收的时候强转型 。
另一种方法,把变量都转换成一种类型传递 。这里用union共用体类型就比较适合 。还方便扩展 , 如果想添加其他类型还可以在union里添加 。
我这里代码就用第二种方法写 。
#include stdio.h
typedef union data{
char c;
int i;
float f;
}DA;
void fun1(void);
DA fun2(DA n1,DA n2,int nType);//nType=1:char类型 。nType=2:int类型 。nType=3:float类型 。
int main()
{
fun1();
return 0;
}
void fun1(void)
{
char a1=1,a2=2;
int b1=100,b2=300;
float c1=5.1,c2=6.8;
DA n1,n2;
n1.c=a1,n2.c=a2;
char a3=fun2(n1,n2,1).c;
n1.i=b1,n2.i=b2;
int b3=fun2(n1,n2,2).i;
n1.f=c1,n2.f=c2;
float c3=fun2(n1,n2,3).f;
printf("a3=%c\nb3=%d\nc3=%.2f\n",a3,b3,c3);
}
DA fun2(DA n1,DA n2,int nType)//nType=1:char类型 。nType=2:int类型 。nType=3:float类型 。
{
DA n3;
switch(nType)
{
case 1:n3.c=n1.c+n2.c;break;
case 2:n3.i=n1.i+n2.i;break;
case 3:n3.f=n1.f+n2.f;break;
}
return n3;
}
关于c语言子函数互相调用和c语言子函数调用主函数数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读