c语言项目案例分析(共9篇)
1.c语言项目案例分析 篇一
项目教学法在C语言课程教学中的应用
摘要:该文主要探讨在高校C语言程序设计课程中引入项目教学法的意义,探索项目教学法的实施步骤,提出在实施该方法时应注意的几个问题。项目教学改变了传统的以讲授知识为主的教学模式,可以充分发挥学生的主观能动性及创造性。让学生通过自己的观察、分析和编程实践,培养提出问题、分析问题、解决问题的能力。
关键词: C程序设计;项目教学;策略
中图分类号:G424文献标识码:A文章编号:1009-3044(2011)29-7210-02
C语言程序设计作为普通高校非计算机专业“大学计算机基础”课程的后续课程,其教学目标是使学生能掌握程序设计的设计方法,具有相应的阅读、理解程序的能力,并能把所学的程序设计思想、方法应用到本专业及相关的领域。
在“C语言程序设计”教学中,传统的讲授法重视语法知识的讲解,学生被动接受教学信息,学习自主性难以培养,学习兴趣难以持久。虽然学生可以较好地掌握C语言的基本语法,教学效率较高,但是学生的实际编程能力难以得到培养和锻炼。常常出现这样一种现象:C语言课程教学结束时,学生却不知道C语言的具体应用和实际价值,不能独立编写程序。
项目教学就是教师与学生通过共同完成一个较完整的项目工作而进行的相关教学活动。在项目教学中,学习过程成为师生共同参与的创造性实践活动,注重完成项目的过程而不是最终的结果[1]。通过项目实践活动,学生们掌握和理解了该门课程要求的技能、知识,培养了他们分析、解决问题的能力。项目教学法的理论依据
建构主义学习理论认为,知识并不是通过教师教授学生而获得的,而是学生自己在一定的环境情景下,借助其他人的帮助,利用相关的学习资料,通过意义建构的方式而获得。
在建构主义学习理论下,当前大致有三种比较成熟的教学方法,分别是支架式教学法、抛锚式教学法和随机进入教学法。
支架式教学法就是为学生提供一个知识框架,把复杂的知识点予以分解,利于去引导学生逐步深入理解。而抛锚式教学法则是用真实案例为基础,让学生在真实事件中去体验、感受,进而获得相关的经验;随机进入教学法就是让学生通过不同途径、方式进入相同的教学内容学习,从而获得对同一问题的多方面的认识、理解[2]。
C语言的知识结构体系完善,教学内容比较多,难度较大。采用支架式教学法较适合学生学习基础语法知识,采用抛锚式教学法可以增强学生的编程体验,调动起学生学习的积极性。C语言项目教学法的原则
C语言项目教学法应遵守如下几项原则:
1)精心选取项目实例
教学法要成功,项目实例的选取非常重要。实例既要包含到所需的知识点,又要能调动学生解决问题的主观能动性。
教师应启发学生主动发现身边的材料,选择合理难度的项目,并由师生共同完成。
2)周密组织项目小组
软件项目的实施离不开团队,单兵作战的手工作坊式生产早已不能适应软件的生产。项目教学应注意培养学生的团队合作意识和协作攻关精神。教师可以参照IT项目的管理思想构建和管理学生的学习和研究小组。由教师、科代表、学研小组和组员构成C语言项目教学的学研机构,明确各自的分工和职责,共同完成C语言的学习和实际编程项目。
3)妥善处理与传统教学模式的关系
高校的C语言程序设计课程一般在大学一年级开设,学生的计算机基础知识还比较薄弱,编程思维还有待启发,项目和工程的意识还处在萌芽之中。因此,项目教学不可能完全脱离传统教学,传统的“讲授法”对于C语言基础知识的学习,具有系统性强、效率高的特点。教师应将项目教学与传统教学有机结合起来,取长补短,发挥二者的优势。
4)完善教学评价体系
积极完善项目教学的评价体系有助于提高学生参与项目教学的积极性[3]。科学的发展性项目教学评价体系包括评价主体、评价指标、权重系数等。
作为项目教学法的干系人的教师、小组、组员,理所当然也是评价的主体,教师应注意进行组织和监控,确保评价的公平、公正性,以激发组员和小组团队的学习兴趣、研究动力和创新活动为目标。学生的成绩评价由教师评定成绩、小组评定成绩和组员自评成绩构成。按指标权重对三项成绩进行加权平均,构成学生的最终成绩[4]。
C语言项目教学法的基本步骤
在C语言程序设计课程中,项目教学法的教学过程一般有如下六步:
1)精心选择与现实相关的项目实例,设计学生所学知识与现实环境相接近的环境。把学生引入解决现实问题的环境中来。
2)围绕所学的知识点,选择相应合理的一些小项目,并且演示完成项目所需要的相关过程。
3)让学生掌握独立思考的能力,对知识点进行理解并消化示范项目的相关解决要点,为练习项目的解决打下基础。
4)项目教学小组通过调查,论证、分析后,在教师指导下确定最终实训项目。
5)小组内部要开展相应的讨论、交流,成员之间分工协作,以共同完成工程项目。
6)以完成工程项目的情况来直接衡量学生学习的效果,由教师评价、学研小组评价以及组员自评三部分构成。
C语言项目教学法应注意的问题
在C语言程序设计课程中开展项目教学,通过项目,培养学生提出问题、分析问题和编程解决实际问题的能力,应注意以下几点:
1)教师自身综合能力的提高
使用项目教学法来进行教学,对教师提出了更高要求。教师不仅是传授知识的老师,也是具有软件项目开发实践经验的工程师,还应是具有丰富管理经验的项目经理。教师应注意自身综合能力的培养,特别应加强项目管理知识的学习和应用实践。
2)学生自身的综合能力的培养
C语言项目教学法要求学生不仅要熟练掌握C语言的语法基础知识,而且要将其运用到项目实践中,对学生的能力要求更高。学生应切实转变传统的被动学习为主动学习和研究性学习,同时还需要与项目小组的其他成员协调和沟通,构建良好的人际关系,加强自身的语言沟通能力、组织协调能力的培养。
3)注意开放实验环境的构建
学研小组需要按照要求独立完成相关的实践项目。需要在教师的指导下,学研小组在开放的计算机实验室进行项目软件的分析、设计和实现。因此,项目教学法的实施,需要计算机实验室构建必要的项目软件分析、设计以及编程实现的相关环境,让学生自主的管理能力得以增强,按照相关项目进度计划完成教学项目、实训项目和扩展性项目。
总结
项目教学法是一种优秀的教学方法,但是同样在实际运用中也会面临各种各样的问题和困难,只要我们能勇于面对问题,去分析、解决问题,就能得到不断提高和进步。
参考文献:
[1] 张绍民.计算机课项目教学法的探索与实践[J].成功(教育),2008(10):198-199.[2] 肖胜阳.在计算机课程教学中开展项目教学法的研究[J].电化教育研究,2003(10):72-76.[3] 崔树银.参与式案例教学在公共管理类课程教学中的应用[J].现代教育科学,2010(7):167-169.[4] 冷淑君.关于项目教学法的探索与实践[J].江西教育科研,2007(7):119-120.[5] 刘志宏,刘舟荷,张雯晖,等.项目教学法在C语言教学中的实践与研究[J].中国成人教育,2010(4):139-140.
2.c语言项目案例分析 篇二
《C语言程序设计》这门课程是计算类专业基础课, 后续专业课多以其为前序课程, 对学生专业发展非常重要。针对学生学习语言类课程的一般思维规律和思维模式, 结合笔者多年的教学体会, 试图探索出一条适合计算机语言教学的有效途径。
1.1 C语言传统教学中存在的问题
C语言传统教学模式中, 以语法知识为主线进行教学, 在教学过程中偏重于c语言语法知识, 理论课和实践课分离。这种教学模式的缺点是强调语法知识的教学而忽视了培养学生调试程序的能力, 学生普遍对这门课感到难学、枯燥、兴趣不大。结果学生“眼高手低”, 动手能力差, 这正是违背了职业教育培养培养实用技能型人才的目的。针对这种状况, 尽快更新教育观念、探索新的教学模式才是根本出路。
1.2 项目教学法
项目 (Project) 概念最早是由美国教育家开伯屈克 (W.H Kilpatrik) 根据杜威的实用主义教育思想创立。作为学校教育学术语, 是指学生独立选择和探讨主题, 主动参与问题解决这一系列有阶段性程序的时间发生过程。项目教学模式通过设计项目等目的性明确的活动, 依据学生的心理渐变规律开展学习活动, 并借以发展学生分析问题、解决问题的能力。在《C语言程序设计》这门课程的教学中引入项目教学法, 目的在于把教学中的理论与实践有机地结合起来, 充分发掘学生的创造潜能, 提高学生解决实际问题的综合能力。
2. 项目教学法在C语言教学中的的具体实施
教学方法在宏观课程上采用项目贯穿, 微观课堂上采用项目递进驱动教学法, 同时辅以有趣的小项目对各知识点精准演练,
2.1 整体规划。
课程以“学生信息管理系统”项目为线索, 精心组织教学内容, 采用逐步拓展的实训项目和设计, 将每一阶段的学习进行小结, 以贯穿知识点提高学生能力 (具体见表1) 。
在课程初期, 主要是进行单项的编程练习, 重在掌握C语言的基本数据类型、语句与程序结构等。在进入函数、数组、指针、结构体和文件内容教学时, 开始综合实训项目的编程设计。每一个实训项目都可以用前一个实训项目为基础, 而在每一个实训项目中, 各个步骤也是内在关联拓展而成, 这样的实践性教学内容与方法设计给项目教学法以实际落脚点, 符合认知与学习规律, 深受学生好评。
2.2 细节规划
每一阶段的教学中除项目的阶段实施外, 同时针对各章节重点和难点又添加了丰富有趣的小项目, 便于提高学生学习兴趣和对知识点的掌握。比如在讲解switch结构的讲解时, 结合小项目“输入日期后输出该天是这一年的第几天?”进行实训;讲解循环结构时, 结合小项目“双色球彩票”进行实训等等, 这种教学形式, 学生学习兴趣高, 对相关知识点的掌握扎实有效, 直接为阶段项目的实施作了很好的铺垫。
2.3 综合项目集中实训
在C语言的教学期末, 集中进行两周的项目实战。项目的设置由行业一线的资深人员策划和制定、实施、考核。项目定位明确, 考察知识点集成度高, 同时按照软件工程的流程进行规划, 项目团队形式实施实训项目, 让学生提前进入岗位角色。
3. 项目教学的优点
第一, 淡化理论教学和实践教学的界限, 以实践教学为主
理论课与实践教学融为一体, 教师可根据本次课程的具体情况灵活安排。比如程序的基本结构、基本数据类型、运算符与表达式、变量和预处理命令等内容, 相对简单, 项目较小, 可教师边讲解学生边操作;而对于数组、函数、指针、结构体等相对复杂和不易理解的内容, 可1学时上理论课, 学时上机实践。
第二, 引导学生进行探究式学习
程序设计是实践性和探究性很强的课程, 不动手、不探究是难以真正掌握的。在C语言的项目教学中, 教师在调试、讲解一个实例的过程中, 向学生演示大量的实例来加深学生对语法知识的理解、教会学生如何探究, 同时引导和鼓励学生探究式思维, 在上机过程中不应满足于调试出一个程序, 而要研究一个程序, 验证在不同的情况下会出现什么样的错误或者得到什么样的运行结果, 从而掌握C语言的精髓。
4. 结语
通过项目教学方法把理论教学与实践教学有机地结合起来, 由项目贯穿整个教学过程、小项目精准演练各知识点、期末综合实训项目等项目教学形式, 使学生掌握了c语言的编程知识, 培养了编程实践能力, 同时也培养了分析问题、解决问题的能力, 充分发掘了学生的创造潜能, 锻炼了创新和协作精神, 对培养学生的专业兴趣和专业基础知识的铺垫做好了准备。
摘要:结合高职类学生的特点及人才培养的目标, 针对C语言程序设计教学中普遍存在学生喜好实践教学厌烦理论教学的现象, 分析问题存在的原因, 从教学内容的安排和教学模式改革方面进行了探讨, 提出了在C语言中专业基础课程中实施项目教学的方式。
关键词:高职,C语言程序设计,项目教学模式
参考文献
[1]张晶晶, 陈晓宁等.C语言程序设计教学模式初探[J].皖西学院学报, 2009, (5) .
[2]杨玫, 刘瑜等.引入软件工程思想的C语言案例教学法[J].科技信息, 2010, 25 (5) .
3.c语言项目案例分析 篇三
关键词:C语言程序设计;项目教学模式;应用能力
中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02
C Language Programming Course Project Teaching Mode
Luan Guifen
(Taizhou Higher Vocational School of Mechanical&Electrical Technology,Taizhou225300,China)
Abstract:C language programming course using the project to improve the teaching ability of students to apply,set project goals and prepare for the teaching project teaching the theoretical and experimental materials,select the appropriate teaching project library construction project cases,in addition to theoretical and experimental courses in teaching,effective implementation of the project,the project should also be extended to extra-curricular teaching in the classroom network.
Keywords:C language programming;Project teaching mode;Application ability
在职校教学中,传统教学法很难满足信息化社会应用型人才的能力培养要求。C语言程序设计课程是一门实践性较强的课程,应更加重视应用能力与实践能力的培养,而非计算机专业的C语言程序设计教学多用传统教学法,导致学生的理论学习与实践脱节,很大程度上影响了教学效果。因此,迫切需要采用新的教育教学法或教学模式来改变这种现状。以培养应用能力为核心的“项目教学模式”,它把学习知识、训练技能、培养能力贯穿于整个教学过程之中,能够充分发掘学生的创造潜能,提高学生的动手能力。
一、项目教学模式
项目教学模式是在建构主义理论[1]指导下,以基于项目的教学方式完成课程教学任务的教学方法体系。教师在授课过程中,以一个贯穿课程始终的,来源于生活和生产实际的成功项目案例为线索组织教学,进行知识传授和技能培训[2]。它实质上就是一种基于建构主义学习理论的探究性学习模式,强调知识意义和能力建构性,强调协作学习,在不断解决问题、实现阶段任务中完成对知识的意义建构。基于建构主义的项目教学法与传统的教学法相比,将以教师、课本、课堂为中心转变为以学生、项目、实践为中心,能够使理论知识与应用能力的培养有机结合[3]。
在项目教学的实施过程中,经常遇到以下一些实际问题:项目教学是从应用的角度出发,与传统的教学方式有很大的区别,教学目标该如何制定才能体现项目教学的实施效果。传统的教材对于知识模块的划分不适合项目教学的实施,需要编制适合项目教学的理论教材和实验教材来配合项目教学。因为篇幅有限,教材中只能涉及到几个项目案例,使得教学背景比较单调,而且项目案例通常是比较大的程序,如何根据知识模块将项目案例合理分解为较小的项目子例,使其能够更好地配合理论和实验课也是需要解决的问题。在项目教学中,教师应该采用怎样的教学方法,才能有效地实施项目教学并监控和指导学生的项目学习。
二、C语言程序设计课程中的项目教学模式
(一)根据实际情况,設定教学目标
结合C语言程序设计课程特点和项目教学从应用出发的特点,对C语言程序设计课程进行教学设计,制定技能训练和应用培养教学目标,采用“语句、代码、程序、应用”四个教学目标层次分类,同时采用“熟练使用基本知识点,练习设计编写小程序,综合项目设计应用”的实践教学层次,使项目教与学的衡量标准成为一种可具体追求和实现的目标[4]。具体的项目教学目标分别从知识点目标、技能目标和应用目标三个层次进行描述。
知识点目标是对课程理论知识点的教学要求进行描述,例如,写出伪代码描述具体问题的算法、应用“自顶向下、逐步求精”的方法求解问题、解释一维数组在内存中的存储、比较字符数组作为字符串和指针指向字符串等。技能目标分为熟练使用基本知识点和练习设计编写小程序两个层次。例如,练习C源程序文件的创建(编辑输入、存储编译、简单运行调试)过程,掌握使用VC集成开发环境处理一个C语言程序的步骤:编辑、编译、连接和运行;编程实现对多个数据的处理,要求练习加、减、乘、除、求余的运算等。应用目标是指“综合项目设计应用”,分为两个层次:(1)开发学习者发现问题,总结问题的能力,让学习者结合身边事,自找题目,写出编程实现步骤;(2)软件项目应用设计训练。培养学生应用能力,实施项目教学,需要学习者独立或合作完成项目训练,达到应用目标要求的标准。例如:结合自己专业或生活经验,寻找需要或可以分解为多个函数实现的实际问题,自编一个题目,利用自定义函数和函数调用实现问题求解过程;软件功能模块划分,应用模块化编程思想,综合分析系统功能,设计划分并画出系统模块结构图,总结出系统数据字典,并详细描述各模块功能及函数功能等。
(二)编制适合项目教学的理论教材和实验教材
为了配合项目教学顺利的进行,需要编制适合项目教学的理论教材和实验教材。理论教材中,首先要对传统教材中的理论知识模块进行重新整合,与项目设计的进展相结合,分为三个层次模块。初级阶段的知识模块主要是结构化程序设计基础,包含C语言程序设计课程的基本知识、基本数据类型及其定义与操作、程序的基本结构。中级阶段的知识模块主要是模块化程序设计基础,包含函数的编写和调用、变量的作用域与生存期的运用。高级阶段的知识模块主要是复杂数据结构和程序设计方法,包含数组、指针、结构体、文件的操作和应用。理论教材中的例子分为项目子例和教学辅例。项目子例是将整个项目分解为小的例子配合理论知识的讲解,教学辅例是与项目子例背景相似、题型相似的传统例题。
实验教材是对理论教材的实践和扩展。项目教学的关键就是对项目的实践,学生通过理论教材学习项目设计的方法,在实验教材中提供给学生更多的项目参考子例和具体的实践步骤,指导学生独立完成项目的实践。
(三)选择合适的项目案例,建设教学项目库
在实际的生产生活中,选择具有真实性、典型性等特点的项目。要强调的是项目的应用性,而不是专业性,让大部分学生能够理解和接受。项目的内容应符合课程教学目标的要求,能够容纳和体现更多数据结构、算法和知识点的应用,尽量能够贯穿课程。项目应难易适宜、大小适中,让学生在课程的学习过程中有能力完成项目内容,达到更好地掌握课程知识的效果。教师往往在课堂上只能讲解有限的几个项目案例,导致教学项目用例背景单调,不利于拓展学生的思维,因此应建设教学项目案例库,选择大量的项目案例供学生课下学习和参考。项目案例库中除了包含大量完整的项目案例,还应将项目案例分解为课堂教学用例系列、实验教学用例和学生项目实践用题系列等。
在项目教学中,将项目与课程的内容结合,根据各层次知识模块,选择某些项目分解为与每节理论课的知识点结合的项目教学课堂用例系列,要求在难度、复杂度、模块大小等方面要适合课堂讲解和学生学习。在实验课上,选择适合的项目分解为学生可以在有限课时内独立完成的实验教学用例系列,配合理论课的课堂用例进行项目实践。为了拓展学生的思维,设计学生项目用题系列作为学生课下学习的补充。
(四)理论课中教师实施项目教学
结合项目教学,采用小组合作学习方式[5],让学生分组实践项目。建议4-7人自由组合为一个小组,每组推选一个组长组织组内的学习,并将学习的过程记录下来。具体的教学过程如下:(1)教师用项目课堂用例提出需要解决的问题,引入本节课要学习的问题。(2)教师结合要实现的项目问题,讲解知识点。(3)教师选择项目辅助用例,运用知识点。(4)教师和学生一起讨论如何运用知识点,解决项目问题。(5)教师对项目内容进行扩展,提出小组讨论问题。
(五)实验课中学生实践项目教学
在实验课上,以小组为单位进行项目实践,并写下实验报告。具体的教学过程如下:(1)教师课前布置实验课的项目内容,课前小组讨论出可执行的步骤。(2)学生模仿课堂项目用例的方法,实施实验项目用例的内容。(3)各小组讨论项目实验结果,并将结果合并实现综合项目。教师参与到小组的讨论中,给予指导意见。(4)小组总结实验课内容,写出小组实验报告。实验报告中要详细记录每个组员的参与情况,包括发言、上机实践、帮助其他组员等具体的过程,这样教师可以通过查看实验报告的情况了解每个学生的学习情况,起到监控和指导的作用。
(六)课外的网络课堂交流补充
教学课时数是有限的,教师不可能跟每一位学生进行很好的交流。而且学生之间的大多数交流也仅限于小组内部,各小组间的交流很少。因此,需要建立課外的网络课堂作为教学的补充,例如,教师建立教师教学博客,学生可以建立班级博客、小组博客等。教师可以提前将教学内容发布在教学博客上供学生提前预习,并提出问题供学生讨论,学生通过回复与教师和其他同学交流。学生可以给教师留言,与教师交流学习中的问题,其他学生也可以看到这个交流的过程,启发自己的思维。每个小组可以通过博客展示自己的实验成果,各小组可以通过博客交流学习心得。教师可以通过博客中的交流监控到所有学生的学习情况、思想动态,适时的调整教学进度和教学内容。
在项目教学模式中,设定项目教学目标并编制适用于项目教学的理论和实验教材是有效实施项目教学的前提,选择合适的项目案例建设教学项目库是项目教学的关键因素。在具体的项目教学过程中,每个教师应根据实际的教学情况适当地调整教学模式,选择有效可行的方法以保证教学效果。
参考文献:
[1]陈越.建构主义与建构主义学习理论综述.
http://www.being.org.cn/theory/constructivisom.htm
[2]孟朝霞.基于项目的程序设计实践课程教学流程设计[J].高等理科教育,2008,5
[3]徐涵.项目教学的理论基础,基本特征及对教师的要求[J].职教论坛,2007,3
[4]孟朝霞.C语言课程的应用性目标模型[J].运城学院,2009,1
4.c语言项目案例分析 篇四
如果我们不多加一个字符空间,会发生致命的错误,那么我们通过案例来说明。
-------------我是分割线------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include
#include
#include
intmain
{
charstr[]=“MengLiang”;
//此处分配空间没有考虑到'
char*New_str=(char*)malloc(strlen(str));
strcpy(New_str,str);
printf(“TheNew_str=%sn”,New_str);
free(New_str);
New_str=NULL;
system(“pause”);
return0;
}
-------------我是分割线------------------
我在注释中已经写了,那么这小段程序的结果呢?
-------------我是分割线------------------
正确的修改为:
-------------我是分割线------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include
#include
#include
intmain()
{
charstr[]=“MengLiang”;
//此处的加1就是为'来服务的
char*New_str=(char*)malloc(strlen(str)+1);
strcpy(New_str,str);
printf(“TheNew_str=%sn”,New_str);
free(New_str);
New_str=NULL;
system(“pause”);
return0;
}
-------------我是分割线------------------
C语言的自由意味着我们要自制!
----------------------------------------------
5.C语言与语言互相调用 篇五
C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的 目标代码质量较高且执行的速度较快等。所以在工程上对硬件处理速度要求不很高的情况下,基本可以用C代替汇编语言,编写接口电路的控制软件。但C也不能完全取代汇编语言,如在一些对速度要求很高的实时控制系统中,以及对硬件的特殊控制方面,C有时也不能完全很好胜任,还需要汇编语言来编写。因为汇编语言目标代码更精练,对硬件直接控制能力更强和执行速度更快,但汇编语言编程烦难、表达能力差也显而易见。比较好的解决办法是C与汇编语言混合编程,即用C编写软件的调度程序、用户界面以及速度要求不高的控制部分,而用汇编语言对速度敏感部分提供最高速度的处理模块,供C调用。这种方法提供了最佳的软件设计方案,做到了兼顾速度效率高和灵活方便。由于本人的毕业设计需要C程序中调用汇编模块的方法来提高ARM定点指令的执行速度,故对这方面进行了学习。学习心得如下:
对于C和汇编语言的接口主要有两个问题需要解决。
一、调用者与被调用者的参数传递
这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。例如一调用名为add汇编程序模块的主函数:main(){......add(dest,op1,op2,flages);......}。在此例中对主函数进行反汇编,主函数在调用add函数前自动组织的堆栈。...lea 0xfffffffe8(%ebp),%eax #flages数组的首地址入栈
..执行完add调用语句后,栈内数据结果如图一所示。
进入汇编子程序后,为了能正确获取主调程序并存入堆栈中的数据,被调的汇编子程序先后要做如下一些工作: 1、保存esp的副本
进入汇编子程序后,子程序中免不了要有压栈和出栈的操作,故ESP时刻在变化。为了能用 ESP访问堆栈中的参数,安全办法是一进入子程序后,先为ESP制副本,以后对传递参数的访问 都用副本进行。一般可用EBP保存ESP,如: push %ebp mov %ebp,%esp push %eax pushl 0xfffffff8(%ebp)#OP2入栈 pushl 0xfffffffc(%ebp)#OP1 入栈 pushl 0xfffffff0(%ebp)#dest地址入栈
call 0x80483f0 #调用add函数
2、保留数据空间
如果汇编子程序中需要一些局部数据,可以简单地减小ESP的值,以便在栈空间中保留出一段存贮区,用于存放局部数据,该区域须在子程序结束后恢复。如下语句可以保留一个局部数据区: push %ebp
mov %ebp ,%esp subl space,%esp;设space=4 movl $0x0,%ebp movl $0x0,-2(%ebp)如上语句段中,space是局部数据的总字节数。在以后的应用中,由于ESP是变化的,而 EBP是 固定的,用负偏移量可以存取局部变量。上例利用EBP及偏移量,将两个字的局部数 据初始化为0。
3、保留寄存器值
如果在被调子程序中用到ESI、EDI等其它寄存器,则应先把它们压入堆栈,以保留寄存器原值。例如,下例就是将ESI和EDI寄存器的值压栈: pushl %ebp movl %ebp ,%esp subl $space ,%esp, pushl %esi pushl %edi
4、获取传递参数
作完了1~3步的操作后,结合上面C程序传送参数这一例子,现在栈结构如图二所示。
由此可见,EBP保留了ESP在参数传递完并将EBP压栈后的一个副本,利用EBP可以很方便地访问各参数。现假设各参数都是2字节的整数值,在小模式编译方式共占用2个字节。如果要将传递的参数op1、op2取出,并分别赋给ebx、ecx寄存器,可由下列语句完成这一功能:
movl 0x8(%ebp),%eax movl 0xc(%ebp),%ecx
5、子程序返回值
当子程序的执行结果需要返回时,根据返回值的字长,C按如下约定接收返回值:1字节在AL 寄存器中;2字节在EAX寄存器中;4字节则高位部分在EDX中、低位部分在EAX寄存器中。C可从这些寄存器中取出返回值。
6、退出汇编子程序
结束汇编子程序的步骤如下:
1)若ESS、EDS、ESI或EDI已被压栈,则需按保存它们的相反顺序弹出它们。
2)若在过程开始时分配了局部数据空间,则以指令 mov %esp和%ebp 恢复%esp。
3)以指令pop %ebp 恢复%ebp,该步是必须的。或者可以用leave语句来恢复%ebp。它相当于movl %ebp, %esp;popl %ebp 4)最后以ret结束汇编程序。
二、说明和建立调用者与被调用者间的连系
为了建立调用与被调用模块间的连接关系,被调用的汇编程序应用global,说明其可被外部模块调用;而调用程序则应预先说明要引用的外部模块名。下面通过我的例子进行说明,该例是C调用add0的汇编子程序。程序清单如下: /* add.c */ #include
of
ADD
is
:%xn
flages
N(negative)
Z(zero)
C(carry)V(overflow:%d,%d,%d,%dn”,*dest,flages[3],flages[2],flages[1],flages[0]);return 0;} #add.s.text.align 2.global add.type add,function #定义add为外部可调用的函数
add:
push %ebp #ebp寄存器内容压栈,保存add函数的上级调用函数的栈基地址
mov %esp,%ebp #esp值赋给ebp,设置add函数的栈基地址
mov 0x8(%ebp),%edx
mov 0x10(%ebp),%eax
add 0xc(%ebp),%eax
mov %eax,(%edx)
mov 0x14(%ebp),%eax
jo OF
C:
jc CF
S:
js SF
jz ZF
jmp out
OF:
movw $0x1,(%eax)
jmp C
CF:
movw $0x1,0x2(%eax)
jmp S
SF:
movw $0x1,0x6(%eax)
movw $0x0,0x4(%eax)
jmp out
ZF:
movw $0x1,0x4(%eax)movw $0x0,0x6(%eax)
out:
leave
#将ebp值赋给esp,pop先前栈内的上级函数栈的基地址给#ebp,恢复原栈基址
ret
#add函数返回,回到上级的调用函数
其中.text 标志一个代码段的开始,这是AT&T的段格式;global add;n type add,function说明add是公用的,可以由外部其它单独编译模块调用。
将C源程序以文件名add.c存盘,汇编语言源程序以add.s 存盘;通过MAKE进行编译和连接连接代码如下:
all: myadd
myadd: adds.o addc.o
gcc –o myadd adds.o adc.o
adds.o: add.s
as –o adds.o add.s
addc.o: add.c
6.C语言小结 篇六
一、分号,大括号
分号。分号是表达式结束的标志,一般表达式后面都要有。写“;”的时候一定要注意:是否要结束前面的语句。注意:if,switch,for,while语句,数据类型定义,函数定义。
if(a>b)/*if语句,没有分号*/ {...}
while(i+=10,i!=100);/*while语句循环体为空,依靠逗号语句实现循环*/
struct a /*结构体数据定义,没有分号*/
{...}b;/*结构体变量,要有分号*/
int sum(...)/*函数定义,没有分号*/ {....}
大括号。大括号是一个语句段的标志。写大括号时最好一次写一对,然后把光标移到大括号里写。避免遗漏。
二、运算符号
“=”与“==”
“=”用于赋值,注意“=”左边必须是变量,右边可以是常量也可以是变量。“==”用于判断两个量的大小,左右两边可以是常量也可以是变量(尽量把常量写在左边,这样“==”误写成“=”时编译器就会报错)。运算表达式有它本身的值。“=”语句值为“=”右边的量的大小;“==”语句值为判断结果,无外乎两种,0(表示“==”两边不等)1(“==”两边相等)。
(i=1)==(3==4);/*i值为1,整个表达式值为0*/
“,”
逗号语句是从左到右计算,整个逗号语句的值为最后一个语句的值 i=(j=2,j+8,j++);
/*先计算j=2,值为2,j+8不是运算表达式,跳过,计算j++得到整个括号内的值3*/ “/”
“/”两边都是整型变量的时候结果也是整型,而且结果遵循向0靠拢的原则。
运算符的优先级及结合方向
不多说了,表格一定要背牢。
三、变量
命名
不要吝惜,能说明白性质尽量在变量的名字上说明。避免老是使用一个字母,或者难以理解的变量名。对于较长的变量命名可以使用宏定义、类型定义。
#deine UP 0x4800
/*键码的宏定义*/
typedef struct
{....}MEM;
/*结构体变量的类型定义*/
类型
注意变量的使用范围。当不确定变量的范围的时候尽量选用值域宽的类型。双目运算符两边的变量一般类型要一致。不一致的时候需要使用类型转换。上回说的是一些小问题,真正编东西,学东西还有许多要注意的地方。
由于本人也是刚学不久,水平有限,说错的地方望大家原谅。谢谢!
一、多看代码
在有一定基础以后一定要多看别人的代码。注意代码中的算法和数据结构。毕竟学C之后的关口就是算法和数据结构。提到数据结构,指针是其中重要的一环,绝大多数的数据结构是建立在指针之上的,如链表、队列、树、图等等,所以只有学好指针才能真正学好C。别的方面也要关注一下,诸如变量的命名、库函数的用法等等。有些库函数是经常用到的。对于这些函数的用法就要牢牢记住。
二、要自己动手
编程序是个实干的活,光说不练不行。刚开始学的时候可以多练习书上的习题。对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。有一定的基础以后可以尝试编一点小游戏,文曲星之类的电子词典上小游戏很多,照着编作为练习。基础很扎实的时候,可以编一些关于数据结构方面的东西,诸如最经典的学生管理系统。之后.....学汇编、硬件知识。
三、选择一个好的编译器
本人前段时间就遭受了一个编译器的折磨。这个编译器带了个自运行程序,自动修改IE主页。叫什么名字就不说了。言归正传,英文版Turbo C v2.0没话说,最经典的C编译器(下载地址:http://),其次推荐一个win-tc 1.91,支持windows下的编译器。(下载地址:http://)
四、关于养成良好的编程习惯
基本上每本C教材上都要提到。作为新手这条一定要时时遵守。记的一位网友发过评论:高手写一堆乱七八糟的代码就是艺术,新手写一堆乱七八糟的代码就是垃圾。就象古代贤人写错字叫通假字,小学生写错字叫错别字,一个道理。具体方面:
1、在比较复杂的代码后面要有注释。如果光溜溜一堆代码,别人就不可能看懂你的代码,而且也不利于查找错误。除非你一直编东西给自己看。能在代码里说明白的就一定要在代码里体现。比如变量名、函数名,在命名的时候尽量说明是干什么用的。
2、注意语句的嵌套不能过长,一般来说,一段代码里Tab要少于8个。简单说就是语句最多8个嵌套。对于新手来说,这个标准还要下降。有一个好习惯是,把主函数尽量写简短。经常看到别人的代码是主函数只有几行,几个函数调用,而定义全在主函数外部。这样一是减少了主函数内部的嵌套,二是比较精简,容易读懂。
7.项目化教学在C语言课程中的应用 篇七
相比于传统教学方法, 项目化教学不仅是一种全新的教学方式, 就学生角度而言这也是一种学习方式的革命, 为此在实施项目化教学的过程中, 教师一定要充分的理解C语言的基础理论知识的结构, 让学生积极的参与到项目中来, 积极的促进去学习能、动手能力的提高, 为以后的计算机课程学习打下坚实的基础。
C语言不仅仅是很多计算机专业的基础课程, 同时也是国家或地方计算机等级考试的科目之一。因此研究C语言教学不仅能够有助于提高计算机专业教学效果, 同样也非常的适用于其他非计算机专业的学生。精通C语言的话, 能够帮助学生构建编程解决问题的思维框架, 对于学习其他的像C++、C#、JAVA等语言都有着非常好的基础, 但是目前的C语言课程教学仍然非常的传统, 很多大学都是仅仅的依靠教材并搭配C语言课程设计来开展的, 通过按部就班的学习语法、语句等过程完成教学过程, 教学过程最大的问题就是理论学习和实践学习是分离的, 学习的过程非常的空洞而且抽象, 导致很多学生学习积极性不高或者理论基础好但是动手能力不强等现象, 严重的影响了学生后期的进阶学习。为了激发学生的学习兴趣, 提高学生的学习效果, 我们提出了项目化教学在C语言课程中的应用, 下面阐述具体的操作过程。
一、项目化教学的概念及优势
项目化教学是为了解决某一问题或者项目, 学生在教师的教学设计和安排下, 通过学习整个课程的内容和实践操作从而实现项目的教学方法。所以项目是项目化教学的主线, 在这个主线内部贯穿了教学的主要内容, 由易到难, 学生通过循序渐进的学习, 不断的增进知识和解决项目的子模块, 一步一步的最终实现整个项目的完成过程, 项目化教学的教学过程安排不一定是一成不变的, 但是核心都是通过项目的设计和实现来完成对学生能力的培养。教学过程中难点是需要充分的理解教材, 毕竟我们的教学过程仍然少不了教材的支撑, 然后结合学生的知识结合采用适合学生能力的项目, 并积极的参与到项目的制作过程中, 帮助学生熟悉和掌握基础的理论知识, 并且逐渐的提高C语言的实际应用能力, 这也是项目化教学与传统教学最大的不同之处, 就是其对于实践能力和理论知识的结合。
二、C语言课程的项目设计
项目设计是实施项目化教学基础, 一个合理的项目设计是一切教学活动的开端, 也直接决定了教学效果和教学质量。因此项目设计的过程必然有一定的原则, 首先是项目的设计一定要围绕教学的重点和难点来开展, 而且项目的实现过程必须涵盖基本的理论知识点;其次是要能够充分的调动学生的积极性, 为此我们设置的项目要有一定的难度, 但是要充分的考虑到学生的知识结构和能力, 使得学生能够在项目过程有一定的成就感, 并选择趣味性较高的项目激发学生的学习兴趣;最后是项目最好有一定的规模, 规模太大的话会严重打击学生的自信心, 太小又起不到实际的效果, 必须充分的结合理论基础知识的进度。为此我经过多年的C语言课程教学过程, 在此提出三个项目设计为该类教学法的C语言教学提供参考。三个项目由简到难, 分别是简易计算器、学生信息管理、扫雷游戏。简易计算器能够考察学生初期学习的语言结构, 系统的能够实现简单的加减乘除运算, 由于学生初次接触编程语言, 这个简单项目的实现过程较为简单, 项目虽小但是却能够考察学生能否将实际问题通过计算机语言来解决。学生信息管理系统, 实现对学生成绩、姓名、年级等信息的增删查改几项功能, 除了考察基本函数、数组和指针的利用之外, 进一步的深化模块化程序设计的基本思想。而最后的扫雷游戏则是进阶教程, 有一定的难度, 是学生在系统的学习C语言程序设计的知识和思想后进一步的软件设计能力。三个项目贯穿教学过程的始末, 相关的知识点也逐渐提高, 为后期的项目化教学过程奠定基础。
三、C语言课程项目化教学课程设计
由于项目教学是和实践相结合的, 所以我们将理论课的教学改到了机房, 在机房完成授课的过程。学生在机房随时可以操作和实践理论知识, 但是这个过程中我们不能忽视理论知识的教学过程, 在系统的理论知识教学的前提下积极的以引导和监督学生实践操作的过程, 对于学生遇到的问题及时的帮助解决, 对于多数同学都容易出现的典型问题, 进行统一的讲解下面以简易计算器项目为例, 分析详细的教学过程安排。
1. 项目演示引出学习目的
为此, 我们可以利用多媒体教学设备在屏幕上演示这个项目的实现, 即一个由C语言编写的简易计算器。根据所学知识, 简略的概括项目的设计实现过程, 构建教学情境。使得学生能够对于实现的项目有一个初步的认识, 即通过课程的学习和操作想要达成怎样的效果, 在进行项目演示的过程中我们切不可笼统的介绍, 对于项目的分析一定要运用程序设计的思想, 项目演示和分析的过程要具有一定的逻辑特点, 拿这个计算器项目来说, 它实现了哪些功能, 功能实现需要什么知识, 帮助学生能够将琐碎的知识合理的梳理起来。从而快速的上手, 达到学习的效果。
2. 项目实现提高学习主动性
任何编程语言的学习都离不开实际的动手过程, 动手去做永远是抽象的编程语言学习的法宝。特别是在随着课程的不断加深, 越来越多的新知识和新的思想被引入, 在传统的C语言课程教学过程中, 教师在介绍完这些新知识以后往往会将新知识与之前学过的东西进行联系和比对, 希望学生能够快速的掌握新的语法和结构, 但是这种授课方式严重的忽视了学生动手能力和实践能力, 而项目化的教学方式是随着学生的动手过程同时开展的, 我们在这个过程中通过精讲重点知识, 鼓励学生动手去做的过程, 其实也是敦促学生自主学习的过程, 更多的理论知识的细节需要学生在项目操作的过程中通过发现问题、分析问题、解决问题的过程中去发现, 并以此提高学习的质量, 实践证明, 只要项目设计合理操作得当, 学生在学习的过程中积极性和主动性大大提高, 教师要积极的抓住学生学习的积极性, 在项目操作和实现过程中及时发现和矫正, 加强学生对基础理论知识的理解, 全面提高编程能力。
3. 分组协同学习, 提高团队合作意识
随着项目难度的不断提高, 教师可以根据项目的特点把项目分成几个子项目。通过对学生学习能力以及性格的了解, 采取科学合理的分组, 将班级划分成几个学习小组通过小组合作模式协同完成项目计划的过程, 比如学生信息管理系统的要实现增删查改几项重要的功能, 由于项目相对来说较大, 涉及到的知识面对于初学C语言的人来说非常多而且较为复杂, 采取分组合作的模式能够使得学生通过合作共同解决难题, 团队合作共同探索问题的解决办法, 在合作的过程中也能够帮助小组内部成员发现自己知识结构中弱势, 从而促进项目化教学的全面开展。
4. 项目结果的评价与审核过程
项目评价过程不仅仅要针对于项目结果, 更加要对项目实施的过程进行分析和评价, 评价是知识结构升级和提高的重要手段, 通过项目结果的评价和审核过程使得学生获得一定的满足感, C语言解决实际问题的方法和能力有很多, 在课程之外, 有着非常多的简化算法, 因此对于项目实现的过程必然有一定的优劣之分, 对于项目的评价结果还能够加强学生的竞争意识, 促进进一步的学习动力。为此我们一定要摒弃传统的C语言课程教学中单一的教学评价机制和手段, 采取多元化的项目评价方法。为此我们可以拟定一个三级综合评价方案:首先是自我评价, 即让学生或者小组在课堂上讲解自己的学习成果, 分阐述项目实现的具体过程, 并评价自己程序或系统的效果, 给自己的学习过程和项目成果进行评分;其次是学生互评, 学生通过阐述自己的观点, 合理的评价其他人的项目的优点和缺点, 由于学生知识体系限制毕竟可能会出现一定的偏差和理论性错误, 教师要监督这个过程并给予指导;最后是教师的总评, 对于项目完成进行一个综合的评价, 教师不应该仅仅注重结果, 更加应该重视学生在项目实施过程中的努力, 注重对学习过程的评价, 尽量发现学生思维的闪光点, 积极的鼓励和表扬并且能够对其中的经典错误进行分析, 结合自己的教学经验和理论知识的深度, 帮助学习理解项目中常见错误产生的原因。
四、项目化教学注重的问题
为了更好的开展项目化C语言教学过程, 对教学过程中容易出现的问题进行分析, 为此应该注意的问题有:
1. 处理好与传统教学的关系
项目化的教学方法注重学生能力的培养过程, 特别是在很多解决实际应用问题的过程中这种方法的优势非常的明显, 但是由于理论知识和实践过程共同展开教学, 并且是以项目为教学主线的因此不可避免的弱化了理论知识的系统化, 然而传统的C语言教学过程则非常重视理论基础知识的教学过程, 相对来说传统教学保证了学科的完整性, 学生通过传统教学的学习过程能够更加全面的掌握理论知识, 知识结构更加的系统和全面。因此项目化教学一定要处理好和传统教学之间的关系, 在重视项目完成的过程中不能忽视基础知识的重要性, 取长补短, 及时的通过项目归纳和总结基础知识, 保证知识的系统性。
2. 教师对实践能力的教学效果
教师是开展一切教学活动的主导者, 就专业知识的深度和宽度而言, 大学的C语言教师都有着非常深厚的基础能力和实践能力, 特别是很多大学老师在教学活动之余也参加很多大型项目的编写工作, 但是由于长期进行常规的教学过程, 对于学生实践能力的培养并没有系统的理论和方法, 为此教师应该充分的结合自己的实践开发经验, 结合系统的理论知识, 通过自己遇到的项目问题分析和解决办法, 言传身教提高对学生实践能力的培养过程, 这也是项目化教学及其重要的环节。
3. 引导学生动手操作, 避免出现两极分化的现象
如果项目化教学的过程中, 采取错误的操作或者方法, 不仅不会促进学生学习的积极性, 反而因为削弱了理论知识系统的学习, 使得学生在项目化教学过程中无从下手, 使他们感到陌生和困惑, 大大降低项目化学习的效果。因此教师一定要避免这种情况的发生, 对于基础较差的学生, 一定要采取必要的手段帮助他们, 教学的过程是针对于全体学生的过程, 必须考虑到所有学生的能力, 这也是项目化教学过程需要注意的最大问题。
五、结语
相比于传统教学方法, 项目化教学不仅是一种全新的教学方式, 就学生角度而言这也是一种学习方式的革命, 为此在实施项目化教学的过程中, 教师一定要充分的理解C语言的基础理论知识的结构, 让学生积极的参与到项目中来, 积极的促进去学习能、动手能力的提高, 为以后的计算机课程学习打下坚实的基础。
参考文献
[1]钱丽丹.项目化教学在C语言程序设计课程中的应用[J].软件导刊, 2013, 01:188-190.
[2]张蕾.基于项目化教学的“C语言程序设计”课程改革[J].计算机教育, 2013, 02:17-20.
[3]张晓.C语言课程项目化教学设计与实施[J].电脑编程技巧与维护, 2013, 08:133+144.
[4]叶煜, 任华, 丁莲.高职C语言课程项目化教学改革与实践[J].软件工程师, 2014, 07:47-48.
[5]杨俊红, 侯丽敏.论项目化教学在C语言课程中的应用[J].河南科技学院学报, 2010, 04:114-116.
[6]王晓勇, 肖四友, 张文祥.基于能力培养的C语言项目化训练教学模式初探[J].计算机教育, 2009, 10:60-62.
8.c语言项目案例分析 篇八
关键词 项目教学 C语言 教学实施 教学成果
中图分类号:G424 文献标识码:A
1 开设的目的和意义
较之于高等教育而言,高等职业教育无论在目标性还是教学的侧重点上,均存在着较大的差异性,后者通过对学生进行培养,毕业后可直接参加具体的工作,因其已经熟练的掌握了操作技能和技巧,所以能够独立完成工作任务。根据高职院校学生就业指导意见,当前高等职业教育教学应面向生产、管理以及建设和服务等一线行业,为这些部门和工作岗位输送人才,以下得去、用得上和留得住为基本原则,培养实践能力较强具有较好的职业道德的高技能人才。因此,要加强实践性课程教学,对保证人才培养质量显得尤为重要。
我院为了贯彻这种精神,立足区域经济发展现实情况,对专业课程进行了灵活的调整,其中以就业为主要导向,不断加快应用课程设计与创新。就当前我院工作实际情况来看,以由浅入深和逐渐深化为主要教学规律,并在此基础上构建了教学三层次、四环节之实践课程系统。实践教学的三个层次是:基本技能,专业拓展,综合创新;四个环节是:实验培训,实验实训,设计和课外实践。
比如,C语言课程,作为信息类专业的基础课程,程序设计都是在课程教学完成后进行,共有四十个学时,历时两周。为学生提供一个动手、动脑、独立实践的机会。
2 项目教学法简介
项目教学法是基于构建主义教学理论的一种教与学的模式。瑞士著名的心理学家皮亚杰认为:知识不是通过教师传授得到的,而是学生在一定的情境下,借助他人的帮助,利用必要的学习资料,通过意义构建的方式获得的。美国项目管理专家约翰·宾认为:项目是要在一定时间里,在预算规定的范围之内需要达到预定质量水平的一项一次性任务。
项目教学法是通过实施一个完整的项目进行教学活动,将学生融入到任务的过程中,让学生进行主动地学习,自主性地进行知识构建,在课堂教学中把理论与实践教学有机的结合起来,能充分地发挥学生的创造潜能,提高学生解决实际问题的能力。因此,在实际教学过程中,教师要将需要解决的问题或需要完成的任务以项目的形式交给学生,让学生在老师的指导下,用工作小组的方式,由学生自己按照实际的工作程序,共同制定计划,共同或者分工完成整个项目。在项目教学过程中,学习过程称为人人都参与的实践过程,注重的不是结果,而是整个项目完成的过程。
对于高等职业院校的技术教育教学而言,项目主要是指生产或者制造有应用价值的具体产品之任务。从技术领域来看,多数小产品、复杂产品等模型制作均可作为具体的项目,比如信息类专业开展网站建设、计算机组装以及建设局域网项目,电子类专业可开展报警器制作、加点组装等项目。
3 其基本特征
项目教学法与传统教学法相比具有较大的差别。主要表现在改变了传统教学中的三个中心:以教师为中心转变为以学生为中心;以课本为中心转变为以项目为中心;以课堂为中心转变为以实际经验为中心。项目教学法具有以下的特点:
實践性:项目源于企业,项目的主题与真实世界是紧密联系的,由浅入深,选择的项目具有典型性和使用性;自主性:提供学生根据个人兴趣进行选择的内容和展示的机会,让学生进行自主的学习,从而有效地促进了其创造力的发展;发展性:长期的项目结合,构成了实现教学目标的认知过程;评价的特殊性:项目性教学更注重的是学生在项目活动中能力的发展过程,评测的内容包括学生参加各项活动的表现,避免了传统的成绩定好坏的弊端。评测可以采用自评、小组评、教师综合评等方法、教师只有明确并抓住其教学的特点,才能更好地完成教学目标。
4 其在C语言课程设计中的实施
为更好进行课程设计教育教学,在多次实践基础上,总结出具体项目实施中主要注意的两个方面:
其一,教学内容主要事项。前导课因教学课时的影响,所以教师为赶教学进度,对结构体、基本操作以及共用体等知识的介绍不充分,也不够完善,更谈不上辅助实例进行讲解。对此,要根据学生对这些知识点的掌握程度,利用5个学时,实施区别式、辅导式的教学。
其二,由于学生对于项目管理的知识较少,针对此种情况,可以采用两个阶段实施补课行动。第一个阶段,安排曾经做得比较好的学生进行讲解相关经验;第二阶段,为项目实施阶段,教师应该针对学生发生的问题,及时给与指导,直到学生弄懂为止。
总之,通过此种教学方法,教师在观察学生、帮助学生的过程中,既开阔了视野,也提高了专业水平。项目教学法是师生共同完成项目、共同取得进步的好方法。
参考文献
[1] 教育部高等教育司.发展创新改革[M].高等教育出版社,2008.
[2] 于宁.基于混合式学习的计算机基础课程教学[J].计算机教育,2010 (2).
9.C语言 篇九
10.1 选择题
【题10.1】已知学生记录描述为 struct student {int no;char name[20];char set;struct {int year;int month;int day;}birth;};struct student s;设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是(D).A)year=1984;B)birth.year=1984;month=11;birth.month=11;day=11;birth.day=11;C)s.year=1984;D)s.birth.year=1984;s.month=11;s.birth.month=11;s.day=11;s.birth.day=11;
【题10.2】当说明一个结构体变量时系统分配给它的内存是(A).A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量
【题10.3】以下对结构体类型变量的定义中不正确的是(D).A)#define STUDENT struct student STUDENT {int num;float age;}std1;B)struct student {int num;float age;}std1;C)struct {int num;float age;}std1;D)struct int num;float age;}student;struct student std1;
【题10.4】设有以下说明语句 struct stu {int a;float b;}stutype;则下面的叙述不正确的是(C).A)struct是结构体类型的关键字
B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名
【题10.5】C语言结构体类型变量在程序执行期间(A)..A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中
【题10.6】在16位IBM-PC机上使用C语言,若有如下定义: struct data {int i;char ch;double f;}b;则结构变量b占用内存的字节数是(D).A)1 B)2 C)3 D)4
题【10。7】以下程序的运行结果是(A).#include “stdio.h” main(){struct data {int year,month,day;}today;printf(“%dn”,sizeof(struct data));} A)6 B)8 C)10 D)12
【题10.8】根据下面的定义,能打印出字母M的语句是(D).Struct person{char name[9];int age;};struct person class[10]={“John”,17, “Paul”,19, “Mary”,18, “adam”,16 };A)printf(“%cn”,class[3].name);B)printf(“%cn”,class[3].name[1]);C)printf(“%cn”,class[2].name[1]);D)printf(“%cn”,class[2].name[0]);
【题10.9】下面程序的运行结果是(D).main(){ struct cmplx {int x;int y;} cnum[2]={1,3,2,7};printf(“%dn”,cnum[0].y/cnum[0].x*cnum[1].x);} A)0 B)1 C)3 D)6
【题10.10】 若有以下定义和语句;
struct student {int age;int num;};struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;„..} 则以下不正确的引用是(D)。
A)(P++)—》 num B)p++ C)(*p).num D)p=&stu.age
【题10.11】以下scanf函数调用语句中对结构体 变量成员的不正确引用是(D)。
Stuct pupil {char name[20 ];int age;int sex;}pup[5,]*p;p=pup;A)scanf(“%s”,pup[0].name);B)scanf(“”%d),&pup[0].age;C)scanf(“%d”,&sex));(p D)scanf(“%d”,P->age);
【题10.12】有以下定义和语句,则以下引用形式不合法的是(D)。
Struct s {int i1;struct s*i2,i0;};static struct s a[3 ]={2,&a[1],’’,4,%a[2],&a[0],6,’’,&a[1]}, *ptr;ptr=a;A)ptr->i1++ B)*ptr->i2 C)++ptr->i0 D)ptr->i1
【题10.13】设有如下定义:
struct sk {int n;float x;}data,*p;若要使P指向data中的n域,正确的负值语句的是(C)。A)p=&data.n;B)*p=data.n;C)p=(struct sk*)&data.n;D)p=(struct sk*)data.n;
【题10.14】若哟于以下说明和语句:
struct student {int age;int num;}std,*p;p=&std;则以下对结构体变量std中成员age的引用方式不正确的是(D)。A)std.age B)p->age C)(*p).age D)*p.age
【题10.15 】若以下程序段:
struct dent { int n;int*m;};int a=1, b=2,c=3;struct dent s[3]={{101<&a},{102<&b},{103,&c};main(){ struct dent *p;p=s;„..} 则以下表达中值为2的是--D---。
A)(p++)->m B)*(P++)->m C)(*p).m D)*(++p)->m
【题10.16】若有以下说明和语句,则 对中域的正确引用方式是(D)。
Struct pupil {char name [20;int sex;}pup,*p;p=&pup;A)p.pup.sex B)p->pup.sex C)(*p).pup.sex D)(*p).sex
【题10.17】设有以下语句:
struct st {int n;struct st *next;};static struct st a[3 ] ={5,&a[1] ,7,&a[2],9,’’},*p;p=&a=[0];则以下表达式的值为6的是(D)。A)p++->n B)p->n++ C)(*P).n++ D)++p->n
【题10.18】以下程序的输出结果是(C)。
Struct stu {int x;int*y;} *p;int dt[4] ={10,20,30,40};struct stu a[4]={50,&dt[0],60,&dt[1], 70,&dt[2],80,&dt[3] };main(){p=a;printf(“%d,”,++p->x);printf(“%d,”,(++p)->x);printf(“%dn”,++(*p->y));} A)10,20,20 B)50,60,21 C)51,60,21 D)60,70,31
【题10.19】若有以下说明和语句,则下面表达式中值为1002的是(D)。Struct student {int age;int num;};struct student stu[3]={{1001,20},{1002,19},{1003,21};struct student *p;p=stu;A)(p++)—>num B)(p++)—>age C)(*p).num D)(*++p).age
【题10.20 】以下对结构体变量stul 中成员age 的非法引用是(B)。Struct student {int age;int num;}stul,*p;p=&stul;A)stul.age B)student.age C)p—>age D)(*p).age
【题10.21】设有以下说明和定义语句,则下面表达式中值为3的是(D)。Struct s {int i1;struct s*i2;};static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr;ptr=&a[1];A)ptr—>i1++ B)ptr++—>i1
【题10.22 】以下程序的功能是:读入一行字符(如:a,„.y,z),按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。请选择正确的内容填入[ ]中。#include
【题10.23】若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则[ ]中应填入的内容是(D)。Int*p;P=[ ]malloc(sizeof(int));A)int B)int* C)(*int)D)(int*)
【题10.24】当说明一个共用体变量时系统分配给它的内存是(C)。A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量
【题10.25 】以下对C语言中共用体类型数据的叙述正确的是(C)。A)可以对共用体变量名直接赋值
B)一个共用体变量中可以同时存放其所有成员 C)一个共用体变量中不可能同时存放其所有成员 D)共用体类型定义中不能出现结构体类型的成员
【题10.26】若有以下定义和语句: union data {int i;char c;float f;}a;int n;则以下语句正确的是(B)。
A)a=5;B)a={2,’a’,1.2};C)printf(“%dn”,a);D)n=a;
【题10.27】设有以下说明,则下面不正确的叙述是(C)。Union data { int i;char c;float f;}un;A)un所占的内存长度等于成员f的长度 B)un的地址和它的各成员地址都是同一地址 C)un可以作为函数参数
D)不能对un赋值,但可以在定义un时对它初始化
【题10.28 】C语言共用体型变量在程序运行期间(B)。A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中
【题10.29】以下程序的运行结果是(B)。#include “stdio.h” main(){ union {long a;int b;char c;}m;printf(“%dn”,sizeof(m));} A)2 B)4 C)6 D)8
【题10.30】对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。
#include “stdio.h” main(){union {int a[2];long b;char c[4];}s;s.a[0]=0x39;s.a[1]=0x38;printf(“%lxn”,s.b);/*【B】*/ printf(“%cn”,s.c[0]);/*【B】*/ } 【1】A)390038 B)380039 C)3938 D)3839 【2】A)39 B)9 C)38 D)8
【题10.31】对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果.#include “stdio.h” main(){int j;union {int a;long b;unsigned char c;}m m.b=0x12345678;printf(“%xn”,m.a;)/*【B】*/ printf(“%xn”,m.c;)/*【B】*/ } 【1】A)1234 B)5678 C)12345678 D)0 【2】A)12 B)78 C)1234 D)5678
【题10.32】在16位IBM-PC机上使用C语言,若有如下定义: union data {int i;char ch;double f;}b;则共用体变量 占用内存的字节数是(C)..A)1 B)2 C)8 D)11
【题10.33】以下程序的运行结果是(A).#include “stdio.h” union pw {int I char ch[2];}a;main(){ ch[0]=13;ch[1]=0;printf(“%dn”,a,i);} A)13 B)14 C)208 D)209
【题10.34】使用typedef定义一个新类型的正确步骤是(C).A)2,4,1,3 B)1,3,2,4 C)2,1,4,3 D)4,2,3,1 1.把变量名换成新类型名.2.按定义变量的方法写出定义体.3.用新类型名定义变量.4.在最前面加上关键字.【题10.35】下面对typedef的叙述中不正确的是(B).A)用typedef可以定义各种类型名,但不能用来定义变量 B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符来代表 D)使用typedef有利于程序的通用和移植
【题10.36】以下程序的运行结果是(C)...typedef union {long a[2];int b[4];char c[8];}TY TY our;main(){printf(“%dn”,sizeof(our));} A)32 B)16 C)8 D)24
10.2
【题10.37】以下程序的运行结果是 【10,x 】..struct n{ int x;char c;};main()struct n a={10,‘x’};
func(a);printf(%d,%c,a.x,a.c);} func(struct n b){b.x=20;b.c=’y’;}
填空 题 【题10.38】 以下程序的运行结果是【2,3】.main(){struct EXAMPLE{struct{ int x;inty;}in;int a;int b;}e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;printf(“%d,%d”,e.in.x,e.in.y);}
【题10.39】 以下程序用以输出结构体变量bt所占内存单元的字节数,请在()内填上适当内容.struct ps { double i;char arr[20];};main(){ struct ps bt;printf(“bt size : %dn”,(sizeof(struct ps));}
【题10.40】以下程序用来按学生姓名查询其排名和平均成绩.查询可连续进行,直到键入 0 时结束,请在()内填入正确内容.#include
【题10.41】设有三人的姓名和年龄存在结构数组中,以下程序输入三人中年龄居中者的姓名和年龄,请在()内填入正确内容.Static struct man { char name[20];int age;} person[]={“li-ming”,18, “wang-hua”,19, “zhang-ping”,20 };main(0 { int I,j,max,min;max=min=person[0].age;for(i=1;i<3;i++)if(person[i].age 【题10.42】以下程序用”比较计数”法对结构数组 a 按字段 num 进行降序排列.” 比较计数”法的基本思想是:通过另一字段 con 记录 a 中小于某一特定关键字的元素的个数.待算法结束,a[i].con 就是a[i].num 在 a 中的排序位置.请在()内填入正确内容.#define N 8 struct c { int num;int con;} a[16] main(){int i,j;for(i=0;i 【题10.43】 若已定义: struct num {int a;int b;float f;} n={1,3,5.0};struct num * pn = &n;则表达式 pn->b/n.a*++pn->b的值是【12】,表达式(*pn).a+pn->f的值是【6.0】 【题10.44】以下程序的功能是计算并打印复数的差。请在【】内填入正确内容。struct comp {float re;float im;};struct comp *m(x,y)struct comp *x,*y;{【struct comp*z】;z=(struct comp *)malloc(sizeof(struct comp));z->re=x->re-y->re;z->im=x->im-y->im;return(【z】);} main(){struct comp *t;struct comp a,b;a.re=1;a.im=2;b.re=3;b.im=4;t=m(【&a&b】);printf(“z.re=%f , z.im=%f”,t->re,t->im);} 【题10.45】以下程序调用readrec函数把10名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组里,学生的学号、姓名、和四项成绩由键盘输入,然后计算出平均分放在结构体对应的域中,调用writerec函数输出10名学生的记录.请在【 】内填入正确内容.#include 【题10.46】以下程序的运行结果是【7,3】。struct ks {int a;int *b;} s[4],*p; main(){ int n=1 , i;printf(“n”);for(i=0;i<4;i++){ s[i].a=n;s[i].b=&s[i].a;n=n+2;} p=&s[0;p++;printf(“%d,%dn”,(++p)->a,(p++)->a);} 【题10.47】结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。请在【 】内填入正确内容。static struct man { char name[20];int age;} person[ ]={“li-ming”,18, “wang-hua”,19, “zhang-ping”,20 }; main(){ struct man *p,*q;int old=0;p=person;for(;p【dt[leap][i]】;p++)if(old age){q=p;【d】;} printf(“%s%d”,【p】);} 【题10.48】 以下程序运行结果为【 19 83.5 zhang l9 83.5zhang y hang】.struct s{ int a;float b;char *c;} main(){ static struct s x={19,83.5,”zhang”};struct s *px=&x;printf(“%d%.1f%sn”,x.a,x.b,x.c);printf(“%d%.1f%sn”,px―>a,(*px).b, px―>c);printf(“%c%sn”,*px―>c―1,&px―>c[1]);}