第8章函数
第8章 函数
主要内容: 1、函数的定义 2、函数的调用(包括嵌套调用和递归调用) 4、局部变量和全局变量 5、变量的存储类 重点: 1)如何定义函数(即如何编写函数) 2)如何调用函数(包括库函数和自定义函 数)
主要内容: 1、函数的定义 2、函数的调用(包括嵌套调用和递归调用) 4、局部变量和全局变量 5、变量的存储类别 重点: 1)如何定义函数(即如何编写函数) 2)如何调用函数(包括库函数和自定义函 数)
函数的引入 函数:函数是完成某些特定功能的代码块。 使用函数的优点: 1)实现模块化设计:将一个大任务分解成一个个的 小任务,然后每个任务分别用函数实现 2)实现“编写一次,多次调用”,避免在不同的程 序中重复编写相同的函数 3)便于程序调试和维护,因为每个函数之间是相互 独立的。 函数的分类:库函数和用户自定义函数
函数的引入 ◼ 函数:函数是完成某些特定功能的代码块。 ◼ 使用函数的优点: 1)实现模块化设计:将一个大任务分解成一个个的 小任务,然后每个任务分别用函数实现。 2)实现“编写一次,多次调用”,避免在不同的程 序中重复编写相同的函数。 3)便于程序调试和维护,因为每个函数之间是相互 独立的。 函数的分类:库函数和用户自定义函数
8.1函数的定义 例8.1编写函数max:求两个整数x和y中的较大数。 int max(intx,inty)/函数头* i int Tx; 函数体{} if (x<y)Ty; return z maino i int a, b, d; printf( input a and b: )i scant"%d %d", &a, &b; d=max(a, b); /函数调用* printf("max is: %d,d)
8.1 函数的定义 例8. 1编写函数max:求两个整数x和y中的较大数。 int max (int x, int y) /*函数头*/ { int z=x; /*函数体{……}*/ if (x<y) z=y; return z; } main() { int a, b, d; printf("input a and b:"); scanf{"%d%d", &a, &b}; d=max(a, b); /*函数调用*/ printf("max is:%d", d); }
例82:设某程序中需多次用到打印表头(如下所示) 的功能,该功能用函数实现: a void line() i printf( n *** xx*******x*x*x ) printf("n score list printi"n兴数水水); 本例中,函数的类型:void,函数名为line,函数无参 数 该函数无返回值,所以函数类型为void型
◼ 例8.2:设某程序中需多次用到打印表头(如下所示) 的功能,该功能用函数实现: ◼ void line( ) { printf("\n ********************"); printf("\n* score list *"); printf("\n ********************"); } 本例中,函数的类型: void,函数名为line,函数无参 数。 该函数无返回值,所以函数类型为void型
函数定义的一般形式如下: 数类型函数名(类型名形式参数1,类型名形式参 数2, 说明部分 语句部分 1函数名:是该函数的唯一标识符,一般函数的命名 最好做到“见名知义”。 2函数类型:函数的返回值的类型。 当函数无返回值时,规定其类型为:void 当函数返回值为nt时,函数类型可以省略
函数定义的一般形式如下: 函数类型 函数名(类型名 形式参数1,类型名 形式参 数2,…) { 说明部分 语句部分 } 1.函数名:是该函数的唯一标识符,一般函数的命名 最好做到“见名知义”。 2.函数类型:函数的返回值的类型。 当函数无返回值时,规定其类型为: void。 当函数返回值为 int 时,函数类型可以省略
3.形式参数:形参是函数被调用时用于接收实参值的变量 根据实际需要可有可无。没有形参时,圆括号也不可省;多个参 数之间应用逗号分隔。参数包括参数名和参数类型 形参的类型说明可有如下两种格式: int max(inta,intb)/*形参的类型在形参表中直接说明* i return(a>b?a: b);3 或 int max(a, b) int a b;/*形参的类型在函数体前、函数名后说明* freturn(a>b?a: b); 前者为标准格式,后者为传统格式,通常用前者
3. 形式参数:形参是函数被调用时用于接收实参值的变量。 根据实际需要可有可无。没有形参时,圆括号也不可省;多个参 数之间应用逗号分隔。参数包括参数名和参数类型。 形参的类型说明可有如下两种格式: int max(int a,int b) /*形参的类型在形参表中直接说明*/ { return (a>b?a:b);} 或 int max(a,b) int a,b; /*形参的类型在函数体前、函数名后说明*/ { return(a>b?a:b); } 前者为标准格式,后者为传统格式,通常用前者
4函数体:即函数功能的具体实现。 它包括两部分:说明部分和执行部分,其中说明部分 包括函数中所用的局部变量等的说明、函数中要调用 的函数的说明。 注 函数不能嵌套定义,即函数内不能再定义函数,这样可 以保证函数间是相互独立的,以实现模块化程序设计 5空函数: 函 函数,而现在这个函数的功能还没实多。调用 调用此函数时,什么也不做。只是表明这里要
4.函数体:即函数功能的具体实现。 它包括两部分: 说明部分和执行部分,其中说明部分 包括函数中所用的局部变量等的说明、函数中要调用 的函数的说明。 注意: 函数不能嵌套定义,即函数内不能再定义函数,这样可 以保证函数间是相互独立的,以实现模块化程序设计。 5.空函数: 函数类型 函数名( ) { } 调用此函数时,什么也不做。只是表明这里要 调用一 个函数,而现在这个函数的功能还没实现
空函数在程序设计中常常用到的: 1)预留函数,便于以后扩充程序功能。 2)便于程序的模块化设计和调试:程序设计中往 往根据需要确定若干模块,分别由一些函数来实 现。一个大系统,需要编写很多用户函数,而这 些函数不可能也没有必要同步完成,通常足从 些基本模块开始,编写一个调试一个,对于没有 编写的函数就需要用空函数代替。从而也有利于 集体创作
空函数在程 序设计中常常用到的: 1)预留函数,便于以后扩充程序功能。 2)便于程序的模块化设计和调试:程序设计中往 往根据需要确定若干模块,分别由一些函数来实 现。一个大系统,需要编写很多用户函数,而这 些函数不可能 也没有必要同步完成,通常足从一 些基本模块开始,编写一个调试一个,对于没有 编写 的函数就需要用空函数代替。从而也有利于 集体创作
空函数举例 例83编写小学生算术练习系统的主程序:显 示主菜单,用户选择,根据选择执行加、减、 乘、除、退出5项功能之 重复上述步骤,直至选择退出。 其中主程序调用的函数有:显示主菜单函数 list menu,加、减、乘、除、退出函数分别是 adO),subO, mulo, divided,end(O)以上函数除 list menu(外此时均为空函数 程序:1814.c
空函数举例 ◼ 例8.3 编写小学生算术练习系统的主程序: 显 示主菜单,用户选择,根据选择执行加、减、 乘、除、退出5项功能之一。 重复上述步骤,直至选择退出。 其中主程序调用的函数有:显示主菜单函数 list_menu(),加、减、乘、除、退出函数分别是 add(), sub(), mul(),divide(), end(). 以上函数除 list_menu()外此时均为空函数。 程序:l8_1_4.c