8.1.自定义函数的格式为:
函数值类型 函数名(带类型声明的形参表列) {函数体}
8.2.函数值的默认数据类型为int。
8.3.如果函数有返回值,则用return语句返回,其格式为:
return 表达式; 或 return(表达式);
8.4.如果函数无返回值,即函数值类型为void,亦可用格式:
return;
结束本函数并返回调用者。
8.5.函数一般调用格式为:
函数名(实参表列)
其中,实参表列为一组逗号分隔的表达式。实参按从右至左的次序计算并传递给相应形参。
8.6.如果函数调用在其定义之前,调用前应作相应声明,声明格式为:
函数值类型名 函数名(形参及其类型声明表列);
其中,形参可省略。
8.7.函数不可嵌套定义,但允许嵌套调用,亦可直接或间接调用自身(称作递归函数)。
8.8.递归函数的函数体的一般格式为:(B班同学不作要求)
if(递归条件)语句1 /*递归时,如何递归*/
else 语句2 /*非递归时,如何处理*/
或
if(!递归条件)语句1 /*非递归时,如何处理*/
else 语句2 /*递归时,如何递归*/
8.9.形参及函数内定义的变量称作局部变量,它从定义处生效,且只在该函数内有效。因此,不同函数中的局部变量可以同名,但同名不同义。
8.10.在所有函数之外定义的变量称作全局变量,它从定义处生效。
8.11.如果局部变量与全局变量同名,则同名全局变量被屏蔽。
8.12.局部变量的存储方式分为:自动(auto,默认)、静态(static)、寄存器(register)。
8.13.存储方式和数据类型是变量的两个重要属性,必须在定义变量时一并声明,关键字的排列顺序没有限制。变量的默认数据类型为int,默认存储方式为auto,但关键字auto和int不可同时缺省。
8.14.auto型局部变量占用动态数据区,当函数调用结束时释放所占内存。register占用CPU中的寄存器,但寄存器不够用时,占用动态数据区。
8.15.全局变量和static型局部变量占用静态数据区,默认初值为相应数据类型的0。
8.16.static型局部变量的声明和初始化只执行一次。
8.17.如果全局变量被声明为static型,则其它程序文件不能使用该全局变量。否则,其它程序文件也可使用该全局变量,但使用前应作extern声明。
8.18.被声明为static型的函数,只在本程序文件中有效,不能被其它程序文件调用。否则,其它程序文件也可调用此函数,但调用前应作extern声明。
8.19.常用数学函数在头文件math.h中。掌握基本初等函数。
9.1.预处理命令在程序编译前执行,其主要功能是“文本置换”。
9.2.不带参数宏定义的格式和功能如下:
格式:#define 宏名 文本
功能:在预处理时,将程序中宏名用相应的文本置换。
9.3.带参数宏定义的格式和功能如下:
格式:#define 宏名(形参表列) 文本
功能:在预处理时,将程序中带参数的宏用相应的文本置换,且文本中的形参被相应的实参所置换。
注意:形参无须且做类型声明。
9.4.终止宏定义的格式如下:
格式 #undef 宏名
9.5.宏定义可以引用已有的宏,亦可重新定义所代表的文本。
9.6.预处理命令无须以分号结尾,否则分号也参与置换。
9.7.#include命令的格式和功能如下:
格式一:#include "文件名"
格式二:#include <文件名>
功能:在预处理时,用指定文件置换本命令——加载文件。置换后,被包含文件成为本文件的一部分,其函数、全局变量等均可在本文件中直接使用,无须作extern声明。前一种格式先在当前目录中找指定文件,如果未找到,方到存放C头文件的目录中查找。后一种格式直接到存放C头文件的目录中查找指定文件。
9.8.条件编译命令的格式和功能如下:
格式一:#ifdef 宏名 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定的宏名已定义,则用程序段1置换本命令,否则用程序段2置换本命令。当程序段2为空时,#else可省略(下同)。
格式二:#ifndef 宏名 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定的宏名未定义,则用程序段1置换本命令,否则用程序段2置换本命令。
格式三:#if 常量表达式 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定常量表达式的值为真(非0),则用程序段1置换本命令,否则用程序段2置换本命令。
9.9.注释命令在预处理时被删除,不影响源程序和目标程序。注释命令的格式如下:
/*注释内容*/