C语言教程-函数(四)_计算机等级指导/介绍

2.3 函数的递归调用
Turbo C2.0允许函数自己调用自己, 即函数的递归调用, 递归调用可以使程序
简洁、代码紧凑, 但要牺牲内存空间作处理时的堆栈。
如要求一个n!(n的阶乘)的值可用下面递归调用:
例8:
#include
unsigned ling mul(int n);
int main()
{
int m;
puts("Calculate n! n=? ");
scanf("%d", &m); /键盘输入数据/
printf("%d!=%ld ", m, mul(m));/调用子程序计算并输出/
getch();
retun 0;
}
unsigned long mul(int n)
{
unsigned long p;
if(n>1)
p=n*mul(n-1); /递归调用计算n!/
else
p=1L;
return(p); /返回结果/ }
运行结果:
calculate n! n=?
输入5时结果为:
5!=120

3. 函数作用范围

Turbo C2.0中每个函数都是独立的代码块, 函数代码归该函数所有, 除了对函
数的调用以外, 其它任何函数中的任何语句都不能访问它。例如使用跳转语句goto
就不能从一个函数跳进其它函数内部。除非使用全程变量, 否则一个函数内部定义
的程序代码和数据, 不会与另一个函数内的程序代码和数据相互影响。
Turbo C2.0中所有函数的作用域都处于同一嵌套程度, 即不能在一个函数内再
说明或定义另一个函数。
Turbo C2.0中一个函数对其它子函数的调用是全程的, 即是函数在不同的文件
中, 也不必附加任何说明语句而被另一函数调用, 也就是说一个函数对于整个程序
都是可见的。

4. 函数的变量作用域
在Turbo C2.0中, 变是可以在各个层次的子程序中加以说明, 也就是说, 在任
何函数中, 变量说明有只允许在一个函数体的开头处说明, 而且允许变量的说明(
包括初始化)跟在一个复合语句的左花括号的后面, 直到配对的右花括号为止。它
的作用域仅在这对花括号内, 当程序执行到出花括号时, 它将不复存在。当然, 内
层中的变量即使与外层中的变量名字相同, 它们之间也是没有关系的。
例9.
#include
int i=10;
int main()
{
int i=1;
printf("%d , i);
{
int i=2;
pritnf("%d ", i);
{
extern i;
i+=1;
printf("%d ", i);
}
printf("%d ", ++i);
}
printf("%d ", ++i);
return 0;
}
运行结果为
1 2 11 3 2

Published At
Categories with 认证考试
Tagged with
comments powered by Disqus