




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第八章:模块化程序设计 重点与要求:d重点掌握函数的定义、声明及传值与调用。熟悉函数的嵌套与递归调用。d掌握变量的作用域与存储类别。2函数一、函数C语言中,程序是由函数来实现的。函数可分为(1):标准库函数(2)用户自定义函数。在C语言中,至少要有一个main ( )函数,程序的执行是从main( )函数开始的。函数的调用过程如图:f11( )f21( )f31( )f1( )f11( );f2( )f11( );f22( );main( )f1( );f2( );3函数其中,每个方框相当于一个模块,而每个函数相当于一个输入输出系统。inout例如:要设计一个如下图所示的管理程序:高等院校事
2、务管理办公室管理教务管理科研管理财务管理图书管理后勤管理人事管理4函数由此可以得出:模块化程序设计有如下特点:(1)模块相对独立,功能单一,可混合编写也可独立编写调试。(2)可集体开发,缩短开发周期。(3)开发出的模块,可在不同的应用程序中多次使用,减少重复劳动,提高开发效率。(4)测试、更新以模块为单位进行而不会影响其他模块.一、函数的定义与声明1、定义:存储类型 数据类型 函数名(带类型的形参名表) 内部变量说明; 语句; 5函数例:计算表达式的值 x x+1 (x0)float y (float x ) if (x10) return (2*x+3); else return; 编译时,
3、由于第二个return语句而给出警告。说明:1)存储类型(后面讲) 2)数据类型:指函数返回值的类型。若缺省函数若缺省函数类型,一律按整形处理。类型,一律按整形处理。 3)函数是平等的兄弟般的关系,它不能嵌套定义即不能在一个函数体内再定义另一个函数。 4)只有自定义函数而没有main()函数的程序是没有意义的。(例L42)7函数2、函数的声明 数据类型 函数名 (类型标记符 形参 , );注意后面的“;”不要丢了。它与定义不同,一个函数一般要经过声明一个函数一般要经过声明才能使用(就好象变量一样必须先声明才能使用),除非它在调用它才能使用(就好象变量一样必须先声明才能使用),除非它在调用它的前
4、面定义。的前面定义。只有当返回的数据类型为int,数据类型才可省略。如:main( ) double new_style ( int, double ); /*函数声明*/ Double new_style (int a, double x) /*函数定义*/ 8函数二、return 语句 return 返回值表达式;return后面表达式的类型必须和函数定义时函数名后面表达式的类型必须和函数定义时函数名前的类型保持一致。前的类型保持一致。三、函数的调用函数名 (实参表);(如果是有返回值的函数,则可将调用结果赋值给别的变量,若是无值函数,则不能赋值,只能单独调用;(例41打印若干三角形)五、
5、形参、实参、参数的传递形参:定义函数的参数。实参:调用函数时有具体值的参数。9函数 关于形参和实参的说明:1、形参只有当调用时才临时分配存储单元。2、实参一定要有确定的值,可以是表达式。3、实参和形参的类型应相同或赋值相容。参数的传递是通过调用来完成的,分为按值传递和按址传递。10函数例L4_3.cmain( ) int a=3, b=5; void swap( int , int ); swap (a, b); printf(“a=%d, b=%dn”, a, b);void swap (int x, int y) int temp; temp=x; x=y; y=temp; printf(
6、“x=%d , y=%d n”, x, y);是按值传递的按址传递放在指针里面讲。Main()函数:调用Swap函数传递值35ab35xy 3temp11函数调用函数声明函数定义,其位置可以在main()前,也可以在main()后Main() float x,y; float y(float); scanf(“%f”,&x); Printf(“y=%8.2fn”,y(x);float y (float x ) if (x0) return (x*xx+1); else return (x*x*x+x+3);12实参为数组元素#include stdio.hmain()int a3,i,
7、m; int max(int,int); printf(Please input 3 int:n); for(i=0;ib?a:b);1、数组元素作为函数实际参数 数组元素和简单变量具有相同的特性,因此可以作为函数的实参来出现。(L4_4_0)形参为整形132、数组名作为函数参数 有一个一唯数组score,内放10个学生的分数,求平均成绩。形参形参实参实参#define N 10main()float scoreN,avg; float average(float arrN); int i; printf(Please input %d score:n,N); for(i=0;iN;i+)sc
8、anf(%f,&scorei); avg=average(score); printf(Average score is %7.2fn,avg);float average(float arrN)int i; float sum=0.0,aver; for(i=0;iN;i+) sum=sum+arri; aver=sum/N; return(aver);形参和实参都用数组名15数组名作为函数参数 实参数组和形参数组类型应保持一致。 在被调用函数中声明的数组大小是不起任何作用的。因为C编译系统对形参数组大小不作检查,形参数组名只代表一个形参数组名只代表一个地址,地址,在调用时将实参数组
9、的首地址传到形参数组名,也就是说,形参数组并形参数组并不在内存中重新申请数组的空间,而是不在内存中重新申请数组的空间,而是和实参数组共占存储单元。和实参数组共占存储单元。根据需要另设一个参数传递需要处理的数组元素的个数数组元素要参加处理的实际个数#define N 10main()float scoreN,avg; float average(float arrN); int i; printf(Please input %d score:n,5); for(i=0;i5;i+)scanf(%f,&scorei); avg=average(score,5); printf(Averag
10、e score is %7.2fn,avg);float average(float arr,int n)int i; float sum=0.0,aver; for(i=0;in;i+) sum=sum+arri; aver=sum/n; return(aver);实参为数组名形参定义二维数组的维数及每一维的大小,可以缺省第一维的大小#include stdio.hmain()int a33=1,1,1,1,1,1,1,1,1; int s(int aa3); clrscr(); printf(sum=%dn,s(a);int s(int a3)int sum=0; int i,j; for
11、(i=0;i3;i+)for(j=0;jb?a:b; return c;main()int a=7,b=10; fun(a,b); printf(max=%dn,c);int c;c=fun(a,b);22在函数fun()中,虽然没有定义变量a,b,但由于它们定义在程序的最前面,是全程变量,凡是在定义该变量的后面定义的函数均可以引用它们。外部变量和局部变量#include “stdio.h”int a=3, b=5; /*在函数体外定义的变量*/Main( ) void fun( ); printf(“ a= %d , b=%d n ” , a, b); fun ( ); printf(“ a
12、= %d , b=%d n ” , a, b);void fun (void) int c ; c=a; a=b; b=c; 例L4_7.c 交换两个变量的值23外部变量和局部变量 2、用extern声明外部变量,用以扩充外部变量的作用域。(1)在一个文件内声明外部变量:如:L4_7_0 main( ) void gx( ) int x, y; void gy( ) 还可用它在不同的程序中使用,如 在file1.c 中引用 file2.c中定义的变量x, y。extern int x, y;x,y原作用域 x,y新的作用域24变量的存储属性 变量的存储类型有:register型:寄存器类型au
13、to 型:自动型(缺省的都是auto型)static 型:静态型一、自动变量 auto 数据类型 变量名=初值表达式 , ;不作特殊说明的变量都是自动变量不作特殊说明的变量都是自动变量。它用之则建、用完即撤,仅在函数体内或复合语句内建立和有效,存储在内存的动态数据区中。例L4_5.c程序一进入main()函数,变量x就被创建,当程序运行到此局部范围内(即花括号内)时创建,用完即撤消,即释放变量。当程序运行到函数prt()内部时,变量x才被创建,离开函数时,就被撤消main( )int x=1; clrscr(); void prt(void); int x=3; prt( ); printf(
14、x=%dn,x); printf(%dn,x);void prt(void) int x=5; printf(%dn,x);总之,总之,auto变量是局部变量,变量是局部变量,在赋值之前,其值是不确定的,因而,对同一函数的多次调用,值不保留,因为存储单元被释放过。26Register变量二、register变量(寄存器变量)与auto变量完全相同,只是速度快,存储在CPU的寄存器中。#include “stdio.h”void m_table(void) register int i, j; for (i=1 ; i=9 ; i+) for (j=1 ; j=i ; j+) printf(“%
15、d * %d =%d ”, j, i, j*i); putchar ( I=j)? n : t ); Main() void m_table( ); m_table( );27Static变量三、static 变量(静态变量)auto变量是在程序运行过程中建立的,是动态建立、动态撤消。而静态变量是在程序一开始就建立的,不撤消静态变量是在程序一开始就建立的,不撤消直到程序结束。因而其值具有可继承性,直到程序结束。因而其值具有可继承性,但它只能在本程序内使用。结果为:1, 2, 3一般需要保留函数上一次的调用结果时,就定义成静态变量。Void incr(void) static int x=0;
16、x+; printf(“%d n ” , x );例L4_6_1.cmain( ) void incr(void); incr( ); incr( ); incr( );28上一次的结果,即n-1的阶乘对静态局部变量赋初值时在编译时进行的,也就是整个程序的运行过程中,它已经有初值,以后每次调用函数时不再重新赋初值而保留了上一次的运行结果。Static变量 例4_7.c:打印1到5的阶乘值int fac(int n)static int f=1; f=f*n; return(f);main()int i; for(i=1;i=5;i+)printf(%d!=%dn,i,fac(i);29#include stdio.hint x,y;one()int a,b; a=25,b=10; x=a-b; y=a+b; return;main()int a,b; a=9,b=5; x=a+b; y=a-b; one(); printf(%d,%dn,x,y);#include stdio.hint x,y;two()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南省税务局招聘84人模拟试卷及一套完整答案详解
- 2025江苏苏州国家历史文化名城保护区、苏州市姑苏区区属国资集团副总裁招聘2人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025广东珠海市香洲区招聘卫生健康系统事业单位工作人员10人模拟试卷含答案详解
- 2025年渤海钻探工程有限公司春季招聘(20人)模拟试卷及参考答案详解
- 2025年甘肃医学院招聘事业编制专业技术人员13人(第一批)考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年阜阳界首市“政录企用”人才引进8人模拟试卷及答案详解(名师系列)
- 2025年甘肃省张掖市(甘州区)博物馆讲解员招聘模拟试卷附答案详解(完整版)
- 2025昆明市盘龙区滇源街道中心卫生院第二次招聘(2人)模拟试卷含答案详解
- 2025广东珠海市香洲区招聘卫生健康系统事业单位人员10人有完整答案详解
- 2025甘肃兰州粮油集团有限公司招聘4人模拟试卷有答案详解
- 2025年下半年拜城县招聘警务辅助人员(260人)考试模拟试题及答案解析
- 宅基地争议申请书
- 2025年杭州上城区总工会公开招聘工会社会工作者9人笔试参考题库附答案解析
- 百师联盟2026届高三上学期9月调研考试数学试卷(含答案)
- 2025年互联网+特殊教育行业研究报告及未来发展趋势预测
- 神舟十号课件
- 汽车产品安全管理制度
- 企业风险防控制度汇编与实施指南
- 2025-2026学年冀人版(2024)小学科学二年级上册(全册)教学设计(附教材目录 )
- 2025-2030年中国农机行业市场深度调研及前景趋势与投资研究报告
- 安全生产法律法规、标准和其他要求清单
评论
0/150
提交评论