c语言程序设计实例(通用9篇)
1.c语言程序设计实例 篇一
C语言高级编程及实例分析
第一章:内存管理
c语言对程序精心编译时,将函数中命令、语句编译成相应序列的机器指令代码,放在代码段;将已初始化的数据,如已赋值的全局变量、静态局部变量等,放在数据段;将未初始化的数据放在BBS段内;将临时数据,如函数调用时传递的参数、局部变量、返回调用时的地址等放在栈段内;而对一些动态变化的数据,如在程序执行中建立的一些数据结构,如链表,动态数组等,则放在堆结构中。
内存管理系统是操作系统的重要部分。C语言中使用malloc()函数和free()函数来分配和释放内存。再次释放已经释放的内存和释放未被分配的内存都会造成系统的崩溃。
1.1.1 PC存储器结构
PC机存储器结构分为主存储器、外存储器和高速缓存几个部分。
1.1.4 内存编译模式
编译模式是指如何在内存中放置程序代码及数据,如何分配堆栈,并确认占用的内存大小及如何存取它们,当指定内存模式以后,语言编译程序将按事先选择好的内存模式编译组织程序。C语言提供了6种编译模式,分别是:微模式,小模式,紧凑模式,中模式,大模式和巨模式。
1.1.5 堆概念和结构
堆是一种动态的存储结构(存储链表,动态数组等),实际上就是数据段的自由存储区。
1.1.6 堆管理函数
1.malloc()函数
用来分配内存。函数原型为void *malloc(unsigned size)
如:int *p;
P=(int*)malloc(sizeof(int));
如果要分配100个int型的空间时,表示为:int*p=(int*)malloc(sizeof(int));
2.free()函数
用来释放内存。函数原型为void *free(指针变量)
如:int *p=(int *)malloc(4);
*p=100;
free(p);
3.realloc()函数
用来重调空间的大小,函数声明为:void *realloc(void *block,int size);
block是指向要扩张或缩小的内存空间的指针。Size指定新的大小。
4.calloc()函数
用来分配一个能容纳n个元素,每个元素长度为size的内存空间。函数声明为void *calloc(size_t nelem,size_t elsize)。该函数将分配一个容量为nelem *size大小的空间,并用0初始化该内存区域,即每个地址装入0.该函数将返回一个指向分配空间的指针。如果没有空间可用,则返回NULL指针。若在大数据模式下建立远堆,则可用farmalloc函数。
1.2.2 函数剖析函数init_Heap()
实现了初始化内存分配程序的功能
2函数My_Free()
完成函数释放内存的功能函数Allocate()
实现了分配按指定大小分配内存块的功能
第三章:文件高级操作
字符型(文本型)文件和二进制文件{有什么区别?}
标准库函数
①文件打开(fopen)
函数原型FILE *fopen(char *filename,char *mode)
②文件关闭(fclose)
函数原型int *fclose(FILE *fp)
字节(字符)读写函数fgetc和fputc
字符串读写函数fgets和fputs
数据块读写函数 fread和fwrite
格式会读写函数 fscanf和fprint
①字符串读函数fgets
Char *fgets(char *s,int n,FILE *filepointer);
②字符串写函数fputs
Int fputs(char *s,FILE *filepointer)
③数据块读函数fread
Unsigned fread(void *ptr,unsigned size,unsigned n,FILE *filepointer)④数据块写函数fwrite
Unsigned fwrite(void *ptr,unsigned size,unsigned n,FILE filepointer)
①格式化读fscanf
Int scanf(FILE *filepointer,const char *format,[&a,&b,...])
②格式化写fprintf
Int fprintf(FILE *filepointer,const char *format,[表达式列表,...]);
文件定位操作
①rewind函数
函数原型:void rewind(FILE *filepointer);
功能:将filepointer所指向的文件的位置指针重新置回到文件的开头 ②fseek函数
函数原型:int fseek(FILE *fp,long offset,int whence)
功能:whence 基准点;offset从基准点开始移动的字节数; ③ftell函数
函数原型:long ftell(FILE *filepointer);
功能:返回文件的当前位置;
④feof函数
原型:int feof(FILE *fp);
功能:判断fp所代表的文件是否结束
Stdin 标准输入(键盘)
Stdout 标准输出(显示器)
Stdaux 标准辅助输入输出(异步串行口)
Stdprn 标准打印(打印机)
Stderr标准错误输出(显示器)
简单的来说,++i 和 i++,在单独使用时,就是 i=i+1。而 a = ++i,相当于 i=i+1;a = i;
而 a = i++,相当于 a = i;i=i+1;
2.c语言程序设计实例 篇二
许多学生都有这种感觉, 在理论课时教师讲的内容都理解, 实验课的时候也按照教师要求完成了相应的实验任务, 但C语言一个学期学习下来, 合上课本甚至连一个完整的程序也编不出来 (当然他们中的好些也能在考试中取得高分, 然而他们的秘诀却是"背程序") , 这其中主要的原因就是他们的实验课没有上好, 动手编程和解决问题的能力不强。
实例教学就是在教学中运用围绕课程内容设置的实例, 以实际应用为出发点, 结合理论教学, 让学生针对实例中涉及的具体问题提出解决的方法、手段和途径, 并在实际应用中加以掌握, 同时"任务驱动"则巩固和深化对知识点的理解和掌握, 这种模式更注重培养学生灵活运用知识创造性解决实际问题的能力。
在C语言实验教学中灵活运用实例教学, 它使得教学内容具有生动活泼的立体感, 从而能极好地开发和增加学生的实践能力, 极大地提高教学水平、改善教学效果。
一、激发学生学习的兴趣和主动性
在传统的C语言实验教学中, 大都以其教材或相应的实验指导书为主。这种形式的实验教学有它的不足。
首先过于简单。虽说C语言是许多学生接触的第一门程序设计语言, 但C语言也是相对比较容易入门的语言, 其中的决大部分内容, 学生在通过教师理论课的讲解或自习后即可理解掌握。所以对于大部分的实验任务, 学生无须多加思考, 只要通过对课本或实验指导书上现成的例子稍做修改即可完成。可能好多教师都被学生问过类似于这样的话:我们学这东西 (turboc2) 有什么用吗?能做些什么呢?因此, 上机实验基本属于验证性实验, 抹煞了学生实验的自主性和创造性。
其次, 内容过于枯燥。对于这些简单的实验程序, 其大部分输出的都是枯燥的字符或数字。所以学生即使完成了, 在其他同学看来也没什么值得欣赏的地方。不像其他科目的实验课, 比如网页制作, 虽然难度不大 (甚至还很烦琐) , 但不少学生对此还是乐者不倦, 经常在其他实验课时间也在做网页之类的内容。原因很简单, 网页做出了后他们有成就感, 可以和其他同学分享他们的成果。
所以, 使用传统的实验教学办法, 开始的时候大部分学生可能还很认真, 但由于他们的学习是被动的, 到后来他们的兴趣也就慢慢地淡下来了。但如果C语言实验教学中通过引用分析、修改实例, 最后仿造完成相应的实例, 其效果就不同了。
首先内容丰富多彩。为培养学生学习兴趣, 可以使用带有图形界面的完整C语言程序 (如一些小游戏程序) 作为实例教学的素材。实践证明学生对游戏编写的兴趣是最高的, 因为他们编写出来后通过不断修改完善, 既可自娱, 重要的是也可以让其他同学来分享其完成一个程序后的成就感。
其次是增强了难度。一个完整的特别是带图形界面的C语言游戏小程序, 其中不少内容 (如图形方面) 在现在大多数的C语言教材上是没有涉及到的。而且一个可以完成某些特定功能的C语言程序少说也要上百条语句, 对于学生来说, 不是随便翻翻书就可以弄明白的。这样自然能激发学生强烈的求知欲, 他们的学习也就会由被动变为主动。例如在学期末教师先演示一个经典的俄罗斯方块程序, 然后让他们分析该程序的算法和执行过程, 最后给出一定的图形结构体和一些相关的函数, 让学生自己完成类似的游戏程序, 这样激发学生上机操作的兴趣, 从而达到良好的教学效果。
二、增加学生间的交流
传统的C语言实验教学由于内容简单、枯燥, 学生的兴趣不高, 所以他们相互间很少进行交流, 从而导致他们的理解误区很难及时得到矫正。使用实例教学模式, 促使学生为分析、解决问题而增加相互间的交流, 这无论是对教学还是学生学习, 无疑是最好的。
三、提高综合编程能力
传统的C语言实验教学中, 上机操作编写的是课本或指导书上的例子, 学生思考不多, 语法印象不深, 编程能力不强。实例教学通过循序渐进的实例作业, 使学生的编程思维不断创新和改进, 通过不断地上机操作, 既巩固了理论语法知识, 又提高综合编程能力。避免了类似"合上课本甚至连一个完整的程序也编不出来"的情况。
四、树立信心
通过学期末综合实例的实现, 树立学生分析、解决实际问题的信心, 这将对学生以后的发展起到重要作用。
最后, 总结在应用实例教学过程中应注意的一些问题:
在C语言实验教学中, 应用实例教学重点和难点在于实例的选择上, 过易或过难都不理想, 选择实例应注意循序渐进, 每个实例和任务都是独立的, 但又是联系的, 是成一系统的。由于C语言的程序实例经常涉及到其他学生未接触过的方面, 教师应根据学生具体的水平, "屏蔽"掉一些语句。即对于一些复杂的程序, 教师要把它细化, 哪些是这节课需要掌握的重点, 哪些是可以忽略的 (只要知道是怎么引用即可) 。这一点在实例教学中也非常重要。
摘要:传统的C语言实验教学中, 大都以其教材或相应的实验指导书为主, 然而其枯燥、单一的语法实验很难激发学生学习的主动性。本文通过实例教学与传统教学的对比, 阐述了实例教学模式在提高教学质量和激发学生学习兴趣等方面的几个重要作用。
关键词:C语言,理论教学,实例教学,学习兴趣
参考文献
[1].何迪.C语言课程教学方法探析.中国培训.2005年第7期
3.c语言程序设计实例 篇三
关键词:记忆法;C程序设计语言;口诀记忆
中图分类号:H319文献标识码:A文章编号:1671-864X(2016)08-0190-01
计算机C语言具有设计特性、高效性、可移植性、灵活性、强大的功能等优势,学好C语言有非常重要的意义[1]。但由于初学者缺少先验知识,该课程学习难度大,知识掌握较困难。本文采用“口诀记忆法”,将一些较为复杂和零散的知识点进行编写串联,对促进学习者有效学习的发生,提供了一种较好的选择。
该课程新增知识点较少,教材内容变化不大,通过以下四个步骤(如图1),即可完成编写过程,后续只需在教材章节的基础上对知识点上进行细化。
一、分析环节
分析环节一般分为两个步骤,第一是对学习者的分析,第二是对知识点的分析。分析学习者应该着重分析学习者的一般特征、入门能力和学习风格。教师可以通过查看学生以前的学习成绩记录、直接向学生提问、与学生交谈、与教师交谈、标准化测试、教师自己出题等方式来了解教学对象的特征和入门能力[2]。学习风格可以选择问卷或量表进行测量。在此基础上,确定要进行记忆的重难点。教学者应重点关注那些理解力和思维能力较弱,但容易调动积极性的学习者,进行重点的教学辅导。
对于知识点的分析,一般应结合教材目录、前人总结、课后习题、题库试题等方面进行。以《第二章C程序设计的初步知识》[3]章节为例,首先借助教材对知识点进行初步细分。由目录可知,该章节包括“简单的C语言程序的格式”、“标识符、常量和变量”、“数据类型”、“算术表达式”、“赋值表达式”、“自加、自减运算符和逗号运算符”等小节。其次是对每小节具体知识点进行分析,教材一般都提供了课后习题,这些习题是专家教师经过长期实践总结出的,具有一定的代表性。教学者可以将其中一部分作为要点暂时列出。最后在结合对学习者分析的基础上,进一步筛选出要点知识,即编写知识点。
二、选择记忆方式
对于编写知识点,可以采用口诀记忆可以选择谐音、简化、对偶和综合等方式进行编写。谐音记忆就是把需要记忆的教学难点内容跟日常生活中的谐音结合起来,采用押韵、联想等方式进行记忆;简化是将复杂的知识点,突出重点后进行选择性的简化;对偶是用对称的字句加强语言的效果,但一般情况下在记忆法中,较难达到完整的对偶,只要求字数大概一致即可;综合的方式是指没有固定的格式,可以将几种方式结合运用(如表1所示)。初步完成编写的记忆法往往较为粗陋,还会存在混淆概念或知识点的可能,教学者需要在不断实践的基础上进行修改,同时最好配有口诀的解析说明,方便学习者理解记忆,避免产生歧义。
三、学习者参与编写
对编写的口诀而言,学习者参与编写,可以发挥群体智慧,逐步完善其解释和记忆功能。对学习者自身而言,积极参与会提高学习效果[2]。对教学者而言,可以减轻教学者编写负担。教学者可以定期组织学习者展示上交记忆法成果。
四、评价反馈与修改
评价反馈与修改在整个记忆法的编写过程中都在不断进行,包括判断学习者分析是否准确、对知识点的分析是否适当、对记忆方式是否有改进、对学习者学习和编写过程及结果是否有效。在此过程中,记录调查结果、原始口诀和改进口诀及其解释说明、学习者学习表现等都会为评价过程提供重要的数据依据。同时鼓励并组织学习者对学习中的重难点和学习中出现的问题进行反馈;最后,教学者要把握谨慎修改,修改必须记录说明的原则,逐步修改和完善记忆法。
参考文献:
[1]普拉塔.C Primer Plus(第五版)中文版[M].人民邮电出版社,2005.
[2]斯马尔迪诺.教学技术与媒体[M].高等教育出版社,2008.
[3]教育部考试中心.全国计算机等级考试二级教程——C语言程序设计[M].2010年版.北京:高等教育出版社,2010.
4.c语言程序设计实例 篇四
禁止随便复制钥匙,最好只有一把备用的,放在指定的地方。所有钥匙只允许存放在工厂,不许带出工厂。
钥匙不能随意乱放,指定的使用者必须随身携带或妥善保存 如果一把钥匙丢失了或某钥匙的使用者被开除了,那这把锁应马上更换。万能钥匙只有经理可以使用,如有特殊情况需要,必须在经过授权和登记的情况下才可以使用。所有分发的钥匙都有登记,部门公用的钥匙必须存放在指定的地方,每次使用都要有记录
库房的锁要定期更换。.破损的钥匙要上缴经理,员工不得私自丢弃。任何施工或安装过后,在接收后施工方安装的锁必须更换。所有员工必须清楚钥匙管理规定。在员工离职前必须上缴所有保管的钥匙,否则不支付最后一笔工资。
处理访客程序
有关处理访客要求,特此敬告,程序如下:
生效日期:2004年12月1日
1.目的: 配合C-TPAT防恐措施, 控制不明身份外来人员混入厂区
2.执行程序:
同事如有预约客人要进入XXXX厂区,请事前填妥”访客预先登记条”,电邮或交XXXX厂人事部。
空白”访客预先登记条”存于XXXX厂人事部及香港美信人事部。
XXXX门卫按”访客预先登记条”核实访客身份无误后, 带领客人到B写字楼接待处,等候被访人。
无预约之客人须留在大门门卫处,由被访者到来确认访客身份及陪同进入厂区,被访者须出示本人员工证。
每早罗湖开出回厂之厂车只乘载本公司员工及已获认可证明之客人。
计算机使用安全守则(Computer Use Guidelines)
为了避免因操作失误等人为因素导致计算机系统的损环,维护本公司计算机系统的安全以保证正常动作,进一步提高公司电脑办公效率,有必要制订响应的安全使用规范。
一、不要随便尝不明的或不熟悉的计算机操作步骤。遇到计算机发生异常而自己无法解决时,就立即通知电脑室,请专业人员解决。
二、不要随便运行或删除电脑上的文件或程序。不要随意计算机参数等。
三、不要随便安装或使用不明来源的软件或程序。不要随意开启来历不明的电子邮件或电子邮件附件。
四、收到无意义的邮件后,应及时清除,不要蓄意或恶意地回寄或转寄这些邮件。
五、不向他人披露使密码,防止他人接触计算机系统造成意外。
六、定期更换密码(每一个月为一个更改周期),如发现密码已泄漏,就尽快更换。预设的密码及由别人提供的密码应不予采用。
七、定期使用杀毒程序扫描计算机系统。对于新的软件、档案或电子邮件,应先使用杀毒软件扫描,检查是否带有病毒、有害的程序编码,进行适当的处理后才可开启使用。
八、先以加密技术保护敏感的数据文件,然后才通过公司网络及互联网进行传送。在适当的情况下,利用数定证书为信息及数据加密或加上数字签名。
九、关闭电子邮件所备有自动处理电子邮件附件功能,关闭电子邮件应用系统或其它应用软件中可自动处理的功能,以防电脑病毒入侵。
十、对所有电脑人员定期进行培训,密切个人文件。
十一、对公司辞职人员的电脑由负责人立即更改电脑密码,保密电脑内文件。
月薪人员出勤制度
目的:明确月薪人员出勤制度。
范围:所有月薪人员。
内容:
1、事假需提前以一天为单位申请,得到部门部长批准后方可休假。特殊情况需电话请假,但上班后一天内补交《请假卡》,不提交者按旷工处理。
2、有薪假不得与法定假日、婚假、产假、丧假、探亲假、护理假等连休。
3、法定假日前后不得与事假、有薪假、婚假、探亲假等连休,连休者法定假日为无薪假。
4、口头请假者,事后不得补办任何有薪假。
5、课长级别每年有14天有薪假(不分工作年限)。
6、有薪假不可跨年度累计,不能折算现金。
7、课长级别人员出勤每天刷卡两次:早上班卡及晚下班卡,未刷卡者与普通员工同样对待。
8、原《课长职务勤怠管理的规定》于2004年10月15日起作废。
9、本制度生效日期: 2004年10月15日。
邮件接收管理制度
一、目的为规范邮件的接收工作,确保邮件接收工作顺利进行,确保公司安全。
二、范围
凡公司接收邮件皆适用之。
三、职责与权限
保安人员负责邮件的接收,并确认邮件安全性.四、内容
4.1所有外来邮件和包裹只能送交保安室。将邮件送交办公室前,保安应初步检查邮件,确保邮件和包裹内不含任何爆炸物或化学/生物药剂。以下是可疑邮件的一些特征(但并不意味着可疑邮件或包裹就是危险的):
o 国外邮件、航空邮件和特快专递。
o 限制标志,例如机密、亲启等。
o 多付邮资。(通常为邮票-而非邮资已付戳记条纹)。
o 手写或模糊不清的地址。
o 错误的称呼。
o 有称呼但没有姓名。
o 拼错常用字。
o 油污或变色。
o 没有回信地址。
o 超重。
o 硬质信封。
o 不对称或不平坦的信封。
o 外露电线或锡箔纸。
o 过多的保护材料,例如胶带、线绳等。
o 视觉扰乱。
o 物品外部有不明的动力装置
o 有滴答声
4.2 如保安发现邮件可疑,应立即向邮件接收人确认,并找一空旷处,采取安全措施后打开或报告当地派出所处理。
5.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(); 1.编写一个程序,求出给定半径r的圆的面积和周长,并且输出计算结果。其中: r的值由用户输入,用浮点型数据处理。 2.给一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上 为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 3.输入两个正整数m和n,求其最大公约数和最小公倍数。 4.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 5.求sn=a+aa+aaa+…+aa...a(n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222 (此时n=5),n由键盘输入。 第二次试验 1.有一分数序列:,,23581321,...求出这个数列的前20项之和。1235813 2.求一个33矩阵对角线元素之和。 3.将一个数组中的值按逆序重新存放,例如原来的顺序为:8,6,5,4,1。要求改 为:1,4,5,6,8。 4.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格、以及其他字符的个数。 第三次实验 1.将字符串computer赋给一个字符数组,然后从第一个字母开始输出该串。请用指针实 现。 2.将无符号八进制数字字符串转换为十进制整数。例如,输入的字符串为556,则输出十 进制整数366。用指针实现。 3.编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数,用指针实现。 第四次实验 1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。 2.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 3.写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个 数,在主函数中输入字符串及输出上述的结果。 关键词:C语言,程序设计,教学方法 一、前言 C语言是一种通用性计算机程序设计语言。它兼有汇编语言和高级语言的双重优点, 运用它既能编写操作系统软件, 又能开发各个领域的应用软件, C语言的实用性使之成为编程的首选语言。在计算机课程中, “C语言程序设计”是计算机专业的一门必修基础课, 同时“C语言程序设计”又是“数据结构”、“操作系统”、“编译原理”、“软件工程”以及其它相关课程的先修课程, 因此, “C语言程序设计”在整个计算机教学体系中占据十分重要的地位。 二、C语言程序设计教学中存在的普遍问题 1、难以培养学生实际操作能力 程序设计类课程一般以程序设计语言自身的体系为教学路线, 侧重于编程语言的基本概念、基本语句和语法的详细讲解, 而没有把逻辑与实际编程解题思路作为教学的主线。所以很难达到培养学生分析问题和解决问题的实际能力的目的。学生面对的是一大堆语言符号, 需要记忆的内容过多。在教学过程中学生们感觉学习相应的知识点 (语法) 并不困难, 课堂上听老师讲解例题时也容易明白, 但真正让学生去解决实际问题, 有相当一部分学生感到无从下手, 觉得问题太难。学生对于课本上的例子容易理解, 但不会举一反三。 2、实践性教学薄弱 只有在上机实践中学生才能真正学会如何编写程序和调试程序, 才能更好地掌握程序设计的理论知识。可在C语言实践教学中, 由于课时有限, 教学条件有限等, 没有把编程思路和程序调试放在首位, 对学生分析问题和解决问题的能力训练不够, 上机内容基本上都是立足于C语言本身的一些语法规则, 和实际开发应用脱节, 无法激起学生求学的兴趣。 3、学生之间学习差距较大 由于学生水平不一, 并且潜能生学习自觉性较差, 学生学习的效果差异十分明显, 造成潜能生的编程能力逐渐下降。如何开展有效的教学研究, 使大多数学生都能学懂C程序设计的基本概念, 掌握常用的语法及算法, 能用C编写通用程序, 是值得研究的问题。 三、教学与实践改革的具体措施 1、抽象思维到形象思维的转化 对于枯燥的语言叙述, 改用生动的比喻进行引导。比如, 学生学习指针概念时, 对“间接存取”难以理解, 就借用比喻:将甲房间的钥匙放在乙房间里, 若要取甲房间里的物品, 就需要先打开乙房间, 取出甲钥匙, 再打开甲房间, 取出甲房间的物品, 这就是“间接存取”。这样讲学学生很快就能理解, 也加深了指针的概念。 2、理论教学与学生实践相结合 C语言课程是一门实践性很强的课程, 一定要动手多写设计、编写程序才能有所进步。在实践教学中必须做到循序渐进, 对所学的每一部分内容都应该要求学生完成一定数量的实验内容。每部分的上机习题必须精心挑选, 既要有基本的、较简单的题目, 又要有一些具有挑战性的新颖有趣的题目。学生自己编写的程序一定要到机器上去实现, 通过调试程序来修订语法错误, 排除逻辑错误, 进而提高编程能力。通过做一定量的习题, 可以积累一定的经验, 同时对程序设计的精髓会有所领悟, 从而重视上机实验。 比如:设计班级成绩管理系统、简易的图书管理系统、简易的通讯录管理系统、小游戏等。让学生利用课余时间去思考, 收集资料, 以教师为主导, 以任务为主线, 以学生为主体, 过一段时间在课堂上组织学生发言和讨论一次, 看看大家对这些问题的思考程度, 提提建议, 鼓励加引导, 最后到完成。这种教学法不仅可以让学生获得许多课外知识, 同时也促进教学内容的改革, 而且也有利于充分挖掘学生的学习潜力。 通过一个阶段C语言的学习, 选拔出一批优秀的同学, 单独培养, 结合所学专业, 加宽加快加深学习内容, 使他们尽早切人实际应用, 有条件的进入相关的开放实验室, 参与计算机应用的小课题研究或参与学生创新设计大赛等, 培养学生中的学术带头人。 以榜样的力量促进良好的学风建设, 形成良好的学习氛围, 促进整体的学习进步。在C语言教学中, 培养学生的自学能力尤为重要, 如果学生的学习完全依赖教师才能掌握, 而没有一定的自学能力, 其所学的知识很快就会被淘汰。对于多数学生, 则把精力放在最基本、最常用的内容上, 让他们学好基本功, 掌握程序设计的方法, 为后续课程的学习打下基础。 3、在校期间进行不间断的C语言编程训练 仅靠一个学期的C语言的学习是远远不够的, 需要在后续课程中进行巩固提高。C语言是C类语言集合的子集, 我们把C语言和C类语言融合为一门课程, 第一学期授课以C语言为主, 第二学期讲授以C++为主, 所有程序都以VC为调式环境。经过这样的整合, 知识内容显得很连贯, 一气呵成, 为第三学期的Windows程序设计课程奠定了基础。该课程利用MFC类库进行Windows应用程序开发。后继的数据结构、算法分析与设计、计算机网络原理、操作系统、编译原理等课程实践环节都利用C语言进行开发, 开展3年不间断的C编程训练。 4、改进成绩的考核方法 对学生学习情况的考核不应以停留“期末试卷”为中心的传统考试观念, 应该进行改进, 以此提高学生对知识的运用能力、自学能力、分析和解决问题的能力。 (1) 加大平时成绩的考核。平时考核的方法有:课堂提问、作业与练习、阶段性测试, 包括学生提出有价值的问题都给予记分。平时考核成绩占总成绩的比例为20%。加大平时成绩的考核, 有利于全面测评学生能力。这样可以激励学生学习的积极性和主动性, 并将这种积极与主动精神贯穿于课程学习的始终。 (2) 加大上机考核。对C语言的掌握情况主要看上机的调试, 要对上机过程和结果给学生进行考核, 既要看结果, 也要看过程。应鼓励学生在程序的设计上精简优化。上机考核成绩占总成绩的比例为20%。 5、尽量使用现代化教学手段提高教学效率和效果 形式多样的教学手段课堂教学要应用现代化教育技术, 使用多媒体进行课堂教学, 给学生营造一个良好的程序设计环境。与传统教学方式相比, 多媒体教学具有形象生动、图文并茂、交互性好、信息量大、减少文字书写等显著特点, 对课程中难以理解的抽象内容, 可以给予直观展示和动态模拟, 达到既能辅助教师形象地讲授课程中的难点和重点的目的, 又能激发学生学习的兴趣, 从而提高教学效率和教学效果。把讲授法、练习法、实验法、演示法和多媒体网络教学技术结合起来, 将课程中抽象的、难以理解的教学内容, 进行形象化, 这样就更利于学生理解与记忆。 6、在整个教学环节中, 巧妙地引人软件工程的基本思想 计算机科学属工程技术科学, 为使学生有良好的编程思维, 应注重软件工程思想的渗透。对软件生存周期的几个阶段, 即问题定义、可行性研究、需求分析、概要设计、详细设计、编码、调试、运行与维护, 可以通过常规的C程序设计实例来体现, 以培养学生编程中的工程思维。这样并没有费很大力气讲抽象的概念, 却可培养学生在程序设计中从软件工程角度去系统分析问题的良好习惯。 四、结语 本文针对在“C语言程序设计”教学过程中出现的普遍问题, 进行思考和探索, 并将所提出的方案在教学活动中实施, 较好地激发了学生的兴趣, 调动了学生的学习积极性, 培养学生的自学能力, 提高学生的编程思想和解决实际问题的能力, 取得了很好的教学效果。通过这门课的学习, 不仅要使学生掌握语言的基本规则, 而且要切实培养学生分析问题, 解决问题的能力, 培养学生的创新精神, 团队意识, 为学生提供更好的展示才华的舞台。 参考文献 [1]张庆岚.提高《C程序设计》课程教学质量的探讨[J].福建电脑, 2009 (1) . [2]施敏华, 等.计算机专业实验教学体系探索[J].计算机教育, 2007 (10) . 关键词 递归;循环;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语言有一定了解的时候,才开始佩服那些设计游戏的人,一个小小的C语言程序,可以让很多大一点学生痛苦难当!可是他们却可以完成一个游戏的设计,真的很不容易!经过C语言的学习和这次实习设计程序,让我对C语言有了一个更深刻的了解和认识! 以前长辈给我们说,学习知识才是你们以后好的生活的保证,我总是不以为然,觉得没有知识,也是可以很好的生活,也就边玩边学,可是通过这次C语言的程序设计,我认识到,没有扎实的知识做基础,很难完成很多工作,想想也对啊,现在是一个科技高度发达的社会,没有科学文化知识做基础,我们如果能很好的完成一项工作呢?作为当代大学生,努力学习文化知识,才是我们现在的任务,只有让自己更有实力,以后才会对社会有贡献! 我是一个自我中心的人,从前总认为,不管什么事情,只要我一个人就可以做好,做完,可是通过这次的程序设计,让我认识到自己的不足,一个大的工程,一个人是没有办法独立完成的,虽然这个程序不是很大,但是我还是遇到了很多的困难,有很多我不会的地方,开始的时候我觉得一个人找资料也是可以解决的,可是后来才发现,那样我的效率很低,很多问题我不懂,我周围有很多人懂,只要我问一下,很快就可以解决,也让我改变了想法,应该和周围的人合作,努力的让自己更有实力,办事效率也会提高! 这次我主要设计的是一个关于学生成绩统计的程序,这个程序的特点就是简便、快捷!让你可以很快的进行添加学生成绩,一个一目了然的主菜单,让你可以看好的找到你要操作的项目!进而可以加快做事效率,添加、删除,都可以很好的做到,也可以让你查看所有的学生成绩! 【c语言程序设计实例】推荐阅读: c语言模拟迷宫程序07-07 c语言源程序结构08-03 c语言程序设计试题库07-01 c语言程序设计第10章07-07 c语言程序设计第五章09-15 c语言程序设计夏宽理10-20 C语言程序设计综合实训10-30 C语言程序稳定性08-20 C语言程序设计实验指导及报告07-26 C语言程序设计教学大纲72du09-296.C语言程序设计实验 篇六
7.C语言程序设计教学浅析 篇七
8.基于C语言的递归程序设计分析 篇八
9.C语言设计心得 篇九