C语言程序设计教学改革总结报告

2025-01-21 版权声明 我要投稿

C语言程序设计教学改革总结报告(精选8篇)

C语言程序设计教学改革总结报告 篇1

《C语言程序设计》是信息工程系各专业都开设的一门非常重要的专业基础课,也是国家计算机等级考试可选编程语言之一。掌握好C语言的编程技术,将为学生学习后续高级编程语言奠定坚实基础。但C语言概念比较复杂,规则繁多,使用灵活,容易出错,学生掌握起来有一定的难度。以往授课方式为大教室合班上课,课后安排上机实验。学生反映理论内容较抽象,并与实践有些滞后脱节,给学生掌握课堂内容增加了难度。针对这种情况,我系自2007年起,对《C语言程序设计》进行了教学改革,对授课方式,考核方式,教案组织,上机考试等几方面进行了改革,并取得了非常理想的教学效果。

首先,改变了以往大教室合班上课方式,改为单班实验室授课。这种方式授课,可以使学生听懂教师所讲授的理论内容之后,马上通过上机实践,加深理解并真正掌握课堂内容,同时也提高了学生的动手编程能力。掌握编程技术的最佳方法就是自己动手编程,在实践中逐步提高水平。而这种授课方式,正好可以使理论与实践相结合,并且由于单班授课,教师可以对每名学生进行一对一辅导,这样可以使学生对课堂内容马上理解并掌握,所以教学效果良好。

其次,对考核方式进行了改革,成绩考核方法是平时成绩占30%,上机考试成绩占30%,笔试成绩占40%。这种考核方式即可以考察学生的平时表现,又可以考察学生对课程的掌握程度。既考察了理论掌握情况,也考察了学生的实践动手编程能力,客观公正。通过学生意见反馈,学生对这种考核方法也表示赞同和认可。

第三,我们针对单班实验室授课这种新的授课方式,重新编写了教案。组织教案的原则主要是理论与实践相结合,组织方式是,对于每一章节,首先介绍概念,原理,算法,语法和注意事项,然后通过适当的例题来讲解,同时组织1-2个例题,立即让学生上机实践,编写和调试程序,教师当堂辅导,所以使学生可以对课程内容当堂理解,当堂消化吸收。

第四,对以往上机考试进行了改革。以往上机考试为教师出3-4道编程题,每名学生都答一样的题,存在一些弊端。现在上机考试改为采用《C语言程序设计上机

考试系统》,系统具有自动出题、随机组卷、计时收卷、实时评分和记录成绩功能,大大提高了考试效率。每名学生的3道考题是随机产生的,与周围学

生的考题均不相同,所有考题取自国家二级考试模拟题题库,具备针对性,同时《C语言程序设计上机考试系统》具备平时练习和正式考试两种使用方式,学生平时练习时可以生成参考答案,这样学生可以在练习过程中,逐步提高编程水平。因为是实时电脑评分,所以迫使学生必须经常练习,在不知不觉中也就提高了对C语言程序设计的理解和掌握。

从成绩上分析,以2007-2008第二学期为例,我系共有314 人参加了考试,及格人数 281人,及格率89.5%,不及格人数 33人,不及格率10.5%,平均分72.3。我讲授《C语言程序设计》已有多年,据我所知以往考试的不及格率约为30%左右,平均分约为60分上下,所以教学改革后,《C语言程序设计》取得了很好的教学效果。

从学生反映上分析,学生对在机房上课及考核方式完全认可,认为既可以掌握理论知识,同时通过自己动手实践掌握编程技术,加深了对课程内容的理解和掌握。学生普遍反映能够提高动手实践能力和理论知识运用能力。

《C语言程序设计》教学改革存在的问题有以下几点,第一,现在使用的教材是清华大学出版社谭浩强编写的《C语言程序设计》,是国内权威的教材,但它在内容的组织、顺序的安排与在实验室上课有些差别,所以是否考虑针对在实验室上课这种新的授课方式,重新编写一本教材。第二,教案的内容上,还有待于进一步细化和调整,尤其是学生练习的例题,需要进一步的斟酌与挑选。第三,《C语言程序设计上机考试系统》还需要升级完善,在考题数量,难易程度,答案数量以及适用于VC++开发环境等方面,还有大量的工作需要完成。

总之,《C语言程序设计》教学改革取得了非常理想的教学效果,无论是在学生成绩的提高上,还是学生的反映上,以及考试的效率上等均达到了教学目的,但仍存在一些不足,希望院系领导能够针对存在的问题,组织人员,商讨对策,进一步提高《C语言程序设计》这门课程的教学水平。

C语言程序设计教学改革总结报告 篇2

1“以人为本”开展教学

学生是教学活动的主体,教学活动要以学生为中心而展开。教育心理学的研究表明:学生在没有精神压力、没有心理负担、心情舒畅,情绪饱满的情境下,大脑皮层容易形成兴奋中心,思维最活跃,实践能力最强。因此,在授课过程中,本人尽量以通俗易懂的方式讲解,通过设置问题情景,充分调动学生的积极性和主动性,引导学生参与到教学环节中。课下,深入学生群体,通过与学生交流,把握学生的思想动态,及时做好学生的思想工作。同时利用课余时间与学生打成一片,建立一种民主平等亦师亦友的关系。在评价学生时,根据学生特点,经常运用一些激励性的语言。例如:“你真聪明”、“你真行”、“我为你感到骄傲”、“你虽然说错了,但很勇敢”等等。一次次的表扬和鼓励,使学生充分信任自己,从而达到在课堂教学中的互动。

2 采用“模块化”教学方式

C语言是计算机及其相关专业的一门非常重要的基础课。但这几年的C语言的教学效果总是不理想。主要存在的原因:一是C语言牵涉的概念比较复杂,规则繁多。不容易记忆,而且易混淆。二是C语言应用灵活。学生不能较好地将所掌握的理论知识应用到实践中。针对现状,我在本学期授课中,积极响应职业教育改革要求,进行模块化教学。按照C语言教学大纲和教学计划,我将授课内容划分为6个模块:课程入门、结构化程序设计、数组应用、函数应用、结构体和指针的综合应用以及文件应用。在每一模块的教学过程中,首先介绍一个较完整的程序例子,该例子包含了此模块所涉及的主要语法和语句,目的是使学生先对此部分内容有个初步的印象,再简单介绍该例子中用到的语法和语句,让学生对该模块的学习有一个大概的了解,也不会因为一大堆语句的出现,而对学习语言望而生畏。这样的教学方法,学生先对语言的学习有了整体的概念,再具体介绍语句,学习时心里就有了“底”。整个教学过程中应该把解题思路、方法和步骤(即“算法”)当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。

3 构建自主探究、小组讨论的学习模式

为了能够及时、全面地关注到每位学生的学习状态,充分调动学生的积极性,我采用分组方式进行教学控制和管理。每周抽出固定时间对组长进行提前培训,并给出一些难度较高、与实际生活接近的题目,加强辅导,引导学生掌握良好的编程思想。然后在课堂讨论和实践课时间,就由组长全权负责。实践证明,自主探究、小组讨论的学习模式,变被动接受为“自主研究”型学习,实现学生学习方式的个性化。这种学习模式能够克服和解决以教师讲授为主要形式带来的许多弊端,尤其在促进调动全体学生参与学习活动方面效果特别明显。这种学习模式是研究型的,力求做到学生人人参与,为其创设了宽松良好的环境,使其可以随想、随说、随问,消除自卑感,让其不同程度的得到发挥、提高。

4 采用丰富多彩的CAI课件进行课堂教学

针对C语言中一些比较抽象、难理解的知识点,积极引入CAI课件进行讲解。CAI课件可创设新颖有趣的动画情境,容直观性、多变形、知识性、趣味性于一体,为学生营造一个图文并茂、动静结合的教学场景,促使学生多种感官同时接受刺激,大大激发了学生的学习兴趣,活跃课堂气氛,从而达到“课伊始,趣亦生”的境界。以指针为例,指针是地址的形象化名称。要想掌握指针,关键是弄清楚指针的指向问题。所以此部分内容需要结合所使用的数据在内存中的存储问题讲解。这就需要形象化的描述出内存的存储。利用CAI课件不但能够形象化地描述出数据在内存中的存储,还可以动态记录指针在某一时刻的变化。从而化抽象为形象,便于学生理解。

总之,经过积极的探索和思考,打破传统的教学模式,采取以人为本、模块化教学、结合CAI课件等方式,充分调动学生的积极性和参与性,才能更好地培养学生的竞争合作精神和独立学习的能力,才能适应职业教育的改革发展要求。

参考文献

[1]张瑞,陈岚.关于多媒体教学的几点思考[J].贵阳金筑大学学报,2004(4):73-74.

[2]薛小锋.C语言程序设计》教学方法探析[J].福建电脑;2004(1):81,87.

[3]魏利华.谈《C语言程序设计》课程的教学定位[J].雁北师范学院学报,2003(3):97-99.

[4]徐章艳.“C语言程序设计”实验教学探讨[J].电气电子教学学报,2004,26(2):84-89.

《C语言程序设计》教学探究 篇3

关键词:教学方法案例教学启发教学教学效果

0 引言

《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的语言课程,在整个语言课程体系中占有非常重要的地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生很大的影响。针对教师的教法和学生学习语言类课程的学法,结合近几年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言课程的教学和学习有所帮助。

1 分析教学中存在的问题

《C语言程序设计》是一个逻辑性很强的课程。有些问题是将数学知识转化用c语言来实现,这就要求学生首先要能够理解和掌握数学知识,才能将其转化用c语言来实现。在调试程序时,提示的信息都是用英语给定,那么也就要求学生掌握最基本的英语单词,有些甚至是计算机专业英语,能将英语句子翻译为汉语,才能够对程序加以修改。学生在心里认为c语言难学,没有积极学习的主动性,导致上课时没兴趣,不能专心听讲,布置的作业无从下手,在实践课中,看到要编写的程序题目,理不出头绪。

2 涉及新的知识要有导入

在教学的過程中,要将新的知识点,要有很自然的导入语,引导学生思考问题和解决问题的方法。例如:scanf(“%d”,&a);只能从键盘接受 一个整型数,现在要输入40名学生的成绩,如何通过一个scanf函数来实现,难道是要定义40个变量,那如果要接受100个数呢?更多的呢?为了解决诸如此类的问题我们采用数组来实现。这样也就引导学生思路跟着教师,给他们提出问题,在给出解决问题的办法。

3 举一反三

给定一个例子时,将涉及到的所有内容都要讲到。各种形式,可能出现的错误都要指定。例如:现在要求n!我们可以给定一下几种形式:

(1)main()(2)main()

{ int i=1,n;{inti=1,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

while(i<=n) do{ s*=i;

{s*=i;i++;

i++;} }while(i<=n);

printf("%lf",s); printf("%lf",s):

} }

(3)main()(4)main()

{inti,n ; {int i,n;

double s=1;doubles=1;

scanf("%d",&n); scanf("%d",&n);

for(i=1;i<=n;i++)i=n;

s*=i;while(i>=1)

printf("%lf",s); {s*=i;

} i--;}

printf("%lf",s);}

(5)main() (6)main()

{intI,n; { inti=0,n;

doubles=1; doubles=1;

scanf("%d",&n); scanf("%d",&n);

i=n; while(i<=n)

for(i=n;i>0,i--) {i++;

s*=I;s*=i;}

printf("%lf",s);}printf("%lf",s);}

一个例子可以给出多种方法来实现,在这只给出6中形式,从这6种中,就可以看到初值不同,语句的书写顺序不同。通过一个例子,让学生能理解各种形式,遇到诸如此类问题时,就可以迎刃而解。

4 与实践教学相结合

程序设计课程具有很强的实践性,对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序。应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。

参考文献:

[1]朱健,庞倩超.C语言程序设计案例教程.全国高职高专教育精品规划教材:北京:交通大学出版社.

[2]郭芹.对高职高专计算机专业程序设计教学的思考.中国科技信息.2008(1).

[3]谭浩强.C语言程序设计教程.北京:高等教育出版社.

c语言课程设计设计报告 篇4

C语言是一门通用计算机编程语言,应用广泛。下面是小编为大家整理的关于c语言课程设计的设计报告,欢迎大家的阅读。

高等职业教育的目标及侧重点不同于普通高等教育,其培养的学生在毕业后应能直接上岗,具有熟练的实践操作技能。教育部《关于以就业为导向深化高等职业教育改革的若干意见》中指出,高职教育应“坚持培养面向生产、建设、管理、服务第一线需要的‘下得去、留得住、用得上’,实践能力强、具有良好职业道德的高技能人才”。

因此,加强实践性课程教学,对保证人才培养质量显得尤为重要。我院为贯彻《关于全面提高高等职业教育教学质量的若干意见》精神,针对区域经济发展的要求,灵活调整和设置专业课程,以就业为导向,加快专业课程对应的课程设计改革。目前,我院按照由浅入深、不断深化的教学规律,构建了实践教学三层次四环节的实践课程体系。实践教学三层次包括基本技能、专业拓展、综合创新,四环节包括实验、实习实训、设计和课外实践。“C语言课程设计”是我院信息类专业的必修专业基础课程设计,在“C语言程序设计”课程教学结束后的下一学期进行,历时2周,40学时。课程开设的目的在于培养学生分析问题和解决问题的能力,为学生提供一个动手、动脑、独立实践的机会。

21项目教学法“项目教学法”是基于建构主义教学理论的一种教和学的模式。著名的瑞士心理学家皮亚杰认为,知识不是通过教师传授得到的,而是学生在一定的情境下,借助他人的帮助,利用必要的学习资料,通过意义建构的方式而获得的。美国项目管理专家约翰·宾认为:“项目是要在一定时间里,在预算规定范围内需达到预定质量水平的一项一次性任务。”

“项目教学法”是通过实施一个完整的项目而进行的教学活动,旨在把学生融入有意义的任务完成的过程中,让学生积极地学习,自主地进行知识的建构,在课堂教学中把理论与实践教学有机地结合起来,充分发掘学生的创造潜能,提高学生解决实际问题的综合能力。因此,在教学活动中,教师将需要解决的问题或需要完成的任务以项目的形式交给学生,在教师的指导下,以小组工作方式,由学生自己按照实际工作的完整程序,共同制定计划,共同或分工完成整个项目。

在项目教学中,学习过程成为一个人人参与的创造实践活动,注重的不是最终的结果,而是完成项目的过程。在高等职业技术教育中,项目是指以生产或制作一样具体的、具有实际应用价值的产品的工作任务。在技术领域,很多小产品或一些复杂产品的模型都可以作为项目,如:在信息类专业,可以开展微机组装、网站建设、信息管理系统开发、局域网构建、单片机制作、多媒体课件制作等项目;在电子类专业,可以开展报警器、LED、门铃、家电组装等项目;在商业、财会和服务行业,所有具有整体特性并有可见成果的工作也都可以作为项目,如商品展示、产品广告设计、营销策划等。

22项目教学法的基本特征项目教学法与传统的教学法相比,有很大的区别,主要表现在改变了传统的3个中心:以教师为中心转变为以学生为中心;以课本为中心转变为以“项目”为中心;以课堂为中心转变为以实际经验为中心。项目教学法具有以下特点:

实践性。项目“源”于企业,项目的主题与真实世界密切联系,由浅入深,选择的项目具有典型性、实用性。

自主性。提供学生根据自己的兴趣选择内容和展示形式的决策机会,让学生能够自主地进行学习,从而有效地促进学生创造能力的发展。

发展性。长期项目与阶段项目相结合,构成了实现教学目标的认知过程。

评价特殊性。项目型教学的评价注重学生在项目活动中能力发展的过程,测评内容包括学生参与活动各环节的表现及作业质量,避免了传统的一张试卷定成绩的弊端。测评可以采用自评、小组评、教师综合评等方法。教师只有明确并抓住项目化教学特点,才能更好地完成教学目标。

31教学内容为了更好地开展课程设计教学,经过多次实践和摸索,总结出学生在具体实施项目中一般存在2个方面的知识不足:

第一,在教学内容上,由于前导课程在教学上受学时影响,很多教师对指针、结构体、共用体和文件基本操作的知识介绍不甚完善、系统,更难谈上辅以实例加以消化。对此,针对学生在这些知识点上的掌握程度,利用4~6个学时,实施区别式的、辅导性的、实例化教学。

第二,学生对项目管理知识知之甚少,针对此情况,采用2个阶段实施有别于常规教学的补课行动。第1阶段为项目准备阶段,利用2~4个学时,安排曾经做过项目且做得比较好的学生,现身介绍项目的准备工作、项目实施过程要完成的工作、项目验收及作业提交的工作等。在学生介绍中,教师穿插讲解,辅以点评。第2阶段为项目实施阶段,教师应针对学生发生的问题,及时给予指导,直到学生弄懂为止。

32教学要求切实保证教学质量和教学效果,本着“学以致用”的原则,要求学生做到以下3点:第一要做到“学有三备”,即:在项目实施前做好知识储备,在项目实施中做好安全防备,项目结束时做好被评准备。第二要写好“三书一报告”。“三书”即每个项目组要做需求规格说明书、概要设计说明书、详细设计说明书,“一报告”即人人都要做课程设计报告。第三要做“四自”参与者。“一自”即自律,要求学生自觉履行学生守则和项目实施有关规则,不迟到、不早退、不缺席,实施点名制度,若无特殊原因,有5次旷课者自愿以重修论处;“二自”即自尊,要求学生尊重知识、尊重学习规律、尊重项目组成员、尊重教师、尊重自己;“三自”即自信,要求学生相信自己能够按时、按量、按质完成工作内容,遇到困难时,沉着、冷静,理性地寻找问题解决的办法;“四自”即自强,要求学生不满足自己已有的成绩和以往与课题项目组共同取得的成绩,用创新和超越的思想,做出比以前哪怕是前进一小步的事情。同时也要求教师做好相应的工作,如做好项目整体规划、精心准备、努力激发学生参与行为、为人师表、表扬为主、批评为辅、多分析、精点评等。

33项目实施进程项目教学法是一种生动、灵活、多样化的教学方法。在项目实施过程中,既不能生搬硬套地利用一个时间标准,又不能影响项目实施的整体进程,因此对时间的灵活处理是非常关键的,也是值得商榷的。

34明确项目内容,帮助学生立项立项首先要审题。当学生拿到项目列表时,最不能忽略的问题,就是提醒学生审题。审题恰当对学生以后开展各项工作是关键。审题时,学生首先要考虑自己的长、缺处,做到扬长避短,也就是说审题就是学生自己审自己完成该项目有多大的能力,有没有信心。只有学生明白自己,才可以避免以后实施项目过程中走弯路。同时既要建议学生在组建项目组时,考虑所在组的其他学生的长处和短处,又要尽量避免使被学生认定的差等学生没人愿意与其组合,而成绩好的学生又抱团的现象发生。

根据近几年带课程设计的经验,关于如何合理选择项目,建议教师应从学生的角度考虑以下4个因素,协助学生做好选题:

规模。项目规模太大会影响项目的完整性,项目规模太小难以体现课程的实践性。

难度。项目难度一定要适中,既要激发学生学习的兴趣又不能影响学生的自信心。

实用性。项目的选择应该是现实世界真实的工作任务,具有一定的现实和实用性。

C语言课程设计实践报告 篇5

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: ***6 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main(){

int n=1;while(n!=0){

srand((unsigned)time(NULL));int num,input;int times=0;num=(rand()%100)+1;printf(“在1~100间猜一个数n”);scanf(“%d”,&input);do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf(“你猜的数太小了,请再猜一个n”);scanf(“%d”,&input);times++;}while(times<9);if(times>=9)printf(“你已经猜了10次都猜不中,你输了n”);printf(“继续下一轮新的猜数请按1,退出请按0n”);scanf(“%d”,&n);return 0;运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求:(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num;char name[10];int grade[3];int sum;float ave;int rank;};student s[M];int amount;

void input(student s[]);void title();

void list(student s[]);int main(){ input(s);int i=0;for(i=0;i

//要求1 计算总分平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3;} //要求2 按总成绩排序

int rank=1;student t;for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++;} //要求3 打印名次表

title();list(s);//要求4 查询

int number;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i

if(number==s[i].num)

{

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system(“pause”);return 0;}

void input(student s[]){ printf(“输入班上参加期末考试的人数(不大于30人)”);scanf(“%d”,&amount);printf(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”);for(int i=0;i

printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,i+1);

scanf(“%u%s%d%d%d”,&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]);} }

void title(){

printf(“ 学生成绩表n”);

printf(“-----------------------------n”);

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“-----------------------------n”);}

void list(student s[]){ //n表示人数

int i;//rank=1;for(i=0;i

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf(“-----------------------------n”);} }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…)******** 70‐79 7(…)******* 80‐89 8(…)******** >=90 4(…)****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n1、n2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20];int score;};stu s[M];int i=0,num=0;int n1=0,n2=0,n3=0,n4=0,n5=0;float sum=0,ave=0;int count=0;void input(stu s[]);void getnotpass(stu s[]);

void getavg(stu s[]);void percent(stu s[]);int main(){ /*stu s[M];int i=0,num=0;int n1=0,n2=0,n3=0,n4=0,n5=0;float sum=0,ave=0;*/ input(s);getnotpass(s);getavg(s);percent(s);return 0;} void input(stu s[]){ for(i=0;i

printf(“请输入第%d个学生的姓名和成绩n”,i+1);

scanf(“%s%d”,&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score;} printf(“学生信息录入完毕nnn”);} void getnotpass(stu s[]){ printf(“不及格人数为:%dn”,n1);printf(“不及格人员名单如下:n”);for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf(“%st”,s[i].name);} printf(“n”);ave=sum/num;} void getavg(stu s[]){ for(i=0;i

if(s[i].score>=ave)count++;} printf(“成绩在全班平均分及平均分之上的学生人数为:%dn”,count);printf(“成绩在全班平均分及平均分之上的学生名单如下:n”);for(i=0;i

if(s[i].score>=ave)

printf(“%st”,s[i].name);} printf(“nnn”);} void percent(stu s[]){ printf(“各分数段的学生人数及所占的百分比如下:n”);printf(“分段t 人数t 图形n”);printf(“<60t%d(%.0f%%)t ”,n1,(float)n1/(float)num*100);for(i=0;i=90t%d(%.0f%%)t ”,n5,(float)n5/(float)num*100);for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen(“f: st udent.txt”,“w”),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num;char name[10];int grade[3];int sum;float ave;int rank;};student s[M];int amount;

void input(student s[]);void title();void list(student s[]);int save();//输出到文件中 int main(){ input(s);int i=0;for(i=0;i

//要求1 计算总分平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3;}

//要求2 按总成绩排序

int rank=1;student t;for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++;} save();//要求3 打印名次表

title();list(s);//要求4 查询

int number;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i

if(number==s[i].num)

{

printf(“学号t姓名t数学t英语tC语言t总分t平均分t排名n”);

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system(“pause”);return 0;} void input(student s[]){ printf(“输入班上参加期末考试的人数(不大于30人)”);scanf(“%d”,&amount);printf(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”);

for(int i=0;i

printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,i+1);

scanf(“%u%s%d%d%d”,&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]);} } int save(){

FILE *fp;fp=fopen(“f:student.txt”,“w”);if(!fp){

printf(“can not open file!n”);

exit(1);} char c[]=“学号t 数学t 物理t 英语t 排名n”;fputs(c,fp);for(int i=0;i

fprintf(fp,“%ut %dt %dt %dt %dn”,s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank);} fclose(fp);} void title(){

printf(“ 学生成绩表n”);

printf(“-----------------------------n”);

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“-----------------------------n”);}

void list(student s[]){ int i;for(i=0;i

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf(“-----------------------------n”);} }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen(“f: st udent.txt”,“w”),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5.实践4(1)(2)题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1.定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。2.函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu);int readDataxy(char *filename,struct sxy *s1);int readDataco(char *filename,struct scode *s2);void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k);struct student { int id;char name[10];int sexno;char sex[4];int deptno;char dept[20];int scores[10];float ave;

};struct sxy { int id;char sex[4];};struct scode { int id;char dept[20];};int main(){ struct student stu[100];struct sxy s1[2];struct scode s2[10];int n,m,k;n=readData(“f:StudentInfo.txt”,stu);m=readDataxy(“f:SexInfo.txt”,s1);k=readDataco(“f:CodeInfo.txt”,s2);if(n==-1||n==0)

return 0;if(m==-1||m==0)

return 0;if(k==-1||k==0)

return 0;printStudent(stu,s1,s2,n,m,k);

system(“pause”);return 0;} int readData(char *filename,struct student *stu){ FILE *fp;int i=0,j;fp=fopen(filename,“r”);if(!fp){

printf(“error1”);

return-1;} fscanf(fp,“%d”,&stu[i].id);while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,“%s%d%d”,stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

fscanf(fp,“%d”,&stu[i].scores[j]);

++i;

fscanf(fp,“%d”,&stu[i].id);} return i;} int readDataxy(char *filename,struct sxy *s1){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){

printf(“error2”);

return-1;} fscanf(fp,“%d”,&s1[i].id);while(!feof(fp)){

fscanf(fp,“%s”,s1[i].sex);

++i;

fscanf(fp,“%d”,&s1[i].id);} return i;} int readDataco(char *filename,struct scode *s2){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){

printf(“error3”);

return-1;} fscanf(fp,“%d”,&s2[i].id);while(!feof(fp)){

fscanf(fp,“%s”,s2[i].dept);

++i;

fscanf(fp,“%d”,&s2[i].id);}

return i;} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k){ int i,j;printf(“ 学生信息统计n”);for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf(“%4d”,stu[i].scores[j]);

printf(“n”);} }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5)题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3.函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。4.函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5.函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu);int readDataxy(char *filename,struct sxy *s1);int readDataco(char *filename,struct scode *s2);void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k);void search(struct student *stu,int n);void sortbyname(struct student *stu,int n);void sortbyave(struct student *stu,int n);struct student

{ int id;char name[10];int sexno;char sex[4];int deptno;char dept[20];int scores[10];double ave;};struct sxy { int id;char sex[4];};struct scode { int id;char dept[20];};int main(){ struct student stu[100];struct sxy s1[2];struct scode s2[10];int n,m,k,b;while(1){

system(“cls”);

printf(“1.显示学生信息n”);

printf(“2.姓名升序排序n”);

printf(“3.平均成绩降序n”);

printf(“4.学号查询学生信息n”);

printf(“0.退出n”);

printf(“n输入需要查询的序号:”);

scanf_s(“%d”,&b);

switch(b)

{

case 1:

n=readData(“f:StudentInfo.txt”,stu);

m=readDataxy(“f:SexInfo.txt”,s1);

k=readDataco(“f:CodeInfo.txt”,s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf(“按平均成绩降序排序如下:”);

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system(“pause”);} system(“pause”);return 0;} int readData(char *filename,struct student *stu){ FILE *fp;int i=0,j;double sum;fp=fopen(filename,“r”);if(!fp){

printf(“error”);

return-1;} fscanf(fp,“%d”,&stu[i].id);while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,“%s%d%d”,stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

{

fscanf(fp,“%d”,&stu[i].scores[j]);

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,“%d”,&stu[i].id);} return i;} int readDataxy(char *filename,struct sxy *s1){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){

printf(“error2”);

return-1;} fscanf(fp,“%d”,&s1[i].id);while(!feof(fp)){

fscanf(fp,“%s”,s1[i].sex);

++i;

fscanf(fp,“%d”,&s1[i].id);} return i;} int readDataco(char *filename,struct scode *s2){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){

printf(“error3”);

return-1;} fscanf(fp,“%d”,&s2[i].id);while(!feof(fp)){

fscanf(fp,“%s”,s2[i].dept);

++i;

fscanf(fp,“%d”,&s2[i].id);} return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k){ int i,j;printf(“ 学生信息统计n”);for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf(“%4d”,stu[i].scores[j]);

printf(“n”);} } void search(struct student *stu,int n){ int m,col=0;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&m);for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf(“%4d”,stu[i].scores[j]);

}

} } if(col==0)printf(“不存在该名学生信息n”);} void sortbyname(struct student *stu,int n){ student temp;for(int i=0;i

for(int j=0;j

{

if(strcmp(stu[i].name,stu[j].name)>0)

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf(“按姓名的升序排序如下!n”);for(int i=0;i

printf(“%8d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf(“%4d”,stu[i].scores[j]);

}

printf(“n”);} } void sortbyave(struct student *stu,int n){ int i,j,flag;student s;for(j=0;j

flag=0;

for(i=0;i

{

if(stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0)break;} }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

C语言程序设计教学改革总结报告 篇6

《C语言程序设计》实验报告

年级:2009级(必修)

学号:姓名:专业:

实验题目:

输入一个班N个学生(N为符号常量,自定人数)的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,最后打印一张按高分到低分名次排序的成绩单。要求:

1)排序用一个函数实现。

2)打印的成绩单表项包括:序号,学号、数学、英语、计算机、总分、平均分。

3)按实验报告电子模板格式填写实验内容。

可用多个函数或多个源文件实现

可以用数组法、指针法、结构体法编写程序。

源程序清单:

主要标识符说明:(说明变量、函数、指针、结构体等)

实验结果贴图:

实验环境:

intel Pentium 4 计算机,windowsXP操作系统,Microsoft Visual C++ 6编译环境。

教师评语:

《C语言程序设计》教学改革探讨 篇7

1 学生必须理解和记忆书本上的知识点

书本上的知识点是学生编写程序的前提,学生在教师的讲解下要在理解的基础上进行记忆和努力掌握,基础差的学生,教师要鼓励他们课前预习,上课认真听讲和课后复习。但是实际上很多学生都不怎么复习,甚至今天听课明天就忘掉,等到快要期末考试时才熬夜复习,这样所得的学习效果是很低。针对这类情况做出以下措施:每次课(由两小节课组成)的前十五分钟,教师拿上次课讲的知识点用来抽问学生,然后把学生回答的情况以平时分记录在案,作为学期末总评分数的依据。这实际上是借着学生怕补考的心理作为学习的驱动能量,结果证明学生学习的积极性是有所提高,而在提问与回答中也再一次使学生巩固学习C语言的知识点[1]。

2 学生能够有条理地构思程序设计的步骤

对于学生学《C语言程序设计》这门课来说,必须会设计算法尤其是流程图,并且根据流程图来编写程序。如果说编写的程序代码是一个具体的过程,那么,流程图就是这个具体过程的纲要,如图1的流程图实例。因此在教学方案上,想办法让学生学好与用好流程图,是学生能够有条理地构思程序设计步骤的关键。

流程图包含顺序结构,选择结构和循环结构,按照美国国家标准化协会ANSI规定的常用流程图符号包括:起止框、输入输出框、判断框、处理框、流程线、连接点、注释框,这些符号按照一定的程序构思组成流程图。流程图是受软件设计师欢迎,软件设计师在结构化设计时,喜欢用软件Microsoft Visio 2010来设计,这是因为流程图在Microsoft Visio 2010里能够被快速设计与修改,在开发大型的软件和处理众多的流程图时,具有很高的效益。而N-S流程图则忽略流程线,它是由一定数目的基本框组成一个大框,它具有易读懂性的特点,但它的设计与修改的效率不如前者的流程图。

由此,关于学生能够有条理地构思程序设计的步骤有如下措施:第一,在教学上学生学会借鉴式地从纲要与具体过程中,运用流程图来构思程序设计;第二,在使用工具上学生要与实际接轨,紧跟软件设计师的脚步,学会使用Microsoft Visio 2010来设计流程图;第三,学生要适当从书本上没有流程图的编程语言中设计出流程图。

3 学生能够很好地编写程序语言

流程图对学生能够很好地编写程序语言有着重要的作用,学生要按照流程图的表达,进行C语言程序编码,而且在课堂上教师要通过大量的练习对学生进行辅导,如下图2的求和循环。

上图2,即求3 + 4 + 5 + 6 + 7… + 999 + 1000的和,其代码如下:

对对上述类别的循环编码,有些学生不适应或者跟不上,要改变这种状况,学生要在课堂上努力听讲,课后教师要鼓励同学之间互相帮忙和互相促进。另外,学生在程序语言编写与学习时,要努力克服困难,遇到不懂的问题时停下来思考是很正常,因此,学生不要依赖别人的答案,要习惯通过自身的理解与记忆,查找相关的学习资料与知识点去解决问题,如果实在是解决不了,才去问同学或者问老师,这样才有印象和效果。

学生在学习复杂的C语言程序编码时,会存在一些错漏的编码,这是比较普遍的现象,教师适当教他们从重点着手的方法,也就是说先把关键的代码编完,然后再从关键的代码展开,缺什么就编什么,编完再测试一下,看有无出错,如有错误再按照测试软件的提示去修改。

学生要想学好C语言程序编码,需要一个过程,这个过程需要足够的耐心与毅力,而成功往往属于敢于吃苦的学生[2]。

4 学生能够在实践中很好地应用编程技术

很多教师在课堂上按照书本上的知识点逐一去讲解,又通过编程实例,目的让学生得以巩固,这看起来是很系统化。然而对学生而言,他们在课堂上能听多少就是多少,在课外他们中却有不少人,是懒得动手和懒得去练习C语言编程,课后安排的编程作业,很多学生的编程是同一个版本,也就是雷同。针对有一部分学生积极课后学习,而另一部分学生懒得课后学习的这两种情况,从教学的整体上看,这谈不上是知识技术与实践结合,因为可能只有少数学生的学习效果达标,而且书本上的知识,对多数学生来说,是否学得好还令人怀疑。所以,教学改革必须在实践中以编程实例的驱动方式,结合企业软件开发项目的实例去培养学生。

C语言程序编程技术的实践应用能力的培养,对于学生这类初学者来说,主要还是依靠计算机实验室,他们不可能一开始就适应企业,毕竟企业还是要讲效益,还要生存,只不过教师可以把实际软件企业开发的项目搬到实验室来,让学生了解软件开发的实战过程,让学生更深入了解编码的技巧。

不过要做到这一点,教师在教学中要首先在实验室里培养学生的运用能力,即让学生编写一些与课堂上学过的类似程序,看看学生能否把学过的知识加以巩固与应用。学生在实验室做的练习,教师主要还是采取目标驱动法,并把练习的结果以平时分记录在案,到学期末加到总评上去。这样的把关,对学生下阶段学习实际企业开发软件的实战技巧有着铺垫的作用[3]。

5 结束语

高职高专的学生对于C语言程序设计的学习,关键是能否把学过的编程技术应用到实践中去,以上的改革措施与途径正努力做到这一点,而实践证明,经过教师与学生的双方努力,学生所取得的成绩是有所提高,该措施与途径具有一定的可行性。

摘要:针对高职高专的学生,以培养具有较强的专业技能和实践能力为目的,高职高专C语言程序设计的教学,必须做出应有的改革,其改革效果如下:学生能够有条理地构思程序设计的步骤;学生能够很好地编写程序语言;学生能够在实践中很好地应用编程技术。

浅谈C语言程序设计教学方法 篇8

【关键词】C语言程序设计 教学方法 资源整合

C语言是一门结构化程序设计语言,对于学生来说,C语言程序设计的思维方式和概念都是全新的,学生接受起来很困难。那么,在C语言程序设计教学过程中,怎样开展这种构造性的又具有创造力活动的教学呢?笔者经过这几年的自我学习以及实际教学中的不断摸索,对C语言程序设计教学方法有了一些认识,与大家共同探讨。

一、注重网络环境下的资源整合

互联网技术的飞速发展彻底引发了阅读、计算等方式的变革,巨大的信息量、便捷的信息传

递、极强的交互性,使得网络成为最有效的资源获取工具。因此,在教学过程中建立或利用一个以C语言为专题的编程学习网站,整合与C语言编程相关的丰富的学习资源,为学生提供动态的、协作性的学习环境和学习工具,让学习者自己选择信息资料,自己收集、分析并应用知识,去解决实际问题。通过网络学习环境开展C语言教学,提高了C语言教学活动的有效性。

二、以合作学习为导向,改革课堂教学环节

合作学习是备受国际教育界推崇的学习模式,因为它有助于培养学习者的合作精神和协同解决问题能力。

教学中,以几名学生为小组组成学习的基本单位,学生在学习小组内相互协作、相互帮助、群策群力,共同完成相应的教学任务。实际教学中,教师向各小组布置项目任务,给以必要的说明,提供必要的资料和网络资源,然后各学习小组研究问题,制定解决方案,最后将结果展示出来。例如,在C语言中的函数调用这一个问题,将程序分解为数个模块,每个小组各自承担其中一个模块的程序编写,C语言模块化程序设计的思想在这时得到充分地展现,让学生深刻理解了模块化程序设计理念,同时也使学生感受到了团队合作的重要性,培养了学生协作互助精神。

三、抓住重点,分散难点,注重循序渐进

学习程序设计是一个逐步积累的过程。教材在整体设计上,要注意分散难点、合理选材,为学生建立科学的学习顺序,并注意适时、适量,学以致用地逐步渗透相关的知识、思想和方法。对于有难度的知识点,采用先用一个简单的例子让学生有所了解,经过一段时间的反复练习以及相关知识的积累后,再引入一个复杂一些的例子,深入理解和掌握,然后再加以概括和总结。让学生对知识的认识、理解、运用有一个逐步深入的“螺旋式”上升过程。帮助学生把已学到的内容不断纳入新的内容体系中去,使学生认知结构中原有的概念和新的知识建立起实质性的联系。例如,双循环结构知识点中的打印规则图案的程序设计方法,就可依据问题的难易程度,先找出直角三角形图案形成的规律,再探究等腰三角形图案的形成特点,最后解决构成菱形图案的程序设计,让学生有一个全面、系统的理解和掌握解决该问题的思想方法。

四、立足任务驱动,渗透基本概念

概念的形成过程常常是学生进行逻辑思维的过程,如果遵循逻辑思维过程去组织教学,必将使学生容易掌握概念。因此,要想让学生领会C语言中抽象的概念,教学中以实例任务作为知识的载体,在每个实例中适时、适量渗透一些相关的概念和知识,由实例去驱动学生主动发现、分析和处理问题,让学生在做中学,在学中做,使学生在完成任务的过程中,逐渐地、很自然地去体会C语言的语法规则及相关概念,并且在这一过程中,学生还能体会到相似概念之间的差别,以及解决这一问题的不同程序设计步骤。比如,当型循环while与直到型循环do-while语句的区别,如果只通过教师讲述,多数同学一般只能在表面上知其然,实则不知其所以然,但如果给出一个具体的任务实例,让同学们在实践后的结果中自己去体

验两者之间的不同,留在学生脑海中的记忆将犹为深刻。

五、引导学生建构自己的知识体系

基于网络环境下的学习过程具有开放性、广域性和易交流性。因此,网络环境下的创新教育能真正达到因材施教、发展个性的目的,能够使学生主动参与学习过程,并按照自己的认知水平有序地进行学习和提高,并使其创造性学习成为一种习惯。建构主义的教学活动中,教师的教学形式并不固定,学生则作为一个主体,积极会同其他的小组成员一起,通过已经整合的学习资源在网络下讨论和学习,教师给予学生引导和帮助,解决学生建立知识体系过程中所出现的问题。这样,学生既掌握了教材上的内容,同时又通过网络资源学习了相关的知识点,完成了对自己知识体系的建构,形成了自己的学习方式,而教师不但完成了教学任务,也教会了学生学习的方法,为学生以后的自我学习打下基础,正所谓“教”与“学”相得益彰。

六、做好归纳总结,提高学生学习效率

C语言程序设计的学习,很重要的一点在于归纳总结。一个章节的结束,学生则难以形成完整、清晰的框架,因此,教师在教学中要及时归纳、做好小结。教学归纳可以是一个知识点的归纳(如if条件语句的归纳),也可以是对一种知识结构的归纳(如分支结构中包含if语句、while语句、循环语句等的归纳)。总结可以是一个小节的总结,也可以是一个单元内容的总结。归纳总结的形式也可以多种多样,可以使用文字概括,也可以使用图表总结,重点难点要着重强调。做好归纳总结,有利于学生对知识的理解、做到融会贯通,顺利实现知识迁移,提高学生的学习效率。

教学方法在程序设计教学中的重要性是不言而喻的,它制约着程序设计教学的效率。面对的教学对象不同,教学方法各异,但使每位学生都能得到充分的发展,培养创新人才,是我们的同一目的,教学绝不能脱离学生的知识背景和认知规律。

参考文献:

[1]扈中平.现代教育理论.高等教育出版社,2004.

[2]余胜泉.网络课程的设计与开发.教育技术通讯,2000,(10).

上一篇:出口退货的业务流程下一篇:毕业留言的短句