函数的定义声明调用(1).ppt_第1页
函数的定义声明调用(1).ppt_第2页
函数的定义声明调用(1).ppt_第3页
函数的定义声明调用(1).ppt_第4页
函数的定义声明调用(1).ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,临沂大学汽车学院:韩晓翠,第7章 用函数实现模块化程序设计,授课要点,函数的定义、声明、调用 无参无返回值的函数 无参有返回值的函数 有参无返回值的函数 有参有返回值的函数,#include #include void main() /主函数 int iNo,b; printf(“input a number:n“); /输出函数 scanf(“%d“, /输出函数 ,初识函数1,/*从键盘输入3个数,求和并输出。*/ #include int myAdd(int x,int y,int z) int s; s=x+y+z; return s; void main() /主函数 int iNo1,iNo2,iNo3,sum; printf(“input 3 numbers:n“);/输出函数 scanf(“%d%d%d“, /输出函数 ,初识函数2,为什么要用函数,问题: 大规模的程序 实际应用程序中需要多次实现某一功能,用循环实现?,所有代码全写在main()中?,什么是函数,函数是一段完成特定功能的程序 换句话说,函数就是能够完成一定功能的语句的集合,是程序编译运行的基本单位。 前面一直在用各种各样的函数,如printf()、scanf() 等等。,将程序中反复使用的程序定义为函数的形式,函数的分类 从用户角度 标准函数(库函数):由系统提供 用户自定义函数 从函数形式 无参函数 有参函数,无参无返回值 无参有返回值,有参无返回值 有参有返回值,为什么要定义函数,C语言要求,在程序中用到的所有函数,必须“先定义,后使用” 指定函数名字、函数返回值类型、函数参数的名字与类型、函数实现的功能,将这些信息通知编译系统。,为什么要定义函数,对于库函数,程序设计者只需用#include指令把有关的头文件包含到本文件模块中即可 程序设计者需要在程序中自己定义想用的而库函数并没有提供的函数,函数的定义,函数定义的通用形式为: 返回值类型 函数名 (参数数据类型 参数1 , 参数数据类型 参数2, ) ,函数首部,函数定义示例(1),一、无参数无返回值的函数 如:定义printStar函数,用以在屏幕上输出5个*符号。 void printStar( ) int star; for(star=1; star=5; star+) printf(“*“); printf(“n“) ; ,函数无返回值时使用的数据类型,函数的调用,无参无返回值函数的调用形式: 函数名( );,无参数无返回值的函数的调用,#include void printStar( ); void main( ) printStar( ); /函数调用 void printStar( ) /函数定义 int star; for(star=1; star=5; star+) printf(“*“); printf(“n“) ; ,自定义函数的声明,在程序的开头加上对应函数的声明 函数声明的形式: 返回值类型 函数名称(参数类型 参数1, ) ; 其中前面的与函数定义时的首部完全一样,但末尾必须加“;”。 如对printStar函数的声明为: void printStar( );,无参数无返回值的函数的示例,#include void printStar( ); /函数声明 void main( ) printStar( ); /函数调用 void printStar( ) /函数定义 int star; for(star=1; star=5; star+) printf(“*“); printf(“n“) ; ,授课要点,函数的定义、声明、调用 无参无返回值的函数 无参有返回值的函数 有参无返回值的函数 有参有返回值的函数,问题:,过年回家,车票难买,到处托人。假如你先把车票钱给帮你买车票的朋友, 那么返回给你的应该是一张车票(当然是顺利的情况)。 同理,在C语言中,函数的调用有时候也是有返回值的,那么如何理解?,分析,对应到函数上,你的朋友就是函数,车票就是函数的返回值,而你就是调用函数的主程序。,函数的返回值,函数的返回值 返回语句 形式: return(表达式); 或 return 表达式; 或 return; 功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数,函数定义示例(2),无参数有返回值的函数 如定义函数sum_100,用以求1+2+3+100的和,并将结果返回给调用它的函数。 int sum_100( ) int s=0, i; for(i=1; i=100; i+) s=s+i; return s ; /用return返回一个值给主调函数 ,( ),无参数有返回值的函数示例,#include int sum_100( ); /函数声明 void main( ) int s1; s1 = sum_100( ); /函数调用 printf(“和值为:%dn“, s1); int sum_100( ) /函数定义(首部) int s=0, i; for(i=1; i=100; i+) s=s+i; return s; /返回值给主调函数 ,模仿练习,无参无返回值函数编写: 1、自定义函数myPrint1( ),在屏幕上输出如下图形(每行10个$符号),并在主函数中调用myPrint1()函数。 $ $ $,模仿练习,无参无返回值函数编写: 2、自定义函数myPrint2( ),在屏幕上输出如下图形,并在主函数中调用myPrint2( )函数。 ,模仿练习,无参有返回值函数编写: 3、自定义函数myFac(),计算10!,将计算结果返回给调用者。然后在主函数中调用myFac()函数,输出该结果。 4、自定义函数myMax(),实现功能:从键盘输入3个数,求最大数并将最大数返回给调用者。然后在主函数中调用myMax()函数,输出该结果。,讨论并总结,1、为什么使用函数? 2、如何理解函数调用与函数定义的不同? 3、空函数在程序结构设计中有什么作用?,学以致用,寻找你身边的一个实际问题,编写解决问题的程序,用到函数定义和调用。 例、电视是我们日常生活中所熟悉的,我们通过遥控器选择不同的频道,就可以播放相应的频道。请定义一个函数tvPlay( int channel) ,模拟根据遥控器的输入的频道号码,播放相应的频道。然后给出调用的例子,比如,遥控器上选择 5, 则播放CCTV-5体育频道。,作业每人必做,1 、编写一个函数sum(n),计算1+2+n 之和,根据n值的不同,得到不同的值。要求分别计算n50,n80,n100的情况。 2、 将自己的“学生成绩管理系统”(循环菜单)以模块化的形式进行处理,具体实施方案:主菜单的显示和选择部分可定义函数menu_select()来调用,“编辑子菜单”可定义editmenu()来调用,“查找”可定义serachmenu()来调用。,作业选做,寻找你身边的一个实际问题,构造出解决问题的表达式,描述解决问题的算法,以及编写解决问题的程序。例如,MP3可以播放不同的歌曲,请编写一个MP3模拟函数,根据输入不同的歌曲代号,可以显示相应的歌曲名。然后,调用该函数。,授课要点,函数的定义、声明、调用 无参无返回值的函数 无参有返回值的函数 有参无返回值的函数 有参有返回值的函数,问题:,试编程实现计算并输出 3!、4!、5!。,问题解决函数定义示例(3),有参数无返回值的函数 如定义fanc_n()函数,用以计算n!。其中n的值是由调用该函数的函数传递过来的。 void fanc_n( int n) int i,s=1; for(i=1; i=n; i+) s*=i; printf(“%dn“,s); ,函数参数(称为形参),函数调用,有参无返回值函数的调用形式: 函数名(实参); 实参与形参: 个数相等 类型一致 按顺序一一对应,有参数无返回值的函数调用,#include void fanc_n(int n); /函数声明 void main( ) int num; scanf(“%d“, ,函数参数(称为形参),授课要点,函数的定义、声明、调用 无参无返回值的函数 无参有返回值的函数 有参无返回值的函数 有参有返回值的函数,问题:,在主函数中输入n,自定义函数,计算1+2+3+4+n-1+n,将结果在主函数中输出。,问题解决函数定义示例(4),有参数有返回值的函数 如定义函数sum_n(),用以求1+2+3+n的和,并将结果返回给调用它的函数。 int sum_n( int m ) int s=0, i; for(i=1; i=m; i+) s=s+i; return s; /通过return返回一个值 ,#include int sum_n( int m ); /函数声明 void main( ) int s1, n; scanf(“%d“, /返回一个值给主调函数 ,有参数有返回值的函数调用,函数的调用,1、语句调用方式 2、函数表达式 3、函数参数,函数的调用,调用方式 语句调用: 例 printmsg(); printf(“打印成功!n“); 函数表达式调用: 例 result=aver(totalscore, stuno); 函数参数调用: 例 printf(“%f“,aver(totalscore, stuno);,问题:,用户输入两个整数a、b,通过下面的例子中传递方式能否实现a、b值的交换?,函数的值传递方式,#include void swap(int a,int b); /swap函数的声明 void main() int x=7,y=11; printf(“x=%d,ty=%dn“,x,y); printf(“swapped:n“); swap(x,y); /调用swap函数 printf(“x=%d,ty=%dn“,x,y); void swap(int a,int b) /定义swap函数 int temp; temp=a; a=b; b=temp; ,输出结果:x=7, y=11 swapped: x=7, y=11,结论值传递方式,值传递方式 方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向传递,从实参到形参,随堂实践,有参无返回值函数编写: 1、自定义函数myprint_n(),在屏幕的一行上输出n个$符号。在主函数中调用myprint_n()函数,输出如下图形(每行上的符号个数由调用它的函数传递过来) 。 函数首部为:void myprint_n( int n) $(5个$) $(10个) $(15个) $(20个) 2、修改以上程序,实现以下功能:打印个数由用户输入决定,支持用户循环输入,当用户输入0时结束程序。,有参有返回值函数编写: 3、自定义函数myfac_n(),求n!,并在主函数中调用myfac_n()函数,输出结果。 函数首部为: int myfac_n( int n) 4、自定义函数mypower(),求x的y次方,并在主函数中调用mypower()函数,输出结果。 函数首部为:double mypower( double x, int y) 5、自定义函数circleArea(),用于计算圆的面积,其中半径作为参数传入。然后在主函数中调用它,并输出结果。 函数首部为: double circleArea(double radius),随堂实践,讨论并总结,1、函数的功能应该尽量保持

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论