好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c语言程序设计ppt教学课件-第七章 用函数实现模块化程序设计.ppt

77页
  • 卖家[上传人]:aa****6
  • 文档编号:54573707
  • 上传时间:2018-09-15
  • 文档格式:PPT
  • 文档大小:318KB
  • / 77 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第七章 用函数实现模块化程序设计,,,交实验报告140页3题 格式:按照《上机指导书》171页附录D格式书写 采用统一的实验报告纸,算法是解决具体问题的方案,基本要求:根据给出的算法编写程序,7.1 为什么要用函数,实际的软件开发,实际问题往往由多个基本问题构成 要求软件开发人员首先分析问题,将问题分解为基本问题 其次,逐个解决每个基本问题程序与问题的关系,对软件开发人员的要求,分析并分解问题(高级要求) 设计解决基本问题的函数(基本要求)例,iA 和 iB 为两个整数,iA 是基数,iB 是指数. 如何计算,,变量result保存最后结果,base为底数,exponent为指数 result=1; for(counter=1;counter<=exponent;counter++) { result*=base;},计算35、 55、 85,问题,如果要分别计算100对整数的次幂,需要多少for?,解决方案,我们制造一个零件(函数),它负责计算次幂 当需要计算次幂时,告诉零件基数和指数,零件返回结果 函数就象提供服务的人第一个角度: 程序就是机器 函数就是零件 程序由函数构成。

      第二个角度: 函数可以为其他函数提供服务,就象服务人员1. 什么是函数?,函数就是可以完成某项基本任务的一组语句 函数名是唯一的 函数可以被其他的函数使用,称为函数的调用参数,主调用函数给被调用函数一些数据,即参数 被调用函数根据参数值完成相应的工作返回值,被调用函数完成工作后,可能会返回某些数据作为计算结果函数的要素,函数名 参数 返回值 函数体(语句),函数调用示例:,⑴一个源文件由一个或多个函数组成,是一个独立编译单元 ⑵一个C程序由一个或多个源文件组成; ⑶C程序执行总是从main函数开始,调用其他函数后流程回到main ⑷函数不能嵌套定义,但可互相调用注意不能调用main函数函数的分类,有参函数例(输出两数中大者) #include main( ) { int max(int x,int y);int n1,n2,a;scanf(“%d,%d“,},无参函数例 main() { print_star(); print_message(); print_star() ;}print_star() { prinf(“********** \n”); } print_message() { prinf(“ Hello! \n ”); },7.2 怎样定义函数,例如: print_message() { printf(“Hello! \n ”);},例如:求x和y二者中大者 int max (int x, int y) /*x,y为形参*/ { int z; /*函数体中变量的说明*/z=x>y?x:y;return (z) ;} /*将z的值作为函数返回值*/,,若无参数,类型标识符写void或不写,四、 形式参数和实际参数,有确定值的常量、变量或表达式,⑴函数不加类型说明按整型处理,⑵函数和return类型不一致以函数类型为准。

      ⑶函数不返回值定义为void,六、函数值的类型,小结,int Power ( int iBase, int iExponent ) 返回类型: int 函数名: Power 形式参数: iBase,iExponent 形式参数的数值由实际参数决定注意:,int Power ( int iBase, int iExponent )谁是被定义的函数? 谁是参数? 第一个int的作用是什么? 后两个int的作用是什么? 函数的使用者应该明确指明什么,才能使用函数?,调用函数就是使用函数 调用函数之前,必须首先声明函数 声明函数就是声明:函数名、函数返回值的类型和参数的类型 例:int Power(int, int);,7.3 调用函数,一、函数调用的一般形式,函数名(实际参数表),有参数函数,无参数函数,函数名(),,,二、函数调用的具体方式,在程序编译阶段,对调用函数的合法性进行全面检查如没有函数声明,编译到包含函数调用的语句时(如xx(a,b)),编译系统不知道xx是函数名,也无法判断实参(a,b)的类型和个数是否正确,无法进行正确性的检查。

      只有在运行时才会发现实参与形参的类型或个数不一致,出现运行错误7.4、对被调用函数的声明和函数原型,在C语言中,以上的函数说明称为函数原型/*定义add函数*/ float add (float x,float y) { float z;z=x+y; return (z); },main() { float add(float x,float y); float a, b, c;scanf(“ %f, %f”, },,对被调用函数的说明,,作为表达式被调用,3. 被调用函数是库函数的函数说明,文件开头用#include命令将调用库函数时需用到的信息“包含”到文件中(对这些库函数的原型说明全部都写在对应的头文件里)常用的头文件: # include “stdio.h” # include “math.h” # include “string.h”,4.省略被调用函数声明的三种情况,float add (float x,float y) { float z;z=x+y; return (z); }main() { float a, b, c;scanf(“ %f, %f”, },(1)被调函数定义在主函数前,,(2)函数返回值为整型或字符型,系统按整型处理。

      ⑶所有函数定义前,在函数的外部已说明函数类型char letter( char,char); float f(float,float ); int i(float,float); main( ) { ……. }char letter (char c1,char c2) {……} float f(float x,float y) {……} int i(float,float) {……},在所有函数之前说明函数类型,此处不必说明,定义函数letter、f和i,复习,函数的要素: 名字、返回值、参数和代码 定义函数: 编写代码 声明函数: 声明名字、参数类型和返回值类型 调用函数: 给出名字和实际参数,如果有返回值则保存main() { int i; long t; t=1;for(i=1; i<=n; i++) t=t*i;printf(“n!=%ld\n”,t); },long xx(int x) { long t=1;int i;if(x<=0) printf(“error”);elsefor(i=1;i<=x,i++)t=t*i;return (t);}main() { int n;long s;scanf(“%d”,},例1:编写函数,求n!。

      例题1:求1+2+3+.+100的和 main() { int i,s=0;for (i=1;i<=100;i++)s=s+i;printf(“s=%d”,s);},例2:编写函数,求1+2+3+.nint mm(int x) { int t=0;int i;for(i=1;i<=x,i++)t=t+i;return (t);}main() { int n;int s;scanf(“%d”,},执行细节 --- 步骤,程序将从主函数开始执行 当发生函数调用时,主调用函数暂停 实际函数的值将被复制给形式参数(不需要任何语句,程序自动做该项工作). 被调用函数执行 遇到返回语句时,被调用函数将结果返回给主调用函数 主调用函数恢复执行,执行细节---存储分配,被调用函数执行前,系统为其变量分配内存空间(包括形式参数) 实际参数的值被复制给形式参数 (值传递). 当被调用函数结束执行后,内存空间将被释放,下次调用时重新分配例:,你可以判断出下面程序的结果吗? 程序的执行过程是怎样的?,void Swap(int iA, int iB) {int iTemp;iTemp=iA;iA=iB;iB=iTemp; } main() {int iFirst=13, iSecond=27;Swap(iFirst, iSecond);printf(“\niA is %d“, iFirst);printf(“\niB is %d“, iSecond); },main() {int iFirst=13;int iSecond=27;Swap(iFirst, iSecond);printf(“\niFirst is %d“, iFirst);printf(“\niSecond is %d“, iSecond); },,iFirst=13 iSecond=27,,,,iFirst=13 iSecond=27 iB=27 iA=13 iTemp,,,main() {int iFirst=13;int iSecond=27;Swap(iFirst, iSecond);printf(“\niFirst is %d“, iFirst);printf(“\niSecond is %d“, iSecond); },,,,,,,,void Swap(int iA, int iB) {int iTemp;iTemp=iA;iA=iB;iB=iTemp; },,iFirst=13 iSecond=27 iB=27 iA=13 iTemp,,,,,,,,,,iFirst=13 iSecond=27 iB=13 iA=27 iTemp,,,,,main() {int iFirst=13;int iSecond=27;Swap(iFirst, iSecond);printf(“\niFirst is %d“, iFirst);printf(“\niSecond is %d“, iSecond); },iFirst=13 iSecond=27,,,总结,参数传递的时候,实际参数的数值复制给形式参数 形式参数是实际参数的“复印件”。

      修改形式参数,不影响实际参数的数值 这一机制称为:call-by-value,7.5 函数的嵌套调用,例题:编写函数,求1!+3!+5!+.k! 其中k是小于9的奇数,要求该函数中调用求阶乘函数求出各阶乘的值double xx(int x) { double t=1; int i;for(i=1;i<=x,i++)t=t*i;return (t) ;} double yy(int m) { double s=0; int i;for(i=1;i<=m;i++)if (i%2!=0) s=s+xx(i);return(s);} main() { int n;double sum;scanf(“%d”,},,,7.6、函数的递归调用,例:用递归法求n!,main() { double jx(int m)int n; double t;printf(“Input n :”);scanf(“%d”, },double jx(int m) {double f;if(m==1) f=1;else f=jx(m-1)*m;return f; },。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.