得程序设设 35 20023
C语言程序设计 2002 年 第五章 函数与程序结构
5(程序的一般结构 结构化程序设计 基本思想:将一个复杂的问题分解成若干较简单的子问题 必要时,对子问题进一步分解,每一个子问题称为一个模块, 通过逐步求精,直到分解成一些容易实现的模块(最底层)为 止,最终完成算法的功能设置。(自顶向下的程序设计) 教务管理 学生记录 统计 查询 录入修改删除 按学号综合查询
5.1 C程序的一般结构 1。结构化程序设计 基本思想:将一个复杂的问题分解成若干较简单的子问题。 必要时,对子问题进一步分解,每一个子问题称为一个模块, 通过逐步求精,直到分解成一些容易实现的模块(最底层)为 止,最终完成算法的功能设置。(自顶向下的程序设计) 教务管理 学生记录 统计 查询 录入 修改 删除 按学号 综合查询
2.C程序的一般结构 C程序 oI.c 02c 源文件1源文件2源文件n(n>0 函数1函数2 函数m(m>=0 说明: (1)n个源文件中有且仅有一个main函数,n个源文件组成 一个 project,每个源文件可独立编译; (2)源程序中仅有说明时,不包括函数; (3)函数分系统函数和用户自定义函数
2.C程序的一般结构 C程序 源文件1 源文件2 源文件n(n>0) 函数1 函数2 ….. ….. 函数m(m>=0) 说明: (1) n个源文件中有且仅有一个main函数,n个源文件组成 一个project,每个源文件可独立编译; (2) 源程序中仅有说明时,不包括函数; (3) 函数分系统函数和用户自定义函数。 p1.c p2.c pn.c …
52函数定义 存储类型区分符类型区分符函数名(参数表) 说明部分 语句部分 函数是一段有名称的程序,根据参数表提供的输入数据, 借助于说明部分的变量,通过语句部分的语句执行,实现特定 的功能。 说明: (1)存储类型区分符说明函数的使用范围: extern(缺省):外部函数,所有C程序文件中都可以使用; static 静态函数,仅在本C程序文件中使用
5.2 函数定义 存储类型区分符 类型区分符 函数名(参数表) { 说明部分 语句部分 } 函数是一段有名称的程序,根据参数表提供的输入数据, 借助于说明部分的变量,通过语句部分的语句执行,实现特定 的功能。 说明: (1)存储类型区分符说明函数的使用范围: extern(缺省):外部函数, 所有C程序文件中都可以使用; static 静态函数,仅在本C程序文件中使用
(2)函数名除m之外的标。外部函嫩间不能同名 同一C源程序文件中的静态函数也间不能同名。 (3)类型区分符:函数的返回值类型,缺省为int; void表示无返回值。 4)参数表:形式参数表(简称形参表) 形式:参数说明,参数说明,。。。,参数说明 参数说明:类型区分符形参名 (5)函数体和函数返回值: 函数体为一复合语句; 说明部分说明的变量使用范围(作用域)局部于本函数 函数体为空的函数为哑函数; 函数返回值应与定义的返回类型一致
(2)函数名:除main之外的标识符。外部函数间不能同名; 同一C源程序文件中的静态函数也间不能同名。 (3)类型区分符:函数的返回值类型,缺省为int; void 表示无返回值。 (4)参数表:形式参数表(简称形参表) 形式: 参数说明,参数说明,。。。,参数说明 参数说明:类型区分符 形参名 (5)函数体和函数返回值: • 函数体为一复合语句; • 说明部分说明的变量使用范围(作用域)局部于本函数; • 函数体为空的函数为哑函数; • 函数返回值应与定义的返回类型一致
例:定义一函数名求整数x,x、n均为整数。 分析:在math中有函数说明 double pow( double x, double y) 计算xy,当x=0且y<=0或者x<0且y不是一整数时,定义域错。 x=xxx结果为一较大的整数。 extern long power(int x, int n) long p=l; for(i=l; i<=n; i++) return p;
例:定义一函数名求整数x n , x、n均为整数。 分析:在math.h中有函数说明 double pow(double x,double y) 计算x y,当x=0 且y<=0 或者x<0且y不是一整数时,定义域错。 x n =x*x*….x 结果为一较大的整数。 extern long power(int x, int n) { int i; long p=1; for(i=1;i<=n;i++) p*=x; return p; }
5.3函数名调用与参数传递 53.1函数调用 函数调用表示为使用函数的功能而执行函数。 函数调用形式: 函数名(参数表) 参数表的形式:参数1,参数2,。。。,参数n 各参数是表达式,表达式的值是函数执行时要处理的实际数 据。实际参数(实参)
5.3 函数名调用与参数传递 5.3.1 函数调用 函数调用表示为使用函数的功能而执行函数。 函数调用形式: 函数名(参数表) 参数表的形式:参数1,参数2,。。。,参数n 各参数是表达式,表达式的值是函数执行时要处理的实际数 据。实际参数(实参)
例:输入整数m计算mm2,面每次我行 ip分配单元。 mainO 控制转移,x,n分配 单元。m→ x,i>n long power(intk,intn) int m.i. scanf(“%d”,&m); int i; long p=1; for(i=1;i<=10;i++) for(i=l; i<=n;i++) i long w; p=, w=power(m,i return p; printf(" power(%od, %od) “=%10ld”,m,i,w); 释放本次调用分配的所有 单元,控制转移,返回xn
例:输入整数m,计算m1 ,m2 ,….m10 long power(int x, int n) { int i; long p=1; for(i=1;i<=n;i++) p*=x; return p; } main() { int m,i; scanf(“%d”,&m); for(i=1;i<=10;i++) { long w; w=power(m,i); printf(“power(%d,%d)” “=%10ld”,m,i,w); } } 控制转移,x,n分配 单元。m➔x,i➔n 释放本次调用分配的所有 单元,控制转移,返回x n 每次执行, i,p分配单元
注意: (1)实参与形参应在数目上、次序上和类型上一致。 (2)有返回值的函数,函数调用可作为表达式或语句出现。 getchar C;作为语句出现,目的等待输入一个字符。 c= getchar o;作为表达式出现。 power(10,4);作为语句出现,返回的10没起作用。 (3)无返回值(返回类型为void)的函数,函数调用只能 作为语句出现。 (4)无参数的函数调用形式:函数名() ()不能省却
注意: (1)实参与形参应在数目上、次序上和类型上一致。 (2)有返回值的函数,函数调用可作为表达式或语句出现。 getchar (); 作为语句出现,目的等待输入一个字符。 c=getchar (); 作为表达式出现。 power(10,4); 作为语句出现,返回的104没起作用。 (3)无返回值(返回类型为void)的函数,函数调用只能 作为语句出现。 (4)无参数的函数调用形式:函数名() ()不能省却
参数的求值次序: 标准C中,函数调用时,实际参数表达式的求值次序没有规 定。绝大多数编译程序按从右至左进行实际参数表达式的求 值(如 TURBO O)。 main int x=U, printf( %od, %od, X++, x++) TURBO O下,输出结果:1,0 在某些C编译环境下,输出会是结果:0,1
参数的求值次序: 标准C中,函数调用时,实际参数表达式的求值次序没有规 定。绝大多数编译程序按从右至左进行实际参数表达式的求 值(如 TURBO C)。 main() { int x=0; printf(“%d,%d”,x++,x++); } TURBO C下,输出结果:1,0 在某些C编译环境下,输出会是结果:0,1