重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以.C语言中,任何函数都可以直接或间接地被自己或其他函数调用,包括main函数(注意我说的是C,不是C++)
孙吴网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。成都创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
例如,典型的利用main递归实现逆序输出
#include stdio.h
int main()
{
int c;
if((c=getchar()) != EOF) //EOF 用Ctrl+Z 或者 F6
{
main();
}
printf("%c",c);
return 0;
}
一,函数调用的一般形式为:
函数名(实参列表);
实参可以是常数、变量、表达式等,多个实参用逗号,分隔。
在c语言中,函数调用的方式有多种,例如:
在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参列表中各个参数是自左向右使用呢,还是自右向左使用。对此,各系统的规定不一定相同。
【示例】在vc6.0下运行以下代码。
运行结果:
8
7
6
7
可见vc
6.0是按照从右至左的顺序求值。如果按照从左至右求值,结果应为:
9
10
9
8
函数的嵌套调用
函数不能嵌套定义,但可以嵌套调用,也就是在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用,即在被调函数中又调用其它函数。
【示例】计算sum
=
1!
+
2!
+
3!
+
...
+
(n-1)!
+
n!
分析:可以编写两个函数,一个用来计算阶乘,一个用来计算累加的和。
#include
//求阶乘
long
factorial(int
n){
int
i;
long
result=1;
for(i=1;
i=n;
i++){
result
*=
n;
}
return
result;
}
//
求累加的和
long
sum(long
n){
int
i;
long
result
=
0;
for(i=1;
i=n;
i++){
//嵌套调用
result
+=
factorial(n);
}
return
result;
}
int
main(){
printf("1!+2!+...+9!+10!
=
%ld\n",
sum(10));
return
0;
}
二,有些自定义函数可能会被频繁的调用,所以写在一个c文件里是不太方便的。应该把这些自定义的函数写在一个c文件里,同时在一个头文件.h文件里声明。主函数可以通过引用该头文件然后调用需要的自定义函数。
1,举例:在头文件(.h)里声明自定义函数
2,在一个c语言文件里写下自定义函数的实现
3,在主函数中调用自定义函数
4,最后编译所有的涉及到的c文件,头文件可以不管
可以调用。
C语言最基本的模块为函数,任意函数都可以调用其它任意一个函数,包括函数本身。
1、自定义函数调用其它自定义函数的例子:
#include stdio.h
void fun1(int a)//自定义函数fun1。
{
printf("%d\n",a);
}
void fun2(int m, int n)//自定义函数fun2。
{
fun1(m);
fun1(n);//调用两次另一个自定义函数。
}
int main()
{
fun2(2,3);//调用fun2.
}
在这个例子中,就是主函数调用自定义函数fun2,然后fun2调用另一个自定义函数fun1.
2、不仅可以调用其它自定义函数,还可以调用自己本身。
这种称为递归。
以下是通过递归,计算1+2+3+...+n值的代码:
#include stdio.h
int fun(int n)
{
if(n == 1) return 1;
return n+fun(n-1);//递归调用,返回和值。
}
int main()
{
printf("%d\n", fun(100));//计算1到100的和值。
return 0;
}
这很明显是可以的,你想想,主函数也是一个函数对不对,可是里面又调用有printf() scanf()函数,所以,学习语言是要很灵活的,毕竟你不可能只靠一种语言。
补充下:调用可以嵌套,但是定义不可以。