前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇c程序设计范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
关键词:实验教学; 教学方法; 程序设计
1 引言
C程序设计是计算机专业学习中的一门非常重要的基础课程, 是学生学习C++、VC、数据结构、操作系统等专业课的先导课程。C 程序设计主要培养学生正确的算法设计以及编程能力,培养学生结合所学知识解决实际问题的能力和正确的编程思维方式。因此, 提高C 程序设计的教学质量对计算机专业学生的学习至关重要。本文提出以下几个建议, 以供大家参考与探讨。
2 加强实验教学, 激发学生学习的兴趣
兴趣是激发学生主动学习C 语言的关键, 而加强实验教学是激发学生学习的兴趣一种重要方式。计算机专业是一个实践性非常强的专业, 上机实验是学好C 语言程序设计的一条捷径。在实验教学中, 通过上机运行具体的实例程序,学生便会立刻感觉到C 语言的神奇, 有了好奇心, 学生才能使领略C语言的魅力,从而激发了学生的学习兴趣。如果再结合一些趣味性的实例,让学生从中体会到编程的快乐, 从而达到学生主动学习的目的。
3 先整体后局部的教学模式
C 语言程序设计的初学者在学习的过程中, 经常会因为学习繁多的知识要点而陷入一种误区“钻牛角尖”。C 语言本身具有非常灵活、知识点非常繁多的特点, 一开始很多学生什么都看、都学, 什么都研究的过细, 这导致这些学生不知道学的什么, 不知道如何阅读程序和组织程序, 学生很难抓住C 语言程序设计学习的重点和构建程序设计的思想。为了减少学生的误区, 本人在教学中, 先给学生搭建整体的程序结构与程序思想, 然后在学生领会程序的设计思想后再局部细化每一个知识点, 使学生逐步积累,在应用去理解和体会。这样会避免学生因C 语言灵活性大, 难度大, 难理解, 难记忆的特点, 而失去学习C 程序设计的信心和兴趣。在教学过程中, 把细节的、难于记忆的、枯燥的知识融入到日常的学习中, 避免学生出现死记硬背的现象, 使学生学会“学习”和查阅资料, 使学生明白学习知识要活学活用, 从而培养学生的学习能力。
4 培养学生正确的思维方式
C 语言是一门计算机语言。因此, 它有语言的特点, 如C语言有其自身的词汇( 标识符、关键字、运算符、分隔符、常量、注释符等) 、语法规则、语句等。计算机语言又不同于人的自然语言,它有比自然语言更严格的要求, 否则计算机无法编译、识别、执行。针对其特点, 我认为可将C 程序设计的知识点分为记忆型和灵活应用型两类: 记忆型的如关键字、运算符、优先级等; 灵活应用型的如数学模型、数据结构、算法、程序设计方法等。这里关键注意两点, 一点是以算法的表达形式描述出解决问题的方法、步骤; 另一点是使学生明确计算机如何执行一个C 程序。这需要培养学生正确的编程思想和思维方式, 以“计算机意识”去思考问题。首先将你要用自然语言描述的解决问题的方法步骤( 即算法) 转换成算法表形式( 如N- S 流程图) , 然后再将其转换成C 程序, 这种转换的思想、规则十分重要, 使学生逐渐缩小这种自然语言与计算机语言的鸿沟。
算法设计是程序设计课程的教学重点, 而将实际问题抽象为数学模型是解决问题的重点, 解决了这两方面的问题就达到了培养和提高学生分析和解决问题的能力的目标, 但对于C 语言的初学者来说, 如求一元二次方程的解, 排序、查找等典型算法, 汉诺塔、百钱百鸡、链表等典型问题, 这些算法对于计算机专业的学生来说,其分析与设计的过程基本能够理解。如果将这些算法编写为程序似乎更难一些, 抽象一些, 甚至感觉无从下手。这就是自然语言与计算机语言之间的鸿沟。如何才能将实际问题的解决办法转换为计算机能够识别、运行的程序呢? 因此, 本人在教学中, 采用对算法精讲多练, 采用流程图等形式, 使学生逐步加深对算法与程序之间的抽象转换的理解, 从而培养学生正确的编程思维模式, 达到了良好的效果。
5 采用多媒体教学和传统教学相结合的启发式教学
教师应当转变教学理念, 改变填鸭式的课堂教学方式。应该采取启发式、互动式的教学方法来活跃课堂气氛, 以引导学生积极思考, 主动学习。启发式教学是在教师全面掌握讲授内容的前提下,在讲解新的讲授内容前,通过对以前学习的相关内容的复习,引出新的讲授内容。例如在讲解分支程序设计章节时,应首先启发学生使回忆一下顺序结构的执行过程,进而引出分支结构在C 程序设计中的实现原理和编程思路。而互动式教学是教师驾驭讲台能力的具体体现。一个教师站在讲台上, 要不断地扫视学生,观察学生的表情,了解学生的接受程度,并能及时地调整教学的进度和步骤,允许学生在不懂的时候随时提问,真正实现课堂上的互动, 构造自然、和谐、欢快的课堂气氛, 使学生主动思考, 自然接受, 其教学的效果必然会显著地提高。对于难度大、有显著的特点的教学内容, 可采用对比的教学方法, 以加深学生的理解。
6 结束语
通过这样教学方式, 本人在实践教学中取得了良好的教学果。C 程序设计的学习对学生后续专业课程的学习非常重要, 因此C 程序设计的教学至关重要。只要我们不断加强理论与实践的探索, 在实际的教学过程中根据不同对象摸索适应不同群体的教学方法, 就能不断提高教序质量, 为学生的专业学习夯实基础。
参考文献:
[1]谭浩强.C 程序设计(第3 版)[M].北京: 清华大学出版社,2003.
为什么学习C++这门程序设计语言呢?学习程序设计是不可能不借助一门程序设计语言的,而C++直接支持现实世界中的软件所使用的那些关键概念和技术。C++是使用最为广泛的程序设计语言之一,其应用领域几乎没有局限。从大洋深处到火星表面,到处都能发现C++程序的身影。C++是由一个开放的国际标准组织全面考量、精心设计的。在任何一种计算机平台上都能找到高质量的和/或免费的C++实现。而且,你用C++所学到的程序设计思想,大多数都可直接用于其他程序设计语言,如C、C#、Fortran以及Jave。最后一个原因,我喜欢C++适合编写优美、高效的代码这一特点。
本书不是初学程序设计的简单入门教材,我写此书的用意也不在此。我为本书设定的目标是――能让你学到基本的实用编程技术的最简单的书籍。这是一个非常雄心勃勃的目标,因为很多现代软件所依赖的技术,不过才出现短短几年时间而已。
我的基本假设是,你希望编写供他人使用的程序,并愿意认真负责地,以较高质量完成这个工作;也就是说,我假定你希望达到专业水准。因此,我为本书选择的主题覆盖了开始学习实用编程技术所需要的内容,而不只是那些容易讲授和容易学习的内容。如果某种技术是你做好基本编程工作所需要的,那么本书就会介绍它,同时展示用以支持这种技术的编程思想和语言工具。并提供相应的练习,期望你通过做这些练习来熟悉这种技术。但如果你只想了解“玩具程序”,那么你能学到的将远比我所提供的少得多。另一方面,我不会用一些实用性很低的内容来浪费你的时间,本书介绍的内容都是你在实践中几乎肯定会用到的。
如果你只是希望直接使用别人编写的程序,而不想了解其内部原理,也不想亲自向代码中加入重要的内容,那么本书不适合你。请考虑是否采用另一本书或另一种程序设计语言会更好些。如果这大概就是你对程序设计的看法,那么请同时考虑一下你从何得来的这种观点,它真的满足你的需求吗。本书面向的是那些确实希望编写和理解复杂计算机程序的人。
考虑到本书的结构和注重实践的特点,它也可以作为程序设计方面的第二本书,适合那些已经了解一点C++的人,和那些会用其他语言编程,现在想学习C++的人。如果你属于其中一类,我不好估计你学习这本书要花费多长时间。但我可以给你的建议是,多做练习。因为你在学习中常见的一个问题是习惯用熟悉的、旧的方式编写程序,而不是在适当的地方采用新技术,多做练习会帮助你克服这个问题。如果你曾经按某种更为传统的方式学习过C++,那么在进行到第7章之前,你会发现一些令你惊奇的和有用的内容。
学习程序设计要靠编程实践。在这一点上,程序设计与其他需要实践学习的技艺是相似的。你不可能仅仅通过读书就学会游泳、演奏乐器或者开车,你必须进行实践。同样,你也不可能不读程序和写程序就学会程序设计。另一方面,程序设计远非只是遵循一些语法规则和阅读手册那么简单。本书的重点不在于C++的语法,而在于理解基础思想、原理和技术,这是一名好程序员所必备的。只有设计良好的代码才有机会成为一个正确、可靠和易维护的系统的一部分。而且,“基础”意味着延续性:当现在的程序设计语言和工具演变甚至被取代后,这些基础知识仍会保持其重要性。
关键词:C语言;程序设计;学习方法;学习兴趣
中图分类号:TP312.1-4
《C语言程序设计》是计算机专业的一门核心专业基础课程,是专升本、考研和等级水平考试的必考科目,也是学生学习中感到比较吃力的一门课。那么,如何学习《C语言程序设计》这门课程呢?现根据自己多年在教学中的体会,谈一些粗浅的认识。
1 为什么要学习《C语言程序设计》
《C语言程序设计》是用C语言来编写程序的,每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了。除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它的好处如下:
1.1 C语言是一种计算机程序设计语言
它既具有高级语言的特点,又具有汇编语言的特点,既可以用来编写系统软件,又可以用来编写应用软件。它不仅具有绘图能力强,还具备很强的数据处理能力,因此也适于编写三维,二维图形和动画。
1.2 C语言具有功能强大、使用灵活、丰富的数据类型和运算符、结构化的控制语句、目标代码运行效率高、适用范围大、可移植性好等优点。
1.3 C语言是各大操作系统的基础,Unix、Linux、Windows其内核都清一色是C语言开发的,(某些地方是和汇编语言混合开发的),还有各种语言的编译器,包括java虚拟机,各种嵌入式设备,如手机、PDA等都是C语言开发的。
1.4 C语言是基础,如果你学习过C语言,你就能学习现在任何的高级编程语言
因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等)。C语言学好了,将来想学其他的语言,就比较好入门了。
2 如何学习《C语言程序设计》
2.1 克服畏难心理,充满自信的学习《C语言程序设计》
大多数学生一看到《C语言程序设计》课程的教材,就有畏难的情绪,觉得C语言难学,学不会,因为他们对计算机语言不了解,另外有些英语差的同学,看到计算机编程是用英语编写的,就未学先弃了。其实学习语言并没有他们想象的那么难,英语差也对学习计算机语言影响不大,比如学C语言,真正要记的关键字不多,语法也不复杂,只要大家不带着畏难的心理,充满自信,一定能学好的。
2.2 要明确《C语言程序设计》的学习目的
通过《C语言程序设计》课程的学习,掌握C语言基本知识,掌握程序设计的基本方法并逐步形成正确的程序设计思想,能够熟练运用基本程序结构解决简单问题,理解模块化程序设计原则并能熟练使用C语言进行程序设计,具备调试程序的能力,为后继课程及其他程序设计课程的学习和应用打下基础。
2.3 要明白《C语言程序设计》与一般的计算机操作课程有所不同
《C语言程序设计》是计算机的一门软件编程课程,是用C语言来编写程序的,它具有难度性、抽象性、连续性和逻辑严密性。如果你第一次课来听了,第二次课没来,第三次课很可能就听不懂了。比如,第一次课讲的是数字1,2,3,4……,第二次课讲的是运算符号+,-,*,/,第三次课老师让你算1+2=?,如果你前两次课都来听了,那么你就能算出它的结果,否则你就算不出它的结果。因此,如果要想学好《C语言程序设计》,必须坚持每次课都来,如果那天确实不能来,就应在家自学,不懂的地方应及时向老师请教,一定不能落课。
2.4 要整体把握《C语言程序设计》
C语言是一种通用的程序设计语言,在开发系统软件和应用软件中得到广泛的应用,已成为当今计算机世界最流行的语言之一。C语言是一个整体,各个方面是有机联系的,要从总体上把握它,不要把它割裂成互不关联的部件。它包括C语言概述、数据类型(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等)、运算符和表达式、流程控制语句、函数、数组、字符与字符串、指针、结构体、文件等。通过《C语言程序设计》的学习,掌握程序设计的基本概念、基本思想、基本方法和基本技能,进而学会利用C语言解决实际问题,培养计算机程序设计的能力和素质,以及思维方法,为以后学习其它计算机程序语言和后续的专业课程打下基础。
简单的C程序是由主函数和函数体两大部分组成。它的基本框架如下:
main()
{
}
其中main表示“主函数”。每一个C程序都必须有一个main函数,而且只能有一个main函数,它表示程序从这里开始执行。由花括号“{ }”括起的部分是函数体。其中函数体又包括定义变量、变量赋值、函数调用、输出打印等。
例:一个简单的求和程序
main() /*主函数*/
{
int a,b,sum; /*定义变量*/
a=123;b=456; /*变量赋值*/
sum=a+b; /*求两数之和*/
printf(“sum is %d\n”,sum); /*输出和值*/
}
这是一个简单的求和程序。/*...*/表示注释部分,只给人看的,对编译和运行不起作用。第3行是声明部分,定义变量a、b、sum,指定a、b、sum为整型(int)变量。第4行是两个赋值语句,使a和b的值分别为123和456。第5行使sum的值为a+b,第6行中“%d”是输入输出的“格式字符串”,用来指定输入输出时的数据类型和格式,“%d”表示“以十进制整数形式输出”。Printf函数中括弧内最右端sum是要输出的变量,现在它的值为579(即123+456之值)。因此输出一行信息为:
sum is 579
从这个例子可以看出,想要把《C语言程序设计》这门课学好,不仅要知道《C语言程序设计》的基本框架,还要学好函数体中的内容(变量类型、定义变量、变量赋值、输入输出格式字符串、输入输出函数格式、调用函数等)。另外还要学好C语言的运算符、运算顺序 、四种程序结构(顺序结构、分支结构、循环结构、模块化程序结构 )、掌握一些简单的算法等。
2.5 熟练C程序的上机步骤
在编好一个C源程序后,如何上机运行呢?要经过编辑、编译、连接和运行四个步骤。
(1)编辑源文件。在编辑(Edit)状态下输入或修改源程序。
(2)编译源程序。选择“C编译”菜单并选择“编译到OBJ”,进行编译,得到一个后缀为.obj的目标程序。
(3)然后再选择菜单“L连接EXE文件”,进行连接操作,可得到一个后缀为.exe的可执行文件。
(4) 运行程序。在“RUN”菜单中选择“R运行程序”项,或直接按Ctr+F9键,系统就会运行已编译好的可执行目标文件。此时,TC集成环境窗口消失,屏幕上显示出程序运行的结果。如果程序需要输入数据,则应在此时,从键盘输入所需数据,然后程序会接着执行,输出结果。
2.6 要加强编程训练
《C语言程序设计》是实践性非常强的课程,要求学员要理论联系实际,在掌握C语言的基本语法和基本知识后,重点应放在提高编程能力的训练上。根据学生学习的认知特点,我认为主要应从以下几个方面进行强化训练:
(1)吃透课本例子。每学完一次新课,让学生对课本例子先分析任务、再仔细阅读程序,然后按书上的源代码敲出来,编译执行输出结果,如果结果跟书上一致就算完成,如果不一致,就要仔细找原因。再后不看书自己编写代码与课本对照,找出自己的不足,然后改进。最后在此例的基础上自己加以改造,举一反三,变为其它的例子,如此反复练习,不仅培养了学生动脑思考的习惯,而且养成了遇事三思、认真、周密的作风。
(2)精选上机题目,要求调试通过。每章找出一个或两个综合性的具有代表性的应用题目,如编写一个程序,计算一个整数的名位数字之和;用选择法对数组中10个整数,按由小到大的顺序进行排序等,要求用C语言编写可执行的源程序,上机调试。这样不仅锻炼了学生解决实际问题的能力,更重要的是激发了学生学习课程的兴趣,抽象变具体 ,理论变实践,对这门课有了更深的认识。
(3)阅读填空法。找一些经典程序,配上必要的说明,适当去掉语句或表达式,让学生通过阅读填补空白,训练学生的程序设计能力。例编写一个程序,输入月份号,输出月的英文月名,还有求和、排序、报号等。
(4)准备一个经验本,记下C语言重要的语法和知识点,还有自己出错的解决方法及老师讲解的其他同学出现的常见错误,抽空常翻看,逐步积累经验,加深印象,使以后避免。
(5)带着作业去上机。每次理论课结束后,老师都会给学生布置一些作业(如习题)让学生做,那么学生一定要认认真真的把作业完成好,先把程序编写在作业本上,上机时再把这些程序敲到计算机上,进行修改、调试、运行,最后输出结果。如果学生不带作业去上机,第一次老师警告下次一定带作业上机,如果第二次还没带作业,不准学生进机房,让学生到教室把作业做完后再到机房上机调试。有人说学生可以直接在机器上编写程序,固然没错,但对于初学者来说,如果在机器上边思考边编写,也就是说想一句编一句,再想一句再编一句,这样太浪费时间,一节课说不定连一个程序都编不好,所以老师一定要求学生在课下把程序编好,上机只需把程序敲出来进行修改、调试、运行,这样能节约大量的时间,学生上机时间本身都是有限的。
上述方法在教学实践中证明是行之有效的,学生对问题分析、程序设计的自觉性和能动性得到提高,动手能力加强,对后继课如《C++》、《面向对象程序设计》等,学习起来倍感轻松,较好地完成了该门课程的学习目标。总之,实践出真知,多学、多练、多思、多交流,勤奋好学才能学成。
参考文献:
[1]严桂兰.C语言程序设计与应用教程[M].福建:厦门大学出版社,2001.
[2]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.
[3]陈东.计算机多媒体教学改革的一些尝试[J].福建师范大学学报(自然版),2004,20(3):98.
[4]王兰.学好《C程序设计》的几点建议[J].科技信息,2007(9).
关键词:教学内容;教学手段;教学方法;考核方式
C语言是早期最经典、最强大的面向过程的程序设计语言之一。虽然现在面向过程已经全面转向面向对象,但是C本身的中级语言的设计理念以及对现有VC/C#等语言的深刻影响,使其至今仍是程序设计入门的首选语言,也是工科院校计算机专业学生接触的第一门程序设计语言。对于计算机类专业学生来说,一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言,为后续的面向对象程序设计以及Java程序设计等语言的学习打下基础;对于其他非计算机专业的工科学生来说,比如电子、机电专业来说,该课程为学生用计算机编程解决实际问题提供了方法,是学习单片机技术教学的基础和重要工具。
一、C语言教学中面临的问题
C语言程序设计是一门基于dos操作系统下的面向过程的程序设计语言,随着面向对象语言的开发,C语言在界面交互性上逊色不少,作品上也不如Flash、三维动画效果吸引眼球,难学、难懂、难以应用的课程,对学生越来越缺乏吸引力。针对这种状况笔者认为,更新教育观念、探索新的教学模式才是根本出路。笔者根据多年的教学经验,对C语言程序设计课程从教学内容、教学手段、教学方法、考核方法方面进行了一系列的创新改革。教学内容主要解决如何调动学生积极性,激发学生创新能力,如何提高学生的创新能力、实践能力、研究能力、发现问题和解决问题能力等综合素质;教学方法主要解决如何实现“以人为本”,分层次教育,如何通过引导、启发等方法,激发学生的发散性思维。同时要利用目前课堂和实验教学在培养学生创新能力和实践能力方面的优点,利用大学生实训基地,为学生的创新和实践能力的锻炼和培养提供一个良好的平台。
二、教学内容的创新
课程内容的选取与组织是课程教学改革的基础。人才培养方案对C语言程序设计教学内容进行重新整合,把课程学习划分成培养学生的基本程序设计能力和培养学生的专业程序设计能力两个阶段。
第一阶段安排在大一第一学期,主要针对没有程序设计经验的大一新生,重点讲授C语言的基本知识,包括三种基本结构、数组、函数的概念。在第一阶段教学中,笔者采用案例教学方法结合具体的程序实例,创设情境,引导学生自己总结掌握C语言的基本语法和程序设计的基本方法。第一阶段的学习结束的时候,学生可以具备基本的程序设计能力,独立编写具有初等难度、几十行的程序,并且能够较顺利地完成程序调试与测试。第二阶段教学放在大一第二学期初,针对具备基础程序设计能力的学生,重点培养学生的专业程序设计能力。在第二阶段的教学中,以学生为主体、以教师为引导,采用国家火炬计划河北省软件人才工程实训课程,使学生融会贯通所学知识,完成一个具体的项目,以达到提高学生程序开发能力的目的。迄今为止,学生完成的项目包括“银行储蓄管理系统”“彩票信息查询系统”。教学实践证明,这种理论和实践技能并行的教学模式,更加有助于学生的创新能力的提高,使学生在不断实践中掌握技能,在技能学习中提高基础理论。
三、教学手段的创新
在学习过程中除了发挥教师的引导作用,还需要充分调动学生的参与主动性。在授课期间灵活采用多种教学手段,如:自学、演示、对比、课堂提问、学生演练和讨论等,通过不同方法,寻找创意思维“契机”,安排创意铺垫内容,培育学生的创意萌芽,营造创意环境,引发学生争鸣,为学生提供更多的思维空间,诱发学生的思维灵感。例如,在教学中讲解“循环结构的循环嵌套”的时候,提出马克思手稿中的数学题的案例:伟大的思想家马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人、女人和小孩。他们在一家饭馆中吃饭,共花费50先令。如果每个男人吃饭要花3先令,女人要花2先令,每个小孩要花1先令,问男人、女人、小孩各多少人?先提出问题,引导学生分析、讨论案例,提问学生运用数学知识完成案例提出的问题需要进行哪些操作,这样学生就会比较有兴趣,课堂气氛就活跃起来。然后帮助学生从案例分析中理解并掌握什么是多重循环,并且如何使用双重循环解决问题,最终完成程序的编写。
在学习的第二阶段采用开放式训练教育方式,利用专题设计和课外指导方式,鼓励学生课外自主进行训练。如:完成的项目“彩票信息查询系统”,教师提出设计方案,学生完成基本功能以后,自己可以对其他功能进行完善。
四、教学方法的创新
课程每个章节内容结构主要由三部分组成:
知识点:介绍本章需要掌握的知识或技术。
应用案例:介绍本章知识应用的案例。
创新训练:针对具体的问题,应用本章技术来完成知识点的应用。
在整个教学过程中,教师采用框架式教学,像建筑工程师修建筑一样,先采用精讲的方式,让学生建立整门课程的知识框架;接着通过案例教学、项目式教学等多种教学方式,让学生逐步去进行细节知识点的填充;最后通过综合训练方式,完成整门课程的学习。
例如,在讲解C语言程序设计中的函数时,搭建出例如综合排序等程序的框架,给学生留出函数,让学生自由开拓思想,独立完成一些小型实例的编程,经过具体知识点的训练后,还要重点进行综合知识的应用训练,开展一系列的创新应用,以达到知识综合运用和培养创新能力的目的。
五、考核方式的创新
传统的C语言程序设计考核模式一般以标准化的笔试题为主,这种考核方式侧重语法知识的考核,忽视编程实践能力的培养。为此,笔者改革传统的考核方式,将考核分为平时实验和期末考核两部分。平时实验成绩考核的是学生每一章知识,实训作业就是在每一章节结束的时候,布置相关的习题,学生利用业余时间编程,并且在实训期间进行调试,调试成功后上传到服务器上。期末考核成绩采用的是教研室开发的上机考试系统。上机考试系统模拟C语言二级考试建立了知识面齐全、题量充足、难易度合理的试题库,采取随机抽题的形式重点考查学生的程序设计能力和程序调试能力。这种考核方式督促学生在平时学习中加强对编程举一反三的实践环节。实践证明,这样不仅能有效培养学生的实践编程能力,还激发了学生动手实践解决问题的兴趣。
总之,经过不断的摸索与实践,通过以上的教学方法与教学手段的改革和实践,不仅提高了学生的学习兴趣,让学生从枯燥无味的语言学习中解放出来,从被动学习走向主动学习,同时也培养了学生分析问题、解决实际问题的能力,充分发掘了学生的创造潜能,锻炼了创新和协作精神。
参考文献:
[1]郭芹.对高职高专计算机专业程序设计教学的思考[J].中国科技信息,2008(1).
关键词:MCU;结构特征;程序设计;技巧
中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)32-8943-03
Efficient C Language Programming Skills
CHAI Shou-li1, GAO Liang2
(1.Shandong Yingcai University of Computer Science, Ji'nan 250104, China; 2.Anhui University of Computer Science, Hefei 230039, China)
Abstract: This paper from the 8051 core MCU based on structural features, combined features of C language itself is given a number of highly efficient C programming skills. Practice has proved that, in the C program design features based on 8051 to optimize the source code, can greatly improve the efficiency of the final implementation of the procedures.
Key words: MCU; structural features; programming; skills
C语言凭借自身的结构化设计思想和对底层的数据的强大处理能力逐渐成为嵌入式开发的主流语言。虽然目前大部分C集成开发工具都具有优化能力,而且优化的结果有时比使用汇编语言编写的程序效果还好,然而,这些优化工作大部分是针对程序和算法本身的优化,而针对MCU体系结构的进行的优化很少或者几乎没有,本文就是针对这个问题,给出几种解决方法。
1 巧妙地利用寄存器变量
使用寄存器变量可以提升程序运行的速度,节约程序运行的时间,因为CPU对寄存器的寻址时间是最短的,可以在一个机器周期内完成。
假设有语句for(i=0;i
在keil c中作如下定义
unsigned char i;编译产生的汇编语言如下:
CLR A
MOV R7,A
LOOP: INC R7
CJNE R7,#0x0A,LOOP
unsigned char idata i;编译产生的汇编语言如下:
CLR A
MOV R0,#0x08
MOV @R0,A
LOOP: MOV RO,#0x08
INC @R0
MOV A,@RO
CJNE A,#0x0A,LOOP
unsigned char xdata i;编译产生的汇编语言如下:
CLR A
MOV DPTR,#0x0000
MOVX @DPTR,A
LOOP: MOV DPTR,#0x0000
MOVXA,@DPTR
INC A
MOVX @DPTR,A
MOVX A,@DPTR
CJNE A,#0x0A,LOOP
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。通过上述分析,可以看见,当编译器将变量i作为寄存器(R7)变量处理的时候,产生的目标代码最小,且可以在一个机器周期内寻址。程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。
但是,由于基于8051核的MCU资源有限,寄存器显得极其宝贵,所以,寄存器变量通常被定义为局部频繁使用的操作,如上例,在一个子函数中操作完了即可被销毁,或者系统频繁使用的全局变量,对其他情况要尽量避免使用。读者在使用的时候可以仔细查阅编译器说明手册。
2 利用移位实现快速乘除操作
大部分MCU都选配一个辅助处理器,该处理器主要完成对数据进行逻辑与、或、非、循环、移位等基本操作,人们将之称为布尔处理功能。巧妙的利用移位寄存器可以实现快速的乘除运算。设有如下代码:
unsigned char mul,div,x,y; //申明变量
mul = x*3; //x乘以3赋值给mul
div = y/3; //y除以3赋值给div
汇编产生的目标代码为:
MOV A,0x0A
MOV B,#0x03
MUL AB
MOV 0x80,A
MOV A,0x0B
MOV B,#0x03
DIV AB
MOV 0x09,A
如果将上述程序语句改成等价效果的语句:
mul = x
div = y>>1; //y除以2赋值给div
MOV A,0x0A
ADD A,ACC
MOV 0x08,A
MOV A,0x0B
CLR C
RRC A
MOV 0x09,A
可以看出,使用移位操作产生的目标代码明显优于使用乘除产生的目标代码,而且MUL和DIV指令的周期比ADD指令周期长。
如果将上述方法变通一下,对于日常生活中的十进制计算方法迁移到二进制计算方法,利用计算百分比的阀值,利用假设需要计算统计的结果百分比大于80%,可以计算出新的统计阀值为80×128/100≈102。这样就可以用移位元算代替乘除运算。
3 巧妙利用51核的位寻址功能
嵌入式系统是嵌入在一个大系统中执行着特殊任务的专用计算机系统,所以大部分MCU都具有特殊的指令处理能力,8051CPU可以对部分特殊功能寄存器和字节地址20H~2FH进行位寻址。
如有下述代码,程序中需要经常对变量x的最低位和次低位的值进行01判断,可以写代码如下:
unsignedchar bdata x,y;
y = x &&0x01; //获知最低位情况
x = x>>1;
y = x &&0x01; //获知次低位情况
汇编产生的结果如下:
MOV A,0x20
JZ J1
MOV R7,#0x01
SJMP J2
J1: MOV R7,#0x00
J2: MOV 0x21,R7
MOV A,0x20
CLR C
RRC A
MOV 0x20,A
JZ J3
MOV R7,0x01
SJMP J4
J3: MOV R7,#0x00
J4: MOV 0x21,R7
如果采用位操作则上述代码只要写成,该段代码由于采用了位寻址,所以在程序中任何其他位置,如果在变量x发生改变的情况下,再次获知最低位和次低位01情况,就不需要再次执行上述程序的计算工作,直接使用即可。
unsigned char bdata x;
bit y0,y1;
sbitr0 = x^0;
sbitr1 = x^1;
y0 = r0;
y1 = r1;
汇编产生的目标代码:
MOV C,0x20.0
MOV 0x21.0,C
MOV C,0x20.1
MOV 0X21.1,C
4 结束语
本文结合基于8051核的MCU的内部结构特征,给出了若干C高效编程的技巧,本文的思想也可以应用到其他类型的MCU中去。笔者利用上述方法对一个1000多行C源代码进行优化,编程产生的结果将原5K多的目标代码降低为不足3K的目标代码,几乎减低了一半。
参考文献: