c程序实习报告

2024-08-03

c程序实习报告(精选9篇)

1.c程序实习报告 篇一

浙江理工大学信息学院

C程序设计实验报告

实验名称: 学时安排:

实验类别:

实验要求:1人1组

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的

二、实验设备介绍

软件需求: Visual C++ 6.0或CFree3.5以上版本

硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。

三、实验内容

四、程序清单

五、运行结果

六、实验心得

2.c程序实习报告 篇二

关键词:自动测试,静态测试,算法

1 问题的提出

随着装备自动化程度的不断提高, 计算机的应用越来越普遍, 为了提高软件开发的效率、可靠性, 必须用一种系统的方法对开发的软件进行评估, 度量其可靠性, 并自动对软件进行测试, 找出软件中存在的缺陷或错误。C语言作为一种高级开发语言, 具有通用性好, 编程效率高, 编程灵活, 移植性好, 因此C语言被选为各种装备软件开发的重要语言之一。装备的可靠性、可用性对软件的可靠性要求越来越高, 如何度量软件的可靠性、对软件进行自动测试的任务迫在眉睫。正是为了提高软件的可靠性, 对C语言编制的软件进行自动测试, 以期找出软件中潜在的错误和缺陷, 并协助程序员修改错误, 提高软件的质量和开发效率。

对C语言编制程序进行控制流分析, 并在源程序的适当地方插入一函数调用, 使其在运行时刻收集程序的运行信息。帮助程序员设计测试用例, 显示程序的运行过程, 判断程序的执行情况, 协助其改正错误。测试程序可作为软件测试的一种工具, 将提高测试效率, 保证软件的质量, 把程序员从低级的、重复的劳动中解放出来, 将主要精力放在软件的开发和设计上, 成倍地提高生产率[3,6]。

2 自动测试目标和算法

2.1 自动测试及其目标

基于被测试程序是否执行, 可以把软件测试分为静态测试和动态测试。静态测试只分析被测试程序, 如包含哪些语句, 哪些函数或模块, 函数之间的调用关系, 标识符的引用关系等。而动态测试则收集程序运行时刻信息:如哪些路径被执行, 每个路径执行的时间, 每个变量在某一时刻的值, 每个分支被执行时的条件等[4,5]。

动态测试的一般方法是, 在被测试的程序里适当的地方插入信息收集函数 (或称探针) , 再对源程序进行编译、运行, 当程序运行到收集函数时, 由收集函数往数据库中更新内容, 然后由一个事后处理函数对数据库进行分析、统计、显示[2,9]。

需要完成以下目标:以Win XP/NT作为软件运行的平台, 采用GUI (Graphics User Interface) , 针对VC6.0+的程序进行测试, 分析出控制流图, 并在屏幕上画出控制流图, 实时跟踪控制流图中哪些弧被经历过, 经历的次数是多少, 每次经历的时间是多少;显示每个节点对应的源代码;当前运行的代码加亮显示;源代码中的关键字、注释醒目地显示等[1]。

2.2 动态测试的算法

编程语言采用Delphi, 数据库选单机版的Paradox。

算法思路

自动对VC6.0+的.DSW (Develop Studio Workshop) 文件进行分析, 从.DSW文件中分析出它所包含的工程文件.DSP (Develop Studio Project) , 一个.DSW文件中可能包含多个.DSP文件。然后逐个对.DSP文件进行分析, 找出每个工程文件中包含的.C、.CPP文件, 再对.C、.CPP文件逐一进行分析。在对.C、CPP文件进行分析时, 首先找出每个文件中所包含的函数, 然后对每个函数进行分析。在分析过程中, 边分析, 边记录, 同时在函数的适当地方插入探针[7,8]。

(1) dsw、.dsp文件分析

.dsw、.dsp文件为文本格式, 用任何编辑器打开均可阅读其内容, 稍加浏览即可明白其格式, 不在此赘述。

1) .dsw文件分析

a.从.dsw文件中分析出.dsp文件名

b.分析.dsp文件

c.重复1) 直到所有的.dsp文件分析完毕

2) .dsp文件分析

a.从.dsp文件中分析出.C或.CPP文件名

b.分析该文件

c.重复1) 直到所有的.C或.CPP文件分析完毕

(2) C或.CPP文件分析

1) 将源文件切分为一系列的Token串, 存入一表中

2) 从Token表中过滤掉注释部分, 如/*…*/、//…

3) 从Token表中过滤掉”…”部分, 并考虑串中可能存在转义字符“””。

4) 从Token表中搜索并计算下列关键字所处的行、列, 并存入另一表List中:break、case、continue、default、do、else、for、goto、if、return、switch、while、{、}

5) 从List表中搜索并处理goto关键字, 并把goto的目的地址 (行、列等信息) 仍存入List表中, 相关信息存入goto预处理表中

6) 将List表按行、列的升序排序

7) 对List分析得到控制流信息, 在分析时, 在源程序的适当地方插入探针。

(3) 源文件Token化

利用了从Internet上收集到的一个控件TToken List, 设置好该控件的属性:1) 与源程序对应的流式文件TFile Stream的一个实例;2) 分隔符属性, 其设置方式是将布尔数组下标0~255对应的单元初始化, 每个单元和一个ASCII码对应, 若某个ASCII码为分隔符, 则以该ASCII码的序号为下标, 该下标对应的单元设置为true, 否则为false。控件的属性设置好后, 调用该控件的Tokenize方法即可把每个Token放入Token[]属性表中, 其中包括回车、换行符。其它属性, 如每个Token在源文件中的偏移, 每个Token的长度等都在控件中包含了, 因此, 后续的处理十分方便。

C、C++中的分隔符有:!、”、#、%、’、 (、) 、*、+、, 、-、.、/、:、;、<、?、&、[、、]、^、{、|、}、~等符号。

(4) 滤掉注释

注释内容有可能干扰对控制流的分析, 因此, 必须把它过滤掉。

1) 指针指向Token表头

2) 判断是否为/符号, 若是转3) , 否则指针+1, 重复2) 直到Token尾部结束。

3) 判断是否为*, 否转5)

4) 对/*…*/进行处理, 处理完后转2)

5) 判断是否为/, 若是转6) , 否则转2)

6) 处理//…直到换行符, 处理完后转2)

(5) 滤掉”…”部分

为了不影响对关键字的判断处理, 还必须过滤掉”…”部分

1) 指针指向Token表头

2) 是”符号吗?是转3) , 否则指针+1, 重复2) 直到Token尾部结束。

3) 若是字符, 判断下一字符是否为”, 若是则虑掉这两个字符, 否则下一字符为”时结束过滤, 转2) 继续

(6) 搜索关键字

因关键字有多个, 若把每个Token和所有的关键字进行比较, 将十分费时, 因此, 笔者考虑了一种较为有效的方法。一般编程语言中均提供了在某字符串中搜索字串的函数, 若能成功匹配, 返回其位置, 否则返回-1或其它的值。但存在一种情况:Token中的串是关键字的子串, 该如何处理这种情况?笔者的解决办法是:把每个关键字按升序排序, 把所有的关键字串结成一个串, 每个关键字之间插入分隔符, 分隔符是关键字中所包含的字符以外的其它任意字符。为了简化处理, 在串的头部和尾部也加上分隔符。因此, 若某个Token为该串的子串, 根据返回值, 判断子串的头部和尾部是否同时为分隔符, 若是则是一个关键字, 否则仅为一般标识符。这种方法避免了采用关键字树等复杂的数据结构和算法, 编程较为简单。笔者查看了Delphi中Pos函数的源代码, 它采用了汇编代码, 所以其运行效率十分高[3]。

(7) 处理goto关键字

goto虽然不提倡, 但在许多语言中仍然存在, 因此, 作为控制流处理软件, 仍有必要对其考虑。

1) 获取goto后的下一Token, 跳过空格、tab符、回车、换行等符号

2) 在源文件中向后搜索该Token, 若存在, 则将其行列加入List表中, 转4) ;否则转3)

3) 在源文件中向前搜索该Token, 若存在, 则将其行列加入List表中

4) 对goto及其目标作记录

(8) 关键字排序

由于存在goto, 而goto的目标既可能向前, 又可能向后。因此, 它的存在打乱了正常的控制流, 必须按自然顺序 (先按行后按列的升序) 排序。排序可采取各种方法。由于关键字表是TList对象的实例, 它提供了一Sort方法, 采用快速排序方法, 需要编程人员提供一个比较对象的值的大小的方法, 可根据需要灵活定义。

(9) 关键字表分析

关键字表分析是本课题的重点和难点, 也是较为复杂的部分。

1) 把指针指向表头

2) 对{进行处理。它必然为第一个关键字, 否则出错, 并且它是函数定义的起始语句。由此, 可在源程序中搜索出该函数的声明。处理整个函数, 直到}处理完毕, 指针将移动到下一个函数的{开始语句出或表尾, 若移至{, 进行新的一轮处理, 否则结束。

(10) 函数分析

1) 对do、for、goto、if、return、switch、while语句分析

2) 若为}时结束。若未插入探针, 则插入探针。函数号+1。 (11) 复合语句分析

复合语句为{…}括起的部分, 其处理与函数处理类似。

1) 对do、for、goto、if、return、switch、while语句分析, 考虑break、countinue

2) 若为}时结束

(12) 单语句分析

处理do、for、goto、if、return、switch、while语句之一, 考虑break、continue。

(13) do语句分析

do语句的流图一般为:

在此不得不论述探针的插法问题, 特别是在循环语句中是一个棘手的问题。对如下的do语句:

显然在do语句{后应插入一探针, 那么while语句的探针应插在何处呢?若插在}之前, 并不能真实地反映本来面目, 实际运行时也存在问题, 其真实的控制流为:

从上图可以看出, do语句中while探针必须插在while语句上才能真实地反映实际执行情况。假若do语句的探针的插法还能强差人意, 那么for, while语句的探针如何插呢?若针对如下正常

若for循环n次, 那么, 由 (1) ~ (2) 为n次, 由 (2) ~ (1) 实际为n-1次, 但从控制流上看 (2) ~ (1) 也为n, 与实际不符, 探针的插法存在问题, 其真实控制流为:

对while语句可把探针插在while语句上, 但要把探针直接插在for语句上较为困难, 至少得对源程序进行修改, 因此, 难于真实地刻画for语句实际执行情况。

do语句分析

1) 把do节点的信息记入数据库

2) do后有{吗?, 有转4)

3) 插入{及探针, 单语句处理, 插入while探针及}, 记录while语句位置, 转5)

4) 插入探针, 复合语句处理, 插入while探针, 记录while语句位置

5) 连接关系处理, 考虑break、continue, 把这些关系记入数据库。

(14) for语句分析

1) 把for节点的信息记入数据库

2) for后有{吗?, 有转4)

3) 插入{及探针, 单语句处理, 插入探针及}, 转5)

4) 插入探针, 复合语句处理, 插入探针

5) 连接关系处理, 考虑break、continue, 把这些关系记入数据库。

(15) goto语句分析

由于goto的目标既可能向前, 又可能向后, 因此, 必须作特殊处理:把goto的节点和相关信息记入一表中, 并把goto目标的节点信息记入另一表中, 等所有的节点处理完毕时, 再对该表进行处理。

(16) if语句处理

1) 把if节点的信息记入数据库

2) if后有{吗?, 有转4)

3) 插入{及探针, 单语句处理, 插入}, 转5)

4) 复合语句分析, 若未插入探针则插入

5) 有else吗?, 无转9)

6) 后有{吗?有转8)

7) 插入{及探针, 单语句处理, 插入}, 转9)

8) 复合语句分析, 若未插入探针则插入

9) 连接关系处理

(17) return语句分析

在return之前插入探针

(18) switch语句分析

switch语句分析中, 必须考虑case语句中有无break的情形, 以及有无default语句时的情形。

1) 记录switch语句信息, 并插入探针

2) 对case、default语句进行处理, 并记录break的情况

3) 根据2) 的分析, 判断各节点之间的连接关系, 并记录这些关系

(19) case语句分析

1) 处理其中的每条语句, 直到下一case、default或}

2) 记录break的情况

2.3 程序界面和功能

界面为标准的Windows界面, 提供菜单、按钮、状态行等。屏幕分为三个区:

一区:显示被测试程序中所包含的源程序模块, 以及每个模块中所包含的函数;

二区:某个函数对应的控制流图;

三区:显示源程序。

一区利用Tree View控件分层显示各种信息。

(1) 第一级显示被分析测试的.dsw (Develop Studio Workshop) 文件名;

(2) 第二级显示.C或.CPP文件名。

通过分析.dsw文件得到.dsp (Develop Studio Project) 文件名, 分析.dsp文件得到.C或.CPP文件名;

(3) 第三级显示每个.C或.CPP文件中包含的函数名及参数。当选中一个.C或.CPP文件时, 在三区中显示对应的源代码;但选中任意一个函数时, 二区显示相应的控制流图, 三区中的源程序翻页使该函数的声明可见。在一区中可控制对某些函数或对所有函数是否进行实时跟踪。要对某函数的跟踪进行控制, 首先, 选中该函数, 单击右键, 将弹出一菜单, 根据菜单内容即可控制是否跟踪。对某个模块中的所有函数或整个系统的函数进行控制, 方法类似, 首先选择某个.C、.CPP或dsw文件, 后面的操作一样。

二区显示某个函数对应的控制流图。图中的小圆圈表示节点, 圆圈中的数字表示节点号, 直线或折线表示由一个节点到另一个节点可能的控制流。对程序进行实时跟踪时, 经过的节点、线段用红色表示, 线段的粗细与经过该线段的总时间存在比例关系。整个图形匀称、重心稳定、美观。当鼠标在节点上停留一段时间后, 将显示该节点对应的源代码, 如完整的if语句等。在节点上单击鼠标左键, 该节点对应的源代码将在三区中显示出来。

三区显示源程序。C语言的所有关键字if、for、while等以蓝色显示, 注释用绿色显示, 其它文本用黑色显示, 当前的程序行以红底白字显示。

3 结论

对C语言的控制流作了全面的分析, 如if语句;while、do、for循环语句, 并考虑了循环体中包含或不包含break、continue语句的情况;switch case语句, 考虑了switch中包含或不包含default语句的情况, case语句中包含或不包含break的情况;goto语句的处理等。能够显示并实时跟踪程序的执行过程, 如哪些分支被执行、执行的总时间是多少, 并能提供每个节点的相应信息, 如是那种类型的节点、节点代表源程序的具体语句是什么, 以及被经历的次数等。对了解程序程序的执行情况作了有益的尝试, 并给程序测试指明了方向:如程序的哪些部分没运行到, 哪些关键的部分需要重点测试, 程序的哪些代码需要优化等。因软件测试是一项复杂的工程, 工作量大, 大部分算法是描述性的算法, 能用计算机实现的算法不很多;同时由于时间、人力等关系, 的结果离真正的动态测试系统的要求还有一段距离。如:测试用例的自动生成及模块的验证问题, 覆盖的判定问题, 以及动态测试的其它方面, 变量的更新等。同时, 动态测试离不开静态分析, 静态分析的内容需要进一步加强。因此, 朝这两个方向努力, 加强其功能, 就会建立一个更加实用的系统。

参考文献

[1][美]Jeffrey Richter.Windows95Windows NT3.5高级编程技术[M].郑全战, 阿夏, 译.清华大学出版社, 1998, 2.

[2]郑人杰, 殷人昆, 陶永雷.实用软件工程[M].2版.清华大学出版社, 1997, 4.

[3][美]Allen G.Taylor.SQL使用指南[M].吴言, 李东, 等, 译.电子工业出版社, 1999, 3.

[4][美]James R.Groff&Paul N.Weinberg.关系数据库SQL使用指南[M].付增少, 彭振云, 等, 译.学苑出版社, 1999, 10.

[5]William Perry.Effective Methods for Software Testing.1998by John Wiley&Sons, Inc.

[6]Boris Beizer.Software Testing Techniques[M].Second Edition.1999by International Thomson Computer Press.

[7]Brian Marick.The Craft of Software Testing—Subsystem Testing Including Object-based and Object-oriented Testing.PTR Prentice Hall, Englewood Cliffs, New Jersey07632.

[8]Richard E.Fairley.Tutorial:Static Analysis and Dynamic Testing of Computer Software.1978IEEE, Computer.

3.C程序设计课程教法探究 篇三

一、注重首次课的启发和引导作用

首次课,学生怀着好奇又恐惧的心理坐到课堂上,渴求新知,却又担心教师会讲出一些深奥理论,难以理解、消化。面对这种状况,教师应该从实践入手,培养学生对课程的兴趣,拉近学生与课程之间的距离,激发学生的学习主动性;然后,讲授学习方法,鼓励学生大胆实践,将枯燥的编程课变成生动活泼的引导课,为学生今后的学习打好基础。

1.演示程序运行过程,激发学习兴趣

在Tuber C 2.0编译环境下,导入“俄罗斯方块”游戏程序,编译、连接、运行,展示程序执行结果。通过这种方式,既可以让学生熟悉从C语言源程序到可执行文件的整个操作流程,又可以激发学生的兴趣,使学生认识到C语言并不是枯燥乏味的计算机理论,而是有血有肉、活灵活现的计算机程序,从而消除其畏惧心理,增强学习的主动性。

2.传授学习方法,强调学习的意义

有了学习兴趣,更要有好的学习方法。C语言是一门实践性很强的课程,最有效的学习方法就是将理论和实践结合起来,通过理论带动实践,通过实践强化理论,从而改善学生盲目的学习状况。在首次课上,可以用简洁的语言告诉学生如何预习、听课、复习,但应重点强调如何通过实践锻炼学生的动手能力和解决问题的能力。同时,C语言是学生学习后续编程语言的基础,虽然程序设计语言更新很快,但如果能够通过C程序设计课程掌握程序设计思想,具备真正解决实际问题的能力,那么,学习其他语言也会更加得心应手。

3.严格要求学生出勤,保证课程正常衔接

对初学者来说,C程序设计课程是非常深奥复杂的,一旦缺课,就很难再跟上教师的进度。因此,教师在首次课应着重强调听课的重要性,避免学生因懈怠或无关紧要的事情缺课,耽误学习。如果学生因病或重大事件不得不耽误课程,教师应利用业余时间帮助学生补习,保证课程的连续性和教学的整体进度。

二、始终坚持理论教学与学生实践相结合的教学方法

对于C程序设计课程来说,实践是至关重要的。因此,在整个教学过程中,一定要坚持理论学习和上机实践两手抓、两手都要硬。在理论课堂上,启发学生思想、开拓程序思路、讲明知识要点。上机课也不能流于形式,照抄照搬书中例题,而应给学生思考的空间,启迪学生敢于创新、勇于实践,锻炼学生解决问题的能力,使学生既掌握书中的重点算法,又充分感受到程序设计的乐趣。同时,理论课程与上机实践应紧密融合,学一部分知识,上机实践相应的内容。这样,学生既锻炼了动手和解决问题的能力,又巩固了所学的知识,否则理论和实践脱节,就失去了实践的意义。在实践过程中,还应该让学生养成预先分析题目、确定算法与数据结构、在纸上编出程序源代码的好习惯。这样,上机时,就可以将主要精力放在调试程序上面,提高上机效率。

三、巧妙引入软件工程的基本思想

在软件工程中,软件的生存周期包括“问题定义、可行性研究、需求分析、概要设计、详细设计、编码、调试、运行与维护”几个阶段,C语言编写的程序也是如此。但是,初学者对软件生存周期的认识不深,容易忽略,致使软件结构不合理、运行缓慢或难以维护。教师可以通过日常教学,逐渐培养学生编程中的软件工程思想,帮助学生养成良好的编程习惯,培养学生分析问题、解决问题的能力,培养学生的创新精神、团队意识,为学生今年从事IT行业做好铺垫。

C程序设计课程是学生学习编程语言的基础,在学生整个学习过程中占据着非常重要的地位。教师必须通过科学的教法,巧妙引导学生,帮助学生有效学习新知,养成良好的编程习惯,从而为学生今后的学习打下坚持的基础。

4.C语言程序设计上机实验报告 篇四

系部:计算机科学系 年级:2013 级 班级:

姓名:

学号:

实验时间:

实验成绩:

2013年月日

实验三顺序结构程序的设计

一 实验名称:顺序结构程序的设计

二.实验环境:windows XP系统,VC++6.0软件

三.实验目的:

四.实验内容:

五.算法描述流程图

六.源程序

七.测试数据及运行结果

八.实验心得

实验成绩评分要求

1、原创性发现抄袭或雷同成绩为0分

2、正确性程序正确60分

3、可读性格式清楚,有注释,变量命名规范20分

4、健壮性对特殊测试数据有考虑有测试10分

5.c程序实习报告 篇五

实验目的:

1、初步了解vc++6.0环境;

2、熟悉掌握调试C程序的步骤。

实验内容:

1、如何进入vc++6.0环境?如何新建一C程序文件并进行调试?

2、对教材中例1.1至例1.3在vc++6.0环境中进行调试。

3、上机调试教材课后习题4、5题。

实验原理、步骤与分析:

6.C语言程序教学新探 篇六

程序设计对于各个计算机类高校而言,都是非常重要的一类课程,尤其是理工类院校的必修课。而要进行程序设计,必须掌握一门计算机语言来做为编程工具。目前,很多计算机类高校都把C语言作为程序设计的入门课程来教学。我们知道可供选择的计算机语言是非常多的,如C++,C#,java等等,之所以选择C语言是由于C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,它既有高级语言的优点,又有低级语言的许多特点。可以说,学好C语言对打好程序设计基础起到至关重要的作用。

由于很多高校在学生进入大学学习的第一学期就开设C语言课程,大多数学生在高中时因为高考的压力而没有接触过计算机,对计算机的基本操作并不了解。这就导致了学生在学习C语言的过程中,感觉C语言语法枯燥,难以掌握;对基本概念能够理解,但是当实际应用到程序编写的时候又感觉无从下手;学生没有养成良好的程序编写习惯,使写出来的程序漏洞百出……等等这些问题都跟教师的教学方法、学生的学习方法有很大的关系。针对学习C语言中的种种问题,根据笔者多年的C语言教学经验,下面提出C语言教学中的一些新思路供大家共同探讨。

1 掌握基本要求,打好学习基础

在学生阶段,C语言的学习主要是学习程序设计的方法,训练程序设计的思维,为以后进一步的学习和应用打下良好的基础。但在实际教学当中,很多学生改变不了高中时期的学习方法,对课本上的概念和程序死记硬背,总以为把书背熟了就能够学好C语言,而没有把精力放在最基础、最常用的内容上,以至于基础薄弱,在程序的编写时经常会出现一些不应有的错误。笔者在教学中发现学生经常会出现以下一些问题。

(1)编写程序时不区分标示符的大小写。例如,int myname和int My Name就是完全不同的两个变量。在C语言里面,对标示符大小写敏感,但是很多同学就是会忽略这最基本的要求,造成程序出错。

(2)对“=”和“==”混淆使用。“=”是C语言里的赋值符号,把右边的值赋给左边的变量;而“==”是关系运算符,它的作用是判断“==”两边的值是否相等,返回的结果是一个逻辑值,即“真”或“假”。例如:a=1,是把1这个数据放在变量a里面,而a==1,表示a变量的值是否跟1相等,如果相等返回“真”,如果不相等就返回“假”。

(3)颠倒printf()函数值的输出顺序。直接看个例子:

输出的正确值应该分别为10,11,10,10。

很多学生出现错误是因为不理解printf()函数执行的顺序,printf()函数在执行时是从右到左,而输出时是从左到右。

从以上3个学生容易出错的例子我们可以看出,正是由于学生对基础知识掌握的不理想,导致这些极其简单错误的出现。在我们的教学当中,教师也必须把最基础的知识跟学生讲透,让学生改变学习观念,对学生加以引导,懂得学习C语言并不是一朝一夕就能够一下子变成编程高手,而应该脚踏实地,实事求是地打好基础。

2 重视算法的学习

算法是程序的灵魂,没有好的算法,就编写不出好的计算机程序。在C语言教学中,教师在很多时候都不注重算法的教学,导致学生上课时候能听得懂,看得懂课本上的程序例题,但是当布置作业让学生自己去完成程序编写的时候,学生又感觉无从下手。这些都是由于学生只注重去背课本上的程序例题,而不注重程序的算法思想照成的。教师在教学中要注意对学生算法逻辑思维的培养,在讲解程序时,应该首先分析程序中所需要用到的算法,要把重点放在例题的解题思路上,一步一步地引导学生,让学生知道程序为什么要这样编写。在授课阶段初期,我们也可以给学生举一些简单的、有生活气息的例题来引发学生对算法的兴趣。例如,我们可以举这样的一些例子。

(1)家里有个微波炉可以同时烧烤2份牛排,每份牛排有两面,每面需要烧烤2分钟才可以食用,问用微波炉烧烤3份可以食用的牛排需要多少时间?这个问题用算法来解答的话,我们可以有2种方案。第1种,先把第1份牛排和第2份牛排放进去烧烤2分钟,然后再把这2份牛排翻一面过来再烧烤2分钟,接下来把第3份牛排放进去,烧烤两面共花去4分钟,由此可知整个过程一共要用掉8分钟。第2种,同样的把第1份牛排和第2份牛排放进去烧烤2分钟,然后把第2份牛排先取出来,把第1份牛排翻一面过来跟第3份牛排一起放进去烧烤2分钟,最后把第3份牛排翻一面过来跟第2份牛排的另一面一起烧烤2分钟,这样3份牛排就都烤好了,这种方法,我们只需要6分钟。很显然,用这样一个简单的例子,可以让学生知道算法的重要性,好的算法可以节省程序大量的执行时间。

(2)有甲乙两人,甲现在26岁,乙现在8岁,求多少年之后甲的年龄是乙年龄的两倍?对于这个问题,我们可以引导学生使用循环体来解答。我们知道年龄是逐年增长的,假设甲为变量m,乙为变量n,则循环体就是m++、n++的一个过程,当甲和乙的年龄相差两倍时,循环结束。所以我们设定循环体的执行条件应该是m!=2*n。最后当循环体结束时输出m和n的值。通过这样的一个分析过程,相信学生很快就能够写出这个问题的程序。由此可见,通过一些例子的算法讲解,一方面能够让学生理解解题的过程,一方面还可以锻炼学生的算法思维,让学生感受到算法的重要性。

3 上好实验课

上机实验也是C语言教学中的一个重要环节,学生仅仅听课是学不好C语言的。学生不仅要能够掌握基础的概念,还要自己动手编写程序,最后要亲自上机调试程序的运行并对程序进行修改。所以,如何上好C语言课程的实验课,也是教师要思考的一个问题。在笔者平时的教学中遇到这样的一些问题,如很多学生在上实验课时,没有把精力放在学习上,而是在玩游戏看小说;还有些学生上实验课前没有很好的预习,浪费了大量时间在知识的复习上;在实验过程中,学生一遇到问题就会向老师提问,以至于老师疲于解答甚至由于问的人数过多而无法一一进行解答。这些问题都影响到实验课的效果,甚至会影响到部分学生的学习积极性。如何改变这种状况,笔者采用以下几种方法。

(1)在上实验课之前就把实验题目布置给学生,学生在上课之前就需要提交给教师一份预习报告,这份报告里面应该包含学生对实验题目的解题思路及初步的解题程序。然后让学生带着这份报告上机调试程序。这样就可以避免学生在上实验课时无所事事的情况。

(2)对于有条件的学校可以配置多名实验指导教师。学生在实验中经常会遇到一些问题需要教师帮助解决,当问的人比较多的时候,教师就没有办法一一解答,而部分学生由于得不到解答而会停止程序的调试转做其他事情,如果一直得不到帮助的话,就会影响他们的积极性,所以配置一到多名指导教师是很有必要的。如果没有足够教师的话,我们可以让班级里面学习比较好的同学,组成一个学习兴趣小组。让这些学生在实验课时对一些有问题的同学进行帮助,这样既能够增进学生之间的友谊,又能够完成教师布置的实验任务。

(3)改变实验的考核方式。很多教师一般都是在下课的时候让学生提交作业,这样可能会让一些学生钻空子,拷贝别人的作业提交。所以建议在课堂上当场对学生的作业进行评分,遇到有雷同的作业,要求学生重做。在期末的时候,也必须要强调平时的成绩,不能把期末成绩作为衡量学生成绩的唯一指标。

通过以上的一些措施,可以有效地促进学生对C语言的学习效果,对巩固C语言的课堂教学起到了巨大的作用。

4 结语

以上笔者就平时的一些教学经验跟各位同仁一起探讨,主要目的还是希望能够改变当前C语言程序教学中的一些不足之处,对以后的教学能够起到一定促进作用。应用本文中的一些措施,对我校C语言程序的教学有明显的帮助,但各个学校的软硬件水平都不尽相同,希望各位同仁能够从中得到一定的启发,共同把C语言程序这门课上好,让学生学好。

参考文献

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

[2]袁小燕.如何提高C语言教学质量[J].黑龙江科技信息,2008(9).

7.浅谈C语言程序设计教学方法 篇七

【关键词】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).

8.C语言课程设计程序 篇八

//定义学生结构体,st数组。

int score[5];float jqave;int rank;}st[27];

struct kecheng { int num;char kcname[20];

//定义课程结构体,course数组.float xuefen;float biaozhuncha;int youxiu;int lianghao;int zhongdeng;int jige;int bujige;

}course[5];

void readdata1(){

int i,j;

char str1[100];

FILE *f1;

f1=fopen(“c:xinji110213.txt”,“r”);

fgets(str1,100,f1);// printf(“%-s”,str1);

for(i=0;i<27;i++)

{

fscanf(f1,“%d%s”,&st[i].num,st[i].name);

// printf(“%-4d%-10s”,st[i].num,st[i].name);

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

{

fscanf(f1,“%d”,&st[i].score[j]);// printf(“%-9d”,st[i].score[j]);}

// printf(“n”);}

fclose(f1);}

void readdata2(){

int k;

char str2[100];

FILE *f2;

f2=fopen(“c:xj02kc.txt”,“r”);

fgets(str2,100,f2);// puts(str2);

for(k=0;k<5;k++)

{

fscanf(f2,“%d%s%f”,&course[k].num,course[k].kcname,&course[k].xuefen);

// printf(“%-8d%-10s%2.1fn”,course[k].num,course[k].kcname,course[k].xuefen);

}

fclose(f2);} void jqave(){ int i,j;float s=0,sum=0;for(i=0;i<27;i++)

{

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

{

s+=course[j].xuefen;

sum+=st[i].score[j]*course[j].xuefen;

}

st[i].jqave =sum/s;

} }

void ranking()

{ int i,j;

for(i=0;i<27;i++){

st[i].rank=1;

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

if(st[i].jqave

st[i].rank=st[i].rank+1;} }

void paiminghoudechengji(){ int i,j;FILE *fp;fp=fopen(“c:MC110213.txt”,“w”);printf(“ 名次 学号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分 n”);fprintf(fp,“ 名次 学号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分 n”);

for(i=0;i<27;i++)

{

printf(“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name);

fprintf(fp,“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name);

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

{

printf(“%10d”,st[i].score[j]);

fprintf(fp,“%10d”,st[i].score[j]);

}

printf(“%12.2fn”,st[i].jqave);

fprintf(fp,“%12.2fn”,st[i].jqave);} fclose(fp);}

void xiechengji(){ int j;FILE *fp;fp=fopen(“c:xj1110213.txt”,“w”);fprintf(fp,“ 编号

课程名称

课程学分

标准差

优秀

良好

中等

及格

不及格

n”);printf(“ 编号

课程名称

课程学分

标准差

优秀

良好

中等

及格

不及格

n”);for(j=0;j<5;j++)

{

printf(“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen);fprintf(fp,“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen);

printf(“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige);

fprintf(fp,“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige);

} fclose(fp);}

void pingjunfen(){ int i,j;

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

{

float zongfen=0,pingjunfen=0;

for(i=0;i<27;i++)

zongfen+=st[i].score[j];

pingjunfen=zongfen/27;

} }

void biaozhuncha(){

int i,j;

for(j=0;j<5;j++){

float zongfen=0,pingjunfen=0,x=0;

for(i=0;i<27;i++)

zongfen+=st[i].score[j];

pingjunfen=zongfen/27;

for(i=0;i<27;i++)

x+=(st[i].score[j]-pingjunfen)*(st[i].score[j]-pingjunfen);

course[j].biaozhuncha=(float)sqrt((x/27));

} }

void count(){

int i,j;

for(i=0;i<5;i++)

{

course[i].youxiu=0,course[i].lianghao=0,course[i].zhongdeng=0,course[i].jige=0,course[i].bujige=0;

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

{

if(st[j].score[i]<60)

course[i].bujige++;

else if(st[j].score[i]<=69)

course[i].jige++;

else if(st[j].score[i]<=79)

course[i].zhongdeng++;

else if(st[j].score[i]<=89)

course[i].lianghao++;

else

course[i].youxiu++;

} } }

void chengjitiao(){

int i,j;FILE *fp;fp=fopen(“c:cjt110213.txt”,“w”);do

{ printf(“请输入你要查询的编号

退出请按零”);

scanf(“%d”,&i);

fprintf(fp,“ 编号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分

名次n”);printf(“ 编号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分

名次n”);if(i>=0&&i<=26)fprintf(fp,“%3d%10s”,st[i-1].num,st[i-1].name);

printf(“%3d%10s”,st[i-1].num,st[i-1].name);for(j=0;j<5;j++){

printf(“%9d”,st[i-1].score[j]);

fprintf(fp,“%9d”,st[i-1].score[j]);} printf(“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fprintf(fp,“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fclose(fp);} while(i>0&&i<28);

}

void bujigexueshengmingdan(){

int i,j;

printf(“不及格学生名单如下:n”);printf(“ 学号

姓名

不及格课程

分数

n”);for(i=0;i<27;i++){

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

if(st[i].score[j]<60)

{printf(“%3d%12s”,st[i].num,st[i].name);

printf(“%15s%8dn”,course[j].kcname,st[i].score[j]);

// printf(“

平均分”);

// printf(“%10.2f

名次%8dn”,st[i].jqave,st[i].rank);

}

} }

void youdeng(){ int i,k;printf(“ 优等生名单如下n”);printf(“编号

姓名

数学分析

高等代数

C语言 大学物理 大学艺术 加权平均分

名次n”);for(i=0;i<27;i++){ // for(j=0;j<5;j++)

if(st[i].jqave>=90||st[i].rank<=3)

{

printf(“%2d%10s”,st[i].num,st[i].name);

for(k=0;k<5;k++)

printf(“%9d”,st[i].score[k]);

printf(“%10.2f%8dn”,st[i].jqave,st[i].rank);

}

else;

} }

void caidan()

{ loop: printf(“

&&简易教学管理系统&&n”);

printf(“press 1 for

排名后的成绩表

!n”);

printf(“press 2 for

各科成绩情况!n”);

printf(“press 3 for

成绩条!n”);

printf(“press 4 for

不及格学生名单!n”);

printf(“press 5 for

优等生名单!n”);

printf(“press 0 for

退出n”);

int t;

scanf(“%d”,&t);

switch(t)

{

case 1:

paiminghoudechengji();break;

case 2:

xiechengji();break;

case 3:

chengjitiao();break;

case 4:

bujigexueshengmingdan();break;

case 5:

youdeng();break;

case 0:

exit(0);

}

goto loop;

}

void main(){

readdata1();

readdata2();

jqave();

ranking();

pingjunfen();

biaozhuncha();count();

9.c语言程序设计论文 篇九

摘要

该程序编译的是通讯录,可以实现一般主要功能有:有建立通讯录的个人信息功能,如记录该人姓名信息,地址信息,出生日期信息,所在城市信息,以及其城市的邮编信息等,删除个人信息,通讯录个人的信息列表,个人的信息查询,个人的信息保存,以及个人的信息提取的功能,最后可以直接退出通讯录。

当然实行不同的功能需要定义不同的功能函数,在记录个人信息定义不同的结构体,每一个成员的信息可以是一个基本类型或者是一个够造类型,对结构体变量的应用,其中包括赋值,输入,输出,运算等方式来实现结构变量的成员。

当然也可以执行该程序应用了函数的调用,自定义函数以及文件的存储与调用等。个人的信息保存在这个问题上,这信息可以动态的分配到内存空间,每一次分配一块空间用来存放一个人的个人信息的数据,定义两个域,一个是数据域,用来存放各种实际的数据,如个人姓名信息,个人地址信息,出生日期等等数据。在编辑程序,用到了基本的循环、选择、排序的算法,使用数组或数组元素的指针和指针变量,对结构体及其元素用指针或指针变量来指向。并且使用多种预处理功能,如宏定义、文件包含、条件编译等。来进行程序的修改、阅读、移植和调试,也有利于实现模块化程序设计。程序员在程序中用预处理命令来调用这些功能。

通讯录的个人信息数据的编辑、存储、列表、删除、查询、提取等实行运用,在程序中存储二百人的个人信息空间,日期不能超过两个字符。在运行后,程序自动给出提示选择,给出你所需要执行的功能,在选择后会给出相应的显示和下一步的提示,在编辑个人信息时必须有姓名,否者会返回上一选择菜单,有部分信息可以不填。在编辑完后,就可以实行其他功能,将给出其他选择,如将个人信息删除、将个人信息列表、保存个人信息、提取个人信息等等的功能。最后在执行完后就可直接根据提示选择退出。就实现了整个通讯录的流程。

关键词:通讯录、列表、函数、编译

C语言程序设计论文

目录

 题目内容及其功能..........................2  算法原理..................................2  算法流程图................................8  源程序...................................14  运用结果及分析...........................20  设计心得.................................22  参考文献.................................23

C语言程序设计论文

题目内容及其功能

该通讯录主要功能有:有建立通讯录的个人信息,如姓名,地址,出生日期,城市,邮编等。也可以执行删除个人信息,通讯录信息列表,信息查询,信息保存,以及信息提取的功能,最后可以退出通讯录。该程序应用了函数的调用,自定义函数以及文件的存储与调用等,使用数组或数组元素的指针和指针变量,对结构体及其元素用指针或指针变量来指向。

算法原理

(1)通过选择来实现程序的功能: int main(void){ start=last=NULL;for(;;){

switch(menu_select())

{

case 1:enter();

break;

case 2:mldelete(&start,&last);

break;

case 3:list();

break;

case 4:search();

break;

case 5:save();

break;

case 6:load();

break;

case 7:exit(0);

} 输出运行结果并且给出选择: int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name

*n”);printf(“*2.delete a name

*n”);printf(“*3.list the file

*n”);printf(“*4.search

*n”);

printf(“*5.save the file

*n”);printf(“*6.load the file

*n”);printf(“*7.Quit

*n”);

C语言程序设计论文

printf(“**********************n”);do {

printf(“nplease enter your choice:”);

gets(s);

c=atoi(s);}while(c<0||c>7);return c;}

(2)输入个人信息:名字,地址,日期,邮政编码 void enter(void){ struct address *info;for(;;){

info=(struct address *)malloc(sizeof(struct address));

if(!info)

{

printf(“nout of memory”);

return;

}

inputs(“please enter name:”,info->name,30);

if(!info->name[0])break;/*stop entering*/

inputs(“please enter street:”,info->street,40);

inputs(“please enter city:”,info->city,20);

inputs(“please enter state:”,info->state,3);

inputs(“please enter zip:”,info->zip,10);

dls_store(info,&start,&last);}/*entry loop*/ } 如果超过给定内存,将给出提示,输入太长: void inputs(char *prompt,char *s,int count){ char p[225];do {

printf(prompt);

fgets(p,254,stdin);

if(strlen(p)>count)

printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);}(3)制作列表,对输入的个人信息进行存储与排列 void dls_store(C语言程序设计论文

struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/

i->next=NULL;

i->prior=NULL;

*last=i;

*start=i;

return;} p=*start;/*start at top of list*/ old=NULL;while(p){

if(strcmp(p->name,i->name)<0){

old=p;

p=p->next;

}

else{

if(p->prior)

{

p->prior->next=i;

i->next=p;

i->prior=p->prior;

p->prior=i;

return;

}

i->next=p;/*new first element*/

i->prior=NULL;

p->prior=i;

*start=i;

return;

} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;}(4)将通讯录中的信息,先进行查找,然后删除个人信息 void mldelete(struct address **start,struct address **last)

C语言程序设计论文

{ struct address *info;char s[80];

inputs(“Enter name:”,s,30);info=find(s);if(info){

if(*start==info){

*start=info->next;

if(*start)(*start)->prior=NULL;

else *last=NULL;

}

else{

info->prior->next=info->next;

if(info!=*last)

info->next->prior=info->prior;

else

*last=info->prior;

}

free(info);/*return memory to system*/ } }(5)从其内存中查找某个名字,并进行输出,如果没有就输出没有发现名字 struct address *find(char *name){ struct address *info;info=start;while(info){

if(!strcmp(name,info->name))return info;

info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ }(6)将通讯录中所有个人信息分别列出 void list(void){ struct address *info;info=start;while(info){

display(info);

info = info->next;/* get next address */

C语言程序设计论文

} printf(“nn”);}(7)分别输出个人信息

void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);}(8)根据其个人信息的存储地址来查找个人名字信息 void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)

printf(“Not Foundn”);else display(info);}(9)保存输入的个人信息 void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){

printf(“Cannot open file.n”);

exit(1);} printf(“nSaving Filen”);info = start;while(info){

fwrite(info,sizeof(struct address),1,fp);

info = info->next;/* get next address */ } fclose(fp);

C语言程序设计论文

}(10)查找并提取已输入的个人信息 void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){

printf(“Cannot open file.n”);

exit(1);} 释放内存空间:

while(start){

info=start->next;

free(info);

start=info;fclose(fp);}

C语言程序设计论文

算法流程图

图1-1制作列表流程图

C语言程序设计论文

图1-2删除个人信息流程图

C语言程序设计论文

图1-3个人信息-名字的查找流程图

C语言程序设计论文

图1-4查找到个人信息流程图

C语言程序设计论文

图1-5保存个人信息流程图

C语言程序设计论文

图1-6提取下载个人信息流程图

C语言程序设计论文

源程序

#include“stdio.h” #include“stdlib.h” #include“string.h” struct address{ char name[30];char street[40];char city[20];char state[3];char zip[11];struct address *next;struct address *prior;};struct address *start;struct address *last;struct address *find(char *);

void enter(void),search(void),save(void);void load(void),list(void);void mldelete(struct address **,struct address **);void dls_store(struct address *i,struct address **start,struct address **last);void inputs(char *,char*,int),display(struct address *);int menu_select(void);

int main(void){ start=last=NULL;for(;;){

switch(menu_select())

{

case 1:enter();

break;

case 2:mldelete(&start,&last);

break;

case 3:list();

break;

case 4:search();

break;

case 5:save();

break;

case 6:load();

break;

C语言程序设计论文

case 7:exit(0);

} }return 0;}

int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name

*n”);printf(“*2.delete a name

*n”);printf(“*3.list the file

*n”);printf(“*4.search

*n”);

printf(“*5.save the file

*n”);printf(“*6.load the file

*n”);printf(“*7.Quit

*n”);

printf(“**********************n”);do {

printf(“nplease enter your choice:”);

gets(s);

c=atoi(s);}while(c<0||c>7);return c;}

/*Enter names and address.*/ void enter(void){ struct address *info;for(;;){

info=(struct address *)malloc(sizeof(struct address));

if(!info)

{

printf(“nout of memory”);

return;

}

inputs(“please enter name:”,info->name,30);

if(!info->name[0])break;/*stop entering*/

inputs(“please enter street:”,info->street,40);

inputs(“please enter city:”,info->city,20);

inputs(“please enter state:”,info->state,3);

inputs(“please enter zip:”,info->zip,10);

dls_store(info,&start,&last);

C语言程序设计论文

}/*entry loop*/ } /*******************************************/ void inputs(char *prompt,char *s,int count){ char p[225];do {

printf(prompt);

fgets(p,254,stdin);

if(strlen(p)>count)

printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);} /*Create a doubly linked list in sorted order */ void dls_store(struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/

i->next=NULL;

i->prior=NULL;

*last=i;

*start=i;

return;} p=*start;/*start at top of list*/ old=NULL;while(p){

if(strcmp(p->name,i->name)<0){

old=p;

p=p->next;

}

else{

if(p->prior)

{

p->prior->next=i;

i->next=p;

i->prior=p->prior;

C语言程序设计论文

p->prior=i;

return;

}

i->next=p;/*new first element*/

i->prior=NULL;

p->prior=i;

*start=i;

return;

} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;} /*Remove an element from the list*/ void mldelete(struct address **start,struct address **last){ struct address *info;char s[80];

inputs(“Enter name:”,s,30);info=find(s);if(info){

if(*start==info){

*start=info->next;

if(*start)(*start)->prior=NULL;

else *last=NULL;

}

else{

info->prior->next=info->next;

if(info!=*last)

info->next->prior=info->prior;

else

*last=info->prior;

}

free(info);/*return memory to system*/ } }

/*Find an address.*/

struct address *find(char *name){

C语言程序设计论文

struct address *info;info=start;while(info){

if(!strcmp(name,info->name))return info;

info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ } /* Display the entire list */ void list(void){ struct address *info;info=start;while(info){

display(info);

info = info->next;/* get next address */ } printf(“nn”);} /* this function actually prints the fields in each address.*/ void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);} /* Look for a name in the list */ void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)

printf(“Not Foundn”);else display(info);}

C语言程序设计论文

/* Save the file to disk */ void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){

printf(“Cannot open file.n”);

exit(1);} printf(“nSaving Filen”);info = start;while(info){

fwrite(info,sizeof(struct address),1,fp);

info = info->next;/* get next address */ } fclose(fp);} /*

Load the address file.*/ void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){

printf(“Cannot open file.n”);

exit(1);} /* free any previously allocated memory */ while(start){

info=start->next;

free(info);

start=info;} /*

reset top and bottom pointers

*/ start=last=NULL;printf(“nLoading Filen”);while(!feof(fp)){

info=(struct address *)malloc(sizeof(struct address));

C语言程序设计论文

} if(!info){

printf(“Out of Memory”);

return;} if(1!=fread(info,sizeof(struct address),1,fp))break;dls_store(info,&start,&last);}

fclose(fp);运用结果及分析

图1-1 运行结果并且给出选择

图1-2输入个人信息

C语言程序设计论文

图1-3删除个人信息

1-4列出个人信息

C语言程序设计论文 1-5查找个人信息

图1-6保存个人信息

C语言程序设计论文

设计心得

通过进行C语言程序设计,我更加懂得C语言设计不仅仅需要逻辑思维地紧密,更加需要细心,通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。读了那么多年的书,课程设计可是第一次。看着劳动成果,很欣慰!

刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于画图方面的,可是这点小进展远远不够,这只是一个小小的开始。下一步是上网查,找到了些与我们题目相似的,那时我很高兴,完成了这个程序。

虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。

做完这个课程设计,我的自信一下子提高了,我也会写程序了;尽管对于有些人这种程序会很简单,可对我们C语言初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!

程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。

一个多礼拜的挣扎,绞尽脑汁终于带着麻木的手指和大脑脱出那堆“泥潭”。现在的心情是如鱼得水,干涩的眼睛前方是万里晴空。终于,所有的努力即将化成了一个个铅字,打印机“滋滋”的声音仿佛已经宛如天籁般悦耳地在耳畔响起。此时此刻,真想把一切抛上天空。高呼:“出来了!我的成果即将出来了!”,心里也在默默的感慨着:“有志者,事竟成,破釜沉舟,百二秦关终归楚。苦心人,天不负,卧薪尝胆,三千越甲可吞吴。”

当然这次程序设计也让我看到了自己基础的薄弱。古人有诗云:“路漫漫其修远兮,吾将上下而求索”。从今天起我将不断继续求索,学习之路也好,人生之路也罢。

总之我受益匪浅。

C语言程序设计论文

参考文献

上一篇:我的顽童妈妈作文下一篇:关于部门发言稿5则范文