文档介绍:计算机程序设计基础
第五讲函数
1
三、数组
问题:编程求解
现假定 n=6,k=4
我们用函数来编写这个题的程序,参考程序如下:
#include <> //预编译命令
#define n 6 //定义n为6
#define k 4 //定义k为4
void main() //主函数
{ //主程序开始
printf("sum of %dth powers of integers from 1 to %d=",k,n );
//提示信息
printf("%d\n",SOP(n,k)); //输出结果,其中
//SOP(n,k)为被调用函数
} //主程序结束
2
//以下函数是被主程序调用的函数
int SOP(m,l) //整型自定义函数,m,l 为形参
int m,l; //形参m,l 为整型变量
{ //自定义函数体开始
int i,sum; //整型变量i,sum
sum=0; //初始化累加器
for (i=1; i<=m; i=i+1 ) //计数循环(i)
{ //循环体开始
sum=sum+power( i ,l ); //累加
} //循环体开始
return (sum) ; //返回值sum给函数sop(n,k)
} //自定义函数体结束
//以下函数是被函数sop(n,k)调用的函数
int power(p,q) //整型自定义函数
int p,q; //形参p,q 为整型变量
{ //自定义函数体开始
int i,product; //整型变量
product=1; //初始化累乘器
for(i=1; i<=q; i=i+1) //计数循环( i )
{ //循环体开始( i )
product=product*p; //累乘
} //循环体结束( i )
return(product); //累乘值product返回给power
} //自定义函数体结束
3
自定义函数
<数据类型> <函数名> (<参数表>)
例: int power(p,n)
power为函数名,要以英文字母开头。
int是函数值的数据类型,这里是int(整型)。
(p,n)括号中的p,n为函数的形式参数,形式参数也要定义其数据类型。
函数定义的一般格式:
<数据类型> <函数名> (<参数表>)
<参数说明;>
{
<说明语句>
<执行语句>
}
为了突出重点,先学会基本东西,省略掉一些事情先不讲。
4
1、形式参数是在定义函数时放在函数名后括号中的参数。在未进行函数调用时,并不对形式参数分配内存单元。在发生函数调用时,立刻给形式参数分配内存单元。调用结束后,释放掉行参所占的内存单元。
2、因此,形参变量属于局部变量,其作用域在它所在的函数体内。
3、在定义函数的时候,必须指定形参变量的类型,如何指定?有二种方法:
形式参数与实在参数
(1) int power(p,n)
int p,n;
{
……
}
(2) int power(int p,int n)
{
……
}
有些编译系统不认识第(2)种形式
5
4、实在参数是一个具有确定值的表达式。函数在调用时,将实在参数赋给形式参数。
比如,主函数调用SOP(n,k),这时,n,k为是在参数,n的值为6,k的值为4。在被调用函数定义中,int SOP(m,l)中的m,l为形式参数,在SOP被调用时,系统给m,l这两个形式参数分配了内存单元。之后,n的值6赋给m,k的值4赋给l。
实在参数的个数及类型应与形式参数一致。赋值时前后对应关系不会改变。下面画出主函数与SOP函数,调用与被调用时参数传递关系:
6
主函数执行下述语句时,
printf(“%d\n”,SOP(n,k));
传值给被调用函数
int SOP(m,l)
n的值6传给m,
k的值4传给l。
6和4为实在参数,m和l为形式参数。
被调用函数在其形式参数被赋值之后,开始执行函数体,先是让累加器初始化为0(sum=0),接着进入以i为控制变量的计算循环,i从1变到m(m=6),即累加m次(即6次)。循环体为sum=sum+power(i,l)。当6次循环执行完后,实现的是
注意这里是由另一个自定义函数power(i,l)实现的。
7
power(i,l)处在SOP(m,l)函数中,表示SOP函数去调用power 函数。其中i,l为实在参数,而int power(p,q)中的p,q为形式参数。
比如,执行SOP(6,4)时,l=4,m=6,
当i=1时,
sum=sum+power(1,4)
这里1,4为实在参数,调用power(p,q),两个形式参数p,q分别被赋以1