制作:方斌 C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方斌制作
制 作:方 斌 C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方 斌 制作
制作:方斌 第8章函数 C语言是通过函数来实现模块化程序设计的。所以较大的C语言 应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能 模块
制 作:方 斌 第8章 函 数 C语言是通过函数来实现模块化程序设计的。所以较大的C语言 应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能 模块
制作:方斌 8.1概述 回顾: ·程序设计方法:自上而下,逐步细化 C语言:函数式语言 在C程序设计中,通常: 将一个大程序分成几个子程序模块(自定义函数) 将常用功能做成标准模块(标准函数)放在函数库中供其他程序调用 如果把编程比做制造一台机器,函数就好比其零部件。 可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调 试。 ·这些“零部件”可以是自己设计制造/别人设计制造/现在的标准产品。而且, 许多“零部件”我们可以只知道需向它提供什么(如控制信号),它能产生 什么(如速度/动力),并不需要了解它是如何工作、如何设计制造的一一 所谓“黑盒子
制 作:方 斌 8.1 概述 回顾: ·程序设计方法:自上而下,逐步细化 ·C语言:函数式语言 在C程序设计中,通常: ·将一个大程序分成几个子程序模块(自定义函数) ·将常用功能做成标准模块(标准函数)放在函数库中供其他程序调用 如果把编程比做制造一台机器,函数就好比其零部件。 ·可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调 试。 ·这些“零部件”可以是自己设计制造/别人设计制造/现在的标准产品。而且, 许多“零部件”我们可以只知道需向它提供什么(如控制信号),它能产生 什么(如速度/动力),并不需要了解它是如何工作、如何设计制造的—— 所谓“黑盒子
制作:方斌 【例】编写一个儿童算术能力测试软件 main ( 显示软件封面 t char ans =y'i corsaro 检查密码 cover /*调用软件封面显示函数* password *调用密码检查函数*/ 产生题目 while (ans ==y'Il ans==Y) 接受回答 question(;/*调用产生题目函数*/ answers();/*调用接受回答函数*/ 评判计分 marks(;/*调用评分函数* results /*调用结果显示函 显示结果 pm是否继续练习?(YN)数 ans=getch o:) 如果要继续练习 printf(谢谢使用,再见!”); 告别词 /*定义所用函数*/ cover({… /*软件封面显示函数*/ password(){…}/*密码检查函数*/ question(){…}/*产生题目函数*/ answers({…}/*接受回答函数*/ maks(){…} *评分函数*/ results(){}/*结果显示函数*/
制 作:方 斌 【例】编写一个儿童算术能力测试软件 显示软件封面 检查密码 产生题目 接受回答 评判计分 显示结果 如果要继续练习 告别词 main() { char ans ='y'; clrscr(); cover(); /*调用软件封面显示函数*/ password(); /*调用密码检查函数*/ while (ans ==’y’|| ans ==’Y’) { question(); /*调用产生题目函数*/ answers(); /*调用接受回答函数*/ marks(); /*调用评分函数*/ results(); /*调用结果显示函数*/ printf(“是否继续练习?(Y/N)\n”); ans=getch (); } printf(“谢谢使用,再见!”); } /*定义所用函数*/ cover() {…} /*软件封面显示函数*/ password() {…} /*密码检查函数*/ question() {…} /*产生题目函数*/ answers() {…} /*接受回答函数*/ marks() {…} /*评分函数*/ results() {…} /*结果显示函数*/
制作:方斌 函数使用常识: 1、C程序执行总是从main函数开始,调用其它函数后总是 回到man函数,最后在main函数中结束整个程序的运行。 2、一个C程序由一个或多个源(程序)文件组成一一可分别 编写、编译和调试 3、一个源文件由一个或多个函数组成,可为多个C程序公用。 4、C语言是以源文件为单位而不以函数为单位进行编译的。 5、所有函数都是平行的、互相独立的,即在一个函数内只 能调用其他函数,不能再定义一个函数(嵌套定义)。 6、一个函数可以调用其他函数或其本身,但任何函数均不 可调用main函数
制 作:方 斌 函数使用常识: 1、C程序执行总是从main函数开始,调用其它函数后总是 回到main函数,最后在 main函数中结束整个程序的运行。 2、一个C程序由一个或多个源(程序)文件组成——可分别 编写、编译和调试。 3、一个源文件由一个或多个函数组成,可为多个C程序公用。 4、C语言是以源文件为单位而不以函数为单位进行编译的。 5、所有函数都是平行的、互相独立的,即在一个函数内只 能调用其他函数,不能再定义一个函数(嵌套定义)。 6、一个函数可以调用其他函数或其本身,但任何函数均不 可调用main函数
制作:方斌 82函数的定义的一般形式 函数定义一一制造函数” 1、无参函数定义格式:P144 数据类型函数名()/*现代风格是:函数名(vod)*/ {函数体(说明部分+语句)} 【注意】每个函数之前可以有自己的编译预处理命令组。 数据类型即为函数返回值的数据类型,若为int则可以省略。 2、有参函数定义格式:P144 数据类型函数名形参表) 形参类型说明;/*现代风格是:函数名(带类型形参表)*/ 函数体(说明部分+语句)} 现代风格是: 数据类型函数名(带类型说明的形参表) {函数体(说明部分+语句)}
制 作:方 斌 函数定义——“制造函数” 1、无参函数定义格式: P144 数据类型 函数名() /*现代风格是:函数名(void)*/ { 函数体(说明部分+ 语句)} 【注意】每个函数之前可以有自己的编译预处理命令组。 数据类型即为函数返回值的数据类型,若为int则可以省略。 2、有参函数定义格式: P144 数据类型 函数名(形参表) 形参类型说明;/*现代风格是:函数名(带类型形参表)*/ { 函数体(说明部分+ 语句)} 现代风格是: 数据类型 函数名(带类型说明的形参表) { 函数体(说明部分+ 语句)} 8.2 函数的定义的一般形式
制作:方斌 说明: 1.任何函数(包括主函数main()都是由函数说明和函数体 两部分组成。根据函数是否需要参数,可将函数分为无参函数和有 参函数两种。 (1)无参函数的一般形式 函数类型函数名(vod) {说明语句部分; 可执行语句部分; 注意:在旧标准中,函数可以缺省参数表。但在新标准中,函 数不可缺省参数表;如果不需要参数,则用“void"表示,主函数 main(例外
制 作:方 斌 1.任何函数(包括主函数main())都是由函数说明和函数体 两部分组成。根据函数是否需要参数,可将函数分为无参函数和有 参函数两种。 (1)无参函数的一般形式 函数类型 函数名( void ) { 说明语句部分; 可执行语句部分; } 注意:在旧标准中,函数可以缺省参数表。但在新标准中,函 数不可缺省参数表;如果不需要参数,则用“void”表示,主函数 main()例外。 说明:
制作:方斌 (2)有参函数的一般形式 函数类型函数名(数据类型参数[,数据类型参数2…]) {说明语句部分; 可执行语句部分; } 有参函数比无参函数多了一个参数表。调用有参函数时,调用函 数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参数表 称为形式参数表,简称形参表
制 作:方 斌 (2)有参函数的一般形式 函数类型 函数名( 数据类型 参数[,数据类型 参数2……] ) { 说明语句部分; 可执行语句部分; } 有参函数比无参函数多了一个参数表。调用有参函数时,调用函 数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参数表 称为形式参数表,简称形参表
制作:方斌 [案例8.1]定义一个函数,用于求两个数中的大数。 /*案例代码文件名:AL71.C*/ /*功能:定义一个求较大数的函数并在主函数中调用*/ include int max(int n1, int n2) /*定义一个函数max()*/ t return(n1>n2?n1: n2); } void maino { int max(intn1,intn2);/*函数说明*/ int num1, num2 printf("input two numbers: \n"); scanf(%od%/od",&numl, &num2) printf("max=%d\n", max(numl, num2)); getchar /*使程序暂停,按任一键继续*/ }
制 作:方 斌 [案例8.1] 定义一个函数,用于求两个数中的大数。 /*案例代码文件名:AL7_1.C*/ /*功能:定义一个求较大数的函数并在主函数中调用*/ #include int max(int n1, int n2) /*定义一个函数max()*/ { return (n1>n2?n1:n2); } void main() { int max(int n1, int n2); /*函数说明*/ int num1,num2; printf("input two numbers:\n"); scanf("%d%d", &num1, &num2); printf("max=%d\n", max(num1,num2)); getchar(); /*使程序暂停,按任一键继续*/ }
制作:方斌 注意 (1)函数定义不允许套。 在C语言中,所有函数(包括主函数man()都是平行的。 个函数的定义,可以放在程序中的任意位置,主函数main(之前或 之后。但在一个函数的函数体内,不能再定义另一个函数,即不能 嵌套定义 (2)空函数—既无参数、函数体又为空的函数。其一般形式 为: [函数类型]函数名(vod) (3)在老版本C语言中,参数类型说明允许放在函数说明部分 的第2行单独指定
制 作:方 斌 注意 (1)函数定义不允许嵌套。 在C语言中,所有函数(包括主函数main())都是平行的。一 个函数的定义,可以放在程序中的任意位置,主函数main()之前或 之后。但在一个函数的函数体内,不能再定义另一个函数,即不能 嵌套定义。 (2)空函数──既无参数、函数体又为空的函数。其一般形式 为: [函数类型] 函数名(void) { } (3)在老版本C语言中,参数类型说明允许放在函数说明部分 的第2行单独指定