项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计
项目 1查询模块 2 退出模块
任务 任务1.退出函数参数定义及功能实现 任务2.显示查询函数参数定义及功能实现
学习目标 掌握函数定义的方法 掌握函数实参和形参的关系 掌握函数调用过程
函数的定义 main a b c d e C程序由函数组成。一个C程序可由一个主函数和若干个其它函数组成。函数是C程序的基本模块,主函数调用其它函数,其它函数之间也可以互相调用。同一个函数可以被多个函数调用。
函数的分类 函数从用户使用角度分类: 1.库函数 2.用户自定义函数 函数从形式分类: 1.无参函数 2.有参函数
无参自定义函数 语法 这个自定义函数用于实现翻跟头这个功能,函数中包含了三个必要的部分: 1)函数名称:tree 返回值类型 函数名( ) { 声明部分 语句 } void tree() { printf(“孙悟空翻跟头,十万八千里\n!"); } 这个自定义函数用于实现翻跟头这个功能,函数中包含了三个必要的部分: 1)函数名称:tree 2)函数返回值类型:void 3)函数体: printf(“孙悟空翻跟头,十万八千里\n!");
有参自定义函数 语法 这个自定义函数用于实现两个变量求和功能,函数中包含了三个必要的部分: 1)函数名称:jisuan 返回值类型 函数名( 形参列表 ) { 声明部分 语句 } int jisuan( int a,int b) { int c; c=a+b; return c; } 这个自定义函数用于实现两个变量求和功能,函数中包含了三个必要的部分: 1)函数名称:jisuan 2)函数返回值类型:int 3)函数体: int c; c=a+b; 4) 函数返回值: return c;
自定义函数 注意事项 自定义函数的基本步骤: 1)定义函数名及返回值类型。 2)编写函数主体。 函数名称与变量名命名一样,具有严格的命名规则: 1)必须与字母、下划线符号开头。 2)名称中可以包含数字,但是不得以数字开头。 3)返回值类型可以是int ,float ,double ,char ,long,void等数据类型。void是没有返回值。
自定义函数 #include<stdio.h> int jisuan( int a,int b) { int c; c=a+b; return c; } main(){ int m=3,n=4,sum=0; sum=jisuan(m,n); printf("%d",sum); }
实参和形参 实参出现在主调函数中,形参出现在北调函数定义中,发生函数调用时,实参向形参单向传递数据。 3.实参向形参传递数据 1.为实参分配空间 3 3 2.执行函数调用语句,为形参分配空间 4 4 4.函数调用完成后,形参空间释放
自定义函数 函数具有返回值类型,在示例代码中我们使用的返回值类型为void,即不返回任何类型,当方法具有返回类型如int,float等,则必须使用return返回值。 语法 return语法 return 表达式; 此处表达式也可以是单个变量或常量 int jisuan( int a,int b) { int c; c=a+b; return c; } return语句在函数中实现两个功能: 1)函数的运行到此为止,结束方法。 2)将跟随return的表达式结果返回给程序。
函数的调用 语法 定义函数的目的即是为了在程序中调用以实现某个功能或目的。如何进行调用呢?在程序中,使用函数的名称来进行方法调用。 函数调用 函数名( ); 函数名(实参列表); 语法 分别对应为无参函数和有参函数的调用 有返回值的函数调用的形式: sum=jisuan(m,n); printf(“%d”,jisuan(m,n)); sum=m+jisuan(m,n);
在调用某个函数之前,应该对被调函数进行声明。 函数的声明 在调用某个函数之前,应该对被调函数进行声明。 函数的声明 类型说明符 被调函数名(形参列表); 被调函数出现在主调函数之前,可以不对被调函数声明。 库函数的使用,不需要声明,只写头文件即可。
函数的嵌套调用 程序中,调用某一个函数时,被调函数又调用了另外一个函数,称为函的嵌套调用。 main( ) { a( ); } a( ){ b( ); } b( ){ } main a b
函数的嵌套调用 #include<stdio.h> void hello( ); void china( ); main ( ){ hello( ); } void hello( ){ china( ); void china( ){ printf("hello china\n");
程序结构图 C语言程序设计 函数调用图
关键代码分析 C语言程序设计 函数原型说明 void addnew(int *pnum,float *pmoney,float *pbalance,int *pflag,int *num); void logout(int *pnum,float *pmoney,float *pbalance,int *pflag,int *num); void modify(int *pnum,float *pmoney,float *pbalance,int *pflag,int num); void readcard(int *pnum,float *pmoney,float *pbalance,int *pflag,int num); void savemoney(int *pnum,float *pmoney,float *pbalance,int *pflag,int num); void inquiry(int *pnum,float *pmoney,float *pbalance,int *pflag,int num); void exitout(); int findcard(int *pnum,int *pflag,int cardnumber,int num); void displayone(int *pnum,float *pmoney,float *pbalance,int index);
? 关键代码分析 使用函数实现模块功能 结合团队开发体验,讲一下使用函数实现模块功能的优点及注意事项 C语言程序设计 printf("\n\t请输入选项:"); scanf(" %c",&choose); switch(choose) { case '1': addnew(cnum,cmoney,cbalance,flag,&num); break; case '2': logout(cnum,cmoney,cbalance,flag,&num); break; case '3': modify(cnum,cmoney,cbalance,flag,num); break; …… default: printf("\n\t输入错误,请重新输入."); getch(); } 结合团队开发体验,讲一下使用函数实现模块功能的优点及注意事项 ?
? 关键代码分析 查找指定卡号的校园卡 指针作为参数的注意事项 C语言程序设计 int findcard(int *pnum,int *pflag,int cardnumber,int num) { int i=0; for(i=0;i<num;i++) if(pnum[i]==cardnumber && pflag[i]!=1) return i; return -1; /*-1 = no find the card*/ } 指针作为参数的注意事项 ?
组织实施 C语言程序设计 任务决策 任务实施 评估反馈 拓展提升