内容正文:
YCF
正版可修改PPT
(中职)C语言程序设计模块七ppt电子课件
1
函数
模块7
LOGO
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
#include <stdio.h>
#define PI 3.14
void hello()/*该函数仅实现输出一句话的功能*/
{
printf("---Welcome to our school!---");
}
float area(float r); /*函数定义在调用之后,须做函数原型声明*/
int main()
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
{
float a;
hello(); /*调用hello函数*/
printf("\nPlease input a:");
scanf("%f",&a);
printf("\nThe area is:%.2f",area(a));/*调用area函数,a为实参*/
}
float area(float r)/*自定义函数area,其功能是以r为半径求圆的面积*/
{float f;
f=PI*r*r;
return f;
}
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
上面程的序目的在于详细演示函数的定义与调用。该程序定义2个自定义函数,主函数基本上就起了个调用函数的作用。事实上,在一个较大的C程序中,把所用的代码都写在main()函数中是不现实的,因为在后期程序的维护和修改中极不方便。解决这个问题的方法就是自定义函数和头文件(后述)。
从上可以得知以下几个基本方面:
(1)关于函数。
①函数原型也称函数声明,由函数返回类型、函数名和形参列表组成,并以分号结束。自定义函数出现在调用之前,不必声明原型;若出现在调用之后,则必须在调用之前先声明原型。
②一个函数若声明在某个函数体内,则只能被该函数所调用,其他函数无权使用。
③函数调用的方式是:函数名(实参),如sort(b,10); 若定义函数时没有参数,则调用时也不能有实参,形式为:函数名(),如hello()。
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
④有参数函数的形参和实参类型必须一致,否则形参无法调取实参。实参可以是变量、常量、地址、数组元素的值等。
⑤实参向形参传递值有两种方式:值传递和地址传递。
⑥数组名作为数组首元素的首地址,作为实参传递时本质是地址传递,从而使形参和实参都指向同一个存储单元(地址)。要实现值的批量传递(如多个数组元素的值),最好的办法就是数组名形式的地址传递。
⑦自定义函数主要为重复运算(反复调用)的程序而写。
⑧函数都是平行的,互相独立的,可调用,功能是单一的,因而在一个函数中可以声明一个函数,但不能再定义一个函数。
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
④有参数函数的形参和实参类型必须一致,否则形参无法调取实参。实参可以是变量、常量、地址、数组元素的值等。
⑤实参向形参传递值有两种方式:值传递和地址传递。
⑥数组名作为数组首元素的首地址,作为实参传递时本质是地址传递,从而使形参和实参都指向同一个存储单元(地址)。要实现值的批量传递(如多个数组元素的值),最好的办法就是数组名形式的地址传递。
⑦自定义函数主要为重复运算(反复调用)的程序而写。
⑧函数都是平行的,互相独立的,可调用,功能是单一的,因而在一个函数中可以声明一个函数,但不能再定义一个函数。
⑨一个函数可以调用其他函数(嵌套调用),也可以调用其本身(递归调用,后述),但是绝不能调用main()这个主函数。
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
⑩函数的值只能通过return语句返回主调函数,若无return语句,则无法返回值。可以有多个return,但每次调用时只能有一个return语句被执行,即只能返回一个函数值。函数值的返回类型必须与函数自定义的类型一致。如果不用给主调函数返回值,可把函数自定义为void,即空类型。定为void类型后,主调函数不可再使用被调函数的值。例如:
void s(int n)/*函数s定义为void型*/
{……;
……;/*定义为void型,就不能使用return语句*/
}
int main()
{……;
……;
sum=s(n);/*这是错误的,不能使用被调函数s的值*/
}
7.1函数的定义与调用
7.1.1函数定义与调用程序示例讲解
(2)关于函数名和函数类型。函数名是函数的入口地址,同数组名一样,是常量。如果要交换函数名,因为是常量,是不能直接交换的,可以通过函数指针进行函数名的交换(后述)。如果不定义函数类型,则其返回值默认为int型。
(3)关于C程序设计。
①C语言是以源文件而不是以函数为单位进行编译的,