版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构化程序设计综合训练主讲:王璇 邮箱:whutxuastudent帐号登录。在“!课件下载”目录下有“!结构化程序综合设计-wangx”一、本课程的教学目的结构化程序设计和面向对象程序设计是程序设计的两种典型的思想和方法。目前高校开设的程序设计课程也基本据此划分为两大系列。本课程是实践性课程,主要以实验为主, 本课程以C语言为工具。记住C和C+是两门不同的编程语言,虽然语法相似。C语言能做什么?Linux操作系统的内核源代码是用C和汇编语言编写的。从事嵌入式开发,驱动开发,单片机开发都要用到C。编译器的开发。目前,大部分同学的水平 :1.可以解决绝大多数的编译错误。
2、2.可以解决部分程序运行异常错误,但是有关内存方面的错误,基本上解决不了。3.代码书写不规范。4.编译器的使用不熟练,不会单步调试。部分同学可以看懂同学写的代码,但是自己不会做,也就是不会分析。还有一部分同学由于校外培训机构对JAVA和网络配置鼓吹的漫天飞,心里已经放弃了对C语言学习。有这么多的问题?怎么办?现在才大二,时间完全来得及。秘诀只有一个,就是多动手!课程目的1. 学会分析题目;2. 掌握良好的程序设计编码风格;3学习常用的算法设计的技术;4进一步提高学生的程序调试能力;5提高学生的程序编程兴趣。二、实验内容序号内 容1管理系统的开发2游戏程序的开发3筛选的算法设计技术4归纳的算法设
3、计技术5分治的算法设计技术6最优的算法设计技术7综合程序开发提交实验报告时间实验中等良好优秀管理系统的开发 必做 必做 必做筛选的算法设计技术 必做 必做 必做分治的算法设计技术 必做 必做 必做归纳,贪心算法设计技术,补充 必做 必做 必做综合程序开发 必做 必做游戏程序的开发 必做 必做三、其它说明从三个方面考核每个实验的成绩:功能完成情况、实验报告以及程序风格、界面设计以及操作方便性。实验报告要求:至少记录5个,在实验过程中遇到的问题以及解决办法。四:结构化开发方法结构化开发方法是一种设计程序的技术,它提出的原则可归纳为32字:“自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式
4、;基本结构,组合而成。”五 软件生命周期软件生命周期各阶段的主要任务 问题定义: “要解决的问题是什么”。问题定义阶段是整个过程中占用时间最少的阶段。软件生命周期各阶段的主要任务可行性研究:从经济、技术、法律等方面分析确定系统是否值得开发,及时建议停止项目开发,避免人力、物力、时间的浪费,并进行方案选择。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。可行性研究包括四个方面的研究:经济可行性技术可行性法律可行性方案的选择软件生命周期各阶段的主要任务需求分析:准确回答“系统必须做什么”这个问题。需求分析阶段的任务不是具体的解决客户的问题防止系统的设计与用户的实际需求不相符的后果。软件生
5、命周期各阶段的主要任务概要设计:确定系统设计方案,软件的体系结构。确定软件由哪些模块组成以及这些模块之间的相互关系。软件生命周期各阶段的主要任务详细设计:描述应该如何具体地实现系统。详细设计每个模块,确定实现模块所需要的算法和数据结构。软件生命周期各阶段的主要任务软件实现阶段:进行程序设计(编码)和模块测试。软件生命周期各阶段的主要任务综合测试阶段:测试的目的是以最小的代价(耗费最少时间和最少工作量)发现尽可能多的不同类型的错误。通过各种类型的测试,查出软件设计中的错误并改正,确保软件质量;还要在用户的参与下进行验收,才可交付使用。软件生命周期各阶段的主要任务大量的资料统计表明,软件开发组织将
6、30%40%的工作量花在测试上。而那些高可靠性、高安全性软件的测试所花的时间更是其它开发步骤总和的3到5倍。软件生命周期各阶段的主要任务测试和调试常常被说成是一个回事,实际上是测试阶段的不同任务。调试即排错,是在已经知道程序有问题时要做的事情。测试则是在认为程序能工作的情况下,为发现问题而进行的一整套确定的系统化的实验。 软件生命周期各阶段的主要任务软件运行、维护:程序的运行与维护是整个程序开发流程的最后一步。编写程序的目的就是为了应用,在程序运行的早期,用户可能会发现在测试阶段没有发现的错误,需要修改。而随着时间的推移,原有程序可能已满足不了需要,这是就需要对程序进行修改甚至升级。每次维护的
7、要求及修改步骤都应详细准确地记录下来,作为文档保存。六 常用设计工具介绍三种常用的图形方式的设计工具。 层次图用来描述软件的层次结构,图中的一个矩形框代表一个模块,方框之间的连线表示调用关系。层次图很适合在自顶向下设计软件的过程中使用。程序流程图是历史最悠久使用最广泛的描述软件设计的方法。它的主要优点是对控制流程的描述很直观,便于初学者掌握。盒图是一种很好的支持结构化程序设计思想的图形工具,也称为N-S图。顺序结构块1块2块3块4条件T F块1块2选择结构Case I=1,2,3T块1块2多分支选择结构F块3块当条件成立时当型循环块直到条件成立时直到型循环伪代码图形工具表示设计比较直观,但画起
8、来比较费劲,所以描述设计还可以使用伪代码这个常用的语言工具。伪代码是一种“混合”语言,它使用一种语言通常是某种自然语言的词汇,同时却使用某种结构化程序设计的语法。伪代码if 九点以前 do私人事务;else 9点到18点 工作else 下班;七 编码应注意的问题全局变量减少全局变量的使用全局变量增加了模块与模块之间的联系。运行的时候一直占用内存另外使用全局变量过多,会降低程序的清晰性变量的名字名字应具有足够的说明性,以便使读者能够记住它们是干什么的。给每个全局变量声明附一个简短的注释也是非常有帮助的。变量的名字按常规方式使用的局部变量可采用极短的名字,如用i、j作为循环变量,p、q作为指针,s
9、、t表示字符串等。变量的名字现实中存在许多命名约定或者本地习惯。常见的如:指针采用以ptr结尾的变量名;全局变量用大写开头或者g_开头做变量名;常量用完全由大写拼写的变量名等。命名约定能使代码更易理解。 表达式和语句同样,我们也应该以尽可能一目了然的形式写好表达式和语句。采用缩进程序结构,是使程序呈现出结构清晰的最省力的方法。比较:n=0;for(n+;n100;fieldn+=0) ;或for(n+;n100;fieldn+=0);for(n=1;n 100;n+) fieldn=0;使用表达式的自然形式。否定运算的条件表达式比较难理解,比较:if(!(block_id=unblocks)
10、if(block_id=actblks)|(block_idunblocks) 分解复杂的表达式。C有很丰富的表达式语法结构和很丰富的运算符,因此应该避免将一大堆东西塞进一个结构中。比较: *xp+=(x=2*k (n-m)?ck+1:dk-); if(2*k =A&(c)=Z)但如果它在下面的上下文中使用:while(isupper(c=getchar( )那么,每当遇到一个大于等于A的字符,程序就会丢掉它,而下一个字符将被读入并去与Z做比较。因此,上面的实现是错误。宏除了这个问题外,由于宏是通过文本替换方式实现的,如果忘记给宏的体和参数加上括号,将产生错误。如:#define square
11、(x) (x)*(x)1/square(x)正确的宏应该是:#define square(x) (x)*(x)注释注释是帮助读者阅读程序的一种手段,它们澄清情况,不是添乱。注释要注意:对函数要进行注释:包括部分参数。对一些需要看大量代码的才能够确定这部分代码的功能,需要进行注释不要琐谈明显的东西。注释不要与代码矛盾。如果注释的长度超过代码本身,可能就说明这个代码应该修改了。C语言中常见的错误忽略了“=”与“=”的区别。if (a=3) then 但C语言中,“=”是赋值运算符,“=”是关系运算符。如:if (a=3) a=b;八 C语言中常见的错误C语言中常见的错误忘记加分号。分号是C语句中不
12、可缺少的一部分,语句末尾必须有分号。a=1b=2if (a%3=0);i+;C语言中常见的错误输入变量时忘记加地址运算符“&”。int a,b;scanf(%d%d,a,b);这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。C语言中常见的错误switch语句中漏写break语句。例如:根据考试成绩的等级打印出百分制数段。switch(grade) case A:printf(85100n;case B:printf(7084n;case C:printf(6069n;case D:printf(60n;default:printf(e
13、rrorn;)C语言中常见的错误定义数组时误用变量。int n;scanf(%d,&n);int an;C语言中常见的错误在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。main()static int a10=1,2,3,4,5,6,7,8,9,10;printf(%d,a10); 常见的内存错误未初始化的指针 void f2(int datum) int *p2; *p2 = datum; . 常见的内存错误错误的内存释放 void f3() char *p; p = malloc(10); . free(p); . free(p); 常见的内存错误 void f8() str
14、uct x *xp; xp = (struct x *) malloc(sizeof (struct x); . free(xp); . return xp. 常见的内存错误试图修改常量intmain(intargc, char* argv) char* p = abcd; *p = 1; return 0;常见的内存错误误解传值与传引用#include #include void get_str(char* p) p = malloc(sizeof(abcd); strcpy(p, abcd); return; int main(int argc, char* argv) char* p =
15、 NULL; get_str(p); printf(p=%pn, p); return 0;常见的内存错误char* get_str(void) char* str = abcd; returnstr;intmain(intargc, char* argv) char* p = get_str(); printf(%sn, p); return 0;测试题1、头文件中的 ifndef/define/endif 干什么用?2、#include 和 #include “filename.h” 有什么区别?3、请写出 float x 与“零值”比较的 if 语句。4、请写出 char *p 与“零值
16、”比较的 if 语句:测试题请简述以下两个for循环的优缺点 for (i=0; iN; i+)if (condition) DoSomething();else DoOtherthing();if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing();测试题 void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void) char *str = NULL; GetMemory(&str, 100);
17、 strcpy(str, hello); printf(str);测试题void Test(void) char *str = (char *) malloc(100);strcpy(str, “hello”);free(str); if(str != NULL) strcpy(str, “world”); printf(str); 测试题char str = “Hello” ;char *p = str ;int n = 10;请计算sizeof (str ) = sizeof ( p ) = sizeof ( n ) =测试题void Func ( char str100) 请计算 sizeof( str ) = void *p = malloc(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储课程设计参考文献
- 血液透析质量督查患者信息核查表
- 储罐课程设计个人总结
- 基于TLS资源分配实验课程设计
- 基于Snort的入侵检测系统实现方法课程设计
- 贝叶斯网络诊断系统升级课程设计
- 数字博物馆导览App物联网应用课程设计
- Flutter天气开发案例课程设计
- 中小学安全教育主题班会课件
- 白土补充精制装置操作工岗前工艺优化考核试卷含答案
- 2026年华为光技术笔练习题库附完整答案详解【必刷】
- 钢结构工程技术交底(标准范本)
- 滤油机安全使用规定培训课件
- 属地安全监管责任制度
- 高中生政治素养培养教学课件
- 2026届湖北省宜昌市生物高一下期末考试试题含解析
- 熬汤技术培训课件
- 监理举牌验收制度规范
- 2025年医院副院长工作总结及2026年工作计划
- 2025年春季学期国开电大行管专科《监督学》期末纸质考试总题库及答案
- 2025高三历史高考模拟试卷五套
评论
0/150
提交评论