c语言程序设计作业三

2024-06-24 版权声明 我要投稿

c语言程序设计作业三(精选11篇)

c语言程序设计作业三 篇1

编写程序,实现单链表的插入、删除、输出、查找、统计以及销毁功能。

单链表的每个结点存储一名学生的信息,包括:学号、姓名、性别、年龄、三门课程(高数、英语、C语言)的成绩、三门功课的平均分。

结构体类型声明如下: typedef struct student {

char sno[8];

char name[20];

char sex;

int age;double score[3];double avg;

struct student *next;} STUDENT, *PSTUDENT;

要求:

⑴一律使用 STUDENT 声明学生结构体的变量,一律使用 PSTUDENT 声明指向学生结构体的指针变量

⑵程序运行过程中要有菜单提示,菜单如下:

*************************************************************** *

1.Insert a student

* *

2.Delete a student

* *

3.Display the link list

* *

4.Display excellent students

* *

5.Search a student by the name

* *

6.Display the average score of three courses * *

0.Exit the program

* ***************************************************************

c语言程序设计作业三 篇2

要想完成程序设计, 需要稳固的C语言基础知识和灵活的逻辑思维。而稳固的C语言基础知识要依赖英语基础。灵活的逻辑思维要有数学基础。英语、数学恰恰是高职学生薄弱的地方。这给单片机的C语言教学带来了不小的阻碍。那么, 怎样在薄弱英语和数学基础上, 提高单片C语言教学效果便值得研究和探讨一番了。

一、学———软、硬穿插

传统的单片机C语言教学中, 往往是先脱离单片机学习C语言程序设计。学生普遍反映该课程的语法知识较多, 理解和记忆都不太容易, 即使记住了语法知识也不能很好地利用C语言进行单片机小型系统的开发。因此, 我们以具体项目为基础将C语言知识穿插在整个单片机硬件教学中。比如, 讲解完最小系统后, 给学生一个项目《点亮LED灯》。之所以选择这个项目是因为它简单, 上手快。它能让学生带着轻松的心情走入单片机应用之门。利用此次设计主要是给学生灌输C语言的基本结构, 从而让学生体会单片机的控制意义。之后可以在跑马灯中穿插for语句知识; 在按键设计可以讲if、switch语句; 在数码管显示中学会一维数组等。在软硬件穿插学习过程中, 教师应选择什么项目, 项目中应准备哪些C语言知识, 教师应仔细考量。项目中包含的C语言知识不用面面俱到, 应以实用、够用为度。

二、先读后改———被动变主动

在学之后, 学生有了单片机的应用经历, 也累积了的一些C语言知识。但是由于英语知识薄弱, C语言关键字、格式记不住。程序设计的逻辑思维累积不够。学生独立设计程序还没办法实施。总是以老师讲, 学生做的模式上课, 学生的积极性调动不起来。怎么将学生被动接受变成主动学习?

继学之后, 采用先读后改的教学方式。读———读程序。发布设计项目后, 由学生上网搜集参考程序, 然后读懂参考程序。以这样的方式来完成项目, 一来可以锻炼学生信息收集, 和信息筛选的能力, 这也是我们希望学生能有拥有的一种能力。二来在读程序的过程中可以强化在学的过程中建立起来的C语言知识的模糊记忆。三来在读的过程可以学习一些新颖设计思路。这些设计思路不再拘泥于任课教师, 可以激发学生程序设计的创新思维。

读懂程序之后就可以进行程序改造了。网上搜集的程序往往不完全符合自己的设计要求。这样就要求学生在读懂程序的基础上, 进行二次改造, 变成自己的成果。

高职单片机C语言教学三步曲 篇3

要想完成程序设计,需要稳固的C语言基础知识和灵活的逻辑思维。而稳固的C语言基础知识要依赖英语基础。灵活的逻辑思维要有数学基础。英语、数学恰恰是高职学生薄弱的地方。这给单片机的C语言教学带来了不小的阻碍。那么,怎样在薄弱英语和数学基础上,提高单片C语言教学效果便值得研究和探讨一番了。

一、学——软、硬穿插

传统的单片机C语言教学中,往往是先脱离单片机学习C语言程序设计。学生普遍反映该课程的语法知识较多,理解和记忆都不太容易,即使记住了语法知识也不能很好地利用C语言进行单片机小型系统的开发。因此,我们以具体项目为基础将C语言知识穿插在整个单片机硬件教学中。比如,讲解完最小系统后,给学生一个项目《点亮LED灯》。之所以选择这个项目是因为它简单,上手快。它能让学生带着轻松的心情走入单片机应用之门。利用此次设计主要是给学生灌输C语言的基本结构,从而让学生体会单片机的控制意义。之后可以在跑马灯中穿插for语句知识;在按键设计可以讲if、switch语句;在数码管显示中学会一维数组等。在软硬件穿插学习过程中,教师应选择什么项目,项目中应准备哪些C语言知识,教师应仔细考量。项目中包含的C语言知识不用面面俱到,应以实用、够用为度。

二、先读后改——被动变主动

在学之后,学生有了单片机的应用经历,也累积了的一些C语言知识。但是由于英语知识薄弱,C语言关键字、格式记不住。程序设计的逻辑思维累积不够。学生独立设计程序还没办法实施。总是以老师讲,学生做的模式上课,学生的积极性调动不起来。怎么将学生被动接受变成主动学习?

继学之后,采用先读后改的教学方式。读——读程序。发布设计项目后,由学生上网搜集参考程序,然后读懂参考程序。以这样的方式来完成项目,一来可以锻炼学生信息收集,和信息筛选的能力,这也是我们希望学生能有拥有的一种能力。二来在读程序的过程中可以强化在学的过程中建立起来的C语言知识的模糊记忆。三来在读的过程可以学习一些新颖设计思路。这些设计思路不再拘泥于任课教师,可以激发学生程序设计的创新思维。

读懂程序之后就可以进行程序改造了。网上搜集的程序往往不完全符合自己的设计要求。这样就要求学生在读懂程序的基础上,进行二次改造,变成自己的成果。

能进行程序二次改造也是一种程序设计技能。大多数学生今后从事单片机程序设计岗位,完成设计工作的方式也是搜集项目相关的程序,进行二次改造。因此,单片机C语言教学中,通过改造程序来提高学生的程序设计能力,进而提高学生单片机产品设计的职业能力。

大连理工大学c语言大作业 篇4

——<东北大馅饺子馆>的点餐/帐目信息管理系统

选题意义;

餐厅账目繁多,通过本系统可以实现餐厅管理的自主化。更加适应这个信息化的社会。通过对账目、订单的管理与排序。也能使餐厅管理者更加直观地看出产品之间的优劣与受众。使其能够更好的调动资源,达到餐厅的快速发展目的。

设计方案;

1)任务分析

该系统应包括两大界面—用户界面和管理界面。用户界面包括用户点餐功能并将用户点餐信息存入账单文件中。管理界面包括记录饺子的单价,库存等信息并将这些信息按一定规律排列供管理者参考,还要记录每天的收入与库存消耗。2)系统组成框图

系统组成如下图所示,点餐/帐目信息管理系统中任务调度模块是信息管理的指挥中心,所有的功能模块均通过该模块集中管理和调用。数据文件是用于将改变的记录随时保存起来,I/O交互模块是指数据按键和控制按键的响应操作。数据按键是窗口的输入输出。

系统平台

I/O交互 任务调度 数据文件

添加账目 查询账目 查询原料 销量排序 当天收入

功能模块设计;

本管理系统开发的过程中成功地完成很多函数的编写,而且全部通过程序调试。下面针对与该系统相关的主要功能函数的编写思路和实现方法作总结。1)数据描述与数据文件(1)数据描述;

系统中共定义了三种结构体分别是struct list(账单信息)、struct dump(原材料信息)、struct system(管理信息)其中账单信息成员定义如下; struct list/*账单信息 */ { int num;/*编号*/ int month;/*月份*/ int date;/*日期*/ int table;/*桌号*/ int people;/*人数*/ int add;/*收款金额*/ };原材料信息;

struct dump/*原材料信息*/ { int num;/*编号*/ char a[40];/*名称*/ int price;/*单价*/ int quantity;/*库存*/ };管理信息; struct system { struct dump data;/*点餐*/ int cash;/*收款*/ int sale;/*销量*/ int p;/*人数*/ };(2)数据文件;

共定义四个数据文件;记录编号的文件count、记录原料的文件dumplings、记录账单的文件customer、数据处理文件system。2)主要功能模块的设计(1)主要功能模块函数原型 本程序共编写了8个自定义函数,其中5个用于文件管理,3个用于文件的建立。系统管理函数原型如下; 点餐函数void customer(); 统计单日销量函数void record(); 销量排序函数void line(); 账单查询函数void list(); 编号归零函数void countzero();(2)典型功能模块函数设计 *点餐函数void customer(); 打开dumplings文件 打印菜单 用户点餐 记录数据

打开customer文件、system文件 将数据写入文件;

*统计单日销量函数void record(); 打开system文件; 将数据读入内存;

计算单日总收入、总人数、总销量; *销量排序函数void line(); 打开system文件; 对销量进行排序;

运行效果:

设计体会;

c语言程序设计作业三 篇5

结构化程序设计的优点是便于分工合作,便于调试、维护和扩充。这种程序设计方法是将一个大程序分成若千个模块,每个模块完成一个功能,由一个总控模块来控制和协调各个模块来实现总的功能;因此,这种程序设计方法又称为模块化程序设计方法。在C语言中,函数是构成C谙言程序的最小模块。实际上,C语言的程序是由一个或者多个文件组成的,每个文件叉是由一个或多个函数组成的。因此,一个程序是由一个或多个函数组成的,其中,须有且仅有一个主函数,生函数的名字规定为rnaino这样,组成一个程序的者干个文件中,仅有一个是主文件,只有主艾件中才含有main()函数。另外,函数是由若干条语句组成的,语句是由若干个单词组成的‘单词是由若干个字符组成的。字符是构成程序的最小单元。e语言程序的构成如下所示:

程序~文件~函数~语句~单词、字符。

C语言是结构化程序设计语言,它具有构成三种基本结构模式的语句,这种结构化程序设计应具有的三种基本结构模式如下:

顺序结构棋式

它将由若干条顺序执行的语句构成,这是程序设计的最基本形式。

分支结构模式

C语言中具有条件语句和开关语句,它将会构成各种需要的分支结构模式。

循环结构模式

C语言中提供了三种循环语句(for循环,whil。循环和do-while循环),用它们可以构成

各种循环结构模式

在讲述C语言是一种结构化程序设计语言的同时,还必须指出它与其他结构化程序设计语言(如PASCAL语言)相比较,还有一些不完全之处,因此,C语言是一种不完全的结构化程序设计语言。其表现如下:

第一,完全的结构化程序设计语言不允许使用goto语句,因为goto语句会破坏结构化。

但是。got。语句在某些时候会使得程序简练,因此,在C语言中原则上允许使用goto语句,为了减少它对结构化的影响,采取了限制使用的办法,即规定got。语句的转向范围只能在一个函数体内。不得使用gates语句从一个函数体内转向到另一个函数体中,这种限制性地使用goto语句会给编程带来一些方便,又不会影响棋块之间的结构化。但是,建议在G语言的程序中尽量少使用goto语句。

第二,完全的结构化程序设计语言要求一个模块只有一个入口和一个出口,这样便于结构化的管理。但是,C语言程序中允许函数使用多个返回语句(return语句),即允许函数有多个出口,返回到调用函数。这样做也是为了编程中的方便。在C语言程序中,可以使用条件语句来返回不同的函数值。

由此可见,C语言虽然是一个不够严格的结构化程序设计语言,但它是一个使用起来十分灵活的高级语言。

1.计算机二级C语言程序设计考点解析:C语言程序实例

2.计算机二级C语言程序设计考点:指针

3.计算机二级C语言程序设计考点:函数

4.计算机二级C语言程序设计考点:数组

5.计算机二级C语言考点:字符型数据

6.计算机二级c语言试题

7.计算机二级C语言程序设计考点解析:常用的输人函数

8.计算机二级C语言程序设计考点解析:常用的输出函数

9.计算机二级C语言程序设计考点:单词及词法规则

c语言程序设计作业三 篇6

1“程序设计基础”课程教学内容要点

“程序设计基础”课程教学大纲中明确规定了教学内容,这些内容涵盖的知识单元有:程序设计语言概论,程序设计基本结构,算法与问题求解,事件驱动程序设计,算法策略,基本算法,面向对象程序设计。

一般情况下,一个问题的求解过程可能涉及多个知识点,一个知识点可能会出现多个语法要素,如在求解两个整数的最大公约数问题上,会用到如变量定义、输入输出、数据交换、循环控制结构等知识点,而就单纯循环控制结构中就会出现很多语法要素,如用到的关键词可能有while,for等,运算符有=,%等。

问题空间,知识点和语法要素的对应关系可以用图1表示。

因此对语法内容的选取首先需要确定问题空间,即先确定学习者所能解决的问题范围。对于程序设计初学者来说,用前文所述的十三类常用算法就足够了。

2 C/C++语法特点

从语法的角度看,源程序实际上是一个字符序列。这些字符序列按顺序分别组成了一系列“单词”。这些“单词”包括语言事先约定好的保留字(ReservedWords,如用于描述分支控制的if、else,用于描述数据类型的int等)、常量(Constant)、运算符(Operator)、分隔符以及程序员自己定义的变量名、函数名等。

“单词”的组合形成了语言有意义的语法单位,如变量定义、表达式(Expression)、语句、函数定义等。一些简单语法单位的组合又形成了更复杂的语法单位,最后一系列语法单位组合成程序。下面就以C/C++语言为例,简要说明其最主要的语法要素。

3 C/C++语言的主要“单词”

标识符C/C++语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。在C/C++语言中,标识符中的字母大小写是有区别的。最主要的标识符是:保留字和用户自定义标识符。保留字也称关键字,它们是C/C++语言规定的、赋予它们以特定含义、有专门用途的标识符。这些保留字也主要与数据类型和语句有关。如int(整数类型)、float(浮点数类型)、char(字符类型)、typedef(类型定义)、以及与语句相关的if、else、while、for、break等。

自定义标识符:包括在程序中定义的变量名、数据类型名、函数名以及符号常量名。一般来说,为了便于程序阅读,经常取有意义的英文单词作为用户自定义标识符。常量常量是有数据类型的,如,整型常量123、实型常量12.34、字符常量’a’、字符串常量“helloworld!”等。

运算符:代表对各种数据类型实际数据对象的运算。如,+(加)、-(减)、*(乘)、/(除)、%(求余)、>(大于)、>=(大于等于)、==(等于)、=(赋值--assignment)等。绝大多数运算为双目运算(涉及两个运算对象),也有单目(涉及一个运算数)和三目(三个运算数)运算,如C/C++语言中的条件运算“?:”就是一个三目运算。

分隔符:也叫做界符。如:;、[、]、(、)、#等。

4 C/C++语言的主要语法单位

表达式运算符与运算对象(可以是常量、函数、变量等)的有意义组合就形成了表达式。如,2+3*4、i+2

变量定义:变量也都有数据类型,所以在定义变量时要说明相应变量的类型。变量的类型不同,它在内存中所占的空间大小也会有所不同。变量定义的最基本形式是:“类型名变量名;”。如,“inti;”就定义了一个整型变量i。

语句:语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现。C/C++语言中的语句有多种形式:

最简单的语句:表达式加“;”。在C/C++语言中赋值也被认为是一种运算,如“i=j+2”(把j加2的结果给变量i)就是一个包含“+”和“=”两种运算的表达式,“+”优先级较高。在上述表达式后加“;”就成了一个执行赋值过程的语句。

分支语句:实现分支控制过程,即根据不同的条件执行不同的语句(或语句模块)。具体有两种形式,即双路分支的if-else语句与多路分支的switch语句。循环语句:C/C++语言实现循环控制的过程具体有三种形式,即while语句、for语句、do-while语句等。

复合语句(Compoundstatement):通过一对大括号“{}”,将若干语句顺序组合在一起就形成了一个程序段。如,前面while语句中的“{sum=…}”。

函数定义与调用:函数是完成特定任务的独立模块,是C/C++语言唯一的一种子程序形式。

以上简单描述了C/C++语言最主要的语法要素,它还有非常丰富的库函数以支持和实现非常庞大的功能。由以上内容可见,语法单位是单词之间通过各种组合方式构成的,如,变量和运算符组合的表达式,关键字中如for,while等构成的语句等。所以,本研究只从“单词”的角度研究基本语法要素构成的语法子集,暂时不考虑语法结构的问题。

5 实验设计

实验主要由以下几个步骤组成:

1)数据采集(数据采样):原始数据主要来源于目前国内用于“程序设计基础”课程的教材,包括国内的许多专家学者所编著的教材和国外原文教材的翻译版本教材。处理数据主要是其中的样例程序和课后习题的实现程序。由于这些教材形式主要包括课件及相关的电子文本,所以首先要解决的问题就是从自然语言文本中抽取样例程序,并生成TXT文本。

2)数据处理:数据处理阶段要解决的问题就是对已经筛选出的符合条件的程序进行分词、标注。分词工作会去除掉程序中多余无用的部分(如注释,多余空格等),标注的信息包括该词的类型(关键字、运算符、界符、标识符、常量),该词所属的程序文件编号,该程序所属的问题范畴。

对采集到的每个源程序文件进行分词标注之后均产生一个单词表,取名为“源文件名_单词表”,其结构如表1所示。

3)数据统计:对数据处理阶段得到的单词表进行统计。以单词出现的频数和在所有文件中出现的比例为统计依据。也就是说,最终得到的是所有程序文件中出现的C/C++语言的单词频数统计表(不包括重复出现的情况)。通过对该表的分析得出最后的结论。

6 数据采集

将目前国内大多数院校所选用的作为计算机及相关专业的“程序设

计基础”课程的教材作为主要分析对象。由于数据量较大,只能选取其中的一些由权威出版社及程序设计方面的专家学者所著的一部分。为了尽量降低采样主观性,体现实验数据的普遍性,主要使用了以下两种方法:一是在搜集到的现有教材中随机采样选三本;二是根据教材的发行量及在各大院校的使用情况选三本。

数据采集的渠道主要有网上搜索,与出版社联系。经过近半年的时间,收集到了大量用于普通高校本科计算机专业教学用C或者C++语言的程序设计教材,但是,这些教材绝大多数是PDG格式,或PDF格式,按照实验设计要求,数据处理阶段的数据源必须是TXT文本文件。这就对教材中例题的提取造成了很大的困难。现将例题转换过程中所用到的相关软件及技术简单总结如下。

1)PDG格式文件转TXT文件:Pdg2Pic软件的格式转化器将PDG文件以三种语言(英语、简体中文、繁体中文)生成TXT文件,生成的TXT文件中,已不再保留教材中文字的原有格式。经过对比实验,将该软件的转换语言选择为英语的时候,生成的TXT文件中的例题错误之处会更少。最后,将生成的TXT文档与源文件进行人工比对,发现例题中的错误,将其改正,并将例题之外的部分删除,就可以得到只含有例题的TXT文件了。

2)PDF文件转换为TXT文件:PDF文件的生成原文件可以是文档文件,也可以是图像文件。有于其原文件的不同,在将PDF文件转换TXT文件的过程中,决定了在转换过程中将采用不同的软件。

参考文献

[1]李炜.计算机高级语言程序设计课程的教学改革与实践[J].安徽师范大学学报:自然科学版,2003(2):24-26,29.

[2]杨起帆.C语言程序设计教程[M].浙江:浙江大学出版社,2006.

基于C语言的递归程序设计分析 篇7

关键词 递归;循环;C语言

中图分类号 TP 文献标识码 A 文章编号 1673-9671-(2010)121-0031-01

递归作为一种正对实际问题的程序设计解决方案,在整个编程语言学习及程序设计方面有着极其重要的地位。而在实际的教学环节中对于这样一种具有很高使用价值的编程技术,在讲解上和学生理解上还存在着一定困难。

1 递归的基本条件

循环结构是结构化程序设计的三种结构之一,主要应用在处理某些需要重复执行特定语句的情况下,通常在使用循环时我们需要明确三个重要条件:

1)循环的初始条件。可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的问题的规模有规律地递减。也就是说解决问题的方法相同,调用函数的参数每次不同(有规律地递减),如果没有规律也就不能运用递归方法求解。

2)循环的中止条件(或在什么情况下循环运行)。每个子问题必须比原来问题的规模更小,即使小一号也行,如果能够迅速减小规模更好。

3)程序有趋于结束的趋势。必定要有一个明确的结束递归的条件。当问题的规模达到一定程度时(一般的时候应该是规模足够小),问题的解是已知的,在这个地方能结束递归调用,不然可能导致系统崩溃或陷入死循环。

而递归作为一种算法,在数学上我们时这样定义它的,以n的阶乘为例:

0!=1(*)

n!=n*(n-1) 当n>0时 (**)

其中(*)称为基本实例(基本实例的值必须是直接获得的);(**)称为递归归约。递归被定义为:自身定义为一种含有自身简化的形式。那么从形式上我们可以清楚的看到:①每个递归定义必须有一个(或者多个)基本实例;②递归归约最终归结到基本实例;③在基本实例处停止递归。从中我们不难发现递归的算法形式条件和循环的条件是非常类似的。

那么在运行递归函数时,逻辑上我们可以认为递归函数有无限的自身拷贝,完成某个递归调用后,控制返回到先前的调用环境。这同循环算法在思想上也是异曲同工的。所以我们也完全可以编写一个循环结构来替代递归。

造成这种可替代性的主要原因是因为目前为止的编译系统处理递归函数时,在编译之后都是自动将递归转化为循环的。但是和循环不同的是,编译后的递归需要创建一个内存栈来存储递归过程中的临时变量,对于递归函数的调用和返回操作,则分别对应栈的入栈和出栈。

因此任何一个递归程序都可以通过引入堆栈的形式来转化为循环,这种转化其实就是模拟计算机实现递归的过程。你可以考虑人脑来计算递归的过程:先倒过来向前递归,到达最初点以后再正过来向后递推,堆栈的作用就是记住过程中的临时变量。虽然这样做只不过是模拟递归的执行过程,将原来由编译器实现的事情在程序中用代码实现了一遍,但是确实可以通过循环和堆栈的数据结构特性来实现递归的算法和递归函数的功能。

2 递归问题分析

递归程序最少有两种方法可以写出。第一种是想办法把问题转化为数学表达式,能用数学表达式写出的,可以直接把数学表达式变为程序;第二种是按照递归的基本条件,分析所给问题的结构,一个问题总具有一定的规模,想办法把规模变小,使小规模的问题与原问题具有相同的解法,当规模足够小时,该问题的解是已知的,这时可以套用后面所讲的一般递归程序的结构来写递归程序。

例1:求n!。经过分析n!可以表示为

假定n!是一个long型,则直接写出程序如下:

long func(int n) //求n!

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

return 1;

return n*func(n-1);

}

例2:求Fibonacci数列(非波纳契)的第n项,该数列表示如下:

按照例1的方法,写出程序如下:

longfib(int n)

{ if( (n==1||(n==2) )

① return 1;

else

② return fib(n-1)+fib(n-2);

}

如输入n=4,程序(具体程序用行标号代替)的执行过程如图1所示,通过分析以上程序,大部分学生对递归函数的执行过程有了较为清晰的认识。

例3:用递归的方法将一个正整数n按位输出,如输入2008,输出2 0 0 8,n的位数不确定,可以是任意正整数。

分析:①函数应该是处理整数n,并且是输出,用PrintNum(int n)来实现这一功能;②如果n的规模很小(只有1位),可以直接输出后结束程序;(这里应该知道n的位数是问题的规模);③把问题的规模变小,去掉n的某1位(在实际讲解时是去掉个位,因为去掉个位比较容易一些,我们用k=n%10保存个位,n=n/10就可以去掉个位),余下位形成一个新的规模比原数小的数,再在新数上递归调用函数,这个新数按要求输出后,去掉的这一位因为是个位,所以应该把它输出到新数的后面。

通过以上分析,写出程序如下:

void PrintNum(int n)/*该函数能把n按要求输出*/

{ int k;

if(n<10){ printf("%2d",n); return ;} /*如果规模很小,则直接处理后结束程序*/

k=n%10; /*在n中提出个位数字*/

PrintNum(n/10);/*把规模更小的子问题递归调用函数来处理*/

printf("%2d",k);

}

通过以上三个例子,学生对递归函数有了较为清晰的认识,对递归程序的写法有了一定的掌握之后,我们可以总结出一个一般递归程序的结构如下,几乎所有递归程序都可以按照这个结构去分析并写程序。

ReturnType Function(问题描述及规模)/* 在程序内部我们应该认为函数Function已经具备处理这类问题的功能,它可以直接被调用 */

我们根据这个结构,要求学生回过来简单看一下前面的三个例子,多数学生便会对递归有更为深入的认识。之后引入汉诺塔问题,该问题的分析方法类似于例3,并套用这个结构,让学生自己试着写该问题的程序,可以发现有一部分学生能自己写出递归函数来。

3 总结

在C语言中,函数一直是学习的重点和难点,递归又是最难掌握的一类函数,本文从实际教学需要出发,首先分析递归的基本条件,从由易到难的顺序,设计了一些教学实例,重点让学生了解递归函数的写法以及执行情况,最后总结出递归函数的一般程序结构,使学生能正确设计递归程序,在实际教学中取得了良好的效果。

参考文献

[1][美]Robert Sedgewick.C算法(第一卷).人民邮电出版社,2004

c语言实习程序 篇8

course_name(int i)/*把科目变成数字函数*/ { switch(i)

{

case 1:printf(“英语 ”);

break;

case 2:printf(“数学”);

break;

case 3:printf(“C语言”);

break;

case 4:printf(“Java”);

break;

case 5:printf(“法律”);

break;

case 6:printf(“音乐”);

break;

case 7:printf(“语文”);

break;

case 8:printf(“体育”);

break;

case 9:printf(“英语”);

break;

case 10:printf(“美术”);

break;

} }

print2(int m)/*输出学生考试科目函数*/ { int i,j;

printf(“学生考试科目:nnn”);

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

{printf(“

【%d】”,i);

course_name(i);

}

printf(“nn”);}

stu_zhongfen(int(*p2)[100],int n,int m)/*计算学生总分函数*/ {

int sum,i,j;

for(i=0;i

{

sum=0;

for(j=0;j

sum=sum+*(*(p2+i)+j);

*(*(p2+i)+m)=sum;

} }

input(long *p1,int(*p2)[100],int n,int m)/*输入学号、以及各科成绩函数*/ {

int i,j;

for(i=0;i

{

printf(“n请输入第%d个学生的学号:”,i+1);

scanf(“%ld”,p1+i);

for(j=0;j

{

printf(“n请输入第%d门课程的成绩:”,j+1);

scanf(“%d”,*(p2+i)+j);

}

}

printf(“......输入完毕!n”);

}

chaxun(long *p1,int(*p2)[100],int n,int m)/*查询学生各科成绩、总分、班排名(按总分)函数*/ {

long xuehao;

int counter=1,j=0,i,k;

while(1)

{

printf(“n请输入要查询的学生的学号:”);

scanf(“%ld”,&xuehao);

for(i=0;i

{

if(*(p1+i)==xuehao)

break;

}

if(i>=n)printf(“该学号不存在!请从新输入!n”);

else break;

}

stu_zhongfen(p2,n,m);

while(j

{ if(j!=i)

{ if(*(*(p2+j)+m)>*(*(p2+i)+m))

counter++;

j++;

}

else

j++;

}

printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);

printf(“n 您要查询的学生信息如下:n”);

printf(“n”);

printf(“

课程名

分数n”);

for(j=0;j

{ printf(“

”);

course_name(j+1);

printf(“

%4dn”,*(*(p2+i)+j));

}

printf(“n

总分为:%3dn”,*(*(p2+i)+m));

printf(“

班级排名为:%3dn”,counter);

printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);

}

stu_average(long *p1,int(*p2)[100],int n,int m)/*计算每个学生的平均分*/ { int i,j,k;

float average[100];

stu_zhongfen(p2,n,m);

for(i=0;i

average[i]=*(*(p2+i)+m)/(float)m;

printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>”);

printf(“n每个学生的平均分如下n”);

printf(“

学号

平均分n”);

for(i=0;i

printf(“

%4ld

%fn”,*(p1+i),average[i]);

printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);

}

score_jiangxu(int(*p2)[100],int n,int m)/*把每个学生按平均分高到低排名函数*/ { int i,j,k,temp,a[100],z;

float average[100];

stu_zhongfen(p2,n,m);

printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);

for(i=0;i

{ a[i]=*(*(p2+i)+m);

average[i]=*(*(p2+i)+m)/(float)m;

}

for(i=0;i

{

for(k=1;k

if(a[i]

{ temp=a[i];

a[i]=a[k];

a[k]=temp;

}

}

printf(“排名

平均分n”);

for(i=0;i

printf(“(%d)

%fn”,i+1,average[i]);

printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);

}

print1()/*提示函数*/ {

system(“cls”);/*清屏*/

printf(“1.查询学生各科成绩、总分、班排名(按总分)n”);

printf(“2.计算每个学生的平均分 n”);

printf(“3.把每个学生按平均分高到低排名n”);

printf(“请选择:”);}

main(){

int m,n,i;

long *p1,num[100];

int(*p2)[100],score[100][100];

printf(“n请输入学生总数:”);

scanf(“%d”,&n);

printf(“n请输入课程总数:”);

scanf(“%d”,&m);

p1=num;

p2=score;

printf(“n

★★现在请输入学号和成绩★★n”);

print2(m);

input(p1,p2,n,m);

print1();

scanf(“%d”,&i);

if(i<0||i>3)

printf(“.....输入错误!....”);

else

switch(i)

{ case 1: chaxun(p1,p2,n,m);break;

case 2: stu_average(p1,p2,n,m);break;

case 3: score_jiangxu(p2,n,m);break;

}

《C语言程序设计实践》课题 篇9

任务1 课题名称:

学生顺序表的处理

课题内容:

在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。

编一个程序,采用顺序存储结构存储这批数据,并对该数据进行排序。要求:数组前部为女同学,后部为男同学,并且男女同学都按成绩递减排序,分别计算男生合格率、女生合格率、全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中。

任务2 课题名称:

学生成绩的管理(顺序存储)

课题内容:

某班级学生C语言第一次正考的成绩存于数据文件score.dat中,记录了学生学号、姓名和考试成绩,bk.dat文件中记录了补考学生的学号、姓名和补考成绩,编写程序以顺序存储结构实现以下要求:

1、对该班级按成绩降序排序并统计成绩平均分及每个分数段的人数,结果写入到result.dat中。

2、再根据补考成绩修改原成绩,修改成绩后仍按成绩降序写在result.dat的后面。成绩修改原则: 1)补考成绩大于等于60,原成绩以60分记;2)补考成绩小于60,取两次成绩中最高值记。

任务3 课题名称:

学生基本信息的管理(顺序存储)

课题内容:

已知学生的信息包括:学号,姓名,性别,出生年月,地址,电话,E-mail等。以顺序存储结构设计程序能实现以下功能:(1)学生信息录入:可随时增加学生信息到数据文件中(2)学生信息浏览:学生的信息输出到屏幕(3)查询:按学号查询、按姓名查询(4)修改:修改指定学生的信息(5)删除:删除指定学生的信息

(6)排序:按指定的关键字排序后输出到屏幕。(7)系统以菜单方式工作

任务4 课题名称:

图书顺序表的处理

课题内容:

在一个数据文件中存放若干图书数据记录,每条记录都有如下数据项:书名,作者,出版社,ISBN,出版时间,价格,类别。

编写一个程序,采用顺序存储结构存储这批数据,并对该数据进行排序。要求:按出版社进行分类存取图书信息,同一出版社中的图书信息按照出版时间降序排列。分别统计每个出版社出版的图书数量,并把排序后的图书记录及计算结果存入另一个数据文件中。

任务5 课题名称:

旅游信息顺序表的处理

课题内容:

在一个数据文件中存放若干旅游信息数据记录,每条记录都有如下数据项:线路编号、目的地、旅游天数、旅游类别、出行月份、价格。

C语言程序设计教学方法探究 篇10

摘要:在应用型本科C语言程序设计教学实践中,对课程合理定位,改进课堂教学方法,以案例引导为教学核心,激发学生的学习积极性。

关键词: 教学方法 案例引导 程序设计

【中图分类号】TP312.1-4

应用型本科人才培养是遵循本科人才培养教育规律,突出实践应用的一种人才教育培养模式。“C语言程序设计”是我国应用型本科院校中计算机、电子、通讯等专业学生在跨入大学校门后接触的第一门专业基础课程,提高这门课程的教学质量,对于增加学生对计算机语言的浓厚兴趣以及培养大学生的计算机应用及开发能力都至关重要。

一、现状及其教学中存在的问题

1、由于学生刚接触计算机语言,同时C语言作为结构化程序设计语言,它具有较强的抽象性, 常规教学内容重在讲解C语言的基本语法,所选编程实例大多用于语法规则的验证和说明。因此,对初学者来说比较难于接受,也容易出现一些问题。

2、传统的实验教学内容简单、枯燥,学生多按实验教材和教师指导的程序一步一步完成,课下很少相互间进行交流,学生虽然有一定收获但是也束缚了手脚。从而导致一部分学生在开始的前几次上机过程还饶有兴趣后又感觉枯燥无比,逐渐对程序设计语言的学习产生较大误区,觉得C语言没有多大用处,从而放弃认真学习C语言的机会。

3、在教学方法上,由于传统的“填鸭式”教学方法只是简单地按照课本顺序循序渐进地教学,每一节课都要记住许多语法细节而实践环节少,学生不知综合起来解决实际问题,始终处在被动的学习状态中,从而吃不透、用不活所学语言知识,在开发综合应用程序时,软件设计能力较差。

二、C语言教学方法探究

1、学生学习兴趣的提高

90后大学生思维活跃,个性十足,他们对自己的学习活动、学习内容与其未来的就业和发展的影响都是十分关注的,同时,他们对于课程知识的适用性了解很少。如果课堂教学能从教育心理学出发,通过有意义的学习内容来激发学生的这种学习动机,让学生感觉到计算机编程很奇妙,很有趣,并愿意在编写出来后通过不断修改完善,相互分享,从而增加他们完成一个程序后的成就感,进一步激起他们深入学习C语言程序设计课程的欲望。

2、改进教学方法,把编程解题思路和程序测试等放在首位

在《C语言程序设计》的教学过程中,注重由整体到具体,由设计算法到书写程序并进行调试的整个过程,培养学生对语言的兴趣及正确的思维模式。课堂教学组织过程重在从一个较完整的程序例子开始,该例子包含了该语言中的主要语句,目的是使学生先对程序有个初步的印象,再简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解。整个教学过程中应该把解题思路、方法和步骤当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。

在《C语言程序设计》的实践教学中,学生的另一个拦路虎就是程序调试中遇到的种种问题。学生在上机输入程序后,编译时还会出现各种问题,加之学生的英语基础较差,看不懂message窗口中的英文提示信息,导致大多数学生面对机器不知所措,而这种情形又降低了他们学好这门课的信心以及学习这门课的主动性。因此,教师要做的就是找到一种好的方法使学生少出现这种问题。从而提高学生解决问题的能力,增加学习这门课程的信心。

3、将算法教学融入到语言教学中

在教学过程中,始终以程序设计为主线,每道题的讲解者从构造算法出发,着重于讲解算法的逻辑,以训练学生的实际编程序能力为目标。C语言学习过程中,学生感到困难的一般不是在于语法,而是如何根据算法编写程序问题。一题多解,注重算法是程序设计的灵魂,是教学重点,也是教学难点,而语言只是形式。没有正确的算法,计算机将解决不了任何问题。因此在算法教学中可以通过实例进行,从最简单的例子入手使学生在解决具体问题的过程中学习一些基本逻辑结构和语句。同时让学生知道根据同一个问题可以提出不同的从易于理解到精简的算法,从而比较这些算法之间的优劣。了解算法的优化。通过对算法的优化练习,可以在无形中提高学生写算法的水平。使得学生真正了解到算法是程序的灵魂。

4、以实例为引导,讲解语法规则

《C语言程序设计》中很多知识比较抽象、枯燥,不容易被学生接受和理解,教师在课堂教学中应该巧用生活中的实例化繁为简,将深奥的理论讲得通俗易懂。比如,在介绍程序控制结构时,我们可以从简单的猜数游戏入手,从而对分支结构做重点阐述,再进一步增加难度过渡到条件的嵌套和循环的学习中。所以教学中案例的选择非常关键,以这几点做为案例选择的基准:1)选择的案例能够包括已学过的知识和即将要学的知识;2)案例的选择要与学生的兴趣相关,能激励学生收集有关资料,激发学习自觉性,引发学生的相互讨论;3)案例的内容有助于增加学生的学习编程语言的信心。

5、循序渐进的课堂实施

在课堂教学中以案例分析为第一教学阶段,利用与生活相关的实例激发学生对这个功能程序的兴趣和求知欲望,引发学生自我讨论,分析结果和问题,最后归纳总结;以自主训练为第二教学阶段,引导学生能过由简单到复杂的训练,达到快速、准确掌握技能的目的;以总结评价为第三教学阶段,通过引导学生的交流体会,进一步归纳尚待解答的问题或提出新的问题,引发全面思考并建立自主学习的能力。

三、结束语

随着社会计算机领域的发展,计算机相关科目的教学目标也随之有了深远的影响与改变。对于学生来说,掌握好C语言的语法并不完全是这门课程的学习目标,而让学生学会用C语言来解决各种实际问题,并让学生对学习编程这条道路上体会到更多学习乐趣,尝试成功的喜悦才是这门课程的基本学习目标,从而让《C语言程序设计》真正成为学生喜爱的一门课。

参考文献:

[1]谢竞博.《C语言程序设计教学中的问题及改革建议》[J].重庆邮电大学学报:社会科学版,2008(2):137-140.

[2] 胡艳华.《独立学院非计算机专业C语言程序设计教改简论》[J].计算机教育,2011(2):107-109.

[3] 第惠多斯.《德国教师培养指南》[M].袁一安,译.北京:人民教育出版社2001.

试谈C语言程序设计教学 篇11

学习C语言的学生往往都是初次接触程序设计,头脑中还没有学习程序语言的概念。而学习内容相却对枯燥、抽象,概念难以理解。在教学过程中,为了打基础很多教师往往过于注重数据结构、语法等细节的讲解,但是在实际教学中会反映出很多问题,比如学生只知道基本概念,但是不会运用到实际编程和习题中去;能够理解书上的例子,但不会举一反三;面对编程的题目感到无从下手,没有思路等。根据教学过程中学生常出现的问题,总结出在C语言教学过程中的教学方法:

第一,形象的教学,开阔学生的思路。

在高等院校,C语言都开设在大一学生中,这部分学生大部分计算机基础浅,没有系统的知识结构,如何让学生理解这门学科的意义以及用途是任课教师首先要讲解的。在第一节C语言上课时,多使用举例法、对比法来介绍,学生反映效果很好。

首先提到C语言这3个字,学生们没办法做到顾名思义,所以,上课时可以用“英语”来启发学生思路。从小学开始到大学,有一门学科一直伴随着学生们,那就是英语。学习英语这门课程,需要学习英语的“单词”和“语法”,学习的用途是和外国友人交流,那么,学生很自然地就能理解,对于C语言这门学科,需要学习它的——“单词”(也就是数据类型、运算符表达式)和“语法”(语法规则),它的作用是和——计算机“交流”。

如表1所示,这样能够在学生的大脑中有个比较的映像,不仅能够记得清楚,更能轻松地理解C语言的概念。接下来还要简单阐述计算机出现的原因,科学家之所以要发明计算机到底有什么用途,由此可以引出计算机语言的发展历史,与C语言的学习连接到一起,但是在早期教学过程中尽量不要满口术语、难懂的词汇,尽量用大量的例子来形象生动地启发他们的思维,由浅入深循序渐进地教学。

第二,记与背的重要环节。

对大学学生很少会用到背诵这个词,似乎只有小学中学才会出现这样的学习方法,但是学习C语言,记与背仍然非常的重要。在基础比较薄弱的时候,背诵能够解决很多问题。例如函数的格式,运算符与表达式的含义,还有一些通用的编程题,背记下来能够潜移默化地让学生理解C语言,例如if语句编程:

这个编程框架的使用率非常高,能够用这个框架做出很多分支结构的编程题,将这个框架在教学过程中总结出来,然后让学生们尽量地背下来,这样并不是死记硬背,而对于后面的学习有很大的帮助。

第三,算法是程序设计的核心。

在C语言程序设计中,算法+数据结构=程序,简单说算法就是解决问题的方法和步骤。在现今高校使用的C语言程序设计教材往往用很少的篇幅去讲解介绍算法,一部分教师比较容易忽略对算法的讲解,虽然算法存在其不容易理解的地方,但是用通俗易懂的语言和生动的实例介绍算法的思路和方法,可以让C语言程序设计的学习起到的事半功倍的效果,对学生们本身的思路也有很大的启发。

在课上刚刚引入算法要用简单生动的例子,如高斯儿时计算1到100间加法的实例,既容易理解,又有意思。随着课程推进,就可以介绍算法性更强的例子。如下面的一个经典的循环语句程序设计例子。

例1:用100元钱买100只鸡,每只公鸡5元,每只母鸡3元,每3只小鸡1元,要求每种鸡至少买一只,而且必须是整只,问各种鸡各买多少只?

算法1:设定i,j,k的取值范围:1≤i≤20(公鸡最多能买20只);1≤j≤33(母鸡最多能买33只);1≤k≤100(小鸡最多能买100只);利用三重循环来逐个搜索可行组合:

在此程序中,循环体被执行20×33×100=66 000次。

算法2:由于要求每种至少为一只,故i,j,k 3变量的取值可调整为:1≤i≤19(公鸡最多能买19只);1≤j≤31(母鸡最多能买31只);k=100-i-j(因为所买鸡的总数为100),利用二重循环实现程序:

该程序循环体被执行19×31=589次,其计算工作量不及算法1的1%,大大提高了程序的执行效率。

算法3:由题意可得2个方程:i+j+k=100,5i+3j+k/3=100。去掉其中变量k,可得7i+4j=100,由于i和j都至少为1,故实际上i最大只能为13,j最大只能为23。可用二重循环实现:

该程序中,循环体只被执行13×23=229次,其计算工作量只及算法2的一半。

算法4:由于7i+4j=100,故j=(100-7i)/4,因此,可用单循环实现:

该程序循环体只执行了13次,其计算工作量不足算法3的5%。

上述4种程序运用不同的算法得到相同的运行结果,从执行次数来看就一目了然。由于搜索范围的不同,对循环工作量产生了极大的影响,程序的执行效率迥然不同。求解问题时,如果能从解题方法上入手,精心设计问题的算法,不仅可以大大提高程序的执行效率,增强程序的可理解性和可读性,同时更有助于学生的思维能力的提高和创新意识的培养。

第四,加强上机实践教学。

想要更好地理解C语言的各种知识,一定要经常上机实践。讲课时布置一些有代表性而又容易理解的程序题,然后让学生们在机房练习,同时对一些经典例题,在黑板上和多媒体课件上分析这些程序的执行过程,让学生在上机实践中验证结果的正确性,并充分体验程序执行的流程。

除此之外,还要有一些具有挑战性的新颖有趣的题目,把这些题目作为额外加分的题目,这样可以充分调动学生们的积极性和创造性,提高对C语言学习的兴趣。

摘要:C语言凭借其丰富的数据结构、优良的机构性灵活性为电脑编程工作的人推崇学习。C语言作为一门基础课程,在高等院校计算机专业和很多的非计算机专业中开设,具有十分重要的作用和意义,它不仅能锻炼学生的思维逻辑能力,还为很多课程,如数据结构、单片机和其他程序设计语言打下良好的基础,具有引导性的作用。根据教学过程中学生常出现的问题,总结出了在C语言教学过程中的几点教学方法。

关键词:C语言,算法,上机实践

参考文献

[1]谭浩强.C程序设计.2版.清华大学出版社.

[2]王海燕,韩萌.浅谈C语言程序设计教学.

上一篇:假如我是一个太阳诗歌作文250字下一篇:提升工程在线测试题