C++编程心得(精选10篇)
我们的题目是银行定期存款管理系统,在编程过程中,我预订的任务是学习并掌握MFC,并将其运用到我们的程序中。学习MFC的过程是我认为非常痛苦的事,因为完全都是自学,并且因为图书馆中的相关书籍全部被借阅出去,所以没有太多的自学资料,因此虽然费了很大的精力,但仍是无果。经过了很多的小组讨论和自己的心理斗争后最终决定放弃MFC而将自己能力以内的程序尽可能地优化,就这样,我开始在半路阶段加入了程序优化的工作,一遍遍的调试程序,遇到某个攻坚问题,几个人一起在网上查询,一起想解决的办法,就这样,我们团结地将我们现在认为将近完美的程序呈现给老师和同学。
一开始学习MFC时,我总是不能很好的转换思维,不能将自己以前的编程思想和以前的一些不良编程习惯甩掉,因此很多的程序都联系不起来,反而是自己学会了好多的零碎的片面却无法将程序大楼竖起来。在困惑很久后,我选择了询问老师,老师耐心地将MFC的思维方式讲给了我听,这让我受益匪浅,虽然我最后没能将MFC成功的做出来,但我认为我从MFC中才直接地感受到了C++中面向对象编程的封装性。以前用C++编程时总是将类中的变量随便规定属性,甚至在编程的过程中突然需要加一个变量,为了省事直接将其放于public中,在学习了解MFC后,深刻地感受到自己以前的编程习惯是多么的不科学,而那些习惯又是多么的重要。
我们这一次是以团队的形式来做这个项目,并且作为这个小组的组长,我感觉自己的压力很大,因为团队合作不仅讲求整体的团结而且为了团队工作的高效又要有明确的分工。在我们的小组工作中每个人都一刻不放松自己手里的工作,而一些时候我们又配合地很密切,尤其是当我们遇到程序的瓶颈时,我们都是在宿舍里你一句我一句地出谋划策,在遇到一个提取时间的程序时,大家纷纷查询各种辅导书,上网查各种资料,在遇到定期存款支取问题时甚至打电话给家长,寻求“场外支持”,种种的配合都给我们这个部门协调的运作提供了动力。我感谢我的团队,他们让我有一种很舒服的做事情的感觉。
最终决定放弃MFC,我承认自己有一种如释重负的感觉,但是也有一丝惭愧,无论老师要求与否,既然自己决定了就应该走下去,但是我最后退却了,感觉很遗憾也很羞愧,因为我认为对自己降低要求就是放纵自己堕落。
达尔文提出的自然进化论不仅是生物界的里程碑,也启发了人们应用计算机模拟生物的进化系统来解决复杂问题。1975年,美国芝加哥大学的Holland,J.H 教授模拟达尔文的自然进化论与孟代尔的遗传变异理论,提出了遗传算法GA(Genetic Algorithm)。GA适用于无表达式或有表达式的任何类型函数,具有广泛的实现价值。但GA采用二进制字符串描述问题,在处理复杂问题时不直观。1992年,美国斯坦福大学的Koza教授在GA的基础上提出了遗传编程GP,GP采用树状结构描述对象,比GA直观,因此成为人工智能新的一个分支。GP产生仅仅十多年,但它已成功应用于系统辨识[1]、故障诊断[2]、分类[3]、预测[4]、优化[5]、图像和信号处理[6]多方面。
遗传编程所采用的分层的树状结构可以方便地用Lisp语言实现,但Lisp语言的执行速度慢、通用性差。本文尝试用高级C++语言来实现GP,并给出了以Visual C++编写的程序的运行结果。
1 遗传编程概述
遗传编程的基本工作原理是: 随机产生一个适用于给定问题的初始种群,即搜索空间,种群中的每个个体为树状结构;计算每个个体的适应度值;选择遗传操作对种群不断进行迭代优化,直到找到最优解或近似最优解。
1.1 遗传编程的程序树结构
种群中的个体采用分层的树状结构表示,也称为程序树。程序树是由节点构成,图1A就是一个简单的程序树,其中节点1为根节点,它有两个子节点,分别为节点2和节点6。显然,程序树的层次一目了然。程序树的节点可以分为两大类,中间节点和叶节点。图1A中,填充灰色的节点是叶节点,其余的是中间节点。构成叶节点的是变量和常数,构成中间节点的是各种函数。
1.2 遗传操作
程序树的结构和内容是动态变化的,这是由遗传操作来实现的。遗传操作有三种:复制、交叉和突变。复制操作选择第N代的某一个个体,然后将它原封不动地保留给N+1代;这是遗传编程保留优秀个体的方式。交叉操作是遗传操作的主力军,它选择两个个体A和B作为父辈个体;分别确定A和B的交叉点;将A和B拆分为交叉部分(即是以交叉点为根节点的树状结构)和余下部分;然后将A的余下部分和B的交叉部分构成新个体C,A的交叉部分和B的余下部分构成新个体D,交叉过程见图1和图2。交叉操作模拟生物界的有性繁殖,为种群产生更富生命力的个体。突变操作是个体的树状结构的某个分支被一个随机出现的结构所替代,这种操作可以扩充种群结构的多样性。
2 用高级语言C++实现GP
Lisp语言易于实现符号表达式和分层结构,但Lisp语言是解释性语言,在处理数值计算问题时效率不高,且难以读懂。如何采用其它语言实现GP是一个值得深入研究的问题。
高级语言C++在C语言的基础上扩展了面向对象的程序设计功能。与Lisp语言相比,C++语言具有更快的速度、更强大的性能、更强的通用性,更好的结构支持和更让人熟悉的界面。鉴于此,本文采用C++语言实现GP。
用C++语言实现的GP程序由三种模块组成:
1) 定义可应用于程序树的函数;
2) 构成程序树的类和操作;
3) 生成程序树种群的结构。
其中第一种模块会根据应用的不同而改变,其余两个模块一般不需要变化。在主程序中,需要包括生成初始种群、控制遗传进化过程和适应度计算程序。
2.1 定义可应用于程序树的函数
根据涉及到的变量个数,将可应用于程序树的函数分为一元函数和二元函数等。这里只给出二元函数结构Binary_Func的定义:
MNI是事先定义好的数据类型。结构Binary_Func定义了两个指针*eval和*sign,*eval保存运算的内容,而*sign保存运算的标识符。
2.2 构成程序树的类和操作
程序树的基本单位是节点,用C++实现程序树,首先定义基本的节点类(Node),然后由基本节点类派生出其它节点类。
二元节点最常见,这里只对二元节点类简单说明。
根据以上定义,可以看到:指向左孩子节点的指针存储在left中,指向右孩子节点的指针存储在right中,该节点的运算保存在指针f中。
2.3 生成种群的结构
种群是由程序树构成,首先要规定种群的规模,即种群中包括的程序树的个数;接着定义可能会用到的一元函数、二元函数,变量和常量;然后编写程序,使计算机随机地选取一元函数、二元函数,变量和常量自动构成程序树,进而构成整个种群。实现种群的程序中多处用到了递归算法和迭代算法。
3 应用举例
非线性函数是广泛存在的函数表现形式,辨识非线性函数表达式是辨识复杂非线性系统的基础,因此它具有较高的研究价值。本文采用C++语言在Visual C++ 6.0平台开发的程序辨识非线性函数[7]:
g(y)=y6-2y4+y2 (1)
该程序的输入是 y和g(y) ,输出是GP的辨识结果g′(yi)。
由于函数的阶次高,种群规模M=2000,最大的进化代数G=100,函数集包括+、-、×、÷、Sin,终端集是变量y和随机产生的常数。复制概率10%、交叉概率90%。适应度函数定义为:
其中K为 y的取值个数。显然,f∈[0,1],f越接近1辨识结果越好。
运行GP程序,最好的个体首次出现在67代,其适应度f=0.999759 ,辨识结果为:
比较(1)式和(3)式,显然(3)式要复杂得多。化简(3)式就得到了(1)式,这就证明了程序的有效性。
4 结 论
在实践应用和理论研究方面,GP都有着广阔的前景。用C++语言开发GP应用程序,不但提高了运行速度和性能,还使GP的通用性加强了。仿真结果说明了C++语言在GP应用的有效性。
摘要:遗传编程用计算机程序模拟自然选择过程,从而实现了让计算机自动解决问题,具有广泛的应用前景。尝试用高级C++语言来实现GP(Genetic Programming),并给出了以Visual C++编写的程序的运行结果。
关键词:遗传编程,C++,实现
参考文献
[1]Buchsbaum T,Vossner S.Information-dependent switching of identifi-cation criteria in a genetic programming system for system identification[A].Genetic Programming 9th European Conference,EuroGP 2006.Proceedings[C],2006:300-308
[2]李良敏,屈梁生.基于遗传编程和支持向量机的故障诊断模型[J].西安交通大学学报,2004,38(3):239-242
[3]Kishore J K,Patnaik LM,et al.Application of genetic programming formulticategory pattern classification[J].IEEE Transactions on Evolu-tionary Computation,2000,4(3):242-258
[4]Rivero D,Rabunal J R,et al.Time series forecast with anticipation u-sing genetic programming[A].Computational Intelligence and Bioin-spired Systems,8th International Work Conference on Artificial NeuralNetworks,IWANN2005 Proceedings[C],2005:968-975.
[5]Stephenson M,O′Reilly U M,et al.Genetic programming applied tocompiler heuristic optimization[A].Genetic Programming 6th Europe-an Conference,EuroGP 2003.Proceedings[C],2003:238-253
[6]Ross Brian J,et al.Hyperspectral image analysis using genetic program-ming[J].Applied Soft Computing Journal.2005,5(2):147-156
1.设长方形边长a=3.5cm,b=5cm,求长方形面积和周长。输出时要求有文字说明。
2.利用海伦公式编程求三角形面积。要求用户输入三角形的三边长,输出面积。S
p(pa)(pb)(pc)其中pabc 2
3.有以下的分段函数,编写一个程序,输入x值,输出y值。
x21(x1)y2x1(1x<10)
3x11(x10)
4.从键盘输入一个字符,如果是大写字母,转换为小写字母,如果是小写字母,转换为大写字母,并输出,其他情况显示输入错误。
5.打印出所有的水仙花数。
6.有一个数列,1,3,4,7,11….求该数列的前20项。
7.编程求一个10个元素整数数组的平均值。
短学期的课程设计是一次非常珍贵的机会,这是一次可以让我们所学的理论 与实际相结合的机会。我们选择了成绩统计系统这一题目。通过这次比较完整的一个程序的设计,我走出了纯理论的学习,从一种全新的角度去学习。并且在小团队实现的过程中,除去知识的大量更新,我学到了很多东西。
其实个人而言,我体会较深的一点是团队互相帮助学习的过程,自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰富。同组的同学有着很强的C++实力,在进行编程的过程中,我向她学到了c++的很多知识,交流中也总结出比书本上更精髓生动的语言。在自己琢磨c++各种陌生知识的时候,队友的耐心与任性,对于知识的渴求,对于工作的专注,极大程度上鼓舞了我。我们在交流中,迸发出了很多设计灵感,互相建议改进的过程中,我们分别从各个方面共同改进着,这个已经不能仅仅称作课程设计的作品。从知识获得方面来说,各种已经学习到的C++知识以及各种从网上搜索来的案例,我们都是随着设计的不断深入而不断熟悉的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识,也对自己提出了新的要求。
提高是有限的但提高也是全面的。正是这一次设计让我积累了许多实际经验。也必然会让我在未来的工作学习中表现出更高的耐力、理解力、实践力。顺利如期的完成本次课程设计给了我很大的信心,但是也为我指出很多不足的地方。学习其实就是一个不断完善的过程,正视自己的不足之处。在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断地完善自己。
为期一周不到的MFC课程设计就要这样画上一个句号了。从这不长不短的四周中,我获得了知识,学到了研究的坚持与韧性,这一周不仅仅是交出了一份作业,还对自己有了新的认识。
C++课程设计心得体会
“课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。”在这次课程设计的过程中,我深深地体会到了理论与实践结合的过程,当实践成功时的成就感,从整个过程中我受益匪浅。
7月17日至7月21日五天的计算机实习结束了。期间,我们通过计算机上机的实践,进一步掌握了键盘指法和英文盲打技术,熟悉了Word、Excel、PowerPoint等办公自动化软件应用,巩固了C++基础知识,加强了计算机编程能力,培养了独立自主解决问题的技能和交流合作的意识。
随着社会的不断进步与发展,计算机作为信息交流的载体与平台,日益发挥着重要的作用。Excel是进行各种数据的处理、统计分析和辅助决策操作重要办公软件,本次实习任务中,我们着重练习了公式与函数在Excel中的运用,表格制作和修改技术,其中我认为如何将数据与表格联系起来是任务的难点,通过向同学老师求教及自己对操作的摸索,终于成功绘制出正余弦函数图。在软件的应用中,我还学到了不少关于Excel的操作小技巧和任务完善的细节操作,这也使我深刻地感受到注重细节的重要性并培养了做事严谨认真的态度。
PowerPoint是制作和演示幻灯片的软件,能够制作出集文字、图形、图像、声音以及视频剪辑等多媒体元素于一体的演示文稿,把自己所要表达的信息组织在一组图文并茂的画面中,广泛用于介绍、教学及展示自己的学术成果等方面。通过自己对“普洱茶”专题的一组幻灯片的制作,我更深刻、全面地了解了多媒体技术,掌握并巩固了幻灯片制作编辑方法,特别是在幻灯片的模板应用、编辑,设置超链接及幻灯片动画制作方面,我的能力都有所提高。在搜集资料方面,网络的应用使制作的效率大为提高,这也使我体会到:作为当代大学生,熟练掌握网络搜集资料方法是我们进行学习、科研、工作必不可少的技能。
对与一名工科大学生,实践和理论相结合显得尤为重要。我们经过一个学期计算机程序设计基础理论的学习,进行计算机上机编程十分必要。本次实习的编程任务有难有易,对我来说,既是一个锻炼,又是一个再学习再巩固的过程。在编程过程中,我的逻辑推理能力有了进一步提高,认识并掌握了一些经典算法,最重要的是学到了分析问题,设计方案并解决问题的方法。实践是检验真理的唯一标准,在上机操作的过程中,我逐步熟悉了VC++的工作环境,掌握了一定的程序调试技能,并且通过查阅资料再学习的过程解决了一开始难以下手的编程难题。C++的编程实习,对于日后我们的工程专业计算机方面的运用有着重要作用,是我们利用现代技术手段开发软件解决实际工程问题的基础,在编程实习中我学到的解决问题的方法与严谨的态度使我受益匪浅。
关键词:目标,项目,课程
《c++高级编程》课程是游戏软件开发教学中的一门专业核心能力培养课程。该课程的先修课有《c++编程基础》、《数据结构》等课程, 后续课有《DirectX图形开发》、《单机及网络游戏设计》等课程, 通过对本课程的学习, 学生们将从软件基础编程真正步入游戏软件编程。
一、课程开设原因
首先因为c++语言开发的程序具有执行高效等一些特性, 是目前网络游戏开发的首选语言, 根据《2008年中国游戏市场调查报告》显示:目前60%以上的网络游戏是由c++程序开发的。其次调查中华英才、智联招聘、中国人才热线等一些人才招聘网站可以看到, 50%以上游戏开发岗位均要求熟练掌握C++高级编程技术。
二、课程设计思路与培养目标
本课程的设计思路是:建立真实的工作过程, 设置典型工作任务, 充分利用企业的成熟项目、先进技术和专业经验等优势, 使学生的培养过程真正实现以学生为主体、工学结合。
游戏开发人才培养方向针对的核心岗位有两个:游戏编程和游戏测试。通过对岗位调查报告进行分析汇总, 这两个岗位对《C++高级编程》这门课程提出了以下培养要求:树立良好的游戏开发思想、熟练掌握和运用C++语言特性进行游戏软件开发, 同时培养良好的沟通能力、自觉的规范意识、独立分析问题解决问题的能力。
根据课程设计思路, 结合岗位调查报告分析, 《C++高级编程》的课程培养目标是:首先、通过公司化的任务设置和团队模式来培养学生良好的团队精神和独立分析、解决问题的能力, 使学生具备行业认可的通用能力。其次、通过对专业经典项目的设置, 培养学生良好的游戏编程思想, 并用工程技术将这种思想实现, 使学生掌握良好的专业核心能力。另外、适当安排一线企业游戏软件开发工程师参与综合项目实践的整个过程, 以公司的岗位要求全程指导学生综合项目实践, 针对性培养学生岗位专用能力。
三、课程设计实施
课程设计实施过程包括项目总体安排和教学过程具体实施两部分, 下面我们将对其分别进行详细阐述。
(一) 项目总体安排
技术项目的开发主要包括两个, 第一个是图书管理系统, 第二个是综合项目:连连看 (单机游戏) , 这两个项目的安排是由简单到复杂的递进关系。对于图书管理系统, 学生们非常熟悉, 因为每个人都去图书馆借过书, 对整个借书流程非常了解, 所以这个项目的开发相对简单、易操作。第二个项目连连看游戏开发难度加大, 因为游戏软件的开发和MIS系统类的软件开发还存在着很多的不同。它除了预定功能的实现以外, 还要求对用户 (也就是游戏玩家) 进行一个综合的考虑。
另外在每一个项目的实施过程中, 引入游戏开发企业的项目机制:明确任务、项目准备、分析需求、项目实施、项目测试和项目验收六个环节, 真实模拟企业项目实施流程。这几个环节, 将在下面的项目具体实施过程中进行详细的讲解。
(二) 教学具体实施过程 (以综合项目:连连看 (单机游戏) 为例)
1、项目确定
为什么要选择这个项目呢?原因是:第一, 这个游戏学生非常感兴趣、非常熟悉。第二, 通过专业课老师或公司技术人员的指导, 学生开发任务可以实现。第三, 有助于培养学生们良好的游戏开发思想。
2、项目准备
在这个环节采用任务实施主体多元化和实施内容多样化的形式。授课教师要对项目所用到的知识进行讲解和应用演示, 学生要组成团队、确定负责人, 负责人要完成团队分工并以团队的形式进行资料准备。这个环节主要锻炼学生们团队合作、分析解决问题的能力, 最终实现行业通用能力的培养目标。
3、分析需求
首先两个小组为一对, 分别扮演用户玩家与项目开发者角色, 站在不同角度共同去分析需求。另外, 邀请游戏软件公司的技术工程师给学生详细介绍公司是如何分析需求。同时, 借阅游戏软件开发企业成熟项目的一些开发文档, 供学生们参考学习。最后每个小组完成分析需求、功能分解。
4、项目实施
在此过程中主要强调项目实施注意事项, 比如, 程序开发标准化。因为学生在以前的程序开发中, 往往对许多细节不太在意。例如, 在命名一些项目名称, 功能模块的时候, 往往会使用123, abc这样的命名, 经常出现这种开发内容他人无法阅读的情况。这在公司中, 是被严令禁止的, 因为一个项目的开发, 往往都是团队, 最需要的就是沟通协作和资源共享。正像一句话说的“细节决定成败”, 所以要让学生树立一种良好游戏开发思想, 专业核心能力得到培养。这个环节的最后, 学生们除了要完成作品以外, 还要完成开发文档的撰写。
5、项目测试
众所周知, 一个游戏产品上线运营之前, 都要进行严格的内部测试和公开测试。这个环节我们也引入了项目教学, 学生们完成游戏开发以后, 要进行内部测试, 内部测试呢, 小组之间互为玩家, 进行测试和修改。内部测试以后, 每个小组邀请其他班级的同学, 来试玩本小组开发的游戏, 进行公开测试, 收集意见。结合这两个部分, 完成测试报告。特别建议, 在这个环节一定要使学生对游戏测试引起高度, 因为这直接关系着一个游戏项目今后运营的成败。
6、项目验收
项目验收采用综合评分制, 其中包括小组互评部分、特邀玩家测评部分、项目答辩部分 (评委由专业课老师和企业一线工程师共同组成) 、项目总结部分, 其中要特别说明的是项目总结部分, 项目总结是指项目完成后对项目进行角色换位思考、模拟再实现、完善测评的一个综合过程, 是技术熟练掌握的一个再提高过程。
四、课程设计问题思考
我们在进行项目教学, 同时企业也在进项目开发, 那么为什么项目在企业进行的那么顺利高效?为什么企业的员工在项目实施过程中那么积极努力?
针对这个问题, 我们通过走访企业开展调查, 总结得到的答案是:每个企业不仅有严格、完善的考核机制, 而且企业的内部竞争激励, 每一位员工在竞争压力面前, 时刻身怀危机意识, 只有努力拼搏、大胆创新才能在个人核心竞争力上具有优势。那么, 在校学生参与项目实践的动力是什么呢?我们老师做为项目的实施负责人不可能像企业的老板一样, 去扣工资, 炒鱿鱼, 我们靠什么调动学生的积极性呢?通过调查和讨论, 发现只有严考核、重奖励才能使学生充分融入项目教学全过程, 充分发挥参与项目实践的积极性。所以我们认为严格的课程考核和优厚的奖励措施是我们整个课程设计顺利执行的保证。
参考文献
[1]童寅山.独立游戏开发分析[J], 程序员:游戏创造, 2006 (10) .
[2]李桂芹.提高游戏开发人才培养水平的困难与条件[J], 经济研究导刊, 2009.
刚开始学的时候,就感到很迷茫,什么也听不懂,一片密密麻麻的英文字母,一条条奇怪的语句就解决出了一道题目,但我仍找不到头绪。后来一位老师告诉我:学习编程要培养兴趣,从中寻找快乐,后来经过长时间的学习,慢慢有了起色。
上学期,学校开设了综合实践课,要求我们参加“程序设计”这个兴趣班。在这期间,主要是学习一题多解的思路与方法,我认真地听了,可到真正自己想一题多解的方法时,却仍只想得出一种。这是才渐渐发现编程和数学知识有密不可分的联系:数学主要是让人懂得一种分析问题的方法,然后再通过编程去实现它。它是我们用来解决现实问题的一种的工具。我一开始有点不屑一顾,觉得数学和编程之间没有什么关系,渐渐地,我才发现实际上一个题目有时运用数学公式是可以提高效率的。
比如“判断8的倍数问题”,最简单的方法是枚举,但也可以运用数学知识,直接判断后三位是否能被8整除。如果不会数学方法,一旦数据过大,效率就会下降。所以运用数学知识有时候能使你的程序的效率产生质的飞跃。现在我在数学上出现的薄弱环节,这一点是我必须要引起足够重视的。
而且,通过两学期综合实践课的学习,我还学到了另一点:要学习编程是要有很大恒心和毅力的,首先要明确自己的目标,想好自己编程是为了干什么。不能只是一时冲动,虽然编程学习有时是有点枯燥难懂,但只要肯静下心来学习,一点一点的学好每一环节,还是能学好的。坚持,不仅可能让我学好编程,还有可能让我从中体会到快乐!
另外,学习编程要一边实践一边查找自己的不足。也就是学以致用,只有把知识拿来用,才知道还有哪些要学。其实学习的目的就是为了运用,只学不运用,时间长了也就忘了,只能“纸上谈兵”。
在学习一门课的过程中,有失败也会有成功,面对失败,我不会气馁。因为即使不能阻挡暴风雨的肆虐,但我们可以左右自己的心情;即使无法完美得解决一件事情,但是我们可以在过程中寻找快乐;即使无法预料失败的来临,但我们可以把它当作一个个成功的驿站……
我会坚持学好这门课,虽然现在还未成功且困难重重,但是经过一次次的努力后,在某一天,蓦然回首曾经的道路,会发现:当我一遍遍苦苦思索,破解难题之后;当我踏完一层层的台阶,到达山顶;当我一次次的克服困难,终获成功。那种成功后的心情是何等喜悦,之前付出的一切都是值得的。
1.不会的一定要问明白,要学会为我所用,看书的时候一定要做好标记,不懂的地方一定要标明是什么意思。
2.在学习的过程中一定要记住动手,不然很容易形成眼高手低的局面,不管什么样的程序都要亲手做过才能说会了,不要整天说我不会学不会,其实是你不想学,只是你下决心抄一个月程序,我保证我能有大的进步,其实当你抄到一周到两周的时候你就会特想抄,因为你会发现程序你能看懂了,能帮别人调程序了,有一种成就感呀!它会让你更加努力的去学习。
3.在培训学习过程中,我建议大家在上课的时候少看课本,课本要在下课的时候看特别是上课前一定要先看看课本,上课的时候呢就不要看了,不要老师讲到那个问题了你马上在书上找,这样不好,会影响你的注意力,其实还真不如注意听老师讲呢?因为你要是一边听一边看课本,你是看到了书上的答案但是老师的思路你没有听到,而要是你不看的话,你听明白了思路,一定是想迫切的看到结果,这个时候看课本才是记的牢固的时候,学习要的不就是个高效率吗?
1.尽量使用短的数据类型。
如uchar、bit、uint,有时需要对uchar数据类型进行按位访问,可将其定义在bdam区间。
慎重使用float数据类型,有时它可以转化成int数据类型来代用。
2.熟练指针的使用。
例如Uint是由双字节拼接而成,有时用来存放16位地址。
获取其高八位和低八位地址的方法为:只要用uchar *p;p=&int0,则*p表示其高八位,*(++p)表示其低八位,非常方便。
3.使用自加、自减的方法为:a++;a-,它会调用INC、DEC指令,效率远比a=a+1;a=a-l高。
4.循环:使用uchar。
a;for(a=1;a<:8;a++)…时,条件a<=8编译后代码比较繁琐,一可用for(a=8;a;a~)…来代替,充分利用单片机的为零跳转指令。
同样,在do{…}while()中也适用。
5. 当多个条件判别时,if(A&&B&&C&&D),只要第一个条件A不符合,程序是不管后面的条件的,所以可把最可能出错的条件排在前面处理。
6.子程序的参量。
调用子程序时若带参量,程序会开辟存储空间(如Rn)来存放参量,这个空间是可以充分利用的。
如延时子程序void delay(uehar time){while(time一);J,可以延时相当短的时间。
7.空指令NOP在C中用_nop一0实现,定义在中。
8.求余运算“%”操作是调用子程序来完成的,效率低。
如果是求2的n次方的余数,可使用位操作来代替。
如:a=a%8可改用8=a&7,效率明显提高。
同样2xN的乘除运算可用移位来实现。
如:a=a*2;b=h/2可改为a=a《l;b=b》l。
9.使用结构体类型数组时,在查找第n个值时要利用乘法指令(序号乘以类型宽度),当程序高速运行时,可能会影响其速度。
10.Keil的软件调试非常有用。
笔者常将编译后的程序与C源程序对照,查看汇编代码、检查不恰当之处。
我觉得可能由于之前学习过pascal语言以及大一上学期浅显的学习过一部分c语言编程,大二的暑假自学过一些matlab编程,我已经习惯了一些编写代码的思路,所以这门课的上手我没有觉得很困难。不过也正是因为我有着一些并不坚实的基础让我有些松懈,并没有对c++语言的学习引起足够的重视。所以,在顺利的学习了前两个章节的内容之后,便遇到了一些困难与阻力。从本书的第二篇开始,我才发现c++语言并没有我想象的那么简单,API函数不仅数量庞大而且用法比较多样,我一时显得有点迷茫。
例如,在绘制五边形的这一程序中,最开始我真的是有一种眼高手低的感觉,在写程序之前设想的很完美,比如如何确定端点,如何连线以及如何划分区域和涂色,但是事实是,在面对vc6.0编程环境的时候我显得手足无措,我清楚的记得当时在实验室一下午的时间过得很快,我也在两个小时的时间里遇到了很多困难,而令我印象最深刻的就是这个问题中的涂色部分,因为在之前做pascal程序或者matlab程序的时候主要涉及的是一些传统的算法和一些问题的解决,所以我对于涂色这一任务并没有一个清晰的思路,在将近一个小时的尝试之后,我仍然没有完成题目的任务,当然这很沮丧,但是我并没
有就此放弃了,通过向老师询问以及课后在网上查阅了一部分资料,我发现我原有的思路是行不通的,具体说来就是不能仅仅依靠五边形的最外边五个顶点来完成涂色的任务,于是我开始进行程序的改进,事实上这次改动依然是失败的,于是我采取了像高中时初学pascal时的老办法-----学例程。我开始学习网上关于这个问题的例程,研究每一条语句所表达的意思,最终明白了这个问题的实现过程。我觉得这个问题对于我这门课的学习有着重要的意义,我觉得我通过这个问题逐渐熟悉了c++语言的一些固定的模式和思路。
在作业中另外一个给我印象比较深刻的题目是6-4题,因为这个题涉及的内容比较广泛,我了解了很多形式的定义和使用,我通过上网查资料,已经能够自如的修改屏幕分割的方式(横向分割或者书香分割)以及相应区域的颜色和鼠标形式,还有单击左键和右键时在屏幕中显示的字符。当我成功的修改了程序之后我很开心,我很喜欢这种感觉,因为这意味着我对于这门语言的掌握程度有所提高。
不过我认为我还有很多很多没有掌握的东西,这也是促使我进一步学习的动力,我是一名比较习惯于自学的同学,在自学过程中也遇到了很多问题,比如在第七章节中学习对于位图的操作和处理过程中,我还不太清楚怎么去完成一些我设想中的操作(比如规律运动和缩放),另外,我认为我虽然对于可视化程序设计这一概念虽然有一定的理解但是并没有达到精通的程度,也衷心的希望老师在今后的教学中能够更加的强化这一概念,以便让我们能够更加精确的理解这一门课的精髓所在,同时我也认为这对于我们逐渐掌握这门语言是有比
较大的帮助的。
在前半个学期对于高级编程技术这门课的过程中,我收获很大,我觉得这和我对于编程的兴趣是分不开的,正是因为我喜欢这一工作才会想尽办法去学习和掌握,我相信在后半个学期的学习中我会更进一步,不断地掌握更多的有关于编程的知识和思路,同时很感谢老师在实验过程中对于我的问题表现出的耐心和细致。谢谢!
09级电信工1班孙宪元