目录
一、函数定义
二、函数调用
三、递归函数
四、局部变量和全局变量
一、函数定义
1、无参函数的定义
类型名 函数名() /*函数首部*/
{
函数体
}
或
类型名 函数名(void) /*函数首部*/
{
函数体
}
void类型的函数不直接返回值,其作用通常是完成某一特定功能
2、有参函数的定义
类型名 函数名(形式参数表列) /*函数首部*/
{
函数体
}
3、空函数的定义
类型名 函数名() /*函数首部*/
{ }
二、函数调用
1、一般调用形式
函数名(实际参数表列);
2、函数调用的方式
1)函数语句
函数名(实参表列);
2)函数表达式
3)函数镶嵌调用
3、函数调用过程
在执行函数调用时,实际上系统要完成以下工作。
1、为被调函数的所有形参分配内存,在计算实参的值,并一一对应地赋予相应的形参(对于无参函数,不做该项工作)
2、为函数说明部分中的定义的变量分配存储空间,再依次执行函数的可执行语句。当执行到“return(表达式)”语句时,计算返回值(如果无返回值的函数,不做该工作)
3、释放在本函数中的定义的变量所占用的储存空间(对于static类型的变量,其空间不会释放),返回主调函数继续执行
【例7.7}输入n个正整数,将他们从小到大排序后输出
#include<stdio.h>
void bubble(int a[],int n);
int main(void)
{
int n,a[8];
int i;
printf("输入变量n的值(n<=8):");
scanf("%d",&n);
printf("输入%d个数组元素:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble (a,n);
printf("a[%d]=",n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
return 0;
}
void bubble(int a[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
运行结果:
三、递归函数
直接或间接调用自己,这种函数自己调用自己的形式称为函数的递归调用,带有递归调用的函数也称为递归函数
【例7.12】输出斐波拉契数列的第n项
#include <stdio.h>
int Fibo(int n)
{
int f;
if(n<0) printf("error!\n");
else if(n==1||n==2) f=1;
else f=Fibo(n-1)+Fibo(n-2);
return f;
}
int main()
{
int f,n;
printf("输入斐波拉契的第n项:");
scanf("%d",&n);
f=Fibo(n);
printf("%d\n", f);
return 0;
}
运行结果:
四、局部变量和全局变量
变量的作用域就是变量的有效范围。C语言只允许在3个地方定义变量
1、函数的外部部分
2、所有函数的外部
3、复合语句中的声明部分
变量定义的位置的不同,其作用域也不同。从变量的作用域来分,可以将其分为局部变量和全局变量
五、变量声明周期与存储类型
变量的存储类别分别为静态存储方式和动态存储方式
1、静态存储方式是指在程序运行期间分配固定的存储空间的方式。
2、动态存储方式是指在程序运行期间根据需要进行动态地分配存储空间的方式
变量的存储类型
带有存储类型的变量定义的一般形式为:
存储类型 数据类型 变量名
在C语言中,变量的存储类型中有四种
1、auto(自动类型) 定义形式:auto 类型名 变量名;
2、register(寄存器类型)
3、static(静态类型) 定义形式:static 类型名 变量名;
4、extern(外部类型) 定义形式:extern 类型名 变量名;
【例7.28】程序中函数double mycos(double x)的功能是:根据下式计算cos(x)的近似值:
#include<stdio.h>
#include<math.h>
double mycos(double x)
{
int n=1;
double sum=0,term=1.0;
while(fabs(term)>=1e-6)
{
sum=sum+term;
term=term*(-pow(x,2)/((2*n-1)*(2*n)));
n=n+1;
}
return sum;
}
int main()
{
double x;
printf("输入变量x的值:");
scanf("%lf",&x);
printf("cos(%lf)=%f",x,mycos(x));
return 0;
运行结果: