时间:2023-11-25 09:29:48
序论:好文章的创作是一个不断探索和完善的过程,我们为您推荐十篇程序设计的基本结构范例,希望它们能助您一臂之力,提升您的阅读品质,带来更深刻的阅读感受。
计算机科学是一种创造性思维活动,其教育必须面向设计。计算机的本质是“程序的机器”, 只有懂得程序设计,才能懂得计算机,真正了解计算机是怎样工作的。培养学生程序设计能力对计算机专业的学生来说不仅是培养职业技能的需要,也是培养大学生创造性思维的重要途径。学习程序设计语言可以培养学生运用算法来解决实际问题的能力,这种解决问题的方式是计算机所独有的,也只有通过对计算机的程序设计语言和程序设计方法的学习才有可能获得这种解决问题的能力。
1 程序设计在计算机学科中的地位
程序设计是利用某种计算机语言,编制完成某一特定功能的程序的过程,是涉及描述、开发及有效实现求解的一系列活动,是利用计算机实现自动化的重要手段。
计算机学科主要是系统地研究信息描述和变换的算法过程,包括它们的理论、分析、设计、效率、实现和应用。可以这样说,一切算法的基本问题是“什么能被自动化”以及“如何有效地自动化”。这个自动化的过程就是程序设计的过程。
程序设计语言是人们学习计算机的最基本的工具,也是人们学习计算机基础与应用知识的基本课程。通过学习,使学生掌握程序设计的基本概念、基本知识和基本方法,养成良好的程序设计风格,得到一定的程序设计训练,具备初步编写程序解决实际问题的能力。程序设计也正是有形表达抽象思维的方法,在程序设计过程中贯穿阅读判断、分析思考、工具利用、抽象表达、综合创造等多项技能,是理论、抽象、设计和应用的综合能力培养过程。因此程序设计是计算机学科教学的重要内容之一,对计算机专业人才素质的培养至关重要。
2 程序设计的知识和能力构成
根据循序渐进的原则,与程序设计有关的教学内容主要有:计算机基础知识和操作、程序设计语言和基本的程序设计方法、最基本的数据结构及其基本算法、常用的算法设计方法等。在学习这些知识的同时,必须与能力的训练有机地结合起来。程序设计能力表现在以下几个方面:
1)自然语言能力。要有较强的运用自然语言描述现实事物的能力,只有运用背景知识正确且清晰地陈述问题及其求解目标,才能确定程序的功能。
2)数学描述能力。程序设计是为了告诉计算机做什么和如何做。这就需要利用定义、定理、公式、函数等数学工具把问题形式化,建立数学模型。
3)数据结构设计能力。选择合理的存储结构,在计算机中表示数学模型,是程序设计的一个重要方面。
4)算法构造能力。好的程序由精心构造的、好的算法构成。给出问题求解的离散化计算过程,是程序设计中最具有创造性的工作。
5)程序编码能力。用某种程序设计语言表达算法,尽管这种能力往往被认为技术含量不高,但也需要对程序设计语言的熟练掌握和对算法设计的深刻理解。
6)程序调试能力。程序调试能力是一种专业综合技能,需要对程序设计语言和程序结构有深刻的理解,需要熟练的操作技能,需要会设置测试数据和设置程序断点,这些都有待于学生在实践中逐步积累经验。
可以说,程序设计能力的高低很大程度上反映在驾驭自然语言、数学语言和计算机语言的能力上。这3种语言是人们毕生有用的3种通用智能工具。前两者是后者的基础,良好的英语和数学训练是学好程序设计语言和培养程序设计能力的重要基础。
3 培养程序设计能力的有效策略
知识的价值在于运用,知识的运用需要技能,而技能的形成则依赖训练。程序设计知识的学习和能力的培养需要各方面的知识基础,它是一个系统的教育训练过程,需要多个教学环节的紧密配合才能完成。
1)明确教学要求
程序设计语言课程一般是为应用性教学而设置的,因此,课程的教学不仅仅是传授知识,而且应该强调应用性,应该以培养学生的能力为主。程序设计语言的内容比较丰富,在教学中如果面面俱到,必会耗费较多课时,而且教学效果不一定好。因为过分强调程序设计语言的系统性和完整性就可能会转移学生对课程重点的注意力,关键在于教会学生如何正确运用程序设计语言编写程序,训练实用编程能力。所以必须突出重点,突出应用性,侧重教思想,即把程序设计语言的基本思想、基本环境、基本概念、基本知识和基本方法教给学生,使他们在学习中对硬件、软件环境、程序设计的基本思想和基本技巧,所学程序设计语言的基本概念和使用方法以及编程技术有一个比较全面的感性认识,从而提高解决实际问题的能力。
2)打好数学基础。严格的数学训练是程序设计能力的基础,学习和加强排列与组合、数列、数学归纳法等离散系统的数学方法对提高程序设计能力尤为重要。问题描述和建立数学模型是程序设计的前奏,数学归纳法、穷举法、构造证明法等证明技巧是算法设计方法的基础。
3)强化英语水平。程序设计语言的符号系统以英语为基础,程序设计文档语言首选英语。英文资料是计算机最新和最大的技术资料来源,英语水平是我国软件产业发展和参与国际竞争的制约因素。
4)重视阅读训练。从某种意义上来说,程序设计是用程序设计语言和方法进行的一种写作。可以想象,如果学生没有阅读过一份完整、规范、有实用价值的标准程序,即使记住了有关语言的语法规则,也不可能写出像样的程序。所以,大量阅读、分析、修改和扩充典型的算法和程序,是提高程序写作能力的有效途径。而这个重要学习环节往往未得到应有的重视,缺乏配套的程序设计阅读分析教材。教师应经常指导学生阅读程序,理解程序,提高学生分析程序的能力。
5)注重算法设计,突出数据结构内容。瑞士科学家、PASCAL语言和MODULA-2语言的发明者沃思(Wirth)教授提出了著名的公式:程序=算法+数据结构。这个公式表达了程序的实质,说明对于一个程序设计问题来讲,算法与程序设计是紧密联系的,绝不能脱离数据结构去讲解算法设计。程序设计语言的教学应该结合数据结构的基本内容。对于同一个计算问题,选用不同的数据结构,其算法大不一样,算法的优劣程度也不同。因此,要教会学生对不同的问题选择合适的数据结构。在整个程序设计课程中,必须强调算法设计方法,通过不断的算法设计训练,使学生切实掌握迭代、枚举、递归、分类等常用算法设计方法。
6)更新教学内容。计算机学科是一门综合性学科,而且程序设计语言的应用领域在不断扩大和发展。因此,在教学中应结合专业的特点和教学的要求,将软件工程的思想方法贯穿于整个教学过程,介绍程序设计语言的最新发展和应用,重视面向对象程序设计方法的引入,搞好教材内容的更新。如图形程序设计、下拉式或弹出式菜单、计算机病毒防治等等。这样不仅能把最新的知识和最新发展动态充实到教学上来,大大丰富了教学内容,而且使学生加深对程序设计语言的理解和掌握,保持对信息技术和专业的兴趣,及时跟上信息技术日新月异的发展趋势,在今后工作中保持领先地位。
7)采用先进教学手段。用传统的课堂教学方法讲授动态的算法和数据结构是十分低效的,像排序、递归等抽象动态的内容讲解就常常是费力不讨好。应该根据课程特点,采用先进的现代教学方法,如直观教学方法:利用挂图、教具等讲解,以及计算机辅助教学(CAI)和计算机辅助学习(Computer Aided Learning,简称CAL)进行教学,通常开发利用与课程内容与教学特点相适应的多媒体课件进行教学。它们是讲解算法和进行程序设计训练的最佳教学平台,既能增加学习的趣味性,又可利用图形的直观性帮助抽象和动态过程的理解。
8)加强实践环节,强化创造性思维能力培养。在教学中,常常听到学生提出这样的问题:“程序设计语言有什么用?”,有的学生还反映:“程序设计语言并不难学,就是不知道如何应用?”一些学生学到了一定的科学知识,但上机动手水平低。这种现象与普遍忽视实践环节有关。为了扭转这一局面,在整个教学过程中,必须强调实践环节的重要性,充分安排上机实践时间,加强系统训练和实践能力的培养,强化创造性思维能力培养。根据课程特点,在教学中,采用案例驱动教学,进行兴趣引导;在实践中,可以精心组织一系列由易到难、由浅入深、配套衔接、结合学科学习、有一定设计技巧的程序设计作业,最后再安排一次综合性强、有一定难度的课程设计实践,对学生进行项目训练,提高学生应用能力。通过上机作业和课程设计的完成,使学生独立思考,各显才干,总结经验,培养他们的动手能力和编程能力,以及分析问题和解决问题的能力。
4 结论
总之,培养学生计算机程序设计能力的方法和途径很多,但是编程序不难,编好程序不易。作为教师,必须从培养学生编程思维的角度出发,按照以上策略认真进行编程知识的教学和技能的培养,加强实践,提高学生科学思维的能力,真正学会程序设计的真本领。
参考文献:
[1] ,王楠.浅谈程序设计语言课程教学方法[J].吉林大学学报(信息科学版),2005(S2).
[2] 徐进华.提高学生程序设计能力的几个措施[J].计算机时代,2005(11).
关键词:C语言;程序设计;教学内容;教学角度
中图分类号:G64 文献标识码:A
1教学现状
在高等学校的本科教育中,“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语言程序设计”课的教学目的则要分为三个层次,一是使学生全面理解计算机程序设计语言的基本内容和结构;二是通过算法掌握程序设计的基本方法和步骤,并具备一定的程序设计能力;三是为后续课程的算法描述和其他程序设计语言的学习奠定基础。
2教学误区
从以上的教学现状(特别是课时分配)看,长期以来,“C语言程序设计”的课程教学存在“教学内容背离教学要求和教学目的”的误区,主要表现在教材误区、讲授误区和考核误区三个方面。
2.1教材误区
国内高校的“C语言程序设计”课大多选用谭浩强主编、清华大学出版社出版的“C程序设计”[1]为主教材,目前使用的是2005年7月修订出版的第三版,教材共363页,主体内容分为14章,其中,第3章的数据类型与表达式占用30页,第4章的格式输入输出占用12页,前9章共占用218页,后5章共占用145页。占用如此大篇幅的原因是教材中除了介绍相关语法格式外,还增加了相当多“特殊格式”和“特殊情况”的解释和说明,因此,该教材的最大优点就是“内容详尽、解释清晰”。然而,对于初学者来说,学习计算机程序设计语言就是为了“为计算机描述求解问题的过程”,过于详细但又远离现实问题的“特殊格式”和“特殊情况”的解释,使得学习内容复杂化,增加了程序设计语言学习的难度,误导了学习者的学习重点,由此也赋予了该教材无法掩饰的缺点,那就是教材编写的指导思想和教材内容的组织脱离了高校各专业“C语言程序设计”课程的教学目标,过分强调语法细节而忽略了程序设计语言的“正向表达能力”的应用,过分强调“语言的灵活性”而导致教材主体内容的“复杂化”,从而误导“C语言程序设计”课程的教学内容朝着“重语法学习、轻算法描述”的“语言研究”方向发展。
2.2讲授误区
由于教材内容的“复杂”,课堂讲授自然需要较多课时,教学重点当然也放在了“语法研究”上。从网上下载的“C程序设计(第三版)”的配套教学课件以及有关院校的“C语言程序设计”教学课件的内容组织上可以清楚的给出以上判断。“语法研究”型的课堂讲授,更加放大了教材对“C语言程序设计”课程内容的“扭曲”程度,给学生提供了错误的程序设计语言学习方法,把简单问题复杂化,更为严重的是,挫伤了学生学习计算机程序设计语言的兴趣和积极性,把本应“主动学习”的课程成引入了“被动学习”的歧途,直接导致“懂语法、会做题,但不会编程序”的教学后果。
2.3考核误区
多年来,“C语言程序设计”的主体考试内容就是“语法”,无论是选择题、填空题还是程序阅读题,大多都无法逃脱“语法”的束缚。考试方式以笔试为主。这在某种程度上肯定了“语言研究”的教学角度,促使“C语言程序设计”的教学重点更向“语法研究”的方向倾斜,最终误入“增加课时,强化语法,还是不会编程序”的怪圈。
3应有的教学角度
按照网上调查的各专业教学大纲中“培养具有一定程序设计能力”的教学目的,“C语言程序设计”课程的教学落脚点应该更确切的理解为培养“能用程序设计语言描述求解问题过程”的一般程序设计者,而不是造就“全面掌握程序设计语言语法、能设计高效、难懂程序”的程序设计语言方面的“作家”。因此,“C语言程序设计”课程教学相当于自然语言中的“基本语言能力”教学,而不是“语言研究”或“高级写作”能力培养。
3.1自然语言与计算机程序设计语言
计算机程序设计语言是用人和计算机都能识别的方式描述计算机求解问题过程的过程描述语言,它具有和人所使用的自然语言相同或相似的组成和结构特点,对于已经掌握了至少一门自然语言(比如汉语或英语)并具备一定文化程度的人来说,学习一种计算机程序设计语言并非难事。自然语言的基本组成包括符号集合、字、词、句、数据及其运算规则等基本要素,学习过程包括认识符号、发音、识字、组词、学语法并造句、学文法并写短文、练习写文章等基本阶段,在具备了基本的语言能力之后,扩充词汇量和提高写作能力将成为终身学习的基本内容。按照自然语言的基本组成和学习过程,也可将计算机程序设计语言的基本组成归纳为字符集、标识符(常量、变量、保留字等)、数据类型、运算符、表达式、语句、程序格式等基本要素,其中,字符集和数据类型是定义程序设计语言的基础,字符按一定规则组成标识符,用来充当常量名、变量名或其他标识,在自然语言中被人们公认的特殊标识符被赋予特定的语言含义,专门为语言系统所用(用户不得再次定义其意义),称为保留字;字符集中的特殊符号(如+、-、*、/)被赋予特定的运算意义(如加、减、乘、除)称为运算符;不同数据类型的常量、变量用运算符按一定规则连接起来组成的式子就构成表达式;将特定的保留字与表达式等语言要素按照语法规则组合起来就形成相应的语句;将语句按照要描述的求解问题的逻辑顺序排列起来,就构成了某种程序设计语言求解特定问题的一段程序。
3.2C语言的特殊性
一方面,C语言是程序设计语言的一种,具备一般程序设计语言的基本组成要素和结构特点。另一方面,C语言能成为面向过程的结构化程序设计语言的代表,也有其自身的特殊性。首先,C语言的数据类型极为丰富。除了基本数据类型外,还有构造类型、指针类型、空类型和用户自定义类型,其中,构造类型包括数组、结构体(struct)、共用体(union)和枚举类型(enum)等四种数据结构。其次,C语言具有位操作能力。除了能够对各类变量进行操作外,C语言还具备“按位”进行逻辑“与”、“或”、“非”、“异或”运算和“左”、“右”移位运算,这使得C语言具备了更强的系统开发能力。第三,C语言具有显著的结构化程序设计能力,并通过完整的函数定义来实现。第四,C语言的最大特点就是“语法限制不严,解释灵活”。第五,C语言允许直接访问物理地址,可直接对硬件端口进行操作。第六,C语言没有输入/输出语句,信息输入/输出功能由标准函数库中相应的I/O函数来完成。
C语言的这些特殊性,决定了C语言的教、学过程不同于其他程序设计语言的教学过程。
3.3C语言的教学角度
根据一般程序设计语言的基本组成与结构特点,结合C语言的特殊性,“C语言程序设计”课程的教学角度应该是:从介绍程序设计语言的基本概念入手,重点介绍语言的“正
向”设计功能而非“特殊格式”或“特殊语法”说明,侧重学生的程序阅读和程序设计能力培养,从教学内容的广度和深度两个方面,恰当把握教学角度。
“C语言程序设计”课程的内容可分为三个基本模块,教学过程从第一个模块切入,逐渐扩展到第二和第三个模块。第一个模块可称为“程序设计语言公共模块”,主要包括程序设计语言的基本概念、程序设计语言的基本要素(字符集、标识符、常量变量以及保留字、基本数据类型、运算符、表达式、语句与控制结构、程序结构以及程序书写规范等)以及输入/输出格式等内容;第二个模块是C语言的主体,主要包括函数、数组、指针、文件等;第三个模块是高级编程内容,主要包括结构体(struct)、共用体(union)、枚举类型(enum)以及用户自定义类型等。
在教学深度方面,各模块的教学重点应放在“规范的语法描述和直观易懂而且正确的语义表述上”,避免涉及各种过细的“不符合人类阅读习惯”的语义描述,暂时避开“特殊格式”或“特殊情况”的纠缠,摆脱“研究语法”的错误向导。在此基础上,第一模块的教学可与自然语言相比对,通过学生已有的自然语言学习经验和语言要素,使学生快速建立程序设计语言的基本概念,正确理解程序设计语言的基本要素及其关系,掌握基本语法和程序基本控制结构(顺序、选择、循环),并通过算法归纳求解问题的过程,正确理解算法不同描述方式(自然语言、传统流程图、N-S流程图、伪代码、程序设计语言)的作用和差异,特别是从“问题”到“程序”的渐进转化过程,从而培养学生的基本程序设计能力。通过第二模块的教学,使学生明确函数、数组、指针、文件等概念和作用,掌握它们的定义和引用方法,能进行相应数据类型的编程,进而掌握用函数定义的结构化模块程序设计的方法;通过第三个模块的教学,将程序的数据处理能力扩展到结构体、共用体、枚举类型以及用户自定义类型等复杂数据类型的处理上来,通过恰当的例子应用这些数据类型,向学生展示C语言强有力的数据表示和处理能力。
另外,可以将C语言中的“语法灵活性”和不同部分的各种“特殊情况”分类总结,归纳整理成“语言参考手册”等形式,以附录的形式提供给学生,以便需要时“备查”。这样既可节省教学课时,又可向学生提供学习语言的主动权。
3.4教学策略和方法
“C语言程序设计”属语言类课程,教学过程充满了逐步完善和熟练的基本特点,因此,从教学安排的策略上要分重点、分阶段逐步进行,每个阶段的教学方法应该采用建立在一定基础上的有重点的“部分教学法”,以核心内容为基础,向外逐渐延伸,部分学习,渐进掌握。尽可能避免不分主次、不论难易、不顾急缓,盲目一次性扫清各类知识点的“地毯式”教授方法或学习方法,同时强调自学和上机验证,强化在特定环境下(如Turbo C++ 3.0)的程序设计训练,做到“精讲多练[2]”,从小程序练起,逐渐过渡到求解较大或实际问题的程序设计上来。
4结束语
从目前的教学现状看,无论是计算机相关专业,还是理工科的电子信息类专业,乃至综合性大学的非计算机专业,“C语言程序设计”的课程教学均占有重要的教学地位,在全面提高教学质量和教学效率的今天,不同类型专业结合自身优势和程序设计语言类课程的特点,选择合适的角度组织和实施“C语言程序设计”课程的教学活动非常重要,而且很有必要。笔者的教学实践证明,避开“语法研究”的程序设计教学不仅可减少课时,更可提高学生利用程序设计语言“表述求解问题过程”的能力。
当前,计算机技术飞速发展,程序设计技术已从结构化程序设计技术向面向对象程序设计技术过渡,对一个规模较大的应用程序,总体框架是由面向对象程序设计构搭而成,而在局部实现时仍需采用结构化程序设计技术。C语言是一种很好的结构化程序设计语言,因此,笔者论述了C中的的结构化程序设计的方法。
结构化程序设计(STRUCTURED PROGRAMING,简称SP)的概念是由荷兰学者E·W.DUKSTRA等人在20世纪60年代后期提出的,是以模块化设计为中心,将原来较为复杂的问题化简为一系列简单模块的设计,也就是将—个大的计算任务划分为一个个比较小的任务,这些小任务均由函数来完成。而函数既可以是C的标准库函数。也可以是自定义函数。在C中,一个具备一定规模的C程序往往是由多个函数组成,其中必有一个名为main的主函数,由main来调用其他函数,必要的话,其他函数还可以调用另外的函数。同一函数可以被一个或多个函数调用一次或多次。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。
结构化程序设计的思想是一个程序的任何逻辑问题,均可用顺序结构、选择结构和循环结构这3种基本结构来描述。顺序结构的程序流程是按语句的书写顺序依次执行;选择结构是对给定条件进行判断,根据判断结果决定执行两分支中的一个分支或多分支中的一个分支;循环结构是在给定条件成立的情况下,反复执行某个程序段。实现这些程序流程的语句都是流程控制语句。流程控制语句在程序设计中起着重要的作用,通过3种基本控制结构使结构化程序具有唯一的人口和出口,没有死循环,而且程序的静态形式与动态执行形式之间具有良好的对应关系。在C语言中,有4种语句是顺序执行的:①空语句,光有一个分号“;”作为语句结束符,它表示什么也不做。②表达式语句,表达式后面加一个分号,表达式语句主要有赋值语句、自加减运算符构成的语句和逗号表达式语句。③函数调用语句,它是由一个函数调用加上一个分号组成的。④复合语句,由“{”和“}”把一些变量说明和语句组合放在一起,又称为语句块。选择语句有if语句和switch语句。循环语句有for,while和do-while语句以及一些辅助流程转向语句如continue,break,goto等。顺序结构,选择结构和循环结构共同作为各种复杂程序的基本构造单元,由这3种结构经过反复嵌套构成的程序称为结构化程序,也就是说,结构化程序是由上述3种基本结构组成的。但如果在编程过程中无限制地使用转移语句(-goto),会使程序的控制流程强制性地向前或向后跳转而导致程序的流程无序可循,结构杂乱无章。结构化构造减少了程序的复杂性,提高了可靠性、可测试性和可维护性,使用少数的基本结构,就可使程序逻辑结构清晰,易读易懂,并且容易验证程序的正确性。对—个初学计算机语言的人来说。最重要的就是要有正确的程序流程概念,不仅要懂得而且要灵活应用。由此可见,用结构化方法设计的结构是清晰的,有利于编写出结构良好的程序。因此。结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。
中图分类号:TP311.12-4
《高级语言程序设计》是计算机相关专业必修的一门专业课[1],在这门课程中,掌握顺序、选择、循环三大结构是学好程序设计的基础,在大多数程序中都会包含选择结构,C语言主要有if和switch两种选择语句[2],其中,if语句的应用更为常见一些,它分为简单分支、双分支和复杂分支。if语句的用法对于有程序设计经验的学生来讲轻而易举,但是对于那些没有编程经验的新生来讲,却很难掌握,因此,在学习语法的同时更要注重学生编程能力的培养。笔者从初学者角度,用案例分析法对if语句进行教学探讨,以便提高教学质量。
1 案例分析法
案例分析法是通过一个具体的教育情景描述,引导学生对这些特殊情景进行讨论的一种教学方法,用于提高学生解决和分析实际问题的能力。
2 案例分析法在教学中的应用举例
2.1 案例选择
用if语句评定和输出某个或多个学生的成绩等级,是选择结构的典型应用之一。对于这一类型的题目,解题的关键在于让学生用一个嵌套的if语句来表示一个分段函数。
若用Xi表示凯里学院信12计专班中第i个学生ai的数据结构考试成绩,用Y表示其等级,第i个学生ai的成绩Xi与等级Y之间存在下面的数学关系[3]:
3 结束语
针对上面案例中出现的情况,笔者运用事前分析估算的方法来提高程序的执行效率,这是编程者需要考虑的问题,也是程序设计的基本要求,教学时教师可提醒学生检验一下是否依据最好的策略进行编程,使学生更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,教师在授课过程中要注意向学生灌输这种思想,为后续课程的进一步学习和高级编程打基础。
参考文献:
[1]蒋然.高职院校《C语言程序设计》教学改革探讨[J].福建电脑,2010(10):206.
[2]谭浩强.C语言程序设计(第四版)[M].北京:清华大学出版社,2010.
[3]宋兰霞.《数据结构》教学方法探讨[J].电脑知识与技术,2013(14).
中图分类号:G642 文献标识码:A 文章编号:1672-3791(2012)02(c)-0000-00
1 概述
计算机程序设计语言,通常简称为编程语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。
当今计算机程序设计语言种类繁多、共性大、更新速度快,同时软件工程和项目管理的蓬勃发展使得计算机软件开发从业人员的职业分工更为明确。从人力资源与社会保障部颁布的“计算机程序设计员国家职业标准”上看,除了要求从业者必须要有扎实的基本功外,还要具备解决问题的综合能力。因此计算机程序设计员专业的学生在计算机程序设计语言的知识和技能的学习中,不能再仅仅孤立地教授几门编程语言、几门相关的专业课程而已,而是要教会学生掌握通过计算机程序设计来解决实际问题的知识和技能,成为一名合格的“软件蓝领”。这就要求我们不能延续传统的学历教育方法,计算机程序设计语言教学需要改革,需要一种全新的教学理念和模式。
当前的教学改革更多的体现在教学方法和内容上,“学习领域”、“任务驱动”、“职业岗位导向”、“面向工作”等各种课程设计方法层出不穷。然而,纵观大部分课程改革,我们发现其教学改革更多体现在独立的课程中,并没有在课程与课程的衔接上下功夫。大部分院校均先后开设VB、C、C++、JAVA等多门程序设计语言和数据结构、数据库管理系统等专业课程,学生虽然学习了多门程序设计语言,然而每一门语言都只学了皮毛,每一门课程都学了基础,只能完成课堂和课后的作业和练习,而对于能解决什么问题,怎么解决问题,如何综合解决问题一筹莫展,碰到问题时往往觉得无从下手。
2 程序设计语言教学探索与改革:C语言学习三部曲
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点,同时很多新型的语言都是衍生自C语言,,掌握了C语言,经过简单的再学习,就可以用其他新型的语言去进行程序开发了。因此,在计算机专业的课程中,只要把C语言学扎实了、学透了,就可以说掌握了计算机程序设计语言的精粹。在课程设计中,我们以C语言为主线,以一脉相承的C语言、C++语言、C#语言为基本知识内容,配合上数据结构、UML、数据库等相关知识点,提出语言知识入门、语言能力提高、语言技能应用三个阶段和应用层次的“C语言学习三部曲”的课程改革方案。
第一阶段:语言知识入门――C语言与数据结构整合
1、课程知识要求:
1) 掌握C语言的基本语法,如数据类型,3种语句结构,数组,指针等。
2) 掌握数据基本结构形式和操作,如线性结构,树形结构,图形结构,以及数据结点的查找、添加、删除、排序等操作。
3) 掌握“自顶先下、逐步细化”的结构化程序设计方法。
2、课程技能要求:
掌握如何用计算机解决日常问题,特别是数据的表现形式和动作行为的表现形式。
3、课程设计要点:
将C语言和数据结构进行有机整合,特别是在讲解C语言的数据类型时溶入数据结构知识,在讲解C语言的语法结构时溶入数据结构的数据操作知识。
4、课程目的:
通过该课程的学习,要求学生掌握基本程序设计思想和理论,学会数据及数据处理由现实世界向计算机世界的转换方法和过程,学会用计算机程序设计语言描述和解决日常生活中问题。
第二阶段:语言能力提高――C++语言与UML工具整合
1、课程知识要求:
1) 掌握C++语言的高级语法知识以及面向对象的概念和形式,如面向对象的三大特征:封装、继承、多态,以及模板等概念。
2) 掌握UML知识,掌握利用UML工具(如ROSE)来进行面向对象的分析和建模的方法和过程。
3) 掌握以“抽象与分类”为关键的面向对象的程序设计方法。
2、课程技能要求:
掌握如何用计算机解决日常问题,特别是以面向对象的方法来分析和解决问题。该课程要求学生在第一阶段掌握了结构化的设计方法后,进一步了解面向对象程序设计方法。
3、课程设计要点:
把C++语言和UML进行有机的整合。将UML作为面向对象程序设计的分析和设计的工具,而将C++语言作为进行面向对象程序设计的编程和实现工具。
4、课程目的:
通过该课程的学习,要求学生掌握面向对象理论,学会面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)方法和工具。
第三阶段:语言技能应用――C#语言与数据库操作整合
1、课程知识要求:
1) 掌握C#语言的高级语法知识和软件架构知识,如集合、委托、托管、、C/S与B/S架构开发方法等。
2) 掌握数据库操作知识,如SQL语法、、XML等。
2、课程技能要求:
掌握多层架构的数据库应用系统开发方法。,该课程要求学生在复习第二阶段的面向对象的设计方法后,掌握开发.Net应用系统的方法,掌握将数据存储在数据库中的方法,以及掌握对数据库进行查询、添加、删除等操作的方法和步骤。
3、课程设计要点:
将C#语言与数据库操作知识进行有机整合,在讲解用C#语言开发基于.Net的多层架构应用系统中,通过讲解与LINQ将SQL溶入C#语言。
4、课程目的:
通过该课程的学习,要求学生掌握C#语言和数据库操作,掌握通用的企业级应用系统的开发方法和过程。
3 结语
教育部部长周济在2008年度职业教育会议上说到:“以改革创新为强大动力,推动职业教育又好又快发展”。职业教育的生存和发展,离不开教学改革和创新。在进行计算机程序设计语言教学探索与研究中,我们通过走进企业,与企业软件开发人员的进行密切联系与沟通,了解市场发展与需求等一系列调研后,提出了改革方案并付诸实施。实践证明我们的改革思路是正确的,课程改革是卓有成效的。
参考文献
引言
全国计算机等级考试(National Computer Rank Examination,简称NCRE),1994年由教育部考试中心开始主办,至今已有20多年,是最早面向全社会的国家级计算机应用能力考试机制,是经国家教育部批准,面向全国的非学历教育的证书考试,专门用于考查应试人员的计算机应用理论知识水平及实际操作能力。以应用能力为主,并进行等级划分,分类别、级别进行考核,可提供最具权威性的资质证明。由于它具有客观、公平、公正的考核标准,因此现已成为全国最具权威性和影响力的一种证书,在全社会得到广泛认同。
目前,全国各高校理工科新生的计算机课程,基本上第一期是计算机基础,第二期是C语言程序设计。很多普通高校要求理工科学生参加全国计算机二级考试,并将计算机二级证、英语四级证与学位证挂钩,像我校理工科学生如果没有获得计算机二级和英语四级这两个证,毕业时就很难获得学位证,所以计算机二级考试对理工科学生来说是一门重要的考试,所有理工科学生都要重视。从2013年下半年起,二级C采用无纸化考试,时量120分钟,考试内容除了C语言知识外,还包括计算机公共基础知识,其中公共基础知识又包含基本数据结构与算法、程序设计基础、软件工程基础、数据库设计基础等四方面内容。考试内容以选择题形式出现,共10分,占10%。虽然只有10分,但对于那些想考高分(90分以上优秀)的同学来说,这些内容是非常重要的。由于内容繁多,课时有限,有必要严格按照考试大纲进行相应的教学改革。
1.基本数据结构与算法部分教学分析
基本要求:掌握算法的基本概念、基本数据结构及操作、基本排序与查找算法等。
算法部分教学重点主要在于使学生了解算法的基本概念。首先介绍算法是解决某个特定问题的有限步骤的描述;介绍算法的控制结构可分为顺序、选择和重复三种;采用用程序流程图形式、N-S结构化流程图及算法描述语言等其他描述方式进行描述;向学生讲解流程图时穿插算法的特性介绍;说明即使是同一个问题,由于算法不同,效率可能有很大区别,从而进一步引出算法时间、空间复杂度。对于数据结构,教学重点是让学生掌握数据的逻辑结构、存储结构及数据运算。掌握像线性表、堆栈和队列等线性逻辑结构及树、图非线性逻辑结构;掌握数据的顺序存储结构与链式存储结构的优缺点。展示其在不同存储方式下进行查找、排序、插入与删除操作的灵活性,从而使学生掌握这两种不同存储方式的区别,了解二叉树的不同遍历方式。通过历年试题分析,算法与数据结构部分在等级考试公共基础知识考题中约占50%,因此,教师应侧重对这部分内容进行详细讲解。
2.程序设计基础部分教学分析
基本要求:掌握逐步求精的结构化程序设计方法,了解面向对象程序设计中的对象、方法、属性等概念。
程序设计方法是程序设计基础部分的重点,概念是该部分考核的主要内容,考点份额较小。相对于专业学生,非计算机专业的学生完全理解面向对象程序设计方法中的很多概念比较困难,因而,对这些知识只能要求学生加强记忆。教师只需对所有概念进行相应总结和归纳,无需过多深入探讨,以免学生愈加迷惑,效果反而适得其反。结构化程序设计中的三种基本程序结构(顺序、选择、循环)和程序设计基本原则(自顶向下、逐步求精、模块化、限制使用goto语句);模块化程序设计原则(高内聚、低耦合);面向对象程序设计方法中的基本概念(如:对象、属性、类、方法、封装、继承、多态性)等在考试中经常出现,教师在讲解时应强调概念。
3.软件工程基础部分教学分析
基本要求:了解软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。
该部分内容相对抽象,考点比较多,因此历年考试中多是考生失分较多的地方。考点主要包括:软件工程的基本概念和目的;软件工程的三个要素(包括方法、工具和过程);软件生命周期阶段(包括可行性研究、需求分析、软件设计、编码、测试、运行维护)及各个阶段的目标及文档设计、工具、方法(例如:软件测试方法包括白盒测试和黑盒测试)和步骤(例如:软件测试步骤为单元测试、组装测试、确认测试和系统测试等)。根据计算机等级考试题库统计,以上知识点在考试中的出现频率较高,所以教师应重点讲解。
4.数据库设计基础部分教学
基本要求:掌握数据库基本知识,了解关系数据库的设计。
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. 结束语
此方法较以前的教学学法有了很好的改进,对于循环问题学生不再有畏惧感,也为以后数组及其他知识的学生打下了基础。
如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,总结出程序设计中每一种程序设计结构的本质及适合解决的问题,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。
参考文献:
中图分类号: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.
【关键词】
数据结构;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这一学术交流平台在展示自己能力的同时可以学到很多东西,激发了学生的学习热情和潜力。
【参考文献】
一、面向对象设计方法
软件设计有两种主流设计方法:以结构化程序设计为基础的结构化软件设计和由面向对象设计方法导出的面向对象的软件设计, 20世纪70年代末到80年代初的结构化设计方法即传统设计方法,以区别于后来兴起的面向对象的设计方法。在软件设计周期中,面向对象设计方法是一种全新的设计和构造软件的方法,它使计算机解决问题的方式更符合人类的解决问题的思维方式,更能直接的描述客观世界,同时也可以增加的代码的可重用性,是目前和未来软件开发的方向[1]。
面向对象设计在整个软件设计中占据着非常重要的部分,面向对象设计也是将分析阶段所建立的分析模型转变为软件设计模型,但是面向对象分析和面向对象设计之间没有明显的界限,面向对象的方法是基于抽象、信息隐藏、功能独立和模块化等重要软件设计概念基础上的,现阶段的软件设计基本上都运用了面向对象的设计方法[2]。面向对象的开发支持鼓励软件实践中的信息隐藏,数据抽象和封装,可以对单独对一个对象内部进行隔离修改,那么就使得运用面向对象开发的软件更容易修改、扩充和维护[1]。
对象和类是面向对象程序设计的基石,其基本的机制便是方法和消息。消息是要求某个对象执行类中某个操作的规格说明;方法就是对象执行的操作。面向对象程序设计三个重要特征:封装性,继承性和多态性。
(一)对象(Object)和类(Clasess)
对象即指现实生活中无所不在、各种各样的实体,它可以使具体的事物,也可以是抽象的实体[2]。从对象的构成和内容来看,设计程序时使用对象有以下优点:对象是对物体的直接抽象,这种抽象简化了实际物体的模型,同时以一种可以操作的形式将实体表达出来。进行了数据的封装后,掩蔽了实现的复杂性,对于用户使用起来就更加方便。
在现实生活中,具有相似性质,执行相同操作的对象,称为同一类对象,即类是同一种对象的集合与抽象[2]。例如,在Visual Basic中窗体都是Form类的实体,一个单独的窗体也是一个类。
(二)数据封装(Data Encapsulation)
数据封装是类的一个重要特性。数据封装是把数据和相关的操作设在一个包中,那么程序不能直接访问对象中的变量,只有通过对象的方法才能作用于数据。
(三)继承(Inheritance)
我们首先在对象的基础上创建对象,新的对象就会继承原先对象的所有属性和特点,同时根据实际情况也可以选择和修改父对象的属性和功能,这就叫做继承。利用这点,可以将旧的程序扩充为当前所需要的,也可以从已知的类中派生出新的类来。
(四)多态性(Polymorphism)
多态性就是多种表现形式,不同事物具有不同表现形式的能力,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。
二、结构化程序设计与面向对象程序设计
结构化程序设计是由算法和数据结构组成,算法指处理数据的特定的方法。结构化程序设计首要想法是如何处理数据,然后再选择最为方便处理的数据结构,那么重点主要集中在数据上了。结构化程序设计的基本思想是:系统按功能要求分解为若干个子模块,子模块再根据需求进一步分解为子模块,不断的进行分解,从上往下进行分解,这样的形式是自顶向下的“瀑布式”设计,仅运用了顺序、分支和循环三种结构设计编码。
面向对象程序设计中,用户需要做的事向对象传送消息。编程人员在设计过程中要做的就是向对象处理适当的消息以及它的内部数据,这样就最大限度了提高了代码的可重用性,缩短了调试时间。面向对象程序设计与结构化程序设计是相反的,面向对象的程序设计是从下往上的“喷泉式”的设计,对象是数据处理方法紧密结合的整体。
三、Windows及应用程序与面对对象的程序设计
Windows中的图形用户接口包括窗口,下拉式菜单,对话框等各种控件,这就使得Windows应用程序非常容易使用。我们用结构化的程序设计方法开发Windows应用程序非常困难,即使要在屏幕上生成一个简单的窗口或是一个简单的下拉式菜单也要编写几十条甚至几百条复杂的代码,写这些代码的前提必须是我们对Windows具有非常深入的了解。那么在这种情况下,一种开发时间短、质量高、复用性高等比结构化程序设计方法优良的设计方法。由于Windows的进城的核心也是对消息的处理,因此Windows程序编程是以消息为核心。消息也是面向对象程序设计的基本机制,程序的进程的核心也是对消息的处理,因此面向对象程序设计比结构化程序设计更适合于开发Windows应用程序。利用面向对象程序设计的封装性可以把Windows应用程序的所具有的行为进行封装,形成一个类层次库,这样就为Windows应用程序提供一个一致、直观和简单的与Windows的接口。面向对象程序设计具有继承性这一特性,Windows的应用程序可简单、方便的继承和选择性的使用Windows特性而不必重写这些代码,同时,编程人员也可以借用其他应用程序的功能代码,或是稍作修改,也不必考虑Windows底层的细节。那么这样看来,类层次库就大大的降低了Windows程序设计的复杂性,编程人员也不必一条一条代码的编写,显著的减少了创建Windows应用程序界面所需的源代码量,因此面向对象的程序设计在开发应用程序方面显示出巨大的优越性。
四、结语
面向对象的程序设计方法是当前软件设计的一个主要潮流,采用这种方法开发出的软件具有极大的稳定性、可维护性和可重用性,面向对象程序设计方法运用于软件设计中极大的提高的功能代码的复用性,大大的提高了工作效率。
参考文献: