第六章 函数和宏定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章函数和宏定义
6.1 目的和要求
1、掌握函数的定义方法和调用规则。
2、掌握C语言程序中主调函数和被调用函数之间进行数据传递的规则。
3、了解函数的返回值及它的类型,并正确使用它。
4、了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性
和可见性的概念。
5、练习递归函数的使用。
6、理解宏的概念,掌握定义无参宏和带参宏的方法。了解文件包含的概念,掌握其
用法。
7、理解内部函数和外部函数,了解外部函数的编译和连接的方法。
6.2 相关知识
1、函数的概念
函数是一个可以反复使用的程序段,从其它的程序段中均可以通过调用语句来执行这段程序,完成既定的工作。
从程序设计的角度来看,函数可以分为两种:
①标准函数,即库函数。
②自定义函数。
从函数形式的角度来看,函数也可分为无参函数和有参函数两种。
2、函数的定义
一个函数在被调用之前必须先定义,函数定义的一般形式:
存储类型数据类型函数名(形式参数表)
{ 数据定义语句序列;
执行语句序列;
}
3、函数的调用
函数调用按函数是否有返回值分为有返回值的函数调用和无返回值的函数调用。其格式如下:
函数名(实参表)[;]
无返回值的函数调用格式,最后要有一个语句结束符“分号”。
4、函数的声明
函数声明是指在主调函数中,对在本函数中将要被调用的函数提前作的必要的声明。
函数声明的一般格式为:
存储类型数据类型函数名(形式参数表);
注意:
①当函数定义在前,主调函数的定义在后时,可以缺省函数声明。
②如果被调的用户函数和主调函数不在同一编译单位,则在定义函数的编译单位
应将该函数定义成extern,在主调函数的函数体中将该函数说明为extern。
5、函数调用中的数据传递方法
C语言规定在函数间传递数据有四种方式:值传递方式、地址传递方式、返回值方式、全局变量传递方式。
①值传递方式所传递的是参数值,其特点是“参数值的单向传递”。
②地址传递方式所传递的是地址,其特点是“参数值的双向传递”。
③返回值方式不是在形式参数和实际参数之间传递数据,而是通过函数调用后直接返回一个值到主调函数中。该函数的数据类型不能是void类型,且函数体中应有“return <表达式>”语句。
④全局变量传递方式不是在形式参数和实际参数之间传递数据,而是利用在主调函数和被调函数中均有有效的全局变量,在主调函数和被调函数之间任意传递数据。
6、函数的嵌套调用和递归调用
①在调用一个函数的过程中又调用另一个函数,便形成了函数之间的嵌套调用。
②一个函数直接或间接地调用其自身,便构成了函数的递归调用。这种函数称为递归函数。
6.3 实验练习
实验练习 1:编写求两整数的绝对值的和与差的函数。
本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分:1.实验目的
2.问题描述
3.事例输出
4.程序模板
5.问题解答提示
6.后续问题和任务
程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。
实验目的:
本实验旨在巩固学生对函数概念的理解,增强程序设计能力。在这个实验中,学生将练习:
•在主函数中,输入两个整数。
•求两整数的绝对值。
•调用add( )函数求两整数的和。
•调用sub( )函数求两整数的差。
•在求差的函数中,利用if语句找出两数中的较大者并进行减法运算。
在强化练习中,学生将练习:
•不使用求绝对值的系统函数来求某数绝对值。
•使用全局变量完成该程序。
编写程序,从键盘输入两个整数,求它们的绝对值并调用求和及求差函数分别求出和及差,并输出结果。
程序模板
#include "stdio.h"
#include "math.h"
/*函数add的说明*/
int sub(int x,int y)
{ if(x>=y)
/*返回x与y的差*/
else
/*返回y与x的差*/
}
void main()
{ int a,b;
int sum,minus;
/*提示输入两个整数*/
/*输入两个整数*/
a=abs(a);
/*求变量b的绝对值*/
sum=add(a,b);
/*调用minus( )函数求两个整数的差*/
/*输出和的值*/
/*输出差的值*/;
}
/*函数add( )的定义*/
问题解答提示
1.使用函数abs( )求某整数的绝对值,要在程序开头写上文件包含命令,将头文件math.h包含进来。
2.标准函数只需要调用就行了;对于自定义函数,首先要定义,然后再调用。3.函数的说明与函数的定义是两个不同的概念。函数的说明是对函数的类型及参数等的说明,函数的定义是对该函数的算法的实现。
4.若函数的定义在该函数的调用之后,则必需要对该函数进行说明(如:add( )函数);若函数的定义在该函数的调用之前,则不必对该函数进行说明,函数定义的头部充当说明(如sub( )函数)。
5.在sub( )函数中,想得到绝对值较大的数减去绝对值较小的数,使用了if_else