第7章 函数和预处理命令综述 下载本文

内容发布更新时间 : 2024/12/26 10:24:05星期一 下面是文章的全部内容请认真阅读。

新疆农业大学С语言程序设计课程教案 一、教学目的和要求

了解函数的定义与调用方法;函数的返回值与函数的类型;return 语句的功能和使用;对被调函数的声明;递归函数的运行过程和设计方法;数组作为函数的参数;函数的数据传递(值传递、地址传递、通过外部变量传递数据);局部变量和全局变量;局部变量的存储类型(自动变量、寄存器变量、静态局部变量);全局变量的存储类型(静态外部变量和非静态外部变量);宏定义(带参数的宏定义、不带参数的宏定义)的使用;文件包含的使用;条件编译的使用。

二、讲授内容提要 第7章 函数和预处理命令 7.1 概述 7.2 函数的定义 7.3 函数的调用 7.4 函数的返回值 7.5 对被调用函数的声明 7.6 函数的嵌套调用 7.7 函数的递归调用 7.8 数组作为函数的参数 7.9 局部变量和全局变量 7.10 变量的存储类别

7.11 内部函数和外部函数 7.12 编译预处理 三、教学重点、难点

重点:函数的定义,函数的调用,局部变量和全局变量,局部变量的存储类型,全

局变量的存储类型。宏定义(带参数的宏定义、不带参数的宏定义)的使用;文件包含的使用。

难点:函数间的数据传递,文件包含的使用。 四、教学过程及方法

1、利用多媒体课件(Powerpoint )进行讲授。

2、要使同学们正确掌握和正确使用如下所示函数的定义方法 函数定义的形式:

[存储类别说明] [数据类型说明] <函数名>([参数表] [参数说明] { 函数体 }

存储类别说明:指出该函数的存储类,函数的存储类有两种,一种是外部的,用extern 关键字说明;另一种是静态的,或称内部的,用关键字static 说明,默认说明是外部的。

数据类型说明:指出该函数的返回值的数据类型,又称为函数类型,C 语言中允许出现的类型都可以是函数类型,如果函数没有返回值,可用void 类型加以说明。一般函数默认的类型说明,如函数有返回值,则为int 型,或者无返回值。 函数名:函数名的命名规则按标识符规定进行。在对函数进行定义时,函数名

是一个标识符,函数的形参说明必须放在函数体外(之前 ,而函数体内部的变量说明要放在函数体内。

3、函数的类型和返回值

函数的返回值。return 语句中表达式的类型应该与函数类型一致,如果不一 致,则以定义该函数时所规定的函数类型为准。 4、形参与实参数、参数值的传递

在函数的实参和形参间的数据传递时,基本类型的变量作实参时,实参与 形参占用不同的存储空间,实参对形参的数据传递是单向值传递。

5、本章中所涉及的递归是C 语言中难度较大的内容之一,递归作为一种常用的程

序设计方法,可以很方便地解决不少特定的问题。在C 语言中学习递归,应当掌握:

① 递归的基本概念。包括:直接递归与间接递归的概念、函数的递归定义与递

归调用的概念、递归程序与非递归程序之间的关系、递归程序与算法效率之 间的关系等基本结论。

② 递归函数的动态执行过程。包括:函数的递归调用、C 语言中递归程序的完

整执行过程(递归函数的调用,递归层次,递归过程中各层次的变量值的变 化过程,递归终止条件,递归返回的过程 。

③ 递归程序的编写方法。包括:对于数值问题编写递归程序的一般方法(建立 递归数学模型,确立递归终止条件,将递归数学模型转换为递归程序 、对 于非数值问题编写递归程序的一般方法(确定问题的最小模型并使用非递归 算法解决,分解原来的非数值问题建立递归模型,确定递归模型的终止条件,将递归模型转换为递归程序 。

④ 对同一问题而言,递归算法与非递归算法是求解一个问题的两种不同方法,

是从两个不同的角度看待相同的问题。在学习递归程序设计的过程中,应当 将递归算法与同一问题的非递归算法进行比较(问题的数学模型、程序实现 过程、程序运行结果、程序实现难度与长度等 ,从中找出递归算法与非递 归算法之间的联系与区别,体会同一问题使用不同算法求解的难度与思路。 6、宏命令是编译预处理命令之一,它不是一般的语句,而是起着通知编译系统在

编译文件之前预先处理的工作,然后将预处理的结果和源程序一起再进行编译处理。宏定义包括两类:不带参数的宏定义和带参数的宏定义,前者较常用。 使用不带参数的宏定义时要注意以下几点:

① 标识符一般用全大写字母,以便区别于变量名;

② 宏定义使用标识符代替一个字符串,只做简单的置换不做语法检查; ③ 宏定义是专门用于预处理命令的一个专用名词,它与变量定义含义不同,只

作字符替换,不分配存储空间;

④ 宏定义不是C 语句,不必在行末加分号,如果加了会连分号一起进行置换; ⑤ 在进行宏定义时,可以引用已定义的宏名,可以层层置换;

⑥ 对程序中用双引号括起来的字符串内的字符,即使与定义的宏名相同,也不

被宏替换。

7、要使同学们正确理解宏替换是在编译之前预处理时完成的,只占用编译时间,

不占用程序运行时间。

8、C 语言对预处理命令# include 的处理是当文件名用“ ”引住时,先在源程序所在

目录搜索,再按系统设定的标准方式搜索。 9、本内容共教授4学时。 五、作业布置及参考资料 作业:

教材P136,习题1,习题2,习题5 参考资料:

[1] 胡建平主编,c 语言程序设计, 天津大学出版社,2005.1. [2] 顾元刚等编著,c 语言程序设计, 机械工业出版社.2005.7. [3] 谭洁强编著,c 程序设计(第二版, 清华大学出版社.2002.1.

[4] 刘振安, 孙忱, 刘蒸君编著,c 程序设计 课程设计, 机械工业出版社.2005.7. [5] 高福成遍著,c 程序设计教程, 天津大学出版社.2003.3.

[6] [美] Sartaj Sahni/Robert F.Cmelik 著, 周丽琴, 孔芳 等译,C 语言软件开 发教程, 中国水利水电出版社.2003.10. 六、教学后记