




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 第8章结构化设计方法 西安交通大学计算机教学实验中心 计算机程序设计C 1 本章内容 8 1结构体类型8 2枚举类型8 3自顶向下 逐步求精的程序设计方法 2 结构化程序设计方法 软件危机 软件开发方法落后 供不应求寻求好的方法开发 生产软件 缓解软件危机程序设计的目标不应再集中于如何充分发挥硬件的效率方面 新的程序设计方法应以能设计出结构清晰 可读性强 易于分工合作编写和调试的程序结构化设计方法是以模块化设计为中心的详细设计方法 3 结构化程序设计思想 结构化程序设计方法 自顶向下 逐步求精 模块化 结构化 不用goto自顶向下将复杂的 大的问题划分为小问题 找出问题的关键 重点所在 然后用精确的思维定性 定量地去描述问题逐步求精对一个事物的认识是一个从高层次抽象向低层次抽象逐步转化和过渡的过程 首先一般性 抽象的 然后才是具体和详细的抽象思想在认识事物 分析和解决问题的过程中 忽略那些与当前研究目标不相关的部分 以便将注意力集中于与当前目标相关的方面 4 模块化设计思路 模块化就是把程序划分为若干个部分 每个部分独立存放 完成一个特定的功能 称为模块 每个模块可以是一条语句 一段程序 一个函数等 模块控制流程只采用三种结构 顺序 选择 循环基本特征是 仅有一个入口和一个出口目的降低程序的复杂度 程序便于阅读 调试和维护 5 模块化结构示例 计算器程序设计 功能包括 求加 减 乘 除 开方 指数 对数 平方等运算 main add a b min a b intadd intx inty returnx y intmin intx inty returnx y floadexp intx returnexp x floatsin floadx returnsin x 6 结构化设计具体方法 从题目本身开始 找出解决问题的基本思路 将其用结构化框图 可能是非常粗糙 表示 对框图中的比较抽象的 用文字描述的模块进一步分析细化 结果仍用结构化框图表示将所求解问题的所有细节都弄清楚后 再根据框图直接写出相应程序代码 7 验证 哥德巴赫猜想 1742年法国数学爱好者哥德巴赫在给著名数学家欧拉的信中提出 哥德巴赫猜想 问题 哥德巴赫猜想 表述为 任何一个大于等于4的偶数均可以表示为两个素数之和 哥德巴赫猜想 是数论中的一个著名难题 200多年来无数数学家为其呕心沥血 却始终无人能够证明或伪证这个猜想 8 验证哥德巴赫猜想的设计 求解第一步提出拟解决的问题 验证哥德巴赫猜想的正确性 9 验证哥德巴赫猜想的设计 第二步 设一上限数M 验证从4到M的所有偶数是否能被分解为两个素数之和 10 验证哥德巴赫猜想的设计 第三步 如何验证X是否能被分解为两个素数之和 11 验证哥德巴赫猜想的设计 第四步 将第三步中三个模块进一步细化对 生成下一个素数 细化如下 12 验证哥德巴赫猜想的设计 经过四步分解精化 将 验证哥德巴赫猜想 这个命题已经分解为计算机可以求解的数学模型了剩下的问题就是编程求解了 如何编程是程序设计课程要解决的问题 13 哥德巴赫猜想程序 主函数验证哥德巴赫猜想voidmain void intx intp1 p2 x 4 从4到M开始验证 while x M isPrimeSum x 验证X是否能被分解为两个素数之和if isPrimeSum x p1 p2 1 cout 素数 x p1 p2 endl else cout 哥德巴赫猜想不成立 x 不能分解为素数值和 endl x x 2 验证下一个偶数 14 验证是否能分解成两个素数值和voidisPrimeSum intx intp 2 intPrimeList M CreatPrimeList PrimeList 生成素数表 while px 2 cout 哥德巴赫猜想不成立 endl 哥德巴赫猜想不成立的情况 else cout 偶数 x p x p endl 打印分解情况 15 结构体类型 结构复杂的信息表示 16 统计学生成绩 统计全班30人三门课程的平均成绩数据的表示 方法一 definecourse3intstudent 30 course 2 student i 0 学号student i 1 高等数学student i 2 英语student i 3 计算机程序设计student i 4 平均成绩 17 统计学生成绩 数据表示 方法二 definecourse3charstudent 30 20 学号intscore 30 course 成绩doubleaverage 30 平均成绩student i 一个人的学号score i j 第j 1科成绩 j 0 1 2average i 平均成绩 18 统计学生成绩 数据表示 方法三 charmclass 10 charnumber 10 charname 10 intscore 3 doubleaverage student struct studentwang studentstu 30 输入数据cin stu i class cin stu i number cin stu i name cin stu i score 0 cin stu i score 1 cin stu i score 2 stu i average stu i score 0 stu i score 1 stu i score 2 3 0 19 输出数据cout stu i mclass t cout stu i number t cout stu i name t cout stu i score 0 t t cout stu i score 1 t t cout stu i score 2 t cout endl 20 8 1 1结构体类型的定义 结构体是由不同数据类型的数据组成的集合体 组成结构体的每个数据称为该结构体的成员项简称成员 结构体是一种数据构造类型需要定义 声明 调用结构体的定义即对结构体进行描述 21 8 1 1结构体类型的定义 struct 数据类型成员名1 数据类型成员名2 数据类型成员名n structstudent charname 20 unsignedlongnumber floatmath floatenglish floatphysics 22 三种结构体变量的声明 1 先定义结构体类型 再定义结构体类型变量 例如 日期类型可以定义为structdate intda year charda mon charda day structdateyesterday today tomorrow 23 三种声明结构体变量的方式 2 2 定义类型的同时声明变量 例如 structdate intda year charda mon charda day yesterday today tomorrow 声明了3个日期类型的变量 yesterday today和tomorrow 24 三种声明结构体变量的方式 3 3 直接定义结构体类型变量 例如 struct intda year charda mon charda day yesterday today tomorrow 不出现结构体类型名 25 8 1 2结构体变量的初始化 结构体变量的使用可以整体赋值studentstu1stu2 stu1 stu2 不能整体输入和输出 cin stu1 cout 26 统计学生成绩 结构体定义部分 includeusingnamespacestd constintAMOUNT 3 人数constintCOURSE 3 课程数 定义结构体类型structStudent charid 10 学号charname 9 姓名intscore COURSE 课程成绩floataverage 平均分 27 输入部分 mainfunctionintmain StudentxjtuStudent AMOUNT 声明结构体变量inti j cout xjtuStudent i id xjtuStudent i name 输入学号和姓名xjtuStudent i average 0 for j 0 j xjtuStudent i score j 输入成绩 成绩求和xjtuStudent i average xjtuStudent i average xjtuStudent i score j xjtuStudent i average xjtuStudent i average COURSE 成绩求平均 28 输出部分 cout 学号姓名高数英语体育平均分 endl cout endl for i 0 i AMOUNT i i 1 打印成绩 cout xjtuStudent i id t xjtuStudent i name t for j 0 j COURSE j j 1 cout xjtuStudent i score j t cout xjtuStudent i average endl return0 29 从文件中读取数据 头文件 include includeusingnamespacestd constintAMOUNT 3 constintCOURSE 3 定义结构体类型structStudent charid 10 学号charname 9 姓名intscore COURSE 课程成绩floataverage 平均分 30 从文件中读取数据 文件对象 mainfunctionintmain ifstreammyin 1 txt if myin cout xjtuStudent i id xjtuStudent i name 输入学号和姓名xjtuStudent i average 0 for j 0 j xjtuStudent i score j 输入成绩xjtuStudent i average xjtuStudent i average xjtuStudent i score j xjtuStudent i average xjtuStudent i average COURSE 31 从文件中读取数据 文件组织 01zhang87789802li67768604wang859382 32 对结构体数组按成绩排序 voidScoreSort Studentstu intn 函数声明 按成绩排序结构体数组 点用法voidScoreSort Studentstu intN 函数定义 Studenttmp inti 0 j 0 for j 1 jstu i 1 average tmp stu i stu i stu i 1 stu i 1 tmp ScoreSort xjtuStudent AMOUNT 函数调用 33 例8 6 定义一个结构体矩形Rectangle 根据给出矩形的左上角顶点坐标和一个右下角顶点坐标 计算该矩形的面积 Example8 6 计算矩形的面积 include includeusingnamespacestd structRectangle inttopleft x inttopleft y intbottomright x intbottomright y 34 把两个点坐标组合成一个矩形结构体表示矩形 为结构体变量赋值RectangleInput intx1 inty1 intx2 inty2 Rectangletmp tmp topleft x x1 tmp topleft y y1 tmp bottomright x x2 tmp bottomright y y2 returntmp 35 计算矩形的面积 参数矩形结构体变量doubleGetArea Rectanglerect returnfabs rect bottomright x rect topleft x rect bottomright y rect topleft y x1 y1 x2 y2 36 intmain Rectanglerec inttlx tly brx bry cout tlx tly brx bry rec Input tlx tly brx bry cout Area GetArea rec endl return0 定义圆 求圆的面积 37 8 2枚举类型 经常需要为某些属性定义一组可选择的值 变量的取值范围是有限值例如 职业有 teacher worker driver officer police01234intoccupation 1 intoccupation0 0 intoccupation1 1 intoccupation2 2 intoccupation3 3 intoccupation4 4 intoccupation5 5 intoccupation6 1 不直观 容易出错 38 枚举类型enumerate的定义 enumrank professor 0 associate professor lecturer teaching assistant 39 枚举类型的使用 rankmyrk myrk teaching assistant myrk lecturer myrk professor myrk teacher cout myrk myrk myrk 2 不能改变枚举成员的值 professor 1 X枚举成员本身就是一个常量表达式 所以也可用于需要常量表达式的任何地方 40 枚举类型的输入 charstr 20 cin str myrk str if strcmp str professor 0 myrk professor if strcmp str associate professor 0 myrk associate professor if strcmp str lecturer 0 myrk lecturer if strcmp str teaching assistant 0 myrk teaching assistant cout myrk 41 8 2枚举类型 枚举类型的定义enum 枚举符号表 42 例2根据键盘输入的首字符选择颜色 includeusingnamespacestd intmain 定义枚举类型颜色Colors并同时声明一个该类型的变量chooseenumColors blue brown green red white yellow choose charch1 ch2 cout ch1 ch2 输入两个字符 43 判断键盘输入字符所对应的枚举类型值switch ch1 case b if ch2 l choose blue elsechoose brown break case g choose green break case r choose red break case w choose white break case y choose yellow break default cout Illegalinput endl 44 输出枚举类型值switch choose caseblue cout Thecoloryou vechosenisblue endl break casebrown cout Thecoloryou vechosenisbrown endl break casegreen cout Thecoloryou vechosenisgreen endl break casered cout Thecoloryou vechosenisred endl break casewhite cout Thecoloryou vechoseniswhite endl break caseyellow cout Thecoloryou vechosenisyellow endl return0 45 词频统计输入一系列英文单词 单词之间用空格隔开 用 xyz 表示结束输入 统计输入过哪些单词以及各单词出现的次数 统计时区分大小写字母 最后按单词的字典顺序输出单词和出现次数的对照表 46 输入单词 cin要记录单词和使用次数structWordList charword 50 intfreq structWordListlist 200 保存单词 47 排序 按字典顺序输出 要排序 冒泡排序法 voidsort inta intn inti j tmp for i 0 ii j if a j 1 a j tmp a j 1 a j 1 a j a j tmp int WordList比较strcmp a j 1 word a j word 0 48 算法 0 num记录单词数 1 输入单词 2 如果是 xyz 转 5 输入结束 3 在数组中查找单词找到 使用次数加1没找到 在末尾添加单词 并且使用次数置1 单词个数加1 4 转 1 5 对输入的单词排序 6 输出排序后的单词及词频 49 例8 7 词频统计程序 词频统计程序 include includestructWordList charword 50 英文单词intfreq 频率统计 voidSort structWordListlist intcount for inti 0 ii j if strcmp list j 1 word list j word 0 WordListtmp tmp list j 1 list j 1 list j list j tmp 50 词频统计程序主函数 intmain structWordListlist 5000 inti num 0 chartemp 50 cout temp while strcmp temp xyz 0 for i 0 i num 没找到刚输入的词 strcpy list i word temp 放入单词表list i freq 1 使用次数 1num 单词数量 1 cin temp 再输入单词 Sort list num 调用排序函数排序cout 词频统计结果如下 endl 输出单词for i 0 i num i cout list i word t list
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业家精神代际传递-洞察及研究
- 第八单元《词义的辨析和词语的使用》教案(表格式)统编版高中语文必修上册
- 2025企业租赁合同协议书模板
- 党史教育线上考试题库及答案
- 2025【合同范本】铁路运输合同范本
- 2025养殖场山地租赁合同
- 冲压安全生产培训资料课件
- 2025租赁合同模板示例
- 八月快递安全培训总结课件
- 2025化工卧式泵买卖合同书
- 智障个别化教育计划案例(3篇)
- 江苏南京建邺高新区管委会社会公开招聘22人高频重点提升(共500题)附带答案详解
- 化学奇妙之旅
- 《化工仪表知识培训》课件
- 第十八届地球小博士全国地理知识科普大赛介绍宣传组织动员备赛课件
- 《汽车文化(第二版)》中职全套教学课件
- 物业管理服务流程与标准手册
- DB3502∕T 090-2022 居家养老紧急事件应急助援规范
- 精微广大-绘画的功能和种类 课件-2024-2025学年高中美术人美版(2019)选择性必修1 绘画
- 腰椎间盘突出症护理查房课件
- 数据退役方案
评论
0/150
提交评论