第八章函数 8.1概述 程序的组成:程序模块即子程序 在C语言中,子程序的作用是由函数采完成的 个C程序可由一个主函数和若干个函数构成。由主函 数调用其函数,其它函数也可以互相调用。同一个函数 可以被一个或多个函数调用任意多次。 函数的作用,优点?
第八章 函数 8.1 概述 程序的组成:程序模块即子程序 在C语言中,子程序的作用是由函数采完成的。 一个C程序可由一个主函数和若干个函数构成。由主函 数调用其函数,其它函数也可以互相调用。同一个函数 可以被一个或多个函数调用任意多次。 函数的作用,优点 ?
main C d fghhI 个程序中函数调用的示意图 图8.1
◼ main ◼ a b c ◼ d e f g h h I ◼ e g 图8.1 一个程序中函数调用的示意图
[例8.1] main printstar ()i /*调用 printstaar函数*/ print message(;/*调用 print message函数*/ printstar0;/米调用 printstar函数*/ printstaro printstar函数*/ printf(*****米n);} print message * print message函数*/ i printf (whow do you do\n) 运行情况如下:***水*冰*水**水 how do you do 水水水半半冰水水水半冰水水水水半冰水水
[例 8.1] main() { printstar(); /*调用printstaar函数*/ print_message();/*调用print_message函数*/ printstar(); /*调用printstar函数*/ } printstar() /*printstar函数*/ { printf(“**************\n”);} print_message() /*print_message函数*/ { printf(“how do you do\n”); } 运行情况如下:******************** how do you do ********************
说明: 1.以源文件为单位进行编译,而不是以函数 为单位进行编译。 2.对于一个较大的源程序,可分别放到若干 个源文件中,再由若干源文件组成一个C程序。 这样分别编写,分别编译,可提高调试效率。 个源文件可以为多个C程序公用。 3.C程序的执行从main函数开始,调用其它 函数后流程回到main函数,在main函数中结束 整个程序的运行。main函数是系统定义的
说明: 1.以源文件为单位进行编译,而不是以函数 为单位进行编译。 2.对于一个较大的源程序,可分别放到若干 个源文件中,再由若干源文件组成一个C程序。 这样分别编写,分别编译,可提高调试效率。 一个源文件可以为多个C程序公用。 3.C程序的执行从main函数开始,调用其它 函数后流程回到main函数,在main函数中结束 整个程序的运行。 main函数是系统定义的
4.所有函数都是平行的,即在定义函数时是 互相独立的,一个函数并不从属于另一函数, 即函数不能嵌套定义,但可以互相调用, 其他函数不能调用main函数。 5.函数的分类: 从用户使用的角度: 标准函数、用户自定义函数 从函数的形式分: 无参函数、有参函数
4.所有函数都是平行的,即在定义函数时是 互相独立的,一个函数并不从属于另一函数, 即函数不能嵌套定义,但可以互相调用, 其他函数不能调用main函数。 5.函数的分类: ➢ 从用户使用的角度: ➢ 标准函数、用户自定义函数 ➢ 从函数的形式分: ➢ 无参函数、有参函数
8.2函数定义的一般形式 1.无参函数的定义形式 类型标识符函数名() 声明部分 语句 void printo i printf(Hello)
8.2 函数定义的一般形式 1.无参函数的定义形式 类型标识符 函数名() { 声明部分 语句 } void print() { printf(“Hello”); }
2.有参函数定义的一般形式 类型标识符函数名(形式参数表列) 形式参数说明 说明部分 语句} 例如: int max(intx,inty)-没有分号 i int z: /米函数体中的说明部分*/ z=X>y?x:y return (z)
2.有参函数定义的一般形式 类型标识符 函数名(形式参数表列) 形式参数说明 {说明部分 语句 } 例如: int max(int x,int y)---没有分号 { int z; /*函数体中的说明部分*/ z=x>y?x:y; return(z); }
3.可以有“空函数”,它的形式为: 类型说明符函数名() 例如: dummy ()
◼ 3.可以有“空函数”,它的形式为: 类型说明符 函数名() { … } 例如: dummy() { }
8.3函数参数和函数的值 8.3.1形式参数和实际参数 在调用函数时,主调函数和被调用函数之间有数据传 递关系。 在定义函数时函数名后面括弧中的变量名称形参 在调用函数时,函数名后面括弧中的表达式称为“实际参 数,简称实参。 [例8.2]main0 I int a, b, c scanf (%d, %d", &a, &b) C-max (a, printf(” max is %d", c) a,b为实参,x,y为形参(max函数中的参数)
8.3 函数参数和函数的值 8.3.1 形式参数和实际参数 在调用函数时,主调函数和被调用函数之间有数据传 递关系。 在定义函数时函数名后面括弧中的变量名称形参; 在调用函数时,函数名后面括弧中的表达式称为“实际参 数,简称实参。 [例8.2] main() { int a,b,c; scanf(”%d,%d” ,&a,&b); c=max(a,b); printf(”max is %d”,c); } a,b 为实参,x,y为形参(max函数中的参数)
关于形参与实参的说明: 1.形参变量,在未出现函数调用时,它们不占内 存中的存储单元。只有在发生函数调用时形参才被分 配内存单元。在调用结束后,所占的内存单元也被释 放 2.实参可以是常量、变量或表达式,如: maxa+b, a-b) 但要求有确定的值。在调用时将实参的值赋给形参变量 (如果形参是数组名,则传递的是数组首地址,而不 是变量的值)。 3.在被定义的函数中,必须指定形参的类型。 4.实参与形参的类型应一致,否则发生“类型不 匹配”的错误。字符型与整型可以互相通用
关于形参与实参的说明: 1.形参变量,在未出现函数调用时,它们不占内 存中的存储单元。只有在发生函数调用时形参才被分 配内存单元。在调用结束后,所占的内存单元也被释 放。 2.实参可以是常量、变量或表达式,如: max(a+b,a-b); 但要求有确定的值。在调用时将实参的值赋给形参变量 (如果形参是数组名,则传递的是数组首地址,而不 是变量的值)。 3.在被定义的函数中,必须指定形参的类型。 4.实参与形参的类型应一致,否则发生“类型不 匹配”的错误。字符型与整型可以互相通用