第一篇:2014暑假c语言实习报告3
手机通讯录管理系统设计
一、实习的目的
加深对《C语言》课程所学知识的理解,进一步巩固C语言编程方法。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。
二、课程设计的题目与要求
1、题目:手机通讯录管理系统设计
注:要求整个系统设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。[基本要求]
要能提供以下几种功能:(1)查看功能:选择此功能时,列出下列三类选择:
A:办公类 B:个人类 C:商务类
(2)查询功能:当选中某类时,显示出此类所有数据中的姓名和电话号码
(3)添加数据功能:能录入新数据,每个结点包括:姓名,电话号码,分类(可能选项有:w为办公类 p为个人类 b为商务类),电子邮件。
例如: 杨春 *** 商务类 chuny@126.com 当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过50条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
(4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。
(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调。【提示】(1)需求分析
手机通讯录采用文件储存,因而要提供文件的输入/输出操作;要实现查看功能,需要提供显示操作;在增加新数据的过程中要检查是否有重复、储存空间是否已满,且录入的新数据能按递增的顺序自动进行条目编码,因而要提供查找、统计和排序操作;要提供修改、删除和自动调整编号功能;另外,还要提供键盘是选择菜单以实现功能选择。
(2)总体与结构
整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。建立结构体,结构体成员包括姓名、电话号码、分类、电子邮件。
三、程序的总体设计与分析
这个程序的综合性很强,需要用到函数的声明与调用,结构体的构建、文件的储存以及构建模块。首先,因为每个个体有多种信息,所以要建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过主函数来判断输入字母,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。
根据题目的要求,需要构建的模块有:添加,查看,删除,修改,保存五个模块。在模块中通过调用各个函数来实现功能。
1、程序主框架如下:
四、分解程序---程序的组成(1)、构建结构体,写入文件 FILE *fp;int i;struct address { char a[40];////email地址 };struct ffriend { int num;char name[20];char kind[20];long telephone;struct address address;} friends[50];
(2)、构造显示模块 void Show(int j){ system(“cls”);//实现分屏操作的函数
printf(“nnt编号-Nnumber: %3d”,friends[j].num);printf(“nt姓名-Name:%-20s”,friends[j].name);printf(“nt性别-kind:%s”,friends[j].kind);printf(“nt联系电话-Telephone:%-13ld”,friends[j].telephone);printf(“ntemail-address:%-40s”,friends[j].address.a);}
(3)、构造增加模块 void Append(int j){ system(“cls”);//实现分屏操作的函数 friends[j].num=j;printf(“nttt序号-Number : %d”,j);printf(“nttt姓名-Name : ”);scanf(“%s”,friends[j].name);printf(“ttt类别-kind : ”);scanf(“%s”,&friends[j].kind);printf(“ttt联系电话-telephone : ”);scanf(“%ld”,&friends[j].telephone);while(friends[j].telephone<0||friends[j].telephone>16000000000){ printf(“电话号码不合法!请重新输入:”);scanf(“%ld”,&friends[j].telephone);} printf(“tttemail-Address : ”);scanf(“%s”,friends[j].address.a);getchar();}
(4)、构造删除模块
void Delete(){ int k;int j;system(“cls”);printf(“ntDelete 序号-Number : ”);scanf(“%d”,&k);if(k<=i){ for(j=k;j
(6)构造储存函数 void Save(){ int i,j;system(“cls”);printf(“nntt请耐心等待,信息正在保存!n”);printf(“nnnntttSaving”);for(i=0;i<20;i++){ Sleep(300);printf(“.”);} printf(“nn信息已经保存成功!n”);fp=fopen(“friend.txt”,“w”);//打开文件friend.txt for(j=1;j<=i;j++){ fwrite(&friends[j],sizeof(struct ffriend),1,fp);} fclose(fp);}
(7)、主程序---用switch语句判断输入者要使用的功能,然后调用函数,模块实现功能。void main(){ int j;char a;char x;char grade;char searchkind[20];char searchname[20];i--;system(“cls”);do { printf(“nnttt=========================================n”);printf(“tttt手机通讯录n”);printf(“tttt功能选择n”);printf(“ttt=========================================n”);printf(“ttt A.查看*n”);printf(“ttt B.增添*n”);printf(“ttt C.删除*n”);printf(“ttt D.查询*n”);printf(“ttt E.修改*n”);printf(“ttt F.保存*n”);printf(“ttt=========================================n”);printf(“ttn请选择(Choice)nntt注:~h或A~H的字母:”);scanf(“%c”,&grade);switch(grade){ case 'a': case 'A': j=0;while(getchar()!=0x1b&&j<=i){ Show(j++);printf(“nn请按回车键继续!”);} while(getchar()==0x1b||j>i){ printf(“nt空文档,无任何记录-Empty Noten”);printf(“nn请按回车键继续!”);getchar();break;} printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);break;case 'b': case 'B': while(i<=50){ i++;Append(i);printf(“t是否继续增加?(y/n)”);a=getchar();if(a=='n')break;} if(i==51)printf(“nt文档已满,无法增加记录-note full”);printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);getchar();break;case 'c': case 'C': Delete();if(i<1)printf(“n没有记录-No recordsn”);printf(“nn请按回车键继续!”);getchar();getchar();printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);break;case 'd': case 'D': system(“cls”);printf(“nt请输入要查询记录的相关类别: p.个人类 b.商务类 w.办公类”);//增添查询按列号的
scanf(“%s”,searchkind);
getchar();for(j=0;j<=i;j++){ if(strcmp(searchkind,friends[j].kind)==0){ Show(j);} getchar();} break;case 'e': case 'E': printf(“nt请输入要修改记录的相关姓名:”);gets(searchname);scanf(“%s”,searchname);for(j=0;j<=i;j++){ if(strcmp(searchname,friends[j].name)==0){ Modify(j);} } if(i<1){ printf(“n 没有您所要修改的记录-No records”);printf(“n 请按回车键继续!”);getchar();getchar();} printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);break;case 'f': case 'F': system(“cls”);Save();getchar();printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);break;default: printf(“nt输入有误,请输入正确的序列号!”);printf(“n请按回车键继续!”);getchar();printf(“nttttttt此次操作结束”);printf(“nt-----------------------------ttn”);} }while(1);} 整个程序的组成如上:写入文件的结构体、各函数模块和实现函数的主程序。由这三部分实现功能!
五、运行结果
(1)、主界面
(2)增加通讯录数据
(3)、按顺序查看通讯录
(4)、根据相关类别查询通讯录
(5)根据序列号删除通讯录名单
(6)根据姓名修改通讯录资料
重新输入数据:
(7)保存文件信息
第二篇:C语言实习报告123
C语言课程设计报告
第1章 目的任务
1.1实训目的(1)巩固C语言所学基本课程;
(2)提高C语言编程的综合应用能力;
(3)学会C语言程序的编译、调试方法。
1.2实训任务
(1)掌握C语言中的基本数据输入、输出;
(2)熟练掌握C语言中的三种基本结构的使用;
(3)熟练使用C语言中的数组;
(4)熟练使用C语言中的函数;
(几)熟练使用C语言中的指针;
(6)熟练使用C语言中的结构体。
第2章 主程序子程序
2.1主函数main
main()函数是C程序的主函数,也是入口函数,所有C程序的执行都从main开始至main结束。主函数使用了do… while语句和switch语句,在主函数中定义一个变量k,通过输入k的值,实现输入、输出、修改、排序、查询函数的调用以及程序的退出。
2.2 creat
通过scanf函数接受通讯录信息,创建通讯录并将其存入文件中。
2.3output
通过指针打开文件,实现对通讯录的访问。
2.4 search
通过scanf函数,输入所要查询的信息,找到相对应的指针连接到相应文件,实现查找功能。
2.5append
通过指针打开相应文件,运用scanf函数进行对信息内容的添加。
2.6 modify
打开文件,通过fscanf函数对其中内容进行修改,并利用循环体进行保存。
2.7 delete
先运用结构体,并输入所要修改的信息,通过指针找到对应信息并进行修改。
第3章 错误
1、电话的输出为乱码,原因:数据类型写为“%d”与定义类型不一致,将其改为“%s”。
2、在输入函数中出现警告:变量“j”在函数中定义但并未在output函数中使用,将“j”删除。
3、在output函数中出现语法错误,将输入法切换为英文输入状态输入“:”。
4、在modify中需要逻辑“0”或“非0”,使用字符数组namekey[8],利用strcpy函数实现字符类数据的的顺序调换。
5、在delete中缺少“}”,添加上“}”。
第4章 实训总结
4.1思维方式方法
根据程序系统功能要求可以将程序分解为以下功能模块:
创建通讯录;
输入学生通讯信息;
在通讯录中查找;
添加通讯录信息;
修改通讯录信息;
删除通讯录信息;
4.2实训感想体会
上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
历时9天的《C语言程序设计》已经结束了,在这几天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。
其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。
再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。
第四,在实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查。第五,通过实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。
第六,通过实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。第七,实训过程中,充分发挥团队协作精神,共同进步,帮助我顺利完成实训课程。
总之,通过实习使我自身的知识体系得到巩固、提高以及使团队工作的能力得到锻炼。
第三篇:c语言实习报告
目 录
一、前言„„„„„„„„„„„„„„„„„„„„„„„„„2
二、引言„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1系统开发工具„„„„„„„„„„„„„„„„„„„„ 2 2.2实习目的„„„„„„„„„„„„„„„„„„„ 3 2.3实习基本内容与要求„„„„„„„„„„„„„„„„„3 2.4实习时间安排„„„„„„„„„„„„„„„„„„„„ 3 2.5实习地点„„„„„„„„„„„„„„„„„„„„„„ 3 2.6实习内容„„„„„„„„„„„„„„„„„„„„„„„„„„„ 3
三、学生成绩管理系统分析„„„„„„„„„„„„„„„„„3.1系统概况„„„„„„„„„„„„„„„„„„„„„„4 3.2需求分析„„„„„„„„„„„„„„„„„„„„„„4 3.3总体功能要求„„„„„„„„„„„„„„„„„„„„5 3.3.1总体功能模块„„„„„„„„„„„„„„„„„„ 5 3.3.2各函数的功能和实现„„„„„„„„„„„„„„„„ 6 3.3.3各部分流程图„„„„„„„„„„„„„„„„„„„„„„„ 6 3.3.4性能要求„„„„„„„„„„„„„„„„„„„„„„„„„ 8
四、详细设计„„„„„„„„„„„„„„„„„„„„„„„8 4.1关键部分的代码、说明及运行结果图„„„„„„„„„„„„„„„8
1、全局定义部分„„„„„„„„„„„„„„„„„„„„„8
2、主程序部分„„„„„„„„„„„„„„„„„„„„„„8
3、输入信息部分„„„„„„„„„„„„„„„„„„„„„10
4、输出信息部分„„„„„„„„„„„„„„„„„„„„„12
5、排序部分„„„„„„„„„„„„„„„„„„13
6、插入信息部分„„„„„„„„„„„„„„„„„„14
7、删除部分„„„„„„„„„„„„„„„„„„15 4.2总程序„„„„„„„„„„„„„„„„„„„„„„„„16
五、实习心得体会„„„„„„„„„„„„„„„„„„„„„24
六、附录:参考文献„„„„„„„„„„„„„„„„„„„„25
一、前言
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例如,检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本低等。这些优点能极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发学生成绩管理系统很有必要。
学生成绩管理系统是为了适应现代化学校的管理,加快推进数字化校园的建设、充分利用校园网,利用网络、多媒体等计算机应用技术和手段,提高办公效率、改善质量的高效管理学校系统。
学生成绩管理系统是系科综合管理系统的重要组成部分,为学校学生层面的管理提供了一个有用的数字化学生成绩管理系统的工具,在学校学生管理中起着举足轻重的作用。
为了培养自己正确的程序设计思想,使平时学习的理论联系实际,培养自己严肃认真,实事求是的科学态度和勇于探索的创新精神,培养自己综合运用所学知识与实践经验,分析和解决相应领域的工程技术问题或进行软件项目开发的能力。学院依照课程教学大纲和课程设计大纲提出了本次课程设计的题目及要求。
要求掌握C程序的基本结构和C语言基本的数据结构,熟悉C程序的编辑、编译、调试和运行过程,了解程序设计的一般方法、结构化程序设计的思想,熟悉算法的描述工具—N—S流程图的使用及常用算法,能够熟练地阅读用C语言编写的程序,能够运用结构化程序设计编写C程序。
二、引言
2.1系统开发工具简介
WIN-TC是一个TC2 WINDOWS平台开发工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具 令你在编程过程中更加游刃有余,如虎添翼。本软件用于编写C语言程序。2.2实习目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
使学生在掌握C语言的基本语法的基础上,能够更好的理解和运用其解决实际问题。在实践实习操作中让学生对结构化程序设计有更进一步深刻的认识与了解,提高学生的实践操作能力。2.3、实习基本内容与要求: 用链表实现简单的学籍管理
1、总体功能要求
(1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分;
(2)节点的插入:按学号的顺序插入;(3)删除链表中的节点:按学号或者姓名;(4)链表的输出:按学号排序、按总分排序。
2、性能的要求:
(1)各个功能分别用函数实现;(2)节点信息让用户通过键盘输入;(3)总分通过计算获得;(4)有简单的操作界面;
(5)尽可能考虑程序的容错性、可操作性。
3、写实习报告以及心得体会
2.4实习时间安排
2011年7月12日 在服务器上下载应用程序、实习报告模板,练习书本第11章的例题
2011年7月13日 在自己的机器上程序设计 2011年7月14日 程序设计
2011年7月15日 撰写实习报告及心得体会 2011年7月16日 交实习报告 2.5 实习地点:c1 2楼机房 2.6实习内容
对学生信息(包括姓名、学号、语文、数学、英语、平均分、总分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、退出、保存.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改、排序和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。
三、学生成绩管理系统分析
3.1系统概况
本次实习是通过建立一个学生学籍管理系统来更好的认识和掌握C语言中链表这一重要的知识内容.本系统实现的功能如下:
1.创建学生学籍信息,每个学生学籍信息包括:学号、姓名、语文、数学、英语、平均分、总分;
2.插入信息:按照学号由小到大的循序插入信息;
3.查找信息:通过选择按照学号或者姓名来查找到该学生的信息; 4.删除信息:通过选择按照学号或者按照姓名删除某个学生学籍信息; 5.输出信息:通过选择按学号(由小到大)或者总分(由小到大)或者平均分(由小到大)来输出信息;
6.保存信息:对学生学籍系统中的信息以记事本的学生进行保存。
本系统的亮点是在运用模块来组建该学生学籍管理系统,也就是说各个功能以模块的实现,通过主函数来调用模块,实现管理功能,这样程序结构清晰,容易检查到错误所在模块,减少了调试的压力。其次,是运用结构体来组织数据,数据结构规范,通过指针的操作很容易实现简单的查找、删除、输出等操作。最后,容错性较好,比如输入成绩输入时按照我们百分制输入,必须输入1-100之间的数字,如果输入的不是1-100中的数据,在系统将显示信息错误信息,要求重新输入。
软件配备:TurboC2.0,Windows 2000/20003/xp等; 硬件配备:内存:512MB及以上;
外存:60GB及以上; CPU: 奔4及以上; 3.2需求分析
1、用C语言实现系统;
2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1)、每一条记录包括一个学生的学号、姓名、3门课成绩
(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。(4)、查询功能:完成按姓名查找学生记录,并显示。(5)、成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!3.3总体功能要求
3.3.1总体功能模块 学生成绩管理信息系统的主界面,包括六个内容:信息输入,信息输出,信息删除,信息的排序,信息的查找和信息的保存。
信息输入包括创建信息和信息添加:其中创建的学生信息包括学生的学号,姓名,性别以及语文,数学,英语三门课程的成绩。信息添加的内容也是创建的所有学籍信息。
信息删除是按照学生的学号进行删除。
信息的排序也可以分为三种方法进行:一是按照学号进行排序,二是根据学生语文、数学、英语三门课程的总分进行排序,三是根据学生语文、数学、英语三门课程的平均分进行排序。
信息的查找时按照学生的学号进行查找。
信息的保存是通过程序与文件的链接进行的,可以直接将学生成绩以记事本的形式保存到指定文件夹中。
总 体 功 能 模 块 图
3.3.2各函数的功能和实现
1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。
2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出成绩的平均分数、最高和最低分数。
3、成绩查询模块:可用void find(STUDENT *data, int len)来实现。找到就输出此学生全部信息。
4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现
5、排序模块:用函数void sort(STUDENT *data, int len)来实现
6、统计功能能:用函数void stat(STUDENT *data, int len)来实现
7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
3.3.3各部分流程图 1.学生信息输入流程图 2.学生信息输出流程图
3.删除的流程图
4.插入信息的流程图 5.对信息的排序流程图
3.3.4性能要求
1、功能分别用函数实现;
2、信息让用户通过键盘输入;
3、通过计算获得;
4、简单的操作界面;
5、可能考虑程序的容错
四、详细设计
4.1关键部分的代码、说明及运行结果图
1、全局定义部分
#include
2、主程序部分
main()/*主函数*/
{struct student *head,*stu;long del_num;int N;a: printf(“The student information management system n”);printf(“n(LIST)n”);printf(“ 1.Create a new namelistn”);printf(“ 2.Print the namelistn”);printf(“ 3.Delete a record from the namelistn”);printf(“ 4.insert a recordn”);printf(“ 5.sort the programmen”);printf(“ 0.exit the programmen”);printf(“please enter the number:”);scanf(“%d”,&N);switch(N){case 0:exit(0);goto end;case 1: printf(“input records:n”);head=creat();print(head);break;case 2: print(head);break;case 3: printf(“ninput the delete number :”);scanf(“%1d”,&del_num);while(del_num!=0){head=del(head,del_num);print(head);printf(“ninput the deleted number:”);scanf(“%1d”,&del_num);}break;case 4: printf(“ninput the insert record:”);stu=(struct student *)malloc(LEN);printf(“nplease input number :”);scanf(“%ld”,&stu->num);printf(“please input name”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);9 printf(“please input english score:”);scanf(“%d”,&stu->english);while(stu->num!=0){head=insert(head,stu);print(head);printf(“ninput theinsert record:”);stu=(struct student*)malloc(LEN);printf(“nplease input number:”);scanf(“%ld”,&stu->num);printf(“please input name:”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);printf(“please input english score:”);scanf(“%d”,&stu->english);break;case 5: head=sort(head);print(head);break;
}goto a;end:;} }
3、输入信息部分 /*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);10 goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } head=NULL;while(p1->num!=0){ n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ 11
验证成验证成绩 goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);} 输入界面如下:
4、输出信息部分
/*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 12 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);}
5、排序部分
struct student *sort(struct student *head)/*{int i=0;struct student *p,*q,*t,*h1;h1=head->next;head->next=NULL;while(h1!=NULL){t=h1;h1=h1->next;p=head;q=head;while(t->total>p->total&&p!=NULL){q=p;p=p->next;} if(p==q){t->next=p;head=t;} else {t->next=p;q->next=t;} } p=head;while(p!=NULL){i++;p->order=i;p=p->next;} printf(“sort sucess!n”);return(head);}
如按总分排序,界面如下:
排序函数*/
按学号排序,界面如下:
6、插入信息部分
/*插入结点函数*/ struct student *insert(struct student *head,struct student *stud){struct student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){head=p0;p0->next=NULL;} else {while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;} if(p0->num<=p1->num){if(head==p1)head=0;else p2->next=p0;14 p0->next=p1;} else {p1->next=p0;p0->next=NULL;} } n=n+1;p1->order=n;return(head);}
7、删除部分 /*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);} 界面如下:删除后
4.2、总程序
#include
int n;/*n为全局变量,定义为节点个数*/ /*创建链表,带回一个指向链表头的指针*/ struct student *creat(vonum){ struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student*)malloc(LEN);/*开辟一个新单元*/ 16 printf(“nInput student's number:(press 0 to exit)”);/*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } head=NULL;while(p1->num!=0){ n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);17 scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*验证成绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);}
/*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 18
验证成绩 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);}
/*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);}
/*插入节点*/ struct student *insert(struct student *head,struct student *stud)/*stud是一个指针变量,从实参传来待插入节点的地址给stud*/ { struct student *p0,*p1,*p2;p1=head;/*使p1指向第一个节点*/ p0=stud;/*p0指向要插入的节点*/ if(head==NULL)/*原来的链表是空表*/ {head=p0;p0->next=NULL;/*使p0指向的节点作为头节点*/ 19 } else { while((p0->num>p1->num)&&(p1->next!=NULL)){ p2=p1;/*使p2指向刚才p1指向的节点*/ p1=p1->next;/*p1后移一个节点*/ } if(p0->num
num){ if(head==p1)head=p0;/* else p2->next=p0;/* p0->next=p1;} else {p1->next=p0;p0->next=NULL;} /* } n=n+1;/*节点数加1*/ return(head);}
/*exchange the element of chain*/ void swap(struct student* q1,struct student* q2){long temp_num;char temp_name;char temp_sex[10];int temp_chinese;int temp_math;int temp_english;int temp_sum;char s1[20];
temp_num=q1->num;q1->num=q2->num;q2->num=temp_num;
strcpy(s1,q1->name);strcpy(q1->name,q2->name);strcpy(q2->name,s1);
temp_sex[10]=q1->sex[10];q1->sex[10]=q2->sex[10];q2->sex[10]=temp_sex[10];
插到原来第一个节点之前*/ 插到p2指向的节点之后*/ 插到最后的节点之后*/ temp_chinese=q1->chinese;q1->chinese=q2->chinese;q2->chinese=temp_chinese;
temp_english=q1->english;q1->english=q2->english;q2->english=temp_english;
temp_math=q1->math;q1->math=q2->math;q2->math=temp_math;
temp_sum=q1->sum;q1->sum=q2->sum;q2->sum=temp_sum;}
/*sort by num*/ struct student * sort_num(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->num>p2->num)p1=p2;p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);}
/*sort by totalscore form high to low*/ struct student * sort_sum(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->sum
sum)p1=p2;21 p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);}
/*主程序*/ main(){struct student *head,*stu;char aa;long del_num;M: printf(“n************welcome System************nn”);
to
the
School
Management printf(“***************************************************************n”);printf(“n************
made by GIS1011 chenliuqing 1020209124 ************n”);printf(“* 1.Input students' records 2.Print students' records *n* 3.Delete records 4.Insert records *n* 5.Sort by number 6.Sort by totalscore *n* 7.System Information 8.Exit *n ”);
printf(“********************END****************************************n”);printf(“********* ***************n”);aa=getch();aa=tolower(aa);switch(aa){ case'1': printf(“nInput students' records”);head=creat();/*返回头指针*/ print(head);/*输出全部节点*/ break;/*调用输出链表函数*/ case'2':print(head);/*输出全部节点*/ break;/*调用删除节点函数*/ case'3': printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);while(del_num!=0){head=del(head,del_num);/*返回头指针*/ print(head);/*输出全部节点*/
please
choose
the
number
before
command 22 printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);} break;/*调用插入节点函数*/ case'4': printf(“nInput the inserted record”);stu=(struct student*)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);if(stu->num!=0){ printf(“Input student's name:”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m):”);scanf(“%s”,stu->sex);printf(“Input chinese score: ”);scanf(“%d”,&stu->chinese);printf(“Input math score: ”);scanf(“%d”,&stu->math);printf(“Input english score: ”);scanf(“%d”,&stu->english);} while(stu->num!=0){ head=insert(head,stu);print(head);/*输出全部节点*/ printf(“Input the inserted record”);stu=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);printf(“Input student's name: ”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,stu->sex);printf(“Input Chinese score:”);scanf(“%d”,&stu->chinese);printf(“Input math score:”);scanf(“%d”,&stu->math);printf(“Input english score:”);scanf(“%d”,&stu->english);} break;/*调用按学号(从小到大)排序函数*/ case '5': head=sort_num(head);print(head);/*输出全部节点*/ 23 break;/*调用按总分(从高到低)排序函数*/ case '6': head=sort_sum(head);print(head);/*输出全部节点*/ break;case'7':printf(“n~~~~~~~~~~~~System Information~~~~~~~~~~~~n”);printf(“School Management SystemnMade Time:2010-7-24nVersion number:1.0nn”);printf(“~~~~~~~~~~~~~~~~~~ /*显示系统信息*/ break;case'8':exit();/*退出程序*/ /*调用创建链表函数*/
} goto M;/*返回、显示主菜单*/ }
END
By
xugaohongnFinish
~~~~~~~~~~~~~~~~~~nnn”);
五、实习心得体会
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。通过本次C语言程序设计的实习,我学得了很多知识,虽然在之前老师没有详细讲链表的内容,但是我通过自己看书,同学一起讨论,会用链表处理简单的实际问题了,并对链表的建立、结点的插入、删除节点以及链表的输出等一系列链表知识有了较为深刻的认识。而且自己的实际操作能力也有了提高。
回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能 24 真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体„„通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。但我们总结出了一点点的经验如下:
1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
六、附录:
参考文献
教材和主要参考书目:(1)教材:《C程序设计》,谭浩强编著,清华大学出版社(2)主要参考书目: ①《C程序设计教程》,谭浩强编著,清华大学出版社; ②《C语言程序设计——习题与实验指导》,谭浩强编著,清华大学出版社。
第四篇:c语言实习报告
西安科技大学
《C/C++语言程序设计》
课程设计报告
题 目
院、系(部)
专业及班级 姓 名 日 期
1设计目的
设计一个职工信息管理系统,使之能提供以下功能: 1)录入职工信息并保存 2)显示所有职工信息 3)查询职工信息 4)修改职工信息并保存 5)删除职工信息 需求说明: 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,并且要求职工号不重复;
录入的职工信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作; 职工信息的显式要求有一定的规范格式;
对职工信息应能够分别按工资及按学历两种方式进行,要求能返回所有符合条件的职工的信息; 对职工信息的修改应逐个地进行,一个职工信息的更改不应影响其他的职工记录;
所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况。总体设计
1.该系统可以按功能进行模块划分,其模块图如下:
系统模块图
其中:
信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等;
信息浏览模块完成已录入职工信息的显示;
信息查询模块完成职工信息的查询,查询时对应有按工资查询和按学历查询两种方式; 信息修改模块完成职工信息的修改功能; 信息删除模块完成职工信息的删除功能;
菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种
操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;
2.数据结构
本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理
3.程序流程
系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:
程序流程图 详细设计
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下: ① 信息输入模块:
打开职工信息文件; while(继续输入){ 读入职工信息;
将读入信息添加到职工信息文件中;
提示是否继续输入; } 关闭职工信息文件;
② 信息浏览模块:
打开职工信息文件; while(不到文件结束){ 从文件中顺序读出一个职工的信息;
按指定格式输出该职工的信息; } 关闭职工信息文件;
③ 信息查询模块:
while(仍继续查询){ if(按工资查询){ 读入查询的职工工资条件;
打开职工信息文件;
while(不到文件结束){ 顺序读出一个职工的信息;
if(该职工信息的工资符合条件)输出该职工的信息; } 关闭职工信息文件;
提示共有几条符合条件的记录; } else if(按学历查询){ 读入学历查询的条件;
打开职工信息文件;
while(不到文件结束){
顺序读出一个职工的信息;
if(该职工信息的学历符合条件)输出该职工的信息;
} 关闭职工信息文件; 提示符合条件的记录数; }
else 提示输入不合适;
提示是否继续查询; }
④ 信息修改模块:
while(继续修改){
从给出信息文件中所有的记录情况; 提示并读入待修改的记录的职工的职工号; 打开职工信息文件;
查找并读出该职工的信息到一个中间变量中; 提示并读入要针对该职工的哪个属性进行修改; 根据用户的选择提示并读入所要修改属性的新值; 在该职工的中间变量中修改刚刚读入的属性值; 提示是否确定要进行修改;
如果用户确定则将中间变量重新写回到原职工信息文件中; 关闭职工信息文件; } ⑤ 信息删除模块:
while(继续删除){ 显示所有职工的信息;
提示并读入待删除的职工的职工号;
打开职工信息文件;
查找是否有符合条件的职工记录; if(有符合条件的记录){ 提示是否确认该删除操作; if(用户确认此操作){ 创建一个新的临时文件;
打开原信息文件;
while(原信息文件中记录未读完){ 读出原信息文件中的下一条记录;
if(此条记录不是待删除记录)写入临时文件中去; }
关闭原信息文件; 关闭临时文件; 读方式打开临时文件;
写方式重建与原信息文件同名的新信息文件; 将临时文件中的内容写入到新信息文件中去; 关闭新信息文件; 关闭临时文件; 删除临时文件; } } else 提示没有符合条件的记录存在; } ⑥ 菜单选择模块:
给出信息提示; 清屏;
绘制菜单(包含输入、显示、查询、修改、删除、退出); 提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
数据结构:
性别: enum Sex{ male, female };学历 :enum Education{ high, junior, college, master, doctor};日期 :struct Date { int year;int month;int day;};职工信息:struct Info {
char num[5];/* 职工号 */ char name[8];/* 姓名 */ enum Sex sex;/* 性别 */ struct Date birthday;/* 出生年月*/ enum Education education;/* 学历 */ char duty[8];/* 职务 */ double wage;/* 工资 */ char addr[12];/* 地址 */
char phone[8];/* 电话 */ };
第五篇:C语言实习报告
新疆昌吉学院
《C语言程序设计》 教学实习报告
部门:信息技术分院
专业:计算机应用技术 班级:2010高职应用
姓名: 指导教师:
《C语言程序设计》教学实习报告
2010高职应用班
一、实习时间:
2011 年 6 月 13 日至
2011 年月 17 日
二、实习地点:第一微机室
三、实习目的:(小4宋体,约150字)
(1)能进一步熟悉C程序的编辑、编译、连接和运行的过程;
(2)通过C语言环境下的应用实例,能有编写程序的能力,掌握编程的思路和方法,掌握C语言程序设计的基本概念和基本技能;
(3)在程序调试过程中,能根据运行结果,运用相应的手段,正确地找出并解决程序中的逻辑错误;
(4)可以掌握不同类型数据之间赋值的规律;
(5)通过解题、程序设计和上机实践,能加深对所学概念的理解,使得理论与实践相结合的学习方法;
(6)通过C语言程序设计的课程实习,我们能具有使用计算机解决相关问题的能力,为今后学习其他计算机应用课程打下较好的程序设计基础。
四、实习内容及方法:
实训一 C语言的编程环境:
1、Turbo C运行环境。
了解TC的基本环境,熟悉常用菜单项和快捷键。
2、C程序的编辑、编译、连接和运行过程。掌握C程序的运行步骤,初步了解C程序的特点。
3、VC6.0环境的熟悉,能按照软件并在软件中能够调试简单的C语言程序。实训二 C语言数据类型、运算符及表达式:
案例3:字母转换问题。本案例在执行时,将提示输入一个字母,如果输入的是小写字母,程序将输入的小写字母转换为大写字母并输出,否则按原样输出。步骤:
1、定义变量,和变量类型;
2、寻找大小写字母的 ASC||码值得关系;
3、输入输出变量。代码:
结果:
实训三 C程序的三种基本结构的应用
案例1:输入某年某月某日,判断这一天是这一年的第几天? 解题步骤:
1、定义变量年year月month、日day、和第几个月的天数总和sum;
2、定义month变量作为switch语句的测试条件;
3、从键盘上输入年、月、日的值;
4、输出这一年的第几天sum。程序分析:
输入某年某月某日,判断这一天是这一年的第几天?那么需要考虑三个变量,年,月,日。
首先,年主要要考虑的因素是否是闰年的问题。月要考虑的是那一个月的问题。因为不同月的天数不一样。日嘛,就不用说了。
还有就是,月份是一月或者二月,那么就不需要考虑是否闰年的问题,因为不需要计算二月总共多少天。
上述程序,首先是在默认闰年的情况下计算某月前面所有月的天数和,然后加上当月的零头天数,最后才是判断当月是否大于二月,如果大于二月,那么必须考虑闰年的问题,再接着判断是否闰年,如果非闰年总天数减一,是闰年不变,因为在开始计算的过程中时默认闰年的。代码:
main(){ int day,month,year,sum,leap;clrscr();printf(“nplease input year,month,dayn”);scanf(“%d%d%d”,&year,&month,&day);switch(month){ case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(“data error”);break;} sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;printf(“it is the %dth day.”,sum);getch();}_ 案例4:求200-300之间所有素数,每5个换行。程序分析:先将1挖掉(为什么?因为1不是素数)用2去除它后面的各个数,把能被2整除的数挖掉,用3去除它后面各数,把3的倍数挖掉,用循环体分别将4、5„各数作为除数去除这些数以后的各数。直到除数后面的数已全部挖掉为止
代码:
main(){ int i,j,n=0;clrscr();for(i=200;i<=300;i++){ for(j=2;j<=i;j++)if(i%j==0)break;if(j>=i){ printf(“%4d”,i);n++;} if(n%5==0)printf(“n”);} getch();}_
案例8:打印输出九九乘法表。解题步骤:
1、定义行变量、列变量。
2、循环输出行乘列的值。
3、每行最后输出一个换行符。程序分析:
两个循环嵌套时,第一个循环语句为外循环,第二个循环语句为内循环,外循环执行一次,内循环从头到尾执行一遍(可能执行多次循环体),因此本题的执行次数为:1+2+3+4+5+6+7+8+9=45次。
代码:
结果:
实训四 数组的定义和使用:
案例
3、打印杨辉三角,输出前10行数据。解题步骤:(1)定义变量;
(2)确定数组的行与列;(3)FOR循环给数组赋值。(4)输出这个数组。程序分析:
杨辉三角是(a+b)的n次幂的展开式系数,如:(a+b)系统数是1 1(a+b)2展开后的系数是 1 2 1(a+b)3展开后的系数是 1 3 3 1 从而得到杨辉三解的系数规律(指数为n):
1、共有n+1组系数,且第K组(从0)开始有K+1个数。
2、每组最后一位与第一位均为1
3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的前一行同一列与前一列之各。代码:
#include “stdio.h” main(){ int i,j,a[10][10];for(i=0;i<10;i++)for(j=0;j<10;j++)a[i][j]=0;for(i=0;i<10;i++){ a[i][0]=1;a[i][i]=1;} 6 for(i=0;i<10;i++){ for(j=0;j<10;j++)printf(“%d ”,a[i][j]);printf(“n”);} 结果:
实训五 函数的应用:
案例3:用函数和递归实现求n!程序分析:
(1)首先在有限递归中,必须有一个测试避免递归调用的条件,即当满足该条件时,不再递归。而在递归函数中,应该是先测试,后进行递归调用。在本例中,if语句就是这种测试条件,当n等于0时,则不再递归,即退出该递归函数。
(2)在递归函数中,至少要有一个递归调用的语句,并且该语句的参数应该逐渐逼近递归结束的条件。其中,该语句参数n-1是逐次减1,当n为0时,则不再调用递归函数。
(3)完成该递归函数。
代码:
结果:
实训六 指针的应用
案例1:分析并对比如下2个程序,写出运行结果,并上机验证。
1.1 main(){int *p1,*p2,*p,a,b;a=5;b=9;p1=&a;p2=&b;if(a
a=5 , b=9 Max=9 , min=5
五、结论(小4宋体,约1500字)
1、收获:
(1)通过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,当一个程序写完以后,经常会有很多错误。不过,通过这几天的实训和小组讨论,逐渐让自己积攒了一些经验,有些错误可以很快就看出来。
(2)这次实训让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了较多的兴趣和更深层的认识。
(3)C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌 8 套,条理很清楚,不是一个零散的知识,而是一门较有逻辑思维能力培养的学科。
2、不足:
(1)通过实训我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫同组的帮忙,虽然说一定意义上增加了同学之间的感情,但是会养成一种依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到没有别人帮助的时候也可以完成一些简单的程序编写与错误排除。
(2)还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,感觉C语言还是很有意思的课程。
(3)自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,在上课的时候老师就讲,学习C语言最重要的是学习C语言的逻辑思维,不管以后从事什么行业,学习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!
六、致谢
感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的相互探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础。