c语言模块化程序设计理念,C语言 模块化程序设计PPT课件

《C语言 模块化程序设计PPT课件》由会员分享,可在线阅读,更多相关《C语言 模块化程序设计PPT课件(57页珍藏版)》请在人人文库网上搜索。

1、精选,1,第4章模块化程序设计,北京交通大学计算机学院赵宏,精选,2,教学目标,理解如何用函数模块构造程序熟悉标准库中常见的函数会定义和调用函数并理解函数调用的机制掌握变量的作用域和存储类别理解并运用递归函数编写程序。,精选,3,4.1模块化程序设计概述4.2函数的声明、定义和调用4.3函数的多级调用4.4变量的作用域和存储类别4.5计算机随机模拟方法4.6编译预处理,精选,4,复杂任务可以分解为若干子任务。重复使用的程序段,将其进行独立设计,使计算机可以重复执行。,4.1模块化程序设计概述,精选,5,1.引例,4.2函数的声明、定义和调用,/*程序名:4_1.cpp*/*功能:计算两个实数中。

2、大的值*/#includefloatfmax(floatx,floaty);/*函数说明*/voidmain()floata,b,c;scanf(“%f,%f”,floatfmax(floatx,floaty)/*函数定义*/floatz;z=xy?x:y;returnz;,精选,6,2.函数说明,说明格式为:函数返回值类型函数名(参数表);,#includefloatfmax(floatx,floaty);/*函数说明*/voidmain()floata,b,c;scanf(“%f,%f”,函数说明是一条语句,它指出函数返回值的类型、函数的名称、函数要接收的参数的个数、顺序和类型。如果在一个。

3、函数中要调用另外一个函数,则在调用之前要对该函数进行说明。,4.2函数的声明、定义和调用,精选,7,3.函数定义,函数定义的一般形式:函数值类型函数名(形参表)/*函数头*/*函数体*/说明部分执行部分,4.2函数的声明、定义和调用,floatfmax(floatx,floaty)floatz;z=xy?x:y;returnz;,函数头,函数体,精选,8,4.函数调用,函数调用的一般形式为:函数名(实参表);,4.2函数的声明、定义和调用,voidmain()floata,b,c;scanf(“%f,%f”,可用两种方式调用函数:(1)函数的调用可以在允许表达式出现的任何地方。如:c=fmax。

4、(a,b);(2)函数调用可以作为一条独立的语句。比如,有函数定义:voidprintstar()printf(“*”);则可以把该函数调用作为一个独立语句,printstar();,精选,9,4.2函数的声明、定义和调用,函数返回值函数返回值的类型是由函数定义或说明中的函数返回类型决定的。如果返回的类型与函数说明的不同,则在返回值时,先作隐含的类型转换,然后再返回。,#includeintfmax(floatx,floaty)returnxy?x:y;voidmain()floatmax;max=fmax(3.5,2.6);printf(“max=%fn”,max);,结果?,精选,10,4。

5、.2函数的声明、定义和调用,形参和实参形式参数:定义函数时放在函数名称之后括号中的参数,简称形参。实际参数:调用函数时括号中的参数,简称实参。形参与实参的结合:函数在调用时,将生成实参值的一个副本传递给对应的形参,这个过程称为形参与实参的结合。如果只允许实参向形参传递数据,则被称为“单向传递”。,精选,11,4.2函数的声明、定义和调用,参数传递实例,voidswap(floatx,floaty)floatt;t=x;x=y;y=t;voidmain()floata,b;scanf(“%f,%f”,精选,12,4.2函数的声明、定义和调用,函数的调用过程,voidmain()floata,b,。

6、c;scanf(“%f,%f”,floatfmax(floatx,floaty)floatz;z=xy?x:y;returnz;,保存返回地址及当前现场,为形参分配内存并将实参的值传给形参变量,恢复main函数的现场,取得返回地址和返回值,精选,13,4.带自定义函数的程序设计,4.2函数的声明、定义和调用,程序设计思路:(1)定义一个函数isprime(intm)判断m是否为素数,若是素数,函数返回1,否则返回0。intisprime(intm)inti;for(i=2;i99)printf(Compiledforarraygreaterthan99n);#elseprintf(Compil。

7、edforsmallarrayn);#endif(2)协调多个头文件,避免一个符号或一个头文件被多次包含。例如,符号NULL在几个不同的头文件中都进行了定义,如果一个源文件包含其中几个头文件,则会出现符号NULL被多次定义的错误,这时需要使用条件编译命令:#ifdefNULL#defineNULL(void)0)#endif,4.6编译预处理,3.条件编译,精选,52,4.7本章小结,函数分为系统函数和自定义函数。每个函数的都是独立定义的,如果函数定义在后、调用在前,要对函数原型进行说明。除了主函数外,其他函数可以相互调用,如果A调用B,B又调用C,称为嵌套调用,如果直接或间接调用自己,称为递。

8、归。内存为用户提供的存储空间可以分三类:程序区、静态存储区、动态存储区。从变量占用空间的角度来分析问题,划分出全局变量和局部变量,这是变量的作用域问题。由变量值存在的时间来分析问题,由此划分出了变量的静态存储和动态存储,这是变量的存储类别问题。,4.7本章小结,精选,53,思考题,为什么要对函数进行说明?局部变量和全局变量的有效范围都是什么?变量的动态存储和静态存储有何区别?变量的作用域和生存期有什么区别?有什么联系?,精选,54,作业,实验二,精选,55,趣味程序,编写程序,帮助小学生学习加减法。用rand()函数产生两个一位数,然后输入下列问题:?然后输入答案,程序检查学生的答案。如果正确。

9、,则打印“正确”,然后提出另外一个加法问题,如果不正确,则打印“错误”,让学生重复回答这个问题,直到正确为止。,sy4-1.cpp,精选,56,voidmain()intk,flag=1;while(flag)/*显示菜单*/printf(1加法运算n);printf(2减法运算n);printf(0退出n);printf(请输入选项(0-2):);scanf(%d,精选,57,voidadd()inta,b,c,m,n=0;srand(time(NULL);/*随机化随机数序列*/while(1)a=rand()%10;/*生成两个随机数,和不能超过10*/b=rand()%(10-a);printf(%d+%d=,a,b);scanf(%d,n=0;/*n用来统计计算错误次数*/while(c!=a+b)/*允许计算三次*/n+;if(n3)printf(错误,请重计算一次n);printf(%d+%d=,a,b);scanf(%d。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值