第7讲模块程序设计(上)-560501526_第1页
第7讲模块程序设计(上)-560501526_第2页
第7讲模块程序设计(上)-560501526_第3页
第7讲模块程序设计(上)-560501526_第4页
第7讲模块程序设计(上)-560501526_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第7讲模块程序设计-函数(上)Huangyongfeng2014-11-14主要内容1、程序模块化设计思想2、函数的定义、申明和调用3、函数的存储类型4、综合程序举例参考教材第4章中4.1-4.10节,带星号章节不看4.1程序模块化设计和函数模块化概念:化整为零模块化生产是工业化社会分工协作的必然结果HQ3169发动机底盘车身电气设备曲柄配气燃供冷却电源电器电池发动机………3#螺钉5#螺钉5#螺冒4.1程序模块化设计和函数封面显示口令

出题答题判题给分如果要继续练习BYE【例】编写一个儿童算术能力测试软件y测试软件封面显示测试出题答题判题给分口令BYE模块化设计基本思想:自顶而下,逐步求精4.1程序模块化设计和函数#include“stdio.h”intmain(){charans=‘y’;cover();/*调用软件封面显示函数*/password();/*调用密码检查函数*/do {question();/*调用产生题目函数*/ answers();/*调用接受回答函数*/ marks();/*调用评分函数*/ results();/*调用结果显示函数*/ printf(“是否继续练习?(Y/N)\n”); ans=getch();}while(ans==’y’||ans==’Y’)printf(“谢谢使用,再见!”);}问题1:在C++程序中,模块程序设计是如何实现的?回答:程序模块是通过函数来实现问题2:什么是函数?回答:函数(function)是按照一定格式组织并能实现某种功能的一段代码4.1程序模块化设计和函数/*定义所用函数*/cover(){}/*软件封面显示函数,张三编写*/password(){}/*密码检查函数,李四编写*/question(){}/*产生题目函数,王五编写*/answers(){}/*接受回答函数,…..*/marks(){}/*评分函数*/results(){}/*结果显示函数*/模块化设计优点问题分解细化,使程序结构更加清晰避免重复劳动,通过函数实现代码重用4.1程序模块化设计和函数z=f(x,y)自变量x,y因变量z输入参数(类型及个数)返回结果(返回值)max(intx,inty)函数名程序设计中“函数”与数学中“函数”程序“函数”数学“函数”4.1程序模块化设计和函数函数类型标准函数:系统(第3方)写好的函数用户自定义函数:自己动手写的函数无参函数和有参函数回顾学过的标准函数数学函数;#include“cmath”sqrt();sin();I/O函数;#include“stdio.h”scanf(“格式控制符”,输入变量地址列表)printf(“格式控制符”,输入变量列表)字符I/O函数;#include“conio.h”getchar();getch();putchar(ch);putch();puts(“字串“);4.2函数定义、申明和调用学习函数的三个要素函数定义:制造函数函数声明:使用之前的交代函数调用:使用函数生活案例父亲下班后下厨做了3道菜(做菜-制造函数)母亲视察厨房,将3道菜搬到桌上(摆菜-申明函数)儿子放下书包,坐在桌前享用这些菜(吃菜-调用函数)4.2.1函数定义函数定义的3种形式4.2.1函数定义无参函数定义实例

intswap(void){intt,x,y;scanf(“%d,%d”,&x,&y);t=x;x=y;y=t;return0;}函数的返回值是通过函数体中的return语句获得。例如:returnx;return(x+y);return(x>y?x:y);如果函数值类型与return语句表达式值的类型不一致,以函数类型为准(数值型会自动进行类型转换)4.2.1函数定义提问:输入参数是什么?输出参数是什么?如果将intz;改为floatz;会有啥事?returnz能否改为return(z)?有参函数定义实例(1)intpower(p,n)

intp,n;{ …… }形式参数是在定义函数时放在函数名后括号中的参数。在未进行函数调用时,并不对形式参数分配内存单元。在发生函数调用时,立刻给形式参数分配内存单元。调用结束后,释放掉形参所占的内存单元。形参变量属于局部变量,其作用域在它所在的函数体内在定义函数时,必须指定形参变量的类型;有二种方法:(2)intpower(intp,intn) { …… }注意:c++编译系统是第(2)种形式4.2.1函数定义函数的形式参数4.2.1函数定义空函数定义:如果明确表示不需返回值,可用void作函数的数据类型4.2.2函数申明函数申明语句格式C++是一门编译语言,在使用某个函数之前,必须知道函数在哪里?即编译器需要看到该函数的声明或定义提问:标准(库)函数是如何定义和申明的?申明实例4.2.3函数调用调用语句格式:变量=函数名(实参1,2,…)赋值

如:c=max(x,y);表达式,如:A=1+max(x,y);I/O语句,如:printf(“Max=%d\n”,max(x,y));嵌套调用生活中的嵌套调用儿子(main函数):学习过程中,“妈妈做饭…”妈妈(foo函数):妈妈停下手边活,风一般跑进厨房,开始做饭,“老公洗菜…”爸爸(bar函数):电一般跑进厨房,挽袖开始洗菜…4.2.3函数调用函数调用的执行过程参数传递:程序执行过程中,一旦遇到函数调用,系统首选为每个形参分配存储单元;然后计算实参表达式的值,把实参值复制到对应的形参存储单元。实现实参到形参传递执行转移:程序将控制转交给被调用函数,执行被调函数体内的语句返回断点:当被调函数执行到return语句或到达函数体尾时,控制返回给主调函数的调用处(断点)。如果有返回值,回送一个值并返回控制。然后从主调函数调用点继续执行

x

n4

2

i4.2.3函数调用提问:power()调用了多少次?p分配内存多少次?程序中两个“i”关系?4.2.3函数调用问题:编程求解现假定n=6,k=4.用函数来编写该题程序,参考程序如下:#include<stdio.h>voidmain(){intsum;intk=4,n=6;printf("sumof%dthpowersofintegersfrom1to%d=",k,n);

sum=SOP(n,k);//SOP(n,k)为被调用函数

printf("%d\n",sum);//输出结果}intSOP(m,l)//整型自定义函数,m,l为形参

intm,l;//形参m,l为整型变量

{//自定义函数体开始

inti,sum;//整型变量i,sum sum=0;//初始化累加器

for(i=1;i<=m;i=i+1) {//循环体开始

sum=sum+power(i,l);//累加

}//循环体开始

return(sum);//返回值sum给函数sop(n,k)}//自定义函数体结束intpower(p,q)//整型自定义函数

intp,q;//形参p,q为整型变量{//自定义函数体开始

inti,product//整型变量

product=1;//初始化累乘器

for(i=1;i<=q;i=i+1){//循环体开始(i)

product=product*p;//累乘

}//循环体结束(i) return(product);//累乘值product返回给power}//自定义函数体结束4.3函数的存储类型外部函数:可被同一程序中其他文件调用的函数;

定义格式:【extern】类型函数名(参数);内部函数:只能被本文件中其他函数调用的函数;

定义格式:static类型函数名(参数)外部函数调用申明:在A文件中申明要调用B文件中定义的外部函数。申明格式:extern类型函数名(参数类型);4.3函数的存储类型同一程序在不同文件中定义函数的调用4.3函数的存储类型玩法:犀利哥选择出“石头、剪子或布”,计算机也随机选择一个,输出结果。如果犀利哥错了,则喝他左手杯中酒;如赢了,就喝右手杯中酒。继续游戏,直到犀利哥选择结束为止游戏中,犀利哥可看游戏指南或当前战况规则:

布覆盖石头;石头砸坏剪刀,剪刀剪碎布综合编程实例犀利哥故事之九:自娱自乐话说天仙妹妹被撞,犀利哥编程查出了肇事者。不料那小子极其嚣张“你知道我谁吗?我爸是李刚!”。李刚何许人也!犀利哥那敢出气,不禁暗地忧愁。“何以解愁,唯有杜康”。犀利哥只得借酒浇愁。为了助兴,我给犀利哥编了“喝酒猜拳游戏”。希望有兴趣的同学继续完善修改程序设计分析之一:模块划分主模块:main()获取选择模块:choose_by_player()、choose_by_machine()比较模块:compare()打印模块:report()、print_status()、print_help()程序设计分析之二:模块设计选手选择模块。功能:键盘接收用户的输入并返回输入值。函数原型为:intchoose_by_player();机器选择模块。功能:机器产生一个“石头、剪子、布”值,并返回。函数原型intchoose_by_machine();比较模块。功能:比较用户输入的值和机器产生的值,确定输赢。两个int输入参数,一个返回值是判断结果,函数原型intcompare();报告输赢模块。功能:打印和记录输赢次数。有四个参数:输赢结果、输的次数、赢的次数和平局的次数,没返回值。原型report()帮助打印模块。功能:显示用户输入指南,告诉用户如何输入他的选择。因此,它没有参数也没有返回值。原型print_help()打印结果模块。功能:报告至今为止的战况,因此需要三个参数:输的次数、赢的次数和平的次数,没有返回值。原型print_status()程序设计分析之三:头文件和算法设计综合编程实例-参考代码程序设计分析之四:代码编写与分工挑战1:参考上述程序,将该版本改为1人版,2人版或3人版(多人最好联网版),视情况可奖励1-3分本讲重点模块化程序设计方法函数的定义、调用和申明方法函数调用和参数传递过程过程下讲主要内容函数的递归调用变量的存储类型预习教材的第4章后面内容第6次实验练习1.本次作业必做共1题,在第8周周末之前提交程序代码和结果.鼓励创新,在完成基本要求后,鼓励自由发挥2.题目:犀利哥故事之十:恋爱历程话说犀利哥和天仙妹已认识1周.在1周纪念日,为了慰问受伤卧床的天仙妹。犀利哥请同学帮忙,编程程序,将他们发生的故事编成“犀利-天仙恋爱历程”要求:(1)程序打印菜单如下(红色体):

请选择您想阅读的故事

1.莫名短信

2.彩礼之忧

3.八卦疑云4.亦喜亦忧5.故事待续

4.欢迎欣赏,再见

(2)上述菜单分别运行相应的函数,例如“莫名短信”调用“第1讲中“故事1”,“彩礼之忧”改编第6讲中的故事8(筹备彩礼);“八卦疑云”改编第4讲中故事5,“亦喜亦忧”改编第6讲中的故事7

(3)将上述4个故事编写为4个函数,分别保存在2个文件中;主函数(main())在第3个文件中实现(4)考虑到美国次贷危机影响,羊的价格是随时间变化的。因此,“彩礼之忧”函数一定写成“有参函数”,用户可以在运行时,通过键盘输入当时每只羊的价格(5)其他具体细节,同学可以发挥创新性,修改完善。选做题选择题覆盖前面章节内容,为期中机考复习之用1)年老的稻农给年轻人讲了一首诗迷:有100头水牛和100捆干草;站着的小水牛每头吃了5捆草;躺着的小水牛每头吃三捆草;3头老水牛共吃1捆干草;编程求解站着的水牛,躺着的水牛以及老水牛各有多少头(已知每种牛都存在)?答案:站着的水牛:4躺着的水牛:18、老水牛:78;站着的水牛:8躺

温馨提示

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

评论

0/150

提交评论