c语言课程设计电话簿(精选8篇)
char tel[20];
char wu[20];
char dz[20];}mem[N];void sorttel(struct mem tel[]){
struct mem temp;
int i,j;
FILE *fp;if((fp=fopen(“c:elephone.txt”,“rb”))==NULL){
printf(“不能打开文件n”);} for(i=0;i for(j=0;j if(strcmp(mem[j+1].tel,mem[j].tel)<0) { temp=mem[j]; mem[j]=mem[j+1]; mem[j+1]=temp; } for(i=0;i void sortname(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c:elephone.txt”,“rb”))==NULL){ printf(“不能打开文件n”);} for(i=0;i for(j=i+1;j if(strcmp(mem[j].name,mem[i].name)<0) { temp=mem[i]; mem[i]=mem[j]; mem[j]=temp; } for(i=0;i void sor(){int k; do{printf(“--------------------排序菜单-------------------n”); printf(“------------------------n”); printf(“ 1:按号码排序n”); printf(“ 2:按姓名排序n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-2选择功能n”); scanf(“%d”,&k);getchar(); switch(k) { case 1:sorttel(mem);break; case 2:sortname(mem);break; case 0:return; } }while(1);} void add(){ char name[10];char tel[10]; char wu[10]; char dz[10];FILE *fp;if((fp=fopen(“c:elephone.txt”,“a”))==NULL){ printf(“不能打开文件n”); exit(0);} printf(“请输入姓名”); gets(name); printf(“请输入电话号码”); gets(tel); printf(“请输入工作单位”); gets(wu); printf(“请输入地址”); gets(dz);printf(“n”); fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz); fclose(fp);} void del(){ FILE *fp; int i=0,n; char name[10]; printf(“请输入删除名字”); gets(name); if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)!=0)i++; } fclose(fp);if((fp=fopen(“c:elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} for(n=0;n fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“ 姓名 电话号码 工作单位 地址n”); if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) {fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;} fclose(fp); n=i; for(i=0;i printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10]; printf(“请输入要修改的姓名”);gets(name);printf(“请输入修改后的姓名”);gets(nn);printf(“请输入修改后的电话号码”);gets(nt);printf(“请输入修改后的工作单位”);gets(nwu);printf(“请输入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)==0) {strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);} i++; } fclose(fp);if((fp=fopen(“c:elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} n=i; for(i=0;i fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); fclose(fp);} void main(){ int choose; while(1) { printf(“--------------------电话簿管理系统--------------------n”); printf(“------------------------n”); printf(“ 1:添加一个新号码n”); printf(“ 2:删除一个号码n”); printf(“ 3:显示所有保存的号码n”); printf(“ 4:修改号码n”); printf(“ 5:排序n”); printf(“ 6:查询n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-6选择功能n”); scanf(“%d”,&choose);getchar(); if(choose!=0) switch(choose) { case 1:add();break; case 2:del();break; case 3:dis();break; case 4:mod();break; case 5:sor();break; case 6:/*que();break*/; } else exit(0); 做为一门程序设计语言, C语言对于高职院校的学生非常重要, 它是学好JAVAT等其它高级语言的基础。因为C语言既有高级语言的特点, 又具有汇编语言的特点。它可以作为系统设计语言, 编写工作系统应用程序, 也可以作为应用程序设计语言, 编写不依赖计算机硬件的应用程序。所以, 高职院校的学生必须学好它。 C语言以其功能齐全、表达能力丰富、使用灵活方便、目标程序效率高、可移植性好、可直接对硬件进行操作等众多优点, 而备受青睐。C语言是培养学生程序设计能力的开端, 形成初步的基本程序设计思想和观念, 培养初步的分析和解决问题的能力。对于学生将来是否能够成为一个合格或优秀计算机专业人才, 起着重要作用。但C语言较之于现在流行的可视化编程, 界面枯燥, 语法烦琐, 如何在有限的学时内, 让对计算机一无所知的大一新生能够掌握C语言基本原理的同时, 能熟练运用程序设计的方法分析问题、解决问题, 成为C语言工作的重要组成部分。 1 C语言课程设计的目的 经过C语言课程设计, 能够充分掌握软件设计的基本方法, 了解C语言的好处和其可用性、重要性和必要性可以培养独立思考、综合运用所学有关相应知识的能力, 增加了同学之间的团队合作精神, 巩固C语言课程学习的内容, 强化动手编程能力。 经过这种课程设计, 使学生了解高级程序设计语言的结构, 具备初步的高级语言程序设计能力。掌握基本的程序设计过程和技巧, 掌握基本的分析问题和利用计算机求解问题的能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 2 C语言课程设计的基本流程 它的具体流程如下: 首先, 做一个系统, 对其进行功能模块的分析、控制模块的分析, 然后检查是否符合课题要求, 能否实现其相应的功能;能不能够加以其他的功能或其他的修饰, 能否使程序设计更加合理和完善; 其次, 整个系统设计必须要达到实用的目的, 编程过程进量要简练, 可用, 其功能要全面; 第三, 课程设计的说明书及其流程图等要表述清楚; 第四, 为编写设计说明书作好准备, 要有相应的记录设计情况; 第五, 必须采用模块化程序设计的方法, 以及正确完整的书写格式, 并按设计的报告格式进行上机调试; 最后, 要提交设计内文档写作和程序开发必须同步。 也就是说:应该先完成程序设计目的分析和功能模块分析后, 再进行编码和程序调试、测试工作。编程测试要求学生把自己编写好的程序录入到计算机, 然后进行程序语法调试, 如语法正确, 再选取一些数据进行程序测试。这一部分是课题设计的关键, 也是需要花费时间最多的部分。在此过程中要求学生学会按模块一个一个地进行调试。 在编译时有时会出现比较多的出错提示。这时应努力理解、领会提示信息的含义, 并据此改正错误。当编译提示的出错信息不止一条时, 只须先注意其中第一条。因为从第二个错误开始的若干错误很可能是随带错误, 只要更正了第一个错误, 它们便自然更正了。对于C语言初学者, 最好先将程序以书面的形式描述出来, 然后录入计算机调试。在经过定性、定量分析后, 学生对所要进行的设计进行书面算法设计。强调学生在编程时要代码规范、使用注释, 养成良好的编程风格。通过将程序写到纸上, 不仅能使学生进一步掌握C语言语法, 而且学生在编程过程中如遇到问题, 可以有足够的时间提前到图书馆或网上查阅资料, 保证了程序的正确率和有限的上机调试时间。 实践证明, C语言课程设计对提高教学质量有明显的优越性, 克服了重理论, 轻实践的弊端。由于课程设计不是一般的书面作业或上机操作实验, 而是一次完整的软件设计。这就要求提前做比较多的准备工作, 如收集整理资料和编写较多的教学文件等。 3 C语言课程设计内容调整——适当取舍和整合 课程设计成功的首要条件是选择一个合适的题目。题目要符合实际, 不仅要使学生掌握C语言程序设计教学中的重要知识点、了解程序模块化开发等内容, 而且还要与现实生活联系密切, 具有一定的实用性和趣味性, 由于C语言程序设计是工科很多专业必修的课程, 所以在选题时尽可能体现本专业的特色, 具有一定的先进性和实用性, 增强学生对专业知识的领悟与应用能力, 可以与单片机结合进行课程设计 大多数C语言教材内容是按照“数据类型-基本结构-数组-函数-指针-文件”这样的顺序进行知识点编排, 内容详尽全面、讲解细致[1]。这样的做法偏于陈腐, 因此, 针对这些情况, C语言课程设计内容要进行适当的取舍和整合。 3.1 整合 适当的调整知识点的设计顺序, 增强知识点之间的联系, 这样可以直接把知识转化成能力。但在教材整合要注重知识的渐进性, 符合课程设计的认知规律。比如, 讲解整型数据的时候可以和该类型的输入输出语句的格式说明相结合, 通过两个数求最大值的例子, 引入if选择结构、关系运算符和关系表达式、流程图的画法的讲解。通过判断一个数的奇偶的例子, 引入算术运算符和算术表达式、等于运算符的讲解。这样就把书上的数据类型、运算符和表达式、顺序结构和选择结构四章的内容打乱、重组。 3.2 取舍 与其把所有内容通讲, 还不如挑一些内容精讲, 让学生熟练掌握这些知识。对于未讲的内容, 可以通过循序渐进的方式, 在例题或作业中逐步的加入。 4 C语言课程设计方法的改革——采用案例C语言法 传统C语言方式是以教材为中心, 从书本到书本, 从概念到概念, 导致C语言课程设计对理论与实践的脱节。而案例C语言法十分注重其效果, 通过案例分析解决实际问题。对设计的目标进行定性分析, 进行定量分析。可采取自顶向下、逐层分解的方法, 将课题分成有若干个模块, 然后对各模块重点和难点内容进行重点讲解, 使重点突出, 难点分散, 最终各个击破。 计算机学科是一门实践性很强的学科, 只“听”、“读”、“写”是远远不够的。在程序开发过程中, 程序调试的工作量要比编程大得多, 上机调试程序是一个不可缺少的重要环节。因此, 要明确上机目的, 验证程序的正确性, 具体的分析算法和语法结构。这样, C语言课程设计的实践目的才能达到。 C语言课程设计内容主要分成2部分:1) 理论课的例题;2) 针对理论课所讲的内容, 布置题目。如可以设计出一个工资管理系统: (1) 设计要求 矩阵乘法:编写一个函数实现矩阵A (2行3列) 与矩阵B相乘 (3行2列) , 乘积放在C数组中。在主函数中输入相乘的两数组, 并输出结果。 工资管理:结构体数组、函数、指针、算法、流程结构及文件等的综合应用。 程序说明:有N个工人, 每个工人的数据包含职工号 (不重复) 、姓名、工资总和及分项工资, 试设计一工资管理系统。 (2) 功能模块的设计 输入记录函数EMP*create () 算法:先声明一个首节点head, 并将head->next设为NULL。每输入一个数据就声明一个新节点p, 把p->next设为NULL, 并且链接到之前列表的尾端。 记录函数void er int (EMP*head) 算法:先将p结点的指针指向第一个结点, 将p结点 (即第一个结点) 的数 输出。然后再将p结点的指针指向p指针的的指针 (即下一结点) , 将p结点第一结点) 的数据输出。重复执行此步聚直到p指针指向NULL为止。 查找记录函数void search (EMP*head) 算法:采用线性查找法往下一个节点查找。输入所要查找的职工的职工号k, 设一个指针变量p, 先指向第一个结点, 当strcmp (p->name, k) &&p!=NULL时, 使p后移一个结点, 如果p!=NULL, 输出p所指的结点。 需要注意的是, 在整个设计过程中, 要设计好流程图。 在C语言课程设计中应该注意程序中频繁的调用函数会增加系统的负担, 降低程序的执行速度, 花费较多的时间, 影响C程序的执行效率。这就要求我们在编写程序时, 在程序的可靠性得到保证的前提下, 根据具体情况找出最优的、能充分利用系统资源和提高程序运行效率的一种最佳方法。当然, 在不同的系统和不同配置的计算机上程序的运行效率是不尽相同的, 程序的效率问题是在编写较大或较复杂程序时应该充分考虑的。 5 结论 本文通过对C语言课程设计的探索和改革, 探讨了在C语言课程设计中的设计方法和应注意的一些重要问题, 通过这些探索, 能够使学生的理论水平和实践能力大大提高, 这对C语言的学习和课程设计有一定的指导作用, 学生综合能力也会不断的增强。 参考文献 [1]谭浩强.C语言程序设计教程[M].北京:清华大学出版社, 2007. [2]李博.多媒体C语言中存在的问题及解决措施[J].才智, 2009, 8. [3]李炜.计算机高级语言程序设计的C语言改革与时间[J].安徽师范大学学报:自然科学版, 2003, 26 (2) . [4]管小卫.C语言课程设计探讨[J].广西轻工业, 2009, 1. 随着计算机的日益普及和互联网的飞速发展,以信息产业发展水平为主要特征的综合国力竞争日趋激烈,软件产业作为信息产业的核心和国民经济信息化的基础,越来越受到世界各国的高度重视。软件技术已成为信息社会的运行平台和实施载体,软件技术应用的全面延伸对用于信息处理的软件技术的发展提出了更高要求,同时促进了软件技术和软件行业的飞速发展,软件技术已经成为人们公认的当今发展最为迅速的技术之一。 《C语言程序设计》是软件工程专业的核心基础课程,其教学效果的好坏,对整个专业教学计划能否顺利完成和专业培养目标能否实现有着重要的作用。本文针对软件工程专业的特点,从培养工程应用型人才的实际需求入手,结合笔者自身的教学实践,对《C语言程序设计》课程教学中的问题进行了分析,从课程教学设计与课程实践教学方面提出软件工程专业《C语言程序设计》课程教学的一系列改进措施。 一、课程教学现状 笔者结合多年的教学实践,并通过调查在校往届学生的学习情况发现,《C语言程序设计》课程教学存在一些问题。 (一)教材内容与实践脱节 教师教授理论课时,大多依据教学大纲指定的配套教材进行讲授,实验课的编程题目多数是验证课本上的例程或者理论课教材后的作业。目前,软件工程专业理论课使用的教材大多以傳授基础理论知识为主,虽然一些知识点后给出了相应的实例,但是这些案例比较孤立,缺乏与工程实践的联系,导致学生觉得日常练习的例程枯燥无味,而且不知道如何将基础理论知识应用于工程实践,使自己具备一定的解决问题能力。由于学生所学知识及其方法与工程实践没有有机结合起来,学以致用的工程意识缺乏日积月累的养成土壤,学习的兴趣和动力不知不觉地消失在盲目与盲从之中。 (二)课程考试与实际应用相关性差 《C语言程序设计》是计算机专业学生学习各类专业课程的重要工具性课程,主要培养学生的工程实践能力。通过调查发现,目前该课程考核仍然以闭卷笔试的形式为主,考试内容主要为基础知识点。这样,学生在面对课程考核时,出于应对考试的需要,知识点背一背、记一记,复习课程和政治课、历史课类似。课程考试方式和内容与实际应用较差的相关性导致学生学习动力不足。 二、课程教学设计 事实上,尽管学习动机不尽相同,学生层次有差异,但绝大多数学生能够认识到自己的需要,希望通过学习提高自己的能力。结合学生特点,笔者认为“做中学”和“基于项目教与学”能够较好地提高《C语言程序设计》课程教学质量。 (一)“做中学”统一知与行 “做中学”是比从“听中学”更好的学习方法,符合人类对客观事物规律的认识,能够把书本上的知识与工作生活联系起来,充分结合了学与做。因此,在设计组织教学活动时应注重实践活动的设计,把教学活动与工作生活实际相结合,鼓励学生在实际活动中学习,并将实践中获得的知识与技能有效运用于解决学习、生活和今后工作中的实际问题,即在实践中学习,在学习中实践。 (二)“做中学”最有效的方法就是进行基于项目的学习 一个完整的项目是从分析开始,经历构思、设计、实现和运作的一个完整过程,在学习学科知识的同时能够提高个人产品过程的认知能力和系统建造的能力。在课程的设计过程中,始终强调以项目为导向,以任务为驱动,以一个具体项目为依托来学习相关的内容,在具体实施中分级设置项目,先易后难、循序渐进地将相关的知识点融入项目的任务之中,通过完成任务掌握相应的知识点,提高相关技能和操作的应用能力。在此过程中,学生不断进行实践、总结、反思,将琐碎的知识点串联起来,逐步培养学生的综合能力。 三、课程教学实施 (一)多方面积极引导,激发学生学习兴趣 学生在学习《C语言程序设计》设计之前,可能通过新生入学教育或从高年级学生中知道这是一门专业必修课程而兴致勃勃,但到真正学习时,如果一直都是面对一堆单调而且枯煤无味的语法知识,则容易使学生产生厌学心理从而逐渐失去学习的兴趣。因此,要改进教学方法。首先,通过展示学校近几年来在各种比赛中获得的好成绩,让学生观看比赛的图片,让学生知道只要努力,在各种竞赛中都可以占有一席之地,这样学生就有可达到的奋斗目标从而消除他们的畏难情绪,激发学生的学习兴趣。 其次,在课堂讲授时尽可能找一些趣味性较强的例子讲解,除布置基本的训练学生掌握语法或者算法的题目外,设计1—2个有趣味性的游戏程序设计,如在选择结构编程练习中简易计算器的开发,在循环结构编程练习中加入猜数字游戏设计,在一维数组编程练习中加入猜牌术游戏等,这些游戏程序设计的开发有一定的难度,鼓励学生结成兴趣小组,互帮互助共同完成,在此过程中,学生的学习自主性和团队协作精神都得到大幅提高。 (二)精心设计实验教学 要根据《C语言程序设计》实验的教学大纲制定实验计划,精心设计每一次实验内容,要综合考虑学生编程能力上的差异,不要把题目设计得太深或者太简单,可以设计必做题和选做题,对基础较差的学生,最低要完成必做题;对能力较强的学生,在完成必做题的基础上,鼓励他们去完成选做题。同时,在实验的编排上,注意验证性、设计性和综合性实验的比例,对验证性实验进行精选,即使是验证性实验,也不要简单验证程序的运行结果,而是首先要求学生阅读程序,写出运行结果或程序实现的功能,然后再上机运行,同时可以设计一些问题让学生思考并对程序进行进一步修改,然后再分析运行结果。减少验证性实验项目,增加设计性和综合性实验项目,由浅入深、由易到难,加强学生动手能力、分析问题和解决问题能力的培养,最终提高学生的编程能力。 (三)灵活运用多种教学手段 在做题过程中,教师的主要任务是及时发现问题,回答学生的疑难问题。但是,在实验练习的过程中,学生主要依靠自己讨论或者上网寻求思路来解决问题。这是一个值得鼓励的好现象,能够充分体现学生独立自主学习的能力,在课堂教学中应当鼓励学生互相讨论,互相交换思想共同解决问题。但是,在教学中教师的作用体现不够充分,不愿意寻求帮助的学生会因为一道题目没有解决而无法正常进行实验练习,教师的作用应该是在学生自主解决问题的同时,能够及时提供帮助,尽量统一实验进度。在上机指导学生实验时,要以问题为中心,广泛采用启发式、参与式和讨论式等教学手段,要打破学生对教师的依赖性,让学生自己去思考如何编程,如果较难的题目允许学生讨论,鼓励学生去查阅相关资料,也可以适当给学生一些提示,但一定不要给学生源代码,重点给出解题的思路与建议性方法,给学生留下足够的独立思考和设计的空间,使学生在实验过程中亲自体会并掌握程序设计思想,提高实验的教学效果。 (四)利用网络教学平台让学生主动学习 充分利用校园网内建立的《C语言程序设计》网络教学平台,在该平台上共享本课程部分教学视频、相关课件、经典算法资料、ACM大赛历年题目,可以让学生通过此网络教学平台更加自主地选择性学习,更重要的是利用此平台与学生进行互动交流,在答疑区对学生提出的问题,老师与学生都可以及时解答,同时其他学生也可以分享交流过程,随时再提出新问题,更好地激发学生的学习兴趣,增强教师与学生、学生与学生之间的互动。通过多种教学方式的结合,不仅加深了学生对所讲知识点的理解,而且激发了学生的学习兴趣,提高了学生学习的自觉性,同时通过互动交流式学习增强了学生的自信心。 参考文献: [1]张红军.C语言程序设计教学改革初探[J],信息与电脑,2015 (9):140-142. [2]刘红霞,张永恒.CDIO工程教育模式下的C程序设计教学改革研究[J],榆林学院学报,2015 (4):83-86. [3]李文锦,游戏化学习在C语言程序设计的应用与实践[J],新课程研究,2015 (7):76-77. 经过本学期C语言课程设计实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。 通过实践,我也发现我的好多不足之处,第一是自己在输入法上还不行,经常输错字母并且对键盘也不熟练,通过学习也有所改进;还有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。在本次课程设计中我负责的是和另一位同学合作书写火车购票系统的对输入的信息进行按照一定输入信息进行排序,首先我利用冒泡法书写程序对输入的信息排序,而在该过程中我书写的程序出现了问题,没有错误却运行不起来,后来发现又是一个老问题,忘记链接时把文件名改为英文从而链接出错。后来我和合作的同学一块书写的程序进行整合与修改,使程序简洁而符合要求! 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 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 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 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 运行结果示例: 依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入: 统计不及格人数还有打印不及格学生名单: 统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单: 以直方图方式统计各分数段的学生人数及所占的百分比: 心得体会: 懂得了在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 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 };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 { 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语言课程设计》教学大纲 【课程编号】:22115406 本文由【中文word文档库】 搜集整理。中文word文档库免费提供海量教学资料、行业资料、范文模板、应用文书、考试学习和社会经济等word文档 【英文译名】:The C Programming Language Design 【适用专业】:信息类专业 【学 分 数】:2 【总 学 时】:32 一、本课程的目的和要求 (一)教学目的 《C语言课程设计》是信息类专业的重要实践性课程。目的在于培养学生分析问题和解决问题的能力,为学生提供了一个既动手又动脑,独立实践的机会。将课本上的理论知识和实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。为后续课程: C++,Visual C++,数据结构,软件工程,软件技术基础等奠定必要的实践基础。 (二)教学要求 本课程设计是利用C语言理论和实验课中学到的编程知识和编程技巧,通过布置具有一定难度、一定编程量的课程设计题目,使学生通过课程设计掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,具备利用计算机求解实际问题的能力。 二、本课程与其他课程的关系 前修课程:《计算机基础》 后继课程:《C++程序设计》、《VB程序设计》、《数据库原理与应用》、《数据结构》、《软件工程》 三、课程设计要求 (一)基本要求 掌握C语言程序设计的方法,熟悉C程序的开发环境及C程序的调试过程,熟悉C语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。 信息工程学院 (二)具有下列基本技能 1、培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2、通过对所选题目方案分析比较,确立方案,编制程序与调试程序,初步掌握C程序设计的方法。 3、能熟练调试程序,在教师的指导下,完成课题任务。 4、根据个人的设计调试过程,撰写设计报告。 四、课程设计内容及安排 选题原则:课程设计题目选择得是否合适,直接关系到它的教学效果。一般来将应当照顾到以下几个方面: 1、设计的选题首先要符合教学要求,使学生能够运用理论课程中所学的基本知识,进行基本技能方面的训练。 2、设计的选题的主要内容应当是学生在理论课程中学过的知识,有需要扩展的知识,应在设计过程中补充讲解。 3、课题指标可从学生实际出发,做到难易适中,或因人而异,让不同程度的学生经过努力都能够完成任务,有所收获。 下面是参考题目(根据教学改革与发展需要,题目可能有修改与增减): 1、个人财务管理小系统设计。 2、学生档案管理系统。 3、通讯录管理系统。 4、飞机订票系统。 5、选举投票系统。 6、模拟电子琴软件。 7、模拟画板软件。 8、教师信息管理系统。 9、计算器软件。 10、贪吃蛇游戏程序。 11、走迷宫游戏程序。 除此之外,学生可自行选择课题进行设计(课题必须经指导教师审题后合格),对于大型项目可进行团队开发,但应制定详细的项目分工说明。 五、其它 课程设计的题目应提前一周布置,以便学生作好充分准备,课程设计主要分成以下几个阶段: 信息工程学院 1、资料查阅与方案制定阶段。 在资料查阅的基础上,学生对所选课题进行功能分析与设计,确定方案。 2、程序编制与调试阶段。 学生在指导老师的指导下独立完成程序的编制与调试,指导老师应实时考察学生的实际编程与调试能力。 3、撰写设计报告阶段。 学生根据规定的格式撰写课程设计报告。 4、答辩与考核阶段。 答辩既可以用语言表达的方式,也可以直接在机房中进行实际操作与调试。指导教师将综合每一学生的表现及能力进行综合评分。 六、课程设计的考核评估 通过课程设计答辩,结合学生的动手能力、独立分析解决问题的能力、创新能力、课程设计报告、答辩水平以及学习态度综合考核。 考核标准包括: 1、基本完成设计题目所要求的内容,程序有一定的实用性,可扩充性,创新性。(50%) 2、课程设计报告。(30%) 3、答辩水平。(20%) 七、选用教材及主要参考书 1、教材 谭浩强.C语言程序设计(三版).清华大学出版社,2005 2、主要参考书 [1] 谭浩强.程序设计题解与上机指导(三版).清华大学出版社,2005 [2] David R Hanson.C语言接口与实现-创建可重用软件的技术.机械工业出版社,2004 [3] 邱仲潘.C语言参考手册.机械工业出版社,2004 信息工程学院 编写负责人: 审核人: 现在高等学校, 一般也都根据不同的需要选用不同的程序设计入门课程。其中C语言作为一门程序语言基础课, 由于其功能强、使用灵活等优点受到广泛的欢迎, 也就是说C语言已经成为了学习程序设计语言的一个必要的基础。在学时相对较少的情况下, 学生要学好这门课有一定的难度.但依然要提高教学的质量和效果是广大教学工作者正在思考和探索的问题. 2、教学过程中的改进 2.1 教学方法的改进 C语言作为DOS时代的一种主流程序设计语言, 已逐渐演变成为一种程序设计的入门级语言——重在使学生熟悉计算机处理事务的过程, 掌握程序设计的思想, 完成学生从中学生到大学生学习思想的转变。因而C语言程序设计课程这门课大多高校开设在一年级的第一学期, 要从只要求计算机基本操作的中学时代迅速转换到大学时代的程序设计员, 对于学生是一个逐步转变、逐步学习的过程。而对于我们教育者来说, 如何去改进现有的教学方法, 正确的引导学生学习思路、学习方法的转变, 以提高课堂教学的质量.笔者在以下几方面进行了尝试: 2.1.1 教师角色的转变 中学时代的教学多以升学为基本任务和目标, 所以中学教师的教学多以灌输式为主, 在教学过程中教师始终是主体, 而学生总是被动的接受和消化。而大学时代的教学是以培养学生的基本素养和能力为目标, 因而要求教学的过程要以学生为主体, 教师要做正确的引路人, 而不是知识的灌输者。因而教师角色的转变实际上更多的还是在学生心目中中学教师角色到大学教师角色的转变, 要在教学的第一堂课向学生宣布这个事情, 使学生从教师角色的转变到学生自己明白他们已经跨入了人生的有一个新的阶段:自己的学习、思想都要有更大的转变, 从以前被动的接受学习, 到大学时期的主动自觉的学习, 从而培养和更大的提高他们的学习能力和其他方面的能力。 2.1.2 课堂实施的转变 C语言作为一门程序设计语言自然有它自身的特点, 但是作为一门言语课, 他又脱不开与学生很熟悉语文、英语这些语言课学习的共同之处。根据笔者的学习和教学经验:得知更多的学生在学习C语言的过程中, 甚至在学习完这门课后也不知道C语言的作用是什么, 它学习的重点内容是什么。所以C语言教学的课堂实施的转变更是教学的重中之重:要使学生从中学时期纯粹的数理化的学习转变到大学时期专业能力和自身适应能力的学习。根据笔者多年的教学, 我们引用用了一个全新的教学方法—“3W1H”教学法。在讲C语言前和所讲的每一节课都要使学生明白正门课或者所讲的每个知识点是什么 (WHAT) , 在哪里能用 (W HERE) , 为什么要这样用 (WHY) 和怎么去用 (HOW) 。从总体的结构:程序设计语言的3W1H到没一点的3W1H, 我们在每一节课的过程中都要去给学生分析、实践。另外我们又结合语言课的特点教会学生从C语言的字 (字符) 、词 (数据类型、变量常量) 、句 (语句) 和章 (函数、程序) 入手去总结, 打乱教材的原有章节, 去分析总结, 从而大大提高了学生学习的效率。 2.1.3 选择合适的软件 在我们学习任何一门程序语言之前, 都要先安装好它所匹配的软件:一个开发环境, 例如turboC2.0。这个软件曾经占据了D OS时代开发程序的大半个江山, 但对于现在的Windows时代, 用turboC有时感觉力不从心, 编辑程序很吃力, 没有函数变量自动感应功能, 查询参考资料也不方便。建议使用Visual C++, 这个东西虽然比较大块头, 但是一旦安装好了, 用起来很方便。一般在学习完C语言之后都会学习一下C++的, 因为C++是针对于windows的可以运行C程序的软件。 2.1.4 采用传统教学和多媒体教学相结合的方式 C语言的课堂教学改掉了过去纯粹的黑板教学, 而采用了黑板教学加多媒体教学进行。首先, 考虑到该课程基本概念多, 同时需要分析大量的例题, 我们把一些典型的例题在讲课时先有老师进行剖析设计算法, 并和学生分析要解决这一问题用C语言编程所需要的本节课或者以前学过的知识点, 然后在黑板上和学生一块去画出流程图, 最后和学生一块去写出程序。这样不仅帮助学生学会了分析问题和解决问题的思路和方法, 同时也让学学生熟悉了计算机解决问题的过程:从实际问题分析描述, 到计算机的实现, 是学生明白要写一个程序重要的是解决问题的过程—算法, 而程序只是最后在计算机对这个算法的描述而已, 从而使学生更加注重对程序设计思想的学习和锻炼, 这对一个成员的学习十指关重要的。其次合理使用教师配套的多媒体教学设备, 对于这些典型的基本概念和例题我们又预先输入计算机做成课件 (CAI) , 在课堂上和学生完成后去分析程序的运行情况。把典型的例题直接在C语言集成开发环境中输入运行, 真实形象, 可以达到事半功倍的效果.例如讲到过程时, 学生往往对过程中参数传递的两种方式 (按值传递和按地址传递) 很难理解, 而这又是该课程的重点和难点, 确实比较抽象, 在讲解过程中笔者把这两种传递方式结合例题来讲: 函数Swap1中的形参是两个一般的整型变量, 说明调用Swap函数时实参a, b和形参p1、p2间为按值传递, 而函数Swap2中的形参是两个指针类型的变量, 说明调用Swa p函数时实参a, b和形参p1、p2间为按址传递, 要学生回答命令按扭Command1单击后窗体上输出的值, 大多数学生可能回答不正确, 这时可把程序粘贴到C++集成开发环境中运行输出结果.仅这样学生还会觉得难理解, 于是笔者又在课件中做了说明, 如图1所示。 调用子过程Swap1时, 给形参x、y分配临时内存单元, 将实参a和b的值复制给x和y, 在被调子过程Swap1中x、y通过第三变量t实现交换, 调用结束时形参x、y的临时内存单元将释放, 实参a和b仍保留原值. (如图1、图2) 调用子过程Swap2时, 形参x、y分别和实参a、b共用存储单元, 因此, 在被调子过程Swap2中x、y通过第三变量t实现交换后, 实参a和b的值也同样发生交换. 同时在C++集成开发环境中逐语句运行程序, 分别观察在Swap1和Swap2调用前、调用中和调用后实参a、b和虚参x、y的变化, 加深学生的理解.再次, 因为程序设计课程要求培养学生的逻辑思维能力, 程序的分析、算法的产生一开始不宜全盘托出, 而应启发式地边讲解、边书写, 以此引导学生步步深入, 此时实物投影仪或粉笔就是比较合适的媒体.因此, 在C语言课堂教学中我们将课件 (CAI) 、C++集成开发环境、实物投影仪或粉笔三者结合, 收到了良好的教学效果。 2.2 强化实验环节中教师的责任意识, 注重学生能力的培养 C语言程序设计是一门实践性很强的课程, 在学习C语言过程中, 仅书面理解往往是不够全面的.通过上机实践, 学生才能真正理解消化课堂上的教学内容, 纠正原来理解上的偏差, 加深对C语言的了解。但是仅靠上机课上学生自己的上机练习往往是达不到目的的, 特别是我们的高职类的学生, 他们本身学习的能力就较差, 如果不加引导在上机练习时大多数情况是把理论课上的例题敲进计算机, 然后一运行看一下结果正确是否就完了。根本就没去思考, 更不要说去进一步的去验证理论课上的知识点了。所以我们针对于学生的情况, 强化实验课中教师的责任意识, 加大辅导的力度:要求老师去正确的引导学生上机课应该怎样去做, 而不是纯粹的计算机录入课。上机课上老师既是知识点总结的引导者, 又是学生上机练习的辅导者, 特别要强化老师对学生所出现的共性问题的讲解和总结, 从而使学生能到同一案例能举一反三, 真正达到验证消化理论所学, 提高能力的目的。 3、结语 C语言具有诸多的优点, 是使用性很强的程序设计语言之一, 自推出以来就受到了人们的普遍欢迎.但是, 对于非计算机专业的学生来说, C语言又是一门较难学的课程 (特别是对于那些没有编程基础的学生) .在C语言程序设计教学过程中, 采用传统教学和多种媒体的教学相结合方式, 以提高课堂教学的质量和效率, 通过实践提高学生利用C语言进行程序设计的能力, 抓住C语言重点内容和环节, 把程序设计思想贯穿于整个教学过程, 使C语言成为学习程序设计的敲门砖, 为他们后期的学习打下坚实的基础。 摘要:分析了C语言程序设计课程的特点, 对该课程教学手段、教学方法的改进, 及教学内容的完善等方面作了一些探索和实践. 关键词:C语言程序设计,教学方法,算法,教学研究 参考文献 [1]谭浩强, 张基温.C语言程序设计教程[M].北京:高等教育出版社, 1998. 关键词:C语言程序设计;项目教学模式;应用能力 中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02 C Language Programming Course Project Teaching Mode Luan Guifen (Taizhou Higher Vocational School of Mechanical&Electrical Technology,Taizhou225300,China) Abstract:C language programming course using the project to improve the teaching ability of students to apply,set project goals and prepare for the teaching project teaching the theoretical and experimental materials,select the appropriate teaching project library construction project cases,in addition to theoretical and experimental courses in teaching,effective implementation of the project,the project should also be extended to extra-curricular teaching in the classroom network. Keywords:C language programming;Project teaching mode;Application ability 在职校教学中,传统教学法很难满足信息化社会应用型人才的能力培养要求。C语言程序设计课程是一门实践性较强的课程,应更加重视应用能力与实践能力的培养,而非计算机专业的C语言程序设计教学多用传统教学法,导致学生的理论学习与实践脱节,很大程度上影响了教学效果。因此,迫切需要采用新的教育教学法或教学模式来改变这种现状。以培养应用能力为核心的“项目教学模式”,它把学习知识、训练技能、培养能力贯穿于整个教学过程之中,能够充分发掘学生的创造潜能,提高学生的动手能力。 一、项目教学模式 项目教学模式是在建构主义理论[1]指导下,以基于项目的教学方式完成课程教学任务的教学方法体系。教师在授课过程中,以一个贯穿课程始终的,来源于生活和生产实际的成功项目案例为线索组织教学,进行知识传授和技能培训[2]。它实质上就是一种基于建构主义学习理论的探究性学习模式,强调知识意义和能力建构性,强调协作学习,在不断解决问题、实现阶段任务中完成对知识的意义建构。基于建构主义的项目教学法与传统的教学法相比,将以教师、课本、课堂为中心转变为以学生、项目、实践为中心,能够使理论知识与应用能力的培养有机结合[3]。 在项目教学的实施过程中,经常遇到以下一些实际问题:项目教学是从应用的角度出发,与传统的教学方式有很大的区别,教学目标该如何制定才能体现项目教学的实施效果。传统的教材对于知识模块的划分不适合项目教学的实施,需要编制适合项目教学的理论教材和实验教材来配合项目教学。因为篇幅有限,教材中只能涉及到几个项目案例,使得教学背景比较单调,而且项目案例通常是比较大的程序,如何根据知识模块将项目案例合理分解为较小的项目子例,使其能够更好地配合理论和实验课也是需要解决的问题。在项目教学中,教师应该采用怎样的教学方法,才能有效地实施项目教学并监控和指导学生的项目学习。 二、C语言程序设计课程中的项目教学模式 (一)根据实际情况,設定教学目标 结合C语言程序设计课程特点和项目教学从应用出发的特点,对C语言程序设计课程进行教学设计,制定技能训练和应用培养教学目标,采用“语句、代码、程序、应用”四个教学目标层次分类,同时采用“熟练使用基本知识点,练习设计编写小程序,综合项目设计应用”的实践教学层次,使项目教与学的衡量标准成为一种可具体追求和实现的目标[4]。具体的项目教学目标分别从知识点目标、技能目标和应用目标三个层次进行描述。 知识点目标是对课程理论知识点的教学要求进行描述,例如,写出伪代码描述具体问题的算法、应用“自顶向下、逐步求精”的方法求解问题、解释一维数组在内存中的存储、比较字符数组作为字符串和指针指向字符串等。技能目标分为熟练使用基本知识点和练习设计编写小程序两个层次。例如,练习C源程序文件的创建(编辑输入、存储编译、简单运行调试)过程,掌握使用VC集成开发环境处理一个C语言程序的步骤:编辑、编译、连接和运行;编程实现对多个数据的处理,要求练习加、减、乘、除、求余的运算等。应用目标是指“综合项目设计应用”,分为两个层次:(1)开发学习者发现问题,总结问题的能力,让学习者结合身边事,自找题目,写出编程实现步骤;(2)软件项目应用设计训练。培养学生应用能力,实施项目教学,需要学习者独立或合作完成项目训练,达到应用目标要求的标准。例如:结合自己专业或生活经验,寻找需要或可以分解为多个函数实现的实际问题,自编一个题目,利用自定义函数和函数调用实现问题求解过程;软件功能模块划分,应用模块化编程思想,综合分析系统功能,设计划分并画出系统模块结构图,总结出系统数据字典,并详细描述各模块功能及函数功能等。 (二)编制适合项目教学的理论教材和实验教材 为了配合项目教学顺利的进行,需要编制适合项目教学的理论教材和实验教材。理论教材中,首先要对传统教材中的理论知识模块进行重新整合,与项目设计的进展相结合,分为三个层次模块。初级阶段的知识模块主要是结构化程序设计基础,包含C语言程序设计课程的基本知识、基本数据类型及其定义与操作、程序的基本结构。中级阶段的知识模块主要是模块化程序设计基础,包含函数的编写和调用、变量的作用域与生存期的运用。高级阶段的知识模块主要是复杂数据结构和程序设计方法,包含数组、指针、结构体、文件的操作和应用。理论教材中的例子分为项目子例和教学辅例。项目子例是将整个项目分解为小的例子配合理论知识的讲解,教学辅例是与项目子例背景相似、题型相似的传统例题。 实验教材是对理论教材的实践和扩展。项目教学的关键就是对项目的实践,学生通过理论教材学习项目设计的方法,在实验教材中提供给学生更多的项目参考子例和具体的实践步骤,指导学生独立完成项目的实践。 (三)选择合适的项目案例,建设教学项目库 在实际的生产生活中,选择具有真实性、典型性等特点的项目。要强调的是项目的应用性,而不是专业性,让大部分学生能够理解和接受。项目的内容应符合课程教学目标的要求,能够容纳和体现更多数据结构、算法和知识点的应用,尽量能够贯穿课程。项目应难易适宜、大小适中,让学生在课程的学习过程中有能力完成项目内容,达到更好地掌握课程知识的效果。教师往往在课堂上只能讲解有限的几个项目案例,导致教学项目用例背景单调,不利于拓展学生的思维,因此应建设教学项目案例库,选择大量的项目案例供学生课下学习和参考。项目案例库中除了包含大量完整的项目案例,还应将项目案例分解为课堂教学用例系列、实验教学用例和学生项目实践用题系列等。 在项目教学中,将项目与课程的内容结合,根据各层次知识模块,选择某些项目分解为与每节理论课的知识点结合的项目教学课堂用例系列,要求在难度、复杂度、模块大小等方面要适合课堂讲解和学生学习。在实验课上,选择适合的项目分解为学生可以在有限课时内独立完成的实验教学用例系列,配合理论课的课堂用例进行项目实践。为了拓展学生的思维,设计学生项目用题系列作为学生课下学习的补充。 (四)理论课中教师实施项目教学 结合项目教学,采用小组合作学习方式[5],让学生分组实践项目。建议4-7人自由组合为一个小组,每组推选一个组长组织组内的学习,并将学习的过程记录下来。具体的教学过程如下:(1)教师用项目课堂用例提出需要解决的问题,引入本节课要学习的问题。(2)教师结合要实现的项目问题,讲解知识点。(3)教师选择项目辅助用例,运用知识点。(4)教师和学生一起讨论如何运用知识点,解决项目问题。(5)教师对项目内容进行扩展,提出小组讨论问题。 (五)实验课中学生实践项目教学 在实验课上,以小组为单位进行项目实践,并写下实验报告。具体的教学过程如下:(1)教师课前布置实验课的项目内容,课前小组讨论出可执行的步骤。(2)学生模仿课堂项目用例的方法,实施实验项目用例的内容。(3)各小组讨论项目实验结果,并将结果合并实现综合项目。教师参与到小组的讨论中,给予指导意见。(4)小组总结实验课内容,写出小组实验报告。实验报告中要详细记录每个组员的参与情况,包括发言、上机实践、帮助其他组员等具体的过程,这样教师可以通过查看实验报告的情况了解每个学生的学习情况,起到监控和指导的作用。 (六)课外的网络课堂交流补充 教学课时数是有限的,教师不可能跟每一位学生进行很好的交流。而且学生之间的大多数交流也仅限于小组内部,各小组间的交流很少。因此,需要建立課外的网络课堂作为教学的补充,例如,教师建立教师教学博客,学生可以建立班级博客、小组博客等。教师可以提前将教学内容发布在教学博客上供学生提前预习,并提出问题供学生讨论,学生通过回复与教师和其他同学交流。学生可以给教师留言,与教师交流学习中的问题,其他学生也可以看到这个交流的过程,启发自己的思维。每个小组可以通过博客展示自己的实验成果,各小组可以通过博客交流学习心得。教师可以通过博客中的交流监控到所有学生的学习情况、思想动态,适时的调整教学进度和教学内容。 在项目教学模式中,设定项目教学目标并编制适用于项目教学的理论和实验教材是有效实施项目教学的前提,选择合适的项目案例建设教学项目库是项目教学的关键因素。在具体的项目教学过程中,每个教师应根据实际的教学情况适当地调整教学模式,选择有效可行的方法以保证教学效果。 参考文献: [1]陈越.建构主义与建构主义学习理论综述. http://www.being.org.cn/theory/constructivisom.htm [2]孟朝霞.基于项目的程序设计实践课程教学流程设计[J].高等理科教育,2008,5 [3]徐涵.项目教学的理论基础,基本特征及对教师的要求[J].职教论坛,2007,3 [4]孟朝霞.C语言课程的应用性目标模型[J].运城学院,2009,1 【c语言课程设计电话簿】推荐阅读: c语言课程设计要求07-25 c语言课程设计指导书06-23 c语言通讯录课程设计07-09 c语言课程12-13 汇编语言课程设计模版07-10 《程序设计语言强化课程设计》教学大纲12-09 c语言设计程序11-11 c语言程序设计实验11-19 c语言程序设计作业三06-24c语言课程设计电话簿 篇2
《C语言程序设计》课程教学研究 篇3
C语言课程设计总结 篇4
C语言课程设计实践报告 篇5
《C语言课程设计》教学大纲. 篇6
C语言程序设计课程教学探讨 篇7
c语言课程设计电话簿 篇8