函数(三)

内部函数与外部函数

当一个源程序由多个源文件组成时,可以指定函数不能被其他文件调用。所以,C语言自定义函数可以分为内部函数和外部函数两种。

内部函数

内部函数又称静态函数,他表示由多个源程序组成的同一个程序中,该函数只能在其所在的文件中使用。如果不同源文件中有同名的内部函数,这些同名的函数互不干扰。声明形式:
static <返回值类型> <函数名>(<参数>)例:
stativ int sum(int a,int b)

#include 
static int sum(int a,int b);
void show(iint s)int main()
{
  int x=10,y=20,s;
  s=sum(x,y);
  show(s);
  return 0;
}
static int sum(int a,int b)
{
  return a+b;
}
void show (int s)
{
  printf("sum=%d\n",s);
}

外部函数

外部函数存储类型为extern型,表示该函数可以被起初他源文件调用。声明形式:
extern <返回值类型> <函数名>(<参数>);例如:
extern int sum(nta,intb);

1.file1.c
extern int sum(int a,int b)
{
  return a+b;
}
2.file2.c
extern void show(nt s)
{
 printf("sum=%d\n",s); 
}
3.example6-10.c
#include 
extern int sum(int a,int b);
extern void show(int s);
int main()
{
  int x=10,y=20,s;
  s=sum(x,y);
  show(s);
  return 0;
}

由多个源文件组成组成一个程序时,可以用三种方式连接;
1.由多个源文件组成多个目标文件(.obj文件),再用连接命令把多个.obj文件连接起来,如:tlink example6-10.c+file1.obj+file2.obj
2.建立项目文件(.prj文件或.dsw文件),具体操作参考C语言集成开发环境说明
3.使用文件包含命令,如:#include “fiile1.c”

递归函数

在一个函数定义过程中又直接或间接地调用该函数本身,称为函数的递归调用。例如:
iint f(int x);
{
int y z;
scanf("%d,&y");
z=f(y);
return (2*x+y/z):
}
函数(三)_第1张图片如图左边的是直接的递归函数调用,右边是间接的函数递归调用。
而这种调用是无休止的。那么就应该通过限制次数来进行有休止的调用。可以用if语句的控制来实现有休止的调用,只有在某一条件成立时才继续执行递归调用,否则不在继续。
要想将一个函数设计成递归函数,在数学上必须具备2个条件:
(1)问题的后一部分与原始问题类似;
(2)问题的后一部分是原始问题的简化。
设计递归函数其重点在于建立数学模型。
例:输入一个正整数n,计算n!。
n!的数学表达式:
函数(三)_第2张图片由此可知n!的数学模型满足数学上递归函数的两个条件。

#include 
long fac(int)
int main()
{
  int n;
  long y;
  printf("please input an integer:\n");
  scanf("%d",&n);
  y=fac(n);
  printf("%d!=%d",n,y);
  return 0;
}
long fac(int n)
{
  long f;
  if(n==0||n==1)
    f=1;
  else
    f=fac(n-1)*n;
  return f;
}

你可能感兴趣的:(C语言,c语言)