C程序设计 第八章函数
C程序设计 第八章 函数
前言 ①什么是函数? ②为什么要使用函数? 什么是函数? ③函数有哪些类型?一个独立的程序模块, ④如何自己定义一个可以定义自己的变量 函数? (仅在本函数内有效) ⑤如何调用一个函数?拥有自己的存储空间 ⑥函数学习的难点是调用(主函数除外) 什么?
前言 ①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个 函数? ⑤如何调用一个函数? ⑥函数学习的难点是 什么? 什么是函数? 一个独立的程序模块, 可以定义自己的变量 (仅在本函数内有效), 拥有自己的存储空间。 可以被其他函数或自身 调用(主函数除外)
刊言 △在旦米2 如果把编程比做制造一台 为什么要使用函数? 机器,函数就好比其零部 便于实现模块化设计 件 便于团队开发 ●可将这些“零部件”单独 便于使用现有的或别人的 设计、调试、测试好,用 程序模块提高编程效能 时拿出来装配,再总体调 试 在C程序设计中,通常: ●这些“零部件”可以是自 将一个大程序分成几个子 己设计制造/别人设计制 程序模块(自定义函数) 造/现在的标准产品 将常用功能做成标准模块 (标准函数)放在函数库 中供其他程序调用
①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个 函数? ⑤如何调用一个函数? ⑥函数学习的难点是 什么? 为什么要使用函数? ◆ 便于实现模块化设计 ◆ 便于团队开发 ◆ 便于使用现有的或别人的 程序模块提高编程效能 在C程序设计中,通常: ➢ 将一个大程序分成几个子 程序模块(自定义函数) ➢ 将常用功能做成标准模块 (标准函数)放在函数库 中供其他程序调用 如果把编程比做制造一台 机器,函数就好比其零部 件。 ⚫可将这些“零部件”单独 设计、调试、测试好,用 时拿出来装配,再总体调 试。 ⚫这些“零部件”可以是自 己设计制造/别人设计制 造/现在的标准产品 前言
①什么是函数? 函数有哪些类型? 根据函数的来源,可分为: ②为什么要使用函数?◆库函数(标准函数 ③函数有哪些类型?由系统提供,编程时可直接 ④如何自己定义一个自定义函数 函数? 由编程者自己编写,使用时 要“先定义后使用” ⑤如何调用一个函数? ⑥函数学习的难点 根据使用的方式,可分为: 什么? ◆无参函数 ◆有参函数(函数内需要使 用主调函数中的数据)
①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个 函数? ⑤如何调用一个函数? ⑥函数学习的难点是 什么? 函数有哪些类型? 根据函数的来源,可分为: ◆库函数(标准函数) 由系统提供,编程时可直接 使用之 ◆自定义函数 由编程者自己编写,使用时 要“先定义后使用” 根据使用的方式,可分为: ◆无参函数 ◆有参函数(函数内需要使 用主调函数中的数据) 前言
前言 ①什么是函数? ◆如何自己定义一个函数? ②为什么要使用函数见后 ③函数有哪些类型?◆如何调用一个函数 ④如何自己定义一个(观后) 函数? ◆函数部分学习的难点是什么? ⑤如何调用一个函数■函数的概念 ■形参/实参/返回值的概念 函数学习的难点是递归算法 什么? ■变量的作用域和生存期
①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个 函数? ⑤如何调用一个函数? ⑥函数学习的难点是 什么? ◆ 如何自己定义一个函数? (见后) ◆ 如何调用一个函数? (见后) ◆ 函数部分学习的难点是什么? ■函数的概念 ■形参/实参/返回值的概念 ■递归算法 ■变量的作用域和生存期 前言
8.1、概述 函数使用常 P144 个源文件由一个或多个函数组成,可为多个C程序公 用 C语言是以源文件为单位而不以函数为单位进行编译的 个C程序由一个或多个源(程序)文件组成—可分 别编写、编译和调试。 C程序执行总是从main函数开始,一般情况下调用其 它函数后总是回到mim函数,最后在main函数中结束 整个程序的运行。 所有函数都是平行的、互相独立的,即在一个函数内 只能调用其他函数,不能再定义一个函数(嵌套定 义) 个函数可以调用其他函数或其本身,但任何函数均 不可调用main函数
8.1、概述 函数使用常识: P144 ◼ 一个源文件由一个或多个函数组成,可为多个C程序公 用。 ◼ C语言是以源文件为单位而不以函数为单位进行编译的。 ◼ 一个C程序由一个或多个源(程序)文件组成——可分 别编写、编译和调试。 ◼ C程序执行总是从main函数开始,一般情况下调用其 它函数后总是回到main函数,最后在main函数中结束 整个程序的运行。 ◼ 所有函数都是平行的、互相独立的,即在一个函数内 只能调用其他函数,不能再定义一个函数(嵌套定 义)。 ◼ 一个函数可以调用其他函数或其本身,但任何函数均 不可调用main函数
8.2 函数定义的一般形式 1.无参函数的定义形式 类型标识符函数名( [声明部分 语句} 2.有参函数定义的一般形式 函数返回值的数据类型函数名(类型名变量名1,类型名 变量名2,……) 声明部分 句} 如果在定义时不知指定函数类型,系统会隐含指定函数类型 为int型. 3无函数体的为“空函数” 类型标识符函数名()
8.2 函数定义的一般形式 1. 无参函数的定义形式 类型标识符 函数名( ) { 声明部分 语句} 2. 有参函数定义的一般形式 函数返回值的数据类型 函数名(类型名 变量名1,类型名 变量名2,……) { 声明部分 语句 } * 如果在定义时不知指定函数类型,系统会隐含指定函数类型 为int型. 3.无函数体的为“空函数” 类型标识符 函数名( ) { }
例一参见P5例1.3 void printstar()/*被调函数*/ #include include printi(“请输入两个整数:"); main()/米主调函数*} int max( int x, int y)/*被调函数* int abc int max( int, int);/*函数原型intz; 水 if(x>y) clrscr(; printstare(;/*函数原型* scanf(%od, %d", &a, &b); c=max(a, b printf( max=%d\n",c) return z
#include #include main( ) /*主调函数*/ { int a,b,c; int max(int,int); /*函数原型 */ clrscr( ); printstar(); /*函数原型*/ scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); } void printstar( ) /*被调函数*/ { printf(“请输入两个整数:"); } int max(int x,int y) /*被调函数*/ { int z; if (x>y) z=x; else z=y; return z; } 例一 参见 P5例1.3
83函数参数mmO)./*主调函数 i int a, b, c; 8.31形式参数和实际参can("%d%d"&a&b 1.形式参数和实际参数的树 c=max(a, b ) printf("max=%dIn", c) 2关于形参与实参的说明} 8.3.2函数的返回值 max (float x, float y) i float z 说明:1)函数的返回值通过函数zxy?x:y 2)函数值的类型 return Z, 3)如果函数值类型与re运行情况输入: 致,以函数类型为准(《数值1525 max=2 4)如果明确表示不需返回值,应使用void作函数返回 值的数据类型,否则即使没有 return语句,仍将带回一个 不确定的值
8.3 函数参数和函数的值 8.3.1 形式参数和实际参数 P146 1.形式参数和实际参数 的概念 P146 2.关于形参与实参的说明 P147 8.3.2 函数的返回值 P147 说明:1)函数的返回值通过函数中的return获得. 2)函数值的类型. 3)如果函数值类型与return语句表达式值的类型不一 致,以函数类型为准(数值型会自动进行类型转换). 4)如果明确表示不需返回值,应使用void作函数返回 值的数据类型,否则即使没有return语句,仍将带回一个 不确定的值 main( ) /*主调函数*/ { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); } max(float x, float y) { float z; z=x>y? x : y ; return z; } 运行情况:输入: 1.5,2.5 max=2
8.4函数的调用 8.4.1函数调用的一般形式 函数名(实参列表) 如果调用无参函数,则“实参列表”可省,但括号不能省 实参与形参个数相等,类型一致.实参与形参按顺序对应,一一传 递数据,如果实参表列包括多个实参,对实参求值的顺序不确定, 许多c版本是按自右而左的顺序求值 int f(int a,intb 例二:main i int c, pi if(a>b)c=l p=f(i,i++); else if(a==b)c=0 pr intf(“%d”,p); else 结果:1 return(c); 3
8.4 函数的调用 8.4.1 函数调用的一般形式 函数名 (实参列表) 如果调用无参函数,则“实参列表”可省,但括号不能省. 实参与形参个数相等,类型一致.实参与形参按顺序对应,一一传 递数据,如果实参表列包括多个实参,对实参求值的顺序不确定, 许多C版本是按自右而左的顺序求值. 例二: main() {int i=2,p; p=f(i,i++); printf(“%d”,p); } int f(int a,int b) { int c; if(a>b) c=1; else if(a= =b) c=0; else c= -1; 结果 return (c);} : 1