0
首页 精品范文 程序设计的结构

程序设计的结构

时间:2023-07-13 17:23:28

开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇程序设计的结构,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。

程序设计的结构

第1篇

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。本书采用程序设计语言Python作为具体的实现语言,介绍了可以有效处理大量数据的编程方法与技巧,不仅给出许多重要算法的实例,还介绍了计算复杂性的相关内容,以便计算机程序员对所用算法的效率进行判断。

全书共20章。1.Python编程101:对使用Python语言编程进行总体介绍,包括创建对象、对象调用方法、运算符重载、读取文件方法、XML文件等内容;2.计算复杂度:包括计算机体系结构介绍、常见的计算复杂性、摊销复杂度的方法等;3.递归:包括时栈和堆的概念、简单递归函数的编写、运行,递归计算机图形学、列表与字符串等;4.排序:包括选择排序、归并排序、快速排序、链表、栈和队列等内容;5.集合与映射:数独游戏介绍、集、散列等相关概念,最后分析规划问题;6.树:抽象语法树和表达、前缀和后缀表达式、解析前缀表达式、二叉搜索树等内容;7.图:包括图的定义及理论、存储结构及算法实现、Kruskal算法、Dijkstra算法、图的表示方法等;8.Bloom过滤器、Trie数据类型等相关内容;9.堆:包括堆的主要思想及其建立、排序算法、与其他算法的比较等;10.平衡二叉搜索树:二叉搜索树的概念、存储结构与性质、AVL树与 Splay树等具体实例;11.B树:包括关系型数据库的概念、B树的组织结构、优势、实现、B树的插入与删除等内容;12.启发式搜索:包括深度优先搜索与广度优先搜索、A*搜索、最佳搜索等相关内容;13.附录A:整数操作符;14.附录B:浮算子;15.附录C:字符串运算符和方法;16.附录D:列表操作符和方法;17.附录E:字典操作和方法;18.附录F:Turtle方法;19附录G:TurtleScreen方法;20.附录H:完整的程序。

作者Kent D.Lee博士是美国艾奥瓦洲路德学院计算机科学教授,已成功出版两本著作:Python编程基础和编程语言基础。另一作者Steve Hubbard博士是路德学院数学与计算机科学系教授。

本书介绍了初级与高级的数据结构和算法问题,每一章开始提供了学习目标,复习题和编程练习,以及众多的例证;同时在相关的网站提供可下载的程序和补充文件。本书可以作为计算机学科相关专业的教材或参考书,同时对计算机科技工作者也有参考价值。

李亚宁,硕士研究生

(中国科学院自动化研究所)

第2篇

采用多维分析法和时空分析法。多维分析法认为,事物有若干性质,并由这些性质构成,分析事物的变化和发展,就是分析事物的性质。作为一种方法,其将对事物的分析等价为对事物多质的分析,没有交叉互质的一个性质就是一个维,对事物多质的分析方法就是多维分析。任何事物都拥有自身的时空,事物性质的变化都必然是在事物的时空内变化和发展,对事物性质分析最本质的方法就是在时空维上的分析。以计算机设计课程群为例,从时间维来看,问题分阶段逐步展开、逐步解决。分阶段即分程序设计课程、面向对象程序设计课程、数据结构课程;逐步则是指从简单到复杂,从语言到程序阅读,再到程序设计的过程。在时间维上,程序设计问题的解有一个重要的观察点,即程序阅读。从空间维来看,程序设计=数据+算法+语言。其中,数据+算法为程序设计的核心[1]。空间维是两维的,即数据维与算法维。程序设计课程解决离散数据与结构化算法的设计问题,面向对象程序设计课程解决对象数据与对象互动算法,数据结构课程解决数据结构与算法。算法是数据的操作过程。计算机设计课程群中的课程数据形态具有差异,算法是对其一定形态数据的加工。从空间来看,程序设计问题的解有两个重要观察点:数据和算法。

2时间维分析

程序设计问题在课程群的时间维上,一般都能体现从简单到复杂。在数据上从简单的无结构数据到有结构的数据,从简单的无操作数据到有操作的对象数据。在程序设计上,从不可分解问题的简单设计到可分解问题的复杂设计,从语言学习到程序设计学习。程序设计问题解在课程群各自独立的课程的时间维上,没有得到足够和充分的展现,严重影响了学生对问题的认识,以至于学生无法掌握程序设计能力。如同要有充分的文学阅读,才能为文学创作奠定基础,由于程序设计的复杂性,从语言学习再到程序设计学习,才会使程序设计学习简单化,程序设计问题解的学习也是能力的学习,而非理论知识系统的学习,需要有能解决实际问题的经验。经验分为直接经验和间接经验,程序设计的间接经验是他人设计的程序。阅读程序就是学习程序设计的间接经验。阅读程序作为程度设计的重要过渡桥梁,使学生在符合认识与学习规律的条件下,充分掌握程序设计能力。程序设计的学习过程划分为:语言、程序阅读、程序设计。在解程序设计的过程中,将程序阅读作为新的观察点和分析平台。程序阅读就是对已知程序或程序段的阅读,程序阅读又分为3个步骤:理解程序结构、模拟计算机执行程序、上机验证。程序阅读有3种层次:第一种是能读懂程序中所有语句和数据,这是基础层次,是其它层次掌握的条件和前提,属于计算机语言;第二种是能读懂程序设计中的技巧和方法;第三种是能读懂程序设计中的设计思想[2]。

3空间维分析

3.1课程群的解空间与各课程的子空间

计算机设计课程群的解空间可即程序设计解空间分解为:结构化的程序设计课子空间、面向对象程序设计课子空间、数据结构课子空间,如图1所示。计算机设计类课程群的解空间与它的三个子空间是整体与部分的关系。因此,一方面课程群的解空间由3门课程的解空间构成。另一方面课程群的解空间具有抽象性和普遍性,3门课程的解空间呈现泛化。课程群的解空间具有程序设计最本质的意义,对课程群中各门课程有着本质的指导意义。课程群的解空间有数据维和算法维,程序设计课的解空间是由离散数据维和结构化算法维构成;面向对象程序设计课的解空间由对象数据维和对象互动的算法维构成;数据结构课的解空间由结构数据维和结构数据的算法维构成。程序实质就是对已知数据进行加工得到结果数据,是数据与加工过程的相互作用。相比较程序设计解的二维而言,数据维是处于主要和核心位置,程序设计就是围绕数据的加工处理。程序设计课与面向对象程序设计课的加工处理方式有所区别,程序设计采用结构化的处理方法,如顺序结构、选择结构、循环结构;面向对象程序设计采用对象方法,如继承、事件、多态等。对数据的分析至关重要,离散数据是与运算是分离的,主要分析数据的形态,即常量、变量、表达式。其中变量是重点,体现了数据与存储空间的联系;面向对象程序设计的数据是对象的一部分,即数据成员;数据结构程序设计的数据有结构,且重点在结构上。

3.2各课程的数据分析

在结构化的程序设计中,数据变量对应一个存储单元,有三层含义:一是表达物理存储单元;二是表达存储单元的存储内容;三是存储内容的读写性质。必须全面完整理解和掌握此3个含义。例:intx数据变量定义,分配一个存储单元;x=0;x<=10,数据变量体现存储单元的存储内容:x++;cout<<x,数据变量读写反映了数据变量内容的变化。关于面向对象程序设计(C#语言)的程序重点关注和描述对象数据成员的构成、内容变化和访问限制。只有关注和分析有关联的对象数据成员的关联情况、对象数据成员与存储空间的关系,以及与对象数据成员的一切有联系的内容,才能实现对数据的全面掌握。在此基础上,了解和掌握以数据为加工处理的算法过程,才合乎程序设计能力培养的逻辑[4]。数据结构(C语言)程序的重点是数据的逻辑结构及定义性描述。例如:顺序表就是利用连续存储空间的线性关系来实现连续存储空间中数据元素的线性关系,只有先从数据的逻辑结构上理解,才能理解存储实现,分析数据的物理结构以及两者之间的关系,如图3所示。数据定义是对实现数据逻辑结构的计算机语言代码的描述,在算法设计之前须要有充分的分析、表现、描述,以使算法设计有依据和目标。在程序设计中,首先要分析数据,充分、全面、清晰地分析数据后,再作算法分析和设计。在数据与算法的二维空间中,基于数据加工处理的算法才会自然合乎逻辑地体现出其过程。

4结语

第3篇

关键词: VB程序设计 教学改革 问题分析

Visual Basic(VB)语言是包含协助开发环境的事件驱动为机制的可视化程序设计语言,虽然属于比较简单的高级程序设计语言,但是中职学生在学习前多数没有接触过此类程序设计语言,学习这种逻辑性强、枯燥、抽象的知识可能会存在一定问题,因此老师要通过不断改进课堂教学方法提高教学的有效性。

一、VB程序设计教学存在的问题

具体而言,现阶段很多中职学校VB程序设计教学还存在以下两个方面的问题:一方面,学生学习意识不强。很多中职学校的课堂教学还采用传统模式,即老师讲、学生听,学生在学习中处于被动地位,无法充分调动其学习积极性与主动性,从而无法保证教学效果。VB程序设计课程主要包括两大内容,即编程的环境与编程界面、编程思想,其中编程环境与编程界面的学习只需熟练掌握窗体及各种控件的具体功能及属性即可,而学生要形成编程思想不仅要具备较强的逻辑思维能力及扎实的数学基础,还有一个相对较长的过程,因此编程思想的形成与建立比较困难。形成编程思想除了要系统理解VB程序设计的知识体系外,还要多上机实践。但是中职学校通常机房资源比较匮乏,专业教师资源紧张,再加之学生对课程的重视度不够,一些学生存在惰性,故无法保证学习效果。另一方面,教学资源匮乏。VB程序设计需要大量的上机实践,但是中职学校机房资源紧张,无法保证讲课效果。而且上机时学生人数过多,老师无法了解到每个学生的操作情况,只能在学生有问题时再进行针对性辅导,故对学生的了解不足。

二、VB程序设计的教学改革策略

针对中职VB程序设计存在的问题,建议从以下几个方面进行教学改革:

(一)算法的讲解

VB程序设计的重点内容包括算法、控制结构两个方面,课堂教学中要针对这两个方面加强讲解。程序就是算法与数据结构之和,但是VB程序设计具有面向对象的特点,故可以将程序作为算法、数据结构及界面设计之和。算法是程序设计的核心,只有算法正确,再配合自然语言、流程图等形式,将其转换为VB程序代码,才能利用计算机解决具体问题。算法的讲解可以结合学生的生活实例,拉近课程与学生生活的距离。比如从哈尔滨到北京,这个问题需要考虑三个因素:一是出发地到目的地是直达或中转,二是选择具体的交通工具,三是当时的天气情况等,三个因素存在一定的制约关系,学生通过全面考虑会选择乘坐火车到达目的地。这种方法可以引出算法的概念、特征及算法的描述工具,虽然例子简单,但是包含软件工程的思想,将算法的优越性充分体现出来。

(二)控制结构的讲解

控制结构知识的学习可以培养学生的计算思维能力,因此讲解控制结构知识时不能只将重点放在语法结构的相关知识,还要让学生了解到解决问题的方法及编程思路。多为学生设计开放性问题,即某个问题有多种不同的解决方法,学生在思考、寻找解决问题的过程中提高分析能力及解决问题的能力。控制结构分为三种,即顺序结构、选择结构及循环结构,其中顺序结构是执行程序过程中按照代码自上而下的顺序执行,主要采用输入输出函数及语句进行讲解。讲解选择结构知识时,可以以某个学生的成绩为例,利用选择结构if语句对学生的成绩及格与否进行判断,引入选择结构的双分支结构,再将学生的成绩分为优秀、良好、中等、及格、不及格等几个等级,再引入多分支结构、select case结构等。讲解循环结构时要先让学生理解循环结构在解决实际问题中的作用,再设计案例讲解。

(三)创建项目实例库

网络技术的发展为VB程序设计提供了丰富的课程资源,老师可以在学校机房资源紧张的情况下,从网上搜集更多典型的、有实际意义的案例,建立一个项目实例库。中职学生多数是初次接触计算机程序设计,其分析问题的方法多是基于数学思维分析的,在实践过程中遇到新问题往往思路不清晰,此时老师可以从项目实例库中选择对应的实例,稍做修改后作为学习模板让学生借鉴,以拓宽学生的视野,提高学生的编程能力。项目实例库包括基础类、算法类、图形类、文本类、应用类五大类,学生可以自主选择、自主学习,并强制要求学生从中选择几个典型的、包含VB程序设计知识要点的实例,帮助学生对VB知识结构有更全面的了解。在学习过程中选择学生最感兴趣的实例,鼓励其分析游戏的程序代码,并尝试改写程序代码,以获得相似的游戏动画效果,激发学生的学习兴趣,提高其解决问题的能力。

三、结语

在中职VB程序设计教学中要对传统教学模式进行改革,才能激发学生的学习兴趣,提高其知识、技能及综合素质,从而提高教学质量。当然VB程序设计教学需要在长期的教学实践中不断提高、不断完善,老师要将更多精力放在教学的创新,不断开拓校企合作等新思路,深化教学改革,增强教学效果。

参考文献:

[1]衣治安,倪红梅,吴雅娟.VB程序设计课程立体化教学模式的研究与实践[J].中国电力教育,2015(10):70-71.

第4篇

关键词:C语言;程序设计;循环

1. 前言

顺序结构、选择结构、循环结构是结构化程序设计的三种基本结构,一个程序的任何逻辑问题均可用这三种基本结构来描述。所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。而循环结构是这三者中最复杂的一种结构,几乎所有的程序都离不开循环结构。在C语言中,循环结构主要包括for、while和do-while三种语句,其中for语句的应用更为普遍一些。循环语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说,难度却不小。本文从初学者的角度,阐述了C语言中如何建立循环的思想。

2. 如何设计引例

英文原版教材,循环是这样描述的:repeatation,重复。《辞海》上说循环是指事物周而复始的运动或变化。由这两个定义可以看出,循环重在强调重复。

2.1 运用实例解释循环思想

在一堂课的设计过程中,引例的作用至关重要。一个好的引例能把抽象问题简单化、具体化,有利于学生理解掌握。在学习循环结构时可先利用现实生活中的一些具体实例来说明什么是循环以及为什么要研究循环。例如:春夏秋冬四季的更替,汽车内燃机的作功过程:进气——压缩——燃烧——排气,叉车装货、运货、卸货的过程。3个例子的共性在于,它们都是周而复始的、重复的运动,为了研究问题本质,只要找出规律,将重复频率高的相同部分作为重点进行突破,可以为我们的研究节省时间,提高工作效率。

比如,我们要提高发动机效率,并不需要要研究千次、万次的燃烧过程,只要从研究一次进气、压缩、燃烧、排气一个周期入手;

再如运输问题,我们可以通过一次往返运输过程的研究,明确该从哪些环节下手实现安全、快捷、节能等问题。

2.2 编程中的循环问题

现在我们可以提出一个问题:在计算机程序设计的世界里是否也有类似的这种相同操作重复出现的问题呢?我们又当如何提高程序设计的工作效率呢?

利用最简单累加求和的例子。

例:求1+2+3+4+5+…+10的和。

利用所学知识学生很快能写出这个问题的程序:

#include<stdio.h>

main()

{int s;

s=1+2+3+4+5+6+7+8+9+10;

printf(〝%d〞,s);}

接下来把题目改成:求1+2+3+4+5+…+100的和。

同样学生可以利用上面的方法实现:

#include<stdio.h>

main()

{int s;

s=1+2+3+4+5+6+7+8+9+10;

printf(〝%d〞,s);}

在编写的过程中学生会发现此种方法虽然可行,可是写起来麻烦费时。我们如何对其进行改进呢?

首先,复杂操作简单化——将一个复杂操作化为多个简单操作;

#include<stdio.h>

main()

{int  s=0;

s=s+1;

s=s+2;

s=s+3;

s=s+4;

………

………

………

s=s+100;

printf(〝%d〞,s);}

经过改进之后会发现,虽然每一行变简单了,但是行数却增加了,在工作量上并没有减少。经过观察可以发现,被框起来的部分虽然不同但已经十分相似。下面引导学生如何利用常量与变量的关系把不同的行变成相同的,也就是第二步变化。

接下来,简单操作相同化——多个简单操作整理成相同操作;#include<stdio.h>

main()

{int  s=0,i=0;

i=i+1; s=s+i;

i=i+1; s= s+i;

i=i+1; s= s+i;

i=i+1; s= s+i;

………

………

………

i=i+1; s= s+i;

printf(〝%d〞,s);}

经过第二步之后会发现原本不同的语句变成了相同的语句,我们在整个过程中都做着重复的、相同的事情,也就是前面所说的循环。下面就可以引出本节课的重点循环结构。

最后,相同操作重复化——设计控制相同操作执行多次。

#include<stdio.h>

main()

{int  s=0,i=0;

i=i+1; s=s+i;

i=i+1; s= s+i;

i=i+1; s= s+i;

i=i+1; s= s+i;

………

………

………

i=i+1; s= s+i;

printf(〝%d〞,s);}

通过实例总结,循环结构程序设计的思想:

①复杂操作简单化——复杂操作化为多个简单操作;

②简单操作相同化——多个简单操作整理相同操作;

③相同操作重复化——循环控制相同操作重复执行

经过这几步变化可以将循环的思想简单明了的呈现在学生眼前,学生只有真正理解掌握了循环的本质,才能在以后的学习过程中很好的去运用。这种方法在日常教学中得到了很好的效果,也得到了学生的认可。

3. 循环本质

循环结构程序设计的任务就是设计一种能让计算机周而复始地重复地执行某些相同代码的程序。换句话说就是:相同语句程序员只编写一次代码、并让计算机多次重复执行。将程序员从大量重复编写相同代码的工作中解放出来,计算机的工作量并没有减少。

利用循环的好处是:节省编程的书写时间,减少程序源代码的存储空间,减少代码的错误,提高程序的质量。

这就是程序设计过程中循环的本质。

了解掌握了循环的本质接下来讲解循环的三要素、三种循环语句的结构及执行过程就很容易被学生接受了。

4. 结束语

此方法较以前的教学学法有了很好的改进,对于循环问题学生不再有畏惧感,也为以后数组及其他知识的学生打下了基础。

如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,总结出程序设计中每一种程序设计结构的本质及适合解决的问题,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。

参考文献:

[1] 谭浩强. C 语言程序设计(第二版)[M]. 北京:清华大学出版社,1999

第5篇

【关键字】案例教学 C语言程序设计 课程改革

【中图分类号】TP311.1-4;G642.0

程序设计方法大体上分成两种:一种是结构化程序设计,一种是面向对象程序设计。结构化程序设计思想的原则是:自顶向下,逐步求精,模块化。绝大多数高校对学生进行结构化程序设计思维培养都是通过“C语言程序设计”课程进行的,但是多数课堂在进行“C语言程序设计”课程时都是按照教材的章节进行讲解[1][2],对C语言缺少一个整体的设计,并且实例之间都是离散的,没有关联,这样对于学生形成结构化程序设计思维造成了很大的困难。学生在学习“C语言”之后,往往知道其中的一些概念,如数组、结构体、指针、函数等等,会使用的就会减少一部分,而对“C语言”能够有一个整体的理解,对结构化程序设计思维有深入了解的,能够独立编程[3]的就少之又少。

为了培养学生的“结构化程序设计思维”,让学生对“C语言”有一个整体的掌握,并且能够熟练使用“C语言”进行程序设计,我们采用“全程案例式”教学方式进行C语言程序设计课程改革。

所谓“全程案例式”C语言程序设计教学是指在C语言的教学过程中从头到尾选用一个典型案例,如“学生成绩管理系统”,仿照教务管理平台对学生成绩进行管理。这样的案例学生非常了解,能够对其中的角色功能有明确的认知,这样就很容易分析清楚整个系统的功能模块构成,在此基础上对各个功能模块和数据类型进行设计,从而培养学生的结构化程序设计思维。

一、问题分析

教学人员对教务管理平台都不陌生,在分析问题的时候可以让学生自己设定学生成绩管理系统的角色和功能,然后实现。一般情况下,学生成绩管理系统可以分成三种角色,一是管理员,主要负责访问成绩管理平台成员数据的增、h、改、查等操作,二是教师,主要负责学生成绩的录入、修改、查看等操作,三是学生,可以查看自己的成绩信息。同时三种成员都可以修改自己登陆平台的密码,功能模块划分如图1所示。通过对系统功能模块的划分,可以让学生理解结构化程序设计“自顶向下,逐步求精,模块化”的程序设计思想,并在此基础上,开发对应的功能函数。

二、学生分组

将学生分组,如25名同学分成5组,每组5人,有一位组长。每组分别独立完成以上教务管理平台中对应的功能模块,可以根据本组的讨论有所增删。这样每位同学平均完成两个功能模块,从而保证在课堂教学时间能够完成该项目。组长负责整个案例的任务分配,同时解决小组成员实施时遇到的技术问题,当然组成的最后成绩也会较高。

三、教学内容

仿照工程化的思路,如设计一个产品,需要有工人、原材料、工人。工人使用工具按一定的步骤加工原材料得到一个一个的零件,再将这些零件有机地组装起来就会形成一个产品。C语言的教学内容也可以按照以上思路进行分解,首先要有人,即程序员也就是学生;原材料是C语言的数据类型,包括基本类型(整型、实型、字符型、枚举型)、构造类型(数组、结构体、共用体)、指针类型和空类型;工具是运算符,用来操作某种类型的数据;操作步骤包括顺序结构、选择结构和循环结构;程序员使用工具按照一定的步骤加工原材料就能够得到一个零件,即函数;再将这些函数按图1进行组装就能够形成最后的学生成绩管理系统的源文件,同时能够对存储在外部文件中的人员数据等信息进行访问。[4]

将C语言的教学内容按照内在逻辑分成五大部分,学生容易理解并掌握。

四、教学方式

在教学上,采用“全程案例教学”,第一节课就开始写代码。开发工具可以使用C-Free、Dev-C++、Visual C++等,让学生理解C语言、C++语言和开发工具的区别。

根据问题的需要,首先要设计一个“学生成绩管理系统”的欢迎界面,通过该界面的设计讲解顺序结构,尤其是输出语句的使用。接下来应该是用户权限选择,如“1、管理员 2、教师 3、学生”,这就要用到选择结构,讲解if语句和switch语句。此时要在选择语句中使用一些数据类型,因此可以在此处讲解基本数据类型(字符型、整型、实型、枚举型)。在用户进行选择时要进行选择数据的输入,此时讲解输入语句。此时的程序只能进行一次用户的选择,如果想再次选择则需要重新执行程序,在此处可以进行循环结构的讲解,可以多次选择用户,直到用户自己退出程序为止。在循环结构中要用到相关的表达式,可以在此处进行表达式的讲解。当然,也可以先讲解基本数据类型和表达式,之后再进行顺序结构、选择结构、循环结构的设计。

在选择了相应的用户权限之后,就要执行对应的用户功能,如管理员功能、教师功能、学生功能等。此时给学生讲解程序设计中的模块,即函数,让学生深刻理解模块的概念及实现方式。在进入到相应的函数之后,如学生函数,此时应该确认学生的身份是否合法,通过键入如学号和密码来验证该学生是否合法,如合法则可以查询成绩,如不合法则重新登陆或退出。而学生的信息适合使用结构体类型数据来存储,很多学生信息则需要用结构体数组来存储,在此处给学生讲解构造数据类型(结构体、共用体、数组),通过学生结构体数组来模拟数据库表,在此处给学生讲解相关的数据库知识。学生功能包括成绩查询和修改密码两部分,所以要写两个相关的子函数,此处深入讲解函数的相关知识,如函数的调用、参数传递等。这部分是学生成绩管理系统的核心功能,工作量较大。

在完成相关数据的存储之后,发现关机之后数据就没有了,通过回顾内存与外存的区别,所以要把数据库存储在外存储器上,这就要用到文件。建立若干个文件用来存储管理员、教师和不同班级学生的记录(可用二维数组或多维数组来区别系或班级等),通过对文件的读写来实现对数据库数据的存取,基本达到学生成绩管理系统的使用目标。

在这个过程中,除了必要的知识介绍外,重在培养学生的结构化程序设计思维,理解C语言的几大组成部分并熟练使用,同时养成设计代码的规范性。

五、考核方式

全程采用案例教学就不适合出试卷进行考核,因此在考核方式上更适合过程化考核[5]。我们将考核内容分成两个部分,平时考核占60%(出勤占20%,平时训练占80%),最终考核占40%(小组考核占50%,个人考核占50%)。这样可以弱化对知识点的考查,重在考查学生对程序的分析与设计的能力。

六、实践教学

在实践教学环节(课程设计[6])可以安排类似的管理系统供学生分析和设计,此时每组要求选择不同的系统进行设计,每组独立设计系统功能框图、分工并实现,从而巩固并强化课堂所学的内容。

七、第二课堂

第二课堂可以参加相关的学科竞赛,如“ACM大学生程序设计竞赛”、“蓝桥杯全国软件和信息技术专业人才大赛”等学科竞赛,从而开阔学生的视野,加强学生的实际编程能力。当然,如果想参加相关的学科竞赛,还需要有一定的数据结构知识和算法知识,这需要对学生进行相关的培训或由学生自学完成。这对于学生是一次很好的升华,学生获得的相关学科竞赛读书对于将来的就业是一个很好的准备。

综上,通过一个典型案例将C语言程序设计课程内容有机地组织起来,将C语言教学内容分成五大部分,使学生容易理解并形成一个较强的印象。在实验室教学,人手一机,边讲边练,重在培养学生分析问题和设计程序的能力,培养学生的结构化程序设计思维。

参考文献

[1]蒲海波 兴趣驱动的案例教学在C语言教学中的应用[J]计算机光盘软件与应用 2013年第7期:192-193

[2]丁海燕 高级语言程序设计案例教学模式的探讨[J]计算机教育2011年第8期: 65-68

[3]吴美红 基于CDIO模式的案例教学在C语言程序设计中的应用[J]电脑知识与技术 2013年第11期:2632-2633

[4]李伟光 提高C语言实际应用能力的研究与实践[J]煤炭技术2012年11期:242-243

[5]薛小锋 案例教学在非计算机专业C语言程序设计教学中的应用[J]江苏技术师范学院学报2010年第4期:80-82

[6]波 模块化案例教学在C语言程序设计课程中的应用[J]计算机教育 2009年第21期:62-65

第6篇

ACM是一项针对国际大学生程序设计的竞赛,在竞赛中大学生通过程序设计来展示自身分析和解决问题能力。本文介绍对ACM进行了概述,在程序设计评测系统的基础上,提出了一种基于ACM竞赛模式的数据结构实践教学改革措施,对数据结构实践教学进行了深入探索,进一步完善了计算机程序设计类课程的实验教学体系。

【关键词】

数据结构;ACM;编写程序

1 ACM竞赛的概述及意义

1.1 ACM竞赛的概述

ACM是由美国计算机协会举办的国际大学生程序设计竞赛,ACM被认为是水平最高、规模最大的国际大学生程序设计竞赛。ACM为大学生提供了一个展示自身分析解决问题能力的平台,大学生通过所学的计算机程序设计理论知识来解决问题,其理论知识主要包括数据结构、程序设计语言、物理数学模型、算法分析等。ACM在竞赛过程中为选手规定了比赛时间,在规定时间内,根据参赛者所作比赛题目的数量和准确度和做题时间长短来进行名次评判。ACM是计算机类最具影响力的国际级竞赛,受到世界各知名大学和各著名TI企业的关注。通过ACM竞赛可以在竞赛压力环境中培养参赛着在软件程序开发过程中的团队合作精神和自主创新能力、理性实践的能力。我国ACM竞赛起步较晚,从1996年开始举办时至今日已经成功举办了七届,这一针对高校大学生而举办的竞赛得到了国内众多知名高校的积极响应,其发展趋势迅速,取得了卓越的科技成果。

1.2 ACM竞赛的意义

程序设计类课程是高校计算机相关专业课程中的重要组成部分,所占比重较大,这类课程对实践性要求很高,这类课程旨在培养学生具有一定的程序设计能力。通过ACM竞赛可以全面考察学生程序设计语言和算法的学习使用情况,ACM这一竞赛平台将程序设计类课程的理论与实践完美的结合起来,以此来提高学生程序的设计能力。

2 ACM评侧系统的设计

ACM评测系统集在线程序设计、算法设计练习、竞赛于一身。该系统中存储有大量的竞赛试题,学生可以根据自身需要进行自主练习或竞赛,学生在该系统上在线编写相关竞赛试题的程序代码,编写完成后提交程序代码,系统可以自动进行编译,从而生成可执行文件,并对程序执行测试,最终输出测试结果。可以将ACM模式推广到数据结构、C/C++、EDA等与程序设计相关的课程中进行实践教学,该系统的主要功能包括以下几部分内容:(1)规定代码的通过标准,从程序耗费总内存、运行时间等多个方面审查提交代码,并输出评测结果。(2)支持JAVA、C++、C、PASCAL等程序语言的编译,制定了具有可扩展性的编辑器扩充规则,以此来支持其他程序语言的编译。(3)设计的系统具有支持集体或个人申请竞赛,并提供相应的竞赛环境的功能。(4)系统以RSS聚合方式汇总竞赛报告,通过RSS阅读器即使不访问站点也可以自动获得竞赛报告的更新。(5)系统可以自动监管各个数据库的连接状态,以此来调控系统的性能。(6)系统定义了自动约束规则,具有系统在线配置的自我调节能力。ACM评测系统在运行速度、系统稳定性和程序负荷能力上均具有良好的性能,为各类编程课程提供了一个良好的实验环境。

3 ACM数据结构实验教学体系设计

数据结构相关内容的课程是计算机专业的重要课程之一,数据结构这门课主要侧重于软件设计中所涉及到的各种存储结构、数据结构、基本运算、程序性能、以及算法实现等基本技术。学生在遇到实际问题时可以通过学习的理论知识选择合理的数据结构,并设计出符合实际情况的优良算法,以此来提高学生软件开发的实践能力。学生软件实践能力的培养可以通过开设数据结构相关类实验课程来实现,这种实验类课程将理论与实践相结合,将学生在书本、课堂中学到的理论知识用于解决实际问题,有效地培养学生的创造性思维,并提高学生分析、解决问题的能力,为从事计算机类相关工作的学生奠定坚实的实践基础。传统的实验类课程不能充分发挥其根本作用,只能培养学生掌握基本知识的能力,并且实验类课程课时较短,在短暂的实验课程中无法真正锻炼学生分析解决实际问题的能力,学生在课余时间也无法找到正确的渠道进行练习学习,也没有专业人士给与指导建议。ACM竞赛经过长时间的探索已经日趋成熟,将ACM模式应用于数据结构等计算机类实验教学中,将大大提高教学效果。

3.1 ACM模式教学优势

基于ACM模式的数据结构等程序设计类课程的实验教学系统是通过网络进行的,这种教学模式不受时间、空间的局限。学生在课程学习中难以将实际问题中客观事物与数据结构中的理论数据很好地衔接在一起,缺乏系统解决问题的能力和方法,通过ACM模式的实验教学恰好可以很好地解决这一问题。学生在ACM模式教学下进行实践学习,丰富了自身计算机理论知识储备并提高了实践能力,将所学理论知识应用于实际问题中,通过一系列实践训练真正掌握数据结构的精髓。ACM竞赛为学生提供了一个学术交流平台,通过ACM组队形式的竞赛培养学生团结合作的精神,为以后软件项目团队化的合作奠定坚实基础。

3.2ACM模式教学设计

将基于ACM模式的计算机程序设计类课程实验教学体系分为以下三个层面:基础知识训练型实验、实际问题设计型实验和创新型实验。

(1)基础知识训练型实验。学生通过基础知识训练型实验的练习可以巩固并深入理解所学的知识。基础知识训练型实验主要涉及有线性表、队列、栈、顺序折半查找、广义表、图、树、内部排序等多种内容。这一环节要求学生掌握基本的数据结构和数据方法,并且要求学生具有较强的问题分析能力和任务定义能力。

(2)实际问题设计型实验。通过实际问题设计型实验可以充分挖掘学生自身的创造力,将所学理论知识运用于实际问题的解决中。实际问题设计型实验主要涉及停车场车辆管理、电话号码及归属地查询、哈夫曼码编码器等内容。这一实验环节要求学生用所学的数据结构知识设计出复杂的软件系统,主要检测了学生掌握算法设计和分析、递归思想和方法等方面的能力。

(3)创新型实验。创新型实验与各种各种比赛、课外科技活动、科研项目等相结合,增加学生软件开发、设计的能力。这一实验环节要求学生掌握面向过程的设计方法、面向对象的设计方法、基本的软件重用方法等内容。

4 总结

通过ACM教学模式可以培养学生解决实际问题的能力,而且不受解题方法的限制,学生通过ACM这一学术交流平台在展示自己能力的同时可以学到很多东西,激发了学生的学习热情和潜力。

【参考文献】

[1]朱月秀.基于ACM竞赛的C++程序设计课程教学改革[J]. 漳州师范学院学报(自然科学版),2012,01:96-99.

第7篇

关键词:程序设计语言;程序调试;教材;编程能力

中图分类号:G642 文献标识码:B

随着计算机应用的普及,计算机编程能力已经不仅仅是计算机专业学生需要掌握的能力,因而我国高校普遍为大学生开设程序设计课程。目前主要的程序设计课程包括:C/C++程序设计,VB/程序设计和Java程序设计等。从上海参加计算机等级考试的学生来看,C/C++程序设计的学生占60%,VB/程序设计占35%,Java程序设计占约5%,因此“C程序设计”仍然是高校学生学习计算机编程知识最重要的一门课程。

尽管C程序设计语言问世已经三十多年了,但在课程教学中,很多教师和学生仍然觉得C程序设计语言很难驾驭。那原因是什么呢?作者认为这主要是由C程序设计语言本身特点决定的。首先,C程序设计语言是一种结构化程序设计语言,用它进行程序设计的方法是结构化方法,其思想与我们日常生活中处理问题的思路有较大的出入;其次,C程序设计语言最早是用于开发系统软件的,是一种“中级语言”,其语法限制不太严格;第三,C程序设计语言中强大的运算功能和丰富的数据结构(如指针等)对初学者的逻辑思维能力要求较高,不容易学懂。针对C程序设计语言这样的特点,要学好这门语言,一本好的教材显得特别重要。

和学习外语一样,学习一门程序设计语言的最终目的是能运用这种语言来解决实际问题,因而,程序设计课程的教学和考核也应该面向这样的目标。2009年4月,上海市计算机等级考试大纲再次进行了修订,对作为二级的主要科目“C程序设计”的大纲进行了较大的修改:将原来的纸质试卷书面考试改为上机考试,使用“上海市高校计算机等级考试通用平台”进行考试,建议使用Microsoft Visual C++ 6.0作为程序开发环境;为加强对学生应用C程序设计语言解决问题的能力,新增一种题型――程序调试题。其目的就是引导教师和学生在提高动手实践和实际应用能力的方面下功夫。

对于“C程序设计”的推荐参考教材,上海市等级考试二级命题组决定仍旧选择由谭浩强教授编著、清华大学出版社出版的《C程序设计》。随着计算机技术的迅猛发展,上海市等级考试在不断发展,谭浩强教授的《C程序设计》也从第一版、第二版演变到了第三版,那么,为什么上海市等级考试始终选谭浩强教授的《C程序设计》作为“C程序设计”科目的参考教材呢?结合自己的教学和命题实践,我们深刻体会到谭浩强教授编写的《C程序设计》教材有以下三个重要特点。

1由浅入深,通俗易懂

谭浩强教授丰富的教学经验和编写教材的经验在《C程序设计》中得到集中体现,由浅入深、循序渐进的内容安排和通俗易懂的写作风格,使《C程序设计》非常适合作为程序设计的入门级书籍,也推动了中国计算机基础教育的普及和发展;《C程序设计》教材对C语言语法部分、控制结构部分、数组、指针等的讲解都非常流畅,给读者一气呵成的信心和欲望。金山公司前总裁兼CEO雷军曾经说过:“是谭浩强让程序员感到了写程序就是自己的生命。”

2概念清晰,融会贯通

《C程序设计》针对初学者的特点,精心策划、准确定位,使得全书概念清晰、融会贯通;将必要的基础知识融会贯通到程序设计课程中,能给初学者打下良好的程序基础,对学生的知识结构建设以及今后的深造和提高都大有裨益;全书强调用结构化程序设计方法编写程序,自始至终用完整的程序输出范例来演示所讲的概念,内容全面,层次清晰,适用于不同层次的学习对象和不同课时的教学单位,特别是高校计算机基础教学。

3例题丰富,启发思维

《C程序设计》全书结构清晰,例题丰富,每章都附有大量习题,并且有配套的习题解答,非常有利于学生复习巩固课上所学的知识,也便于教师设计实验课的教学内容。谭浩强教授还在书中引导学生带着问题学习、在启发中得到理解、在思维中得到提高、在实践中得到认知。通

过使用这本教材来学习C程序设计语言,初学程序设计的学生可以达到熟练运用C语言进行小规模应用开发的能力。

正是因为以上特点,谭浩强教授的《C程序设计》把原先很多人认为深奥难懂的C语言变为只要具备计算机初级知识的人都能学会一门程序设计语言,能够使学生对C语言产生浓厚的学习兴趣,是学习C语言的一本理想教材;也正是这些特点,让我们始终选择谭浩强教授的《C程序设计》作为教材。

参考文献:

[1] 谭浩强. C程序设计[M]. 3版. 北京:清华大学出版社,2005.

第8篇

关键词:程序设计;教学改革;实践能力

中图分类号: G642文献标识码:A文章编号:1009-3044(2012)02-0366-02

Practice on the Teaching of the Programing Course

YUAN Hui-yong, YANG Si-qing, YI Ye-qing

(Department of Computer, Hunan Institute of Humanities, Science and Technology, Loudi 417000, China)

Abstract: This paper first analyses the problem in teaching of "C Language"," Data Structure" and "Algorithm Design and Analysis", and then propose a reform of teaching by improving teaching method, integrating teaching content and strengthening practice teaching. Results show that the reform of teaching can effectively stimulate students interest in learning, improve the efficiency of learning and the ability of programming.

Key words:programming; reform of teaching; ability of practice

1概述

目前C语言程序设计、数据结构、算法分析与设计是计算机及其相关专业中非常重要的专业课程。在以往教学中,这三门课程采用相对独立、分开授课的方式,导致课程内容脱节与重复,教学效果差,学习完三门课程后却不能编写程序的大有人在。这三门课程都以培养学生解决实际问题的程序设计能力为共同目标,因此,如何将三门课程有机地结合起来,构建程序设计系列课程的新体系,整合教学内容,改进教学方法,切实提升学生的程序设计能力,成了当前计算机专业教学改革中亟待解决的问题。

2教学中存在的问题

在传统的教学中,C语言程序设计、数据结构、算法分析与设计三门课程的分开授课,课程知识没有整合,对课程知识中存在重叠的内容,只是做简单的重复讲解(如C语言和数据结构课程中都有数组这个教学内容),教学深度不够。教学中注重讲授基本理论,忽略了程序设计过程中涉及的方法和技术(如算法分析与设计课程通常是将已有的经典算法在数学模型和数据结构上给学生解释),理论教学与实践教学结合不够紧密(如数据结构在讲授了某种抽象的数据关系和在计算机中的表示与实现后,并没有将这种结构用到解决实际问题中去),造成有些学生虽然具备了一定的理论基础,但由于实践教学薄弱,动手能力差。

3具体改革措施

我们改变了以往C语言程序设计、数据结构、算法分析与设计分开授课的模式,而是将这三门课程作为一个整体,以培养学生解决实际问题的程序设计能力为目标,从组织教学内容、改进教学方法、突出实践教学等方面进行教学改革与实践。

3.1整合教学内容

C语言程序设计是数据结构的前导课程之一,学生对它的掌握程度直接关系到数据结构课程的教学效果。算法分析与设计是计算机专业程序设计类的核心课程,在学习该课程之前,要求学生们掌握了基本的数据结构知识,能熟练运用一门或多门编程语言,并具备一定的编程经验。

我校原来的C语言、数据结构和算法分析与设计三门课程是相对独立、分开授课的,学习效果不理想。我们将这三门课程的知识进行整合,采用同一教师授课,做到了前导课、后续课的有机衔接,并重新制定了三门课程的教学计划,以知识点为单元,将这三 门课程很好地结合起来。在C语言的教学中,以C语言为主线,适当穿插数据结构中的相关内容,使C语言与数据结构有机地结合在一起,如我们将C语言中的数组和数据结构中的直接插入排序、冒泡排序、简单选择排序、顺序查找、折半查找方法放在一个知识单元中。在数据结构教学中,穿插了算法分析与设计的有关知识,如在讲述哈夫曼树和图的最小生成树时,穿插了讲述了贪心算法,在讲述图的最短路径时介绍了动态规划算法。

我们不再把C语言当做一门语言来讲解,加强了数据结构、算法设计、逻辑思维和编程方法的教学。数据结构课程不再只注重讲授抽象的数据关系和存储结构,而要求学生用C语言编程实现各种算法,并结合实际应用,在ACM/ICPC在线评测系统上完成相应的练习题目,学生不再感到枯燥无味,不仅较好地解决了数据结构教学中学生上机困难的问题,也提高了学生的程序设计能力。在算法分析与设计课程教学中,我们选择一些难度适中、能结合实际问题和相关课程的知识来讲解,使学生既能理解,又能拓展创新。

3.2改进教学方法

我校属于应用型本科院校,其教育目标着重于培养具有实际工作能力的技术型和应用型人才。在C语言的教学中我们采用了“案例”教学方法,从日常生活中选择能典型反映教学内容的案例,所选案例难度适中并能反映多个知识点。如选用了“学生的成绩管理”,该案例覆盖了C语言中的循环结构与数组,涉及数据结构中的排序与查找。在该案例中穿插介绍了数据结构课程中的直接插入排序、冒泡排序、简单选择排序和顺序查找;通过介绍C++中的排序函数qsort()激发学生自觉地学习C++标准模版库;并提出如何保存学生信息以避免重复输入数据的问题,引导学生自学C语言中的文件操作,培养学生的再学习能力。在算法分析与设计课程的教学中,我们采用了“任务驱动”教学方法,将具体的算法设计策略融入到一些“任务”中,课堂教学以任务为主,引导学生利用算法设计策略探索解决方案,在课后的实践环节,将结合实际应用且融入了知识点的任务放到ACM/ICPC在线评测系统上,让学生在课后根据任务描述,自主探索问题解决方案,并提交程序代码。

在教学过程中,对典型例题力求讲透彻,并提出问题给学生思考。如斐波拉契数列,讲解了分别使用变量交换的循环结构、使用数组的循环结构和递归三种编程方法,并比较了三种方法的优缺点,使学生深刻体会到了采用递归求解斐波拉契数列的低效,引导学生理解使用数组的高效是基于算法分析与设计课程中的动态规划的思想,并且穿插介绍了数据结构课程中算法的时间复杂度与空间复杂度的度量;再提出大斐波拉契数列的求解问题,介绍使用数组进行高精度计算以及使用矩阵和二分法的求解方法,激发了学生的学习积极性。在例题的讲解过程中,充分利用多媒体教学手段,加强了例题讲解过程中的现场调试与分析,鼓励学生对具体问题进行分析和研究,培养学生的逻辑分析和判断能力,重视上机训练,养成良好的编程习惯。

3.3加强实验教学

这三门课程都是理论与实践并重的课程,在教学中必须将理论教学与实践教学紧密结合。我们从以下几个方面来加强实验教学:

1)重新编写实验指导书。按照教学内容的知识点,综合可操作性、趣味性和适当的难度,编写了适合教学要求的实验指导书,既保证了实验的可完成性,又增强了学生的兴趣。

2)建立在线题库。在ACM/ICPC在线评测系统上开设了C语言程序设计、数据结构、算法分析与设计的专题训练,每个专栏按照教学知识点安排了不同难度的练习题,学生可以根据自身的能力,完成相应等级的题目,在探索与解决问题的过程中获得学习成就感。

3)组织程序设计比赛。ACM/ICPC在线评测系统上安排了与教学知识点相关的竞赛真题,鼓励学生组队、按照比赛规程进行模拟比赛。通过比赛,学生对教学知识点有了更深入的理解,不仅增强了学生的实践动手能力,提高了学习兴趣和积极性,也使学生提前了解ACM比赛的规则和比赛真题,训练了学生的参与意识、竞争意识和团队精神,为以后组织学生参加省程序设计比赛打下良好的基础。

4)开设课程设计。课程设计的题目以典型的问题或实际的工程为主,如数据结构课程选用了“教务计划编制问题”,让学生运用图论中的拓扑排序来求解这个实际问题。通过课程设计,培养了学生综合运用所学知识进行分析和解决实际问题的能力,使学生不仅学到了解决问题的办法,同时加深了理论的理解与掌握,做到了理论教学与实践紧密结合。

3.4改革考核与评分标准

考试作为课程教学的一个重要环节,对学生的学习具有明显的导向作用。这三门课程原来的考核分为平时成绩和期末考试,这样的考核方式很难考察学生的实践能力,导致大部分学生只注重期末考试,而忽略学习过程,很难有效的提高学生的创新能力和实践能力。我们认为这三门课程的考核应着重考核学生的程序设计能力,而不是死记硬背一些基础知识。为此,我们引入了ACM/ ICPC在线评测系统及,对课程的考核进行了大胆改革,评分标准也作了修改,提高实验考核成绩在课程总评成绩中的比重,以此来引导学生认真对待实验和课程设计,切实提高学生的实践动手能力。

4结束语

实践证明,将C语言程序设计、数据结构、算法分析与设计这三门课程有机结合的教学改革,能够很好地激发学生的学习兴趣,学生在掌握基本理论和知识的同时,程序设计能力、数据结构和算法设计的应用能力也得到了很好的培养,我校学生在近二年的湖南省程序设计比赛中均取得了较好的成绩。

参考文献:

[1]谭浩强. C程序设计(第2版) [M].北京:清华大学出版社,2005.

第9篇

【关键词】C语言 编程 结构化

1 C语言的编程特点

1.1 C语言的定位

很多人都普遍的认为C语言是在B语言的基础上发展过来的一种高级编程语言。然而从编程语言的层次结构方面来说,我们应该认为C语言,是在汇编语言的基础上发展而来的,它比汇编这类编程语言要高级,但是比一些可视化的编程语言又低级,所以准确来说,C语言应该算是中级编程语言,或者称为准高级程序设计语言。目前很多高级程序设计语言都是在C语言的基础上发展而来的,或者至少借鉴了C语言程序设计的思想。80年代初,Bjarne Stroustrup在贝尔实验室对标准C进行了改进和完善,C++得以诞生,使得面向对象的程序设计思想得以提出和落实;21世纪初,人们将C语言和单片机相结合,开发出来了应用于单片机编程的C51语言,使得单片机的程序设计从反复的汇编语言设计中抽身出来,大大的提高了程序的设计效率。

可见C语言在整个编程语言的发展过程中属于承上启下的作用,同时其自身的应用领域又在不断的更新和发展。

1.2 C语言的编程特点

通过上述C语言的定位可知,它既具备高级程序设计语言的结构性和层次性特点,同时也兼具了低级程序设计语言的实用性。

(1)用相应的C语句可以实现对微机操作中的字节、地址等进行直接访问。

(2)基于函数的结构化特点,使得复杂的软件系统可以由多个人,以设计子函数的形式,分别各自进行程序开发。之后进行函数的汇总,最后由主函数,按照既定的程序流完成对各个子函数的调用就行。

(3)丰富的数据类型,尤其是指针类型,可以很方便的应用于复杂数据和大数据的访问和处理。

(4)由于C语言基本上不向低级语言那样直接涉及到对硬件的操作,所以C语言程序往往具有很好的通用性,方便程序移植。

2 C语言的编程技巧

2.1 扎实基本工

在进行C语言程序设计之前,首先要熟悉运算符、表达式以及各钟类型数据的定义和使用方法,其次对顺序、分支和循环三大程序结构要有较好的把握,并熟练使用while循环、for循环、switch语句等。如果要在程序的设计上有进一步的提高,那就需要对“指针”能够进行熟练的使用了。指针可以用于表示变量,但更多的是用于代表数组、存储地址以及函数地址。在代替不同变量时将返回不同的值,可以说指针的功能十分强大。对其熟练使用有助于程序设计的简洁和便利。

2.2 立足C语言的结构化的特点,熟练程序设计基本构型

C语言典型的特点就是结构化,在进行具体的程序开发时,应该首先要根据设计的软件项目,然后进行任务的细分,由于C语言不需要编程人员去配置硬件资源,因此程序设计人员可以把更多的精力放在各个细分任务的子函数设计上,考虑用最简单的程序结构去实现。在数据类型的选择上,能够用短数据类型就尽量用短数据类型。

另外,为了提高程序代码的执行效率,建议C语言程序设计人员要了解C语言程序最终运行的硬件的基础机构,是在微型计算机上运行,还是在单片机上运行。在了解硬件平台结构及内部资源的前提下进行相应的程序设计,将有助于提升程序的运行效率。

3 C语言的实践应用

3.1 混合编程

很多程序设计人员都认为C语言比汇编语言高级,所以认为没有必要去学习和了解低级语言。其实这种思路是及其错误的。汇编语言之所以称之为低级语言,是因为其更加贴近于硬件。在编程时一定要明确的在代码中描述清楚,数据如何从一个存储单元送入另一个单元,因此显得编程复杂,由于其直接和硬件打交道,所以被称为低级语言。但是其运行效率却是最高的。所以在C语言程序设计上要有质的飞越,有必要了解汇编语言的编程思路和理念。有条件的话可以将C语言和汇编语言混合编程,从而发挥出两类编程语言各自的优点,达到设计程序的最优化。

在进行C语言和汇编语言的混合编程时,无论是采用C语言调用汇编,还是汇编调用C语言,还是C语言嵌入汇编的方式,都应该对调用关系、各模块的连接以及参数的传递进行妥善的处理。对于调用关系,则需要对调用的函数和过程进行说明;通过明确函数和变量的命名以及存储模式的关联性,从而实现各模块的有效连接;通常情况下往往通过堆栈的方式来实现参数的传递。

3.2 C语言在工程上的应用

C语言在电力电气系统、交通控制系统以及机器人控制方面都有广泛的应用。下面以工厂通风控制系统的C语言程序设计为例来加深对C语言软件编程思想的理解。

工厂通风控制程序的设计时采用模块化得设计思想,即单独的编写初始化函数void Initial(void);中断处理函数void**(void)interrupt;数据采集函数unsigned char ADconvert(unsigned char address)以及其它函数等。然后由主程序负责对各个子函数的调用,从而实现对工厂通风系统的控制。简化的主程序如下:

main( ){ ... Initial(void);

while(l){ReadAi( );ADconvert(unsignedchar address);

DataChange( ); DisPlay( ); …}

整个系统由于需要不停的对工厂数据进行采集,所有主程序的结构就设置成了循环结构,当通风控制系统有序的进行准备工作之后,通过调用初始化函数,程序就开始进入主循环,主循环中通过调用采集程序,完成对测量对象的循环检测以及对显示程序,数据处理函数的循环调用。一遍又一遍的不停循环执行主程序。在这个主程序循环的过程中,如果有异常情况发生,则随着中断触发事件的发生,将进入中断响应,实现对中断函数的调用。

4 总结

C语言作为编程语言中经典的一类程序设计语言,因其结构化、可移植化、编程简介的特点,被广泛的应用国民生产的各个领域。而随着信息技术、互联网技术以及物联网技术的飞速发展,未来C语言的应用领域将变得更加广泛。对C语言在软件编程方面的研究和分析将变得更有意义。

参考文献

[1]顾泰龙,李远静.基于C语言的计算机软件编程实验研究[J].软件工程师,2013(08).

[2]李强.计算机软件开发语言的选择探讨[J].电子制作,2013(09).

作者单位

第10篇

关键词:C语言;C++语言;程序设计

中图分类号:G642 文献标识码:B

文章编号:1672-5913(2007)14-0022-02

1引言

大学计算机科学专业的程序设计语言课程,一般分为必修和选修两种。C和C++都作为必修课;而VB和Java等一般作为选修课。现在大多数高校计算机科学专业开设程序设计语言课程的顺序都是,先开C语言,再开C++语言。然而,我们在教学实践中发现,学生学习C语言程序设计,接受了“自顶向下,逐步求精”的模块化程序设计思想,在学习C++语言时,对C++语言的特色:类和模板所提供和支持的“自底向上”的面向对象程序设计思想,很难适应、理解、接受和掌握。同时,由于课时的压缩,两门语言都要开设,学时更显不足,致使学生两门语言课程都没有充分的时间学通、学透;更有甚者,正常的教学内容不能完成,学生一知半解、似懂非懂,课程的难点知识没有时间讲和学。这种结果直接影响后续课程(比如,数据结构)的学习;同时学生动手开发软件的能力也将受到影响。

本文在分析比较C和C++程序设计语言异同的基础上,结合多年的教学实践经验,提出在大学计算机科学专业中,直接开设C++程序设计语言,不再开设C语言的观点。并根据作者的教学实践经验,给出直接开设C++时,教学内容、教材选择和开设时间的建议。

2程序设计语言C与C++的比较

2.1C与C++的共性

C++是C的增强版,是在C的基础上增加了数据抽象和面性对象的程序设计这些新特点,很自然C++拥有C语言的基本功能。它支持结构化的程序设计,任何用C写的程序都可以在C++环境下运行。

在C和C++语言中,标识符、变量、常量、基本数据类型、指针、表达式、运算符的优先级等的规定都相同。枚举类型和结构体类型的定义方法也相同。关系和逻辑运算、条件语句、循环语句这些控制流语句的定义和使用也都相同。C和C++中数组的定义和使用相同。函数的定义与调用基本相同,只是C++引入了引用参数。也正是由于引用参数的引入,使得C++的使用比C更方便。关于动、静态变量及其范围的规定在C和C++中相同。因此。可以说,C语言所拥有的功能,C++都有,而且也是C++的基本部分。但是,C++比C具有更强的功能,具有C所没有的特性――数据的抽象和支持面向对象的程序设计。同时,关于枚举变量,结构体变量的声明C++的语法约定更简洁方便。

2.2C与C++的不同

C与C++在程序设计的思想与规模、动态存储管理、文件使用、枚举和结构体类型、输入和输出,以及程序注释等方面存在差异。C++不仅具有C的所有功能,可以实现所有C语言所能实现的功能,而且C++的功能更强大,使用更简洁方便。因此,使用C语言设计程序所能解决的实际问题,使用C++语言设计程序也一定能够解决,而且实现起来更方便。

2.3C++的特色

C++最大的特色是提供了数据的抽象和实现数据抽象类型的机制――类,以及支持面向对象程序设计的封装、继承和多态等特性。由于类的出现,使得C++中的数据类型不再局限于系统所提供的固有类型,用户可以根据自己的实际需要设计创建新的数据类型。同时,由于类的使用,使得数据和操作被封装在具体的类中,实现了信息的隐藏。C++提供了两种构造新类的方法:继承和构成。这两种构造方法使得C++具有面向对象程序设计的特性。C++还提供了虚函数机制,这使得类的操作可以实现动态邦定。C++中的重载机制使得C++的使用更方便快捷和人性化。C++的模板使得C++具有多态特性。另外,C++的异常处理机制使得程序的调试变得容易和方便。还有C++的虚基类,使得它非常适合用来开发面向对象的程序。

C++中的引用类型,使得函数的参数可以采用引用参数,避免了C语言中函数参数的单向值传递所带来的弊端。而且使用起来非常方便。

C++还提供了作用域限定运算符(::),该运算符可用于解决名称冲突。还可用于指定标识符的有效范围,如名称空间中标识符的使用。

标准C++还支持名称空间[3~5],除了系统提供的标准名称空间std外,用户还可以定义自己的名称空间。名称空间的使用给程序设计带来了很大的方便。

C++的上述诸特色,显示了C++不仅能实现C程序设计语言所支持的结构化程序设计,而且还支持面向对象的程序设计。可以开发出更大更复杂的应用软件。

以上C与C++的比较可见,C++的基本部分与C语言基本相同,而且C++的语法相对于C语言的语法更简洁方便易使用。因此,C++完全可代替C来完成程序设计,完全可以在大学计算机科学专业的本科生中直接开设C++程序设计语言课程,而不用先开设C语言,再开C++。这样,可以将节省出一部分学时分给C++课程,使得C++的学时更充足些,学生也掌握地更好些。

3程序设计语言C与C++开设建议

通过以上的分析比较,可见在高校计算机科学专业程序设计语言课程的开设中,可以不用开设C程序设计语言,而直接开设C++语言程序设计。

C++的教学内容应该包括:基本知识部分:程序设计与问题解决概述;C++语法、语义以及程序开发过程;数值类型、表达式与输出;程序输入与软件设计过程;条件、逻辑表达式与选择控制;循环;函数;作用域和生命期;高级控制结构;固有数据类型和用户定义的简单数据类型。C++高级知识部分:结构体、数据抽象和类;数组;基于数组的表;面向对象的软件开发;指针、动态数据和引用类型;链结构;模板与异常;递归。

C++课程开设时间放在一年级第二学期比较适宜。因为学生在第一学期已经学习了一些关于计算机的入门知识,对计算机科学有了一定的了解,这时开设C++程序设计语言,学生接受起来比较自然。而且直接学习C++语言,没有别的计算机语言的影响,学习起来更易于接受。C++的课时建议为周学时4,以保证学生有足够的学习、吸收和消化知识的时间。另外,这个学期开设C++可为学生后续专业课程(如,数据结构)的学习做铺垫。更重要的是作为计算机科学专业的本科生,在当前的形势下掌握C++这一通用的编成语言,不仅为将来的发展奠定良好基础;也为今后参与社会竞争打下坚实基础。

以上观点的有效实施依赖于C++程序设计语言教材的选择。在选择教材时,必须选择适宜作为入门语言学习的C++教材。在此建议采用参考文献[3]中的教材――美国Jones and Bartlett Publishers出版的原版教材“Programming and Problem Solving with C++ (Third Edition/Fourth Edition)”。该教材知识讲述逻辑性强,内容安排循序渐进,讲解非常透彻清晰,是国内许多中文教材无法媲美的;而且没有任何先驱课程要求,学生学习起来很容易理解和接受,该教材是美国大学计算机及相关专业程序设计语言的入门教材,是美国最畅销的计算机科学教材,也是教育部推荐使用的计算机专业类影印版教材。作者在过去4年中使用该教材对计算机科学专业的学生讲授C++程序设计(双语教学)。4年以前作者曾多次讲授C语言程序设计。结合多年的教学实践,作者提出在大学计算机专业的程序设计语言课程设置中,直接开设C++程序设计语言的观点。关于教材的选择,也可选用其他一些翻译过来的国外优秀教材,如参参考文献[5]中的《C++大学教程》(第五版),该书是针对一学期的课程设置的,英文版在国外也是作为计算机专业的大学一年级教材;或者考文献[4]中的《C++核心思想》。作者的经验是最好选用国外原版教材,而且以参考文献[3]为最好。

参考文献:

[1] 谭浩强. C程序设计(第二版)[M]. 北京: 清华大学出版社, 1997.

[2] 龚杰民, 金益民, 殷勇. 标准C语言程序设计及应用[M]. 西安电子科技大学出版, 1995.

[3] Nell Dale, Chip Weems, Mark Heading. Programming and Problem Solving with C++(Third Edition)[M]. 美国: Jones and Bartlett Publishers, 2003.

[4] [美]Cay Horstmann著, 晏海华等译. C++核心思想(第三版)[M]. 北京: 电子工业出版社, 2004.

[5] [美]戴特尔等著, 张引等译. C++大学教程(第五版)[M]. 北京: 电子工业出版社. 2006.

作者简介:谢娟英(1971-),女,陕西西安人,副教授,主要从事智能信息处理方面的应用研究。

通信地址:陕西师范大学98# 邮编710062

Tel: 029-85307830(home),13088965815

第11篇

关键词:研究;计算机编程思想;结构化程序设计思想;面向对象的程序设计思想;AOP编程思想

中图分类号:TP3文献标识码:A文章编号:1007-9599 (2012) 05-0000-02

随着经济社会的发展,信息技术也迎来了前所未有的快速发展,计算机编程的应用范围也愈加广泛。而其中的编程思想,作为一个主要条件,可以使编程人员编出更好的程序,本文分析了目前编程界最为主流的两种计算机编程思想,同时和将要兴起的新技术AOP,与OOP相比,其影响力巨大。因此,本文分析了其编程思想以及优越性,还阐述了开发步骤。

一、计算机编程思想研究

(一)结构化程序设计

对于结构化编程思想,其为面对繁杂任务的时候,防止混乱的一种编程思想,重视将程序结构进行规范化,要按照大脑极易理解的方式,合理组织繁杂问题的求解过程。针对此编程思想,编程者应该遵循结构形式,进行程序的设计及编写,保证程序的正确结构,方便地进行程序正确性的证明,该思想重点有以下几点内容:

运用由顶往下逐渐细化的方法。因为结构化编程运用了功能抽象与模块分解,其能合理地把繁杂程序任务分解为容易处理及控制的一些子任务,随后实施级别更细的任务分类,保证最终分出的子任务均是进行独立编程的子程序模块。随后根据某些调用以及结构关系,将子程序模块进行合理组织,最终得出需要的程序。根据结构化程序设计思想,得出的程序具有如下好处:很好的结构、每个模块之间有着简单清楚的关系、在各个模块内,均有基本单元构成。因此,得出的程序清楚易读,良好的可理解性,正确性还易验证,维护、调试以及修改容易进行。出现了结构化编程思想,使之前软件开发存在的混乱状况消除,编程人员编写的程序存在优越的结构。还因为运用“自顶向下以及逐步细化”的方法,使人们智力合理地组织起来,对软件工程化研发是有益的。所以程序维护以及设计工作效率得以提升。

若干基本结构构成程序,对于任意的大型程序,均包括三种基本结构,这些基本结构使某个结构化的程序得以顺序地组成。主要有顺序、选择以及循环结构这三种基本结构。软件界的具体实践以及结构化定理已证明,对于任意繁杂问题的程序设计,均可运用顺序结构、选择结构以及循环结构构成,同时还具备下面一些特征:仅一个入口及出口;在结构内,没有死循环,在程序内,以上三种基本结构的顺序执行关系得以构成。

根据功能,能把大型程序划分为若干基本功能模块。一些子模块一起构成各个模块,每个模块在功能方面互相独立,各个功能模块均有进行计算机控制以及数据处理的功能。尽量使模块间的联系简洁。最终将模块根据某些层次关系,实施组织,繁杂程序的功能得以构成。

(二)面向对象的程序设计

针对面向对象的程序设计,其编程思想是运用消息、对象、类、继承以及封装等这些基本概念,实施程序设计。为使结构化程序设计方法处理不了的代码重用这些问题得以解决,便给出了面向对象程序设计技术,面向对象的程序设计编程思想包括如下特点:面向对象的特点之一就是封装,其为类与对象概念的重要特征。封装给模块带来了比较良好的独立性,程序修改与维护起来较为简单。抽象包括数据与过程抽象。继承性使软件的可重用性这个问题得到良好处理。多态性使应用程序函数的同名这类问题得到良好解决。

面向对象的编程思想存在很多优越性,其减少了程序开发时间,提升了可靠性,开发出来的程序更有强壮性,维护起来更容易。面向对象编程因为具有较高的可重用性,针对应用程序,能积极运用成熟的类库,进而使软件开发效率得以极大提高,所以,软件界对这种面向对象的编程思想进行提倡运用。日益增多的编程人员认可并运用了面向对象的编程思想,同时结构化编程思想在进行具有比较强功能性的软件设计里,其指导作用仍然得以发挥。实际上,以上两种编程思想没有互相隔离,却是相互支持、联系的。在如今的软件界,进行面向对象程序设计的时候,具有公认的编程公式:其一为对象=算法十数据结构,其二为程序=对象+对象,通过公式,能观察出以上两种编程思想的关系及区别。进行面向对象的程序设计时候,仍然不能脱离完成算法的结构化程序设计,其中的结构化程序设计还是编写对象进行操作的重要所在。

二、AOP编程思想研究

(一)AOP将系统视为关注点

其实它为GOF(Observer Design Pattern)设计模式的一种持续,进行了被调用者与调用者间解耦的强调,给开发人员带来进行横切关注点-Crosscutting Concern描述的合理机制,还可以把横切关注点主动地织入-weaving于面向对象的软件系统内,确保横切关注点模块化得以实现,进行方面-Aspect代码的合理划分,横切关注点显得极易进行处理。开发人员进行编译的时候,插入、更改或者除去系统的方面,更可能重用系统的方面。由于开发环境各不相同,关于概念也会有所不同。

(二)针对的问题

AOP通常基于进行业务处理中的切面实施提取,进行处理的时候,其面对着其中的一个步骤或者哪个环节,以确保整个逻辑中每个部分间低耦合性产生的隔离作用。针对动词方面,其重视的为横向的,即为整个逻辑中一个方面或者某个片段,例如:权限以及日志管理,一般情况下,其进行某些软件系统自身东西的关注。并非面向对象进行业务逻辑的关注。运用有效松散方式,使系统间的耦合度这些问题减少,方面即为它的模块化单位。

(三)软件性能

1.代码扩展性

对于AOP,因为方面模块并不了解横切关注点,因此极易进行新方面的增加,并投入新功能。同时,把新的模块加到系统中的时候,已经存在的方面会自动横切进入,确保系统容易扩展。

2.代码冗余度

运用最小的耦合进行各个关注点的有效处理,保证虽然为横切关注点,还是模块化。如此实现的系统,它的代码冗余不大。进行模块化实现,促使系统的维护与理解更为容易。

3.代码重用性

AOP将各个方面变成为独立模块,在模块间,其为松散耦合。能使用其它独立的日志写入器取代此时的,进而将日志合理地写入数据库中,保证与各种日志写入要求相符。正确实现松散耦合,经常象征着代码重用性更为良好。

(四)AOP的开发程序

基于面向对象编程-OOP这种方法,AOP才得以改进,其为具有创新性的一种软件开发方法。一般具有如下的几个开发程序:

1.方面分解

进行分解,要得出横切关注点。在这个步骤中,将系统级的横切关注点与核心模块级关注点进行合理分离。

2.关注点实现

进行关注点的独立实现,将各个需求映射成为代码,编译器随后将其翻译成为一些可执行代码。能依靠另外的编程范型,把其当作前提,确保基础范型具有的优势还得以保留。比如:AOP能利用OOP当作基础范型,直接地将OOP擅长处理普通关注点的优势引用来。利用如此的实现,一般的独立关注点能利用OOP技术,其和过程型语言为很多OOP语言的基础相似。关注点实现因为按照指定过程这一形式产生,能运用C、C++或者Java这些传统语言。

3.方面的重新组合

在此步骤中,方面集成器进行某个模块单元的建立,也就是方面,进行重组标准的指定,常把重组过程称为结合或者织入,运用合适的信息进行最终系统的组建。

AOP实现能够运用许多方式进行织入的实现,进行源码至源码的变换,进行各方面源码的预处理,织入过的源码得以出现,再将织入过的源码传到编译器,最终可执行代码得以生成。运用此方式,基于Java的一个AOP实现,能将很多方面变换为Java源代码,随后通过Java编译器,将其变换为字节码,还能处于字节码级别进行织入的执行,实际上,字节码自身也为一种源码。同时,对于底层中的执行系统Java虚拟机,还能设计成为对AOP支持。基于Java的AOP实现要是运用此方式,能在虚拟机中,把织入规则载入,随后就之后载入的类均利用此规则,实际上,其能进行just-in-time方面织入的执行。

三、总结

由于编程实践的一直开展,编程思想就会产生,产生的各种新编程思想,均对编程实践进行合理指导,且均使计算机软件开发的质量与速度得以提升。在当今,AOP实现与语法尚未进行完全规范,其为基于OOP以后的编程思想的一种创新,其能选用OOP当作基础范型,具有让人无法抗拒的好处,业界会进行认可、接受,但是还要更深刻地探究其中存在的问题。

参考文献:

[1]李明.C++程序设计[M].北京:中央广播电视大学出版社,2008:l96-198

第12篇

在高等学校的本科教育中,“C语言程序设计”几乎成了所有专业的必开课程,从计算机科学与技术、软件工程、网络工程等相关专业,到电子信息类理工科各专业,乃至理工科院校的所有非计算机专业,有的是专业基础课,有的是公共必修基础课,有的是“非计算机专业的计算机基础课”。只是课程名稍有差异,常见的有“C语言程序设计”、“高级语言程序设计”、“C语言”、“C程序设计”、“结构化程序设计”等。无论叫什么样的课程名,也无论是哪类专业,其课程的教学要求和教材选用却无太大差别,只是课时分配差异较大。

从网络调查的16所不同类型高校的“C语言程序设计”教学大纲看,普遍都包含“通过本课程的学习,使学生了解有关程序设计的基本概念、术语及C语言的特点,掌握C语言基本数据类型、语法规则、程序控制结构、常用的标准库函数,培养学生的程序设计技能,初步积累编程经验”的教学基本要求;约百分之八十左右的“C语言程序设计”课程都选用由谭浩强主编、清华大学出版社出版的“C程序设计”作为主教材;课时分配从30~108课时不等,其中80课时以上的多为应用型本科院校的计算机相关专业以及综合性大学的非计算机专业,理论课时与实验课时的比例一般为1:1到1:1.2。与此同时,其他专业基础课(如计算机组成原理、操作系统、数据结构等)的课时一般为54课时,最多不超过72学时。相比之下,“C语言程序设计”所占课时是其他专业基础课的1.5倍至2倍。

从教学目的看,非计算机专业的“C语言程序设计”课程主要目的是“掌握语法规则和程序结构,具备一定的程序设计能力”,而计算机相关专业的“C语言程序设计”课的教学目的则要分为三个层次,一是使学生全面理解计算机程序设计语言的基本内容和结构;二是通过算法掌握程序设计的基本方法和步骤,并具备一定的程序设计能力;三是为后续课程的算法描述和其他程序设计语言的学习奠定基础。

二﹑教学误区

从以上的教学现状(特别是课时分配)看,长期以来,“C语言程序设计”的课程教学存在“教学内容背离教学要求和教学目的”的误区,主要表现在教材误区、讲授误区和考核误区三个方面。

(一)教材误区

国内高校的“C语言程序设计”课大多选用谭浩强主编、清华大学出版社出版的“C程序设计”[1]为主教材,目前使用的是2005年7月修订出版的第三版,教材共363页,主体内容分为14章,其中,第3章的数据类型与表达式占用30页,第4章的格式输入输出占用12页,前9章共占用218页,后5章共占用145页。占用如此大篇幅的原因是教材中除了介绍相关语法格式外,还增加了相当多“特殊格式”和“特殊情况”的解释和说明,因此,该教材的最大优点就是“内容详尽、解释清晰”。

然而,对于初学者来说,学习计算机程序设计语言就是为了“为计算机描述求解问题的过程”,过于详细但又远离现实问题的“特殊格式”和“特殊情况”的解释,使得学习内容复杂化,增加了程序设计语言学习的难度,误导了学习者的学习重点,由此也赋予了该教材无法掩饰的缺点,那就是教材编写的指导思想和教材内容的组织脱离了高校各专业“C语言程序设计”课程的教学目标,过分强调语法细节而忽略了程序设计语言的“正向表达能力”的应用,过分强调“语言的灵活性”而导致教材主体内容的“复杂化”,从而误导“C语言程序设计”课程的教学内容朝着“重语法学习、轻算法描述”的“语言研究”方向发展。

(二)讲授误区

由于教材内容的“复杂”,课堂讲授自然需要较多课时,教学重点当然也放在了“语法研究”上。从网上下载的“C程序设计(第三版)”的配套教学课件以及有关院校的“C语言程序设计”教学课件的内容组织上可以清楚的给出以上判断。“语法研究”型的课堂讲授,更加放大了教材对“C语言程序设计”课程内容的“扭曲”程度,给学生提供了错误的程序设计语言学习方法,把简单问题复杂化,更为严重的是,挫伤了学生学习计算机程序设计语言的兴趣和积极性,把本应“主动学习”的课程成引入了“被动学习”的歧途,直接导致“懂语法、会做题,但不会编程序”的教学后果。

(三)考核误区