这个C语言子函数的excel排序函数怎么回事??运行的时候总是没有第一个数了?

扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
1.以下说法中正确的是( ) (3分) A、 B、 C、 D、 A、C语言程序总是从第一个的函数开始执行 B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行 D、C语言程序中的main()函数必须放在程序的开始部分 2.启动turbo c 的命令是( ) (3分) A、 B、 C、 D、 A、TC B、C C、TURBOC D、TURBO_C 3.一个C程序的执行是从( )(3分) A、 B、 C、 D、 A、本程序的main函数开始,到main函数结束 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C、本程序的main函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束 4.以下叙述正确的是( ) (3分) A、 B、 C、 D、 A、在C程序中,main函数必须位于程序的最前面 B、 C程序的每行中只能写一条语句 C、C语言本身没有输入输出语句 D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误 5.一个C语言程序是由 (3分) A、 B、 C、 D、 A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 6.下列各选项中,合法的c语言关键字是( ).(3分) A、 B、 C、 D、 A、integex B、sin C、string D、void 7.TURBO C中,int类型变量所占字节数是( )(3分) A、 B、 C、 D、 A、1 B、2 C、3 D、4 8.下列不合法的十六进制数是( )(3分) A、 B、 C、 D、 A、oxff B、0Xcde C、Oxll D、Ox23 9.C语言中定义了一个变量,该变量代表内存中的一个( )(3分) A、 B、 C、 D、 A、区域 B、单元 C、地址 D、容量 10.在C语言中,数字029是一个()(3分) A、 B、 C、 D、 A、八进制数 B、十六进制数 C、十进制数 D、非法数 11.函数体用_______开始,用______结束.(3分) 答:12.C源程序的基本单位是______________(3分) 答:13.一个C源程序中至少应包括一个_____________(3分) 答:14.在一个C源程序中,注释部分两侧的分界符分别为________和________(3分) 答:15.结构化程序所规定的3种基本控制结构是——、——、——(3分) 答:16.在c语言中,整数可用——进制、——进制和——进制3种数制表示.(3分) 答:17.一个c语言程序的开发过程包括:编辑、——、连接和运行4个步骤.(3分) 答:18.在C语言中,输入操作是由库函数——完成的,输出操作是由库函数 —— 完成的.(3分) 答:19.C程序执行过程生成的3种文件及扩展名为——,——,——(3分) 答:20.C语言中的标识符只能由3种字符组成,它们是——、——和—— (3分) 答:21.编写一个C程序,输出以下信息:(3分) 22.编写一个程序,输入a,b,c三个值,输出其中最大者.(3分) 23.显示“How are you!”的c语言程序.(3分)
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
1.以下说法中正确的是( C) (3分) A、 B、 C、 D、 A、C语言程序总是从第一个的函数开始执行 B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行 D、C语言程序中的main()函数必须放在程序的开始部分 2.启动turbo c 的命令是( A) (3分) A、 B、 C、 D、 A、TC B、C C、TURBOC D、TURBO_C 3.一个C程序的执行是从(A )(3分) A、 B、 C、 D、 A、本程序的main函数开始,到main函数结束 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C、本程序的main函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束 4.以下叙述正确的是( C) (3分) A、 B、 C、 D、 A、在C程序中,main函数必须位于程序的最前面 B、 C程序的每行中只能写一条语句 C、C语言本身没有输入输出语句 D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误 5.一个C语言程序是由(A) (3分) A、 B、 C、 D、 A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 6.下列各选项中,合法的c语言关键字是( D).(3分) A、 B、 C、 D、 A、integex B、sin C、string D、void 7.TURBO C中,int类型变量所占字节数是( D)(3分) A、 B、 C、 D、 A、1 B、2 C、3 D、4 8.下列不合法的十六进制数是(B )(3分) A、 B、 C、 D、 A、oxff B、0Xcde C、Oxll D、Ox23 9.C语言中定义了一个变量,该变量代表内存中的一个(C )(3分) A、 B、 C、 D、 A、区域 B、单元 C、地址 D、容量 10.在C语言中,数字029是一个(A)(3分) A、 B、 C、 D、 A、八进制数 B、十六进制数 C、十进制数 D、非法数 11.函数体用_______开始,用______结束.(3分) 答:main return12.C源程序的基本单位是______________(3分) 答:语句13.一个C源程序中至少应包括一个_____________(3分) 答:main函数14.在一个C源程序中,注释部分两侧的分界符分别为________和________(3分) 答:/* */ 15.结构化程序所规定的3种基本控制结构是——、——、——(3分) 答:顺序结构 选择顺序 循环顺序 16.在c语言中,整数可用——进制、——进制和——进制3种数制表示.(3分) 答:二 八 十六 17.一个c语言程序的开发过程包括:编辑、——、连接和运行4个步骤.(3分) 答:编译18.在C语言中,输入操作是由库函数——完成的,输出操作是由库函数 —— 完成的.(3分) 答:scanf printf 19.C程序执行过程生成的3种文件及扩展名为——,——,——(3分) 答:c exe obj20.C语言中的标识符只能由3种字符组成,它们是——、——和—— (3分) 答:_ 英语字母 阿拉伯数字21.编写一个C程序,输出以下信息:");return 0;}22.编写一个程序,输入a,b,c三个值,输出其中最大者.(3分) #includeint main(void){int a,b,c;scanf("%i%i%i,&a,&b,&c");a=(a>b?a;b);a=c>a?c:a;printf("%i ",a);return 0;}23.显示“How are you!”的c语言程序.(3分)#includeint main(void){printf("How are you!");return 0;}
为您推荐:
扫描下载二维码您现在的位置: >> c语言程序设计报告 >> c语言程序实习报告
c语言程序实习报告
来源: 时间:
【c语言程序】手机通讯录管理系统一、设计题目的任务和内容任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了 简单的界面。本程序主要对自定义函数的熟悉程度, 本程序主要使用的是数组的相关操 作,包括结构体数组的输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了 人员信息的显示、删除、查找、修改、添加等必要的功能。具体要求◆ 建立通讯录信息,信息包含、姓名、分类(1、办公类 2、类 3、商务类) 、电话、 电子邮箱等; ◆ 将通讯录保存在文件中; ◆ 查看功能:可按 1、办公类 2、个人类 3、商务类分类查询,当选中其中一类时,显示出 此类所有数据中的姓名和电话号码。◆ 增加功能:能录入新数据。当录入重复姓名和电话号码时,则提示数据录入重复并取消 录入;当通讯录中超过 15 条信息时,存储空间已满,不能录入新数据;录入的新数据 能按递增的顺序自动进行条目编号。◆ 修改功能:选中某个人的姓名是,可对此人的相应数据进行修改。◆ 删除功能:选中某个人的姓名是,可对此人的相应数据进行删除并自动调整后续条目编 号。系统功能需求分析查询:查询通讯录记录 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 修改:修改通讯录记录二、总体设计思路本系统首先设计出了主函数, 然后根据去要实现的功能分别设计拉, 显示、 删除、 查找、 修改、 添加功能的子函数。在显示的函数设计过程中首先运用拉文件的读取等必要的知识通 过把文件的内容读取到内存然后打印出来。删除函数的设计是首先从文件内找到要删除的 人,然后通过写一个实现删除目的的 FOR 循环将该人从内存里删除,然后再用写的方式打 开文件,将内存内的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的 方法找出用户要查找的人,然后打印出来。修改也大体和删除相同,添加函数在设计时通过 申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。系统功能模块图:主菜单输 入 新 信输入新信息:可输入新的数据。息 添加:可以添加通讯录记录,依次输入姓名、电话号码、分类、电子邮箱后,会提示是否继 续添加。删除:输入姓名删除,输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可按 1、办公类 2、个人类 3、商务类分类查询 修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、分类、电子邮箱即可完 成修改。下面就是总的程序流程图开始查看添加修改删除退出执行 printf()函数选择(a)调 用 in pu t() 函 数调 用 br o ws e() 函 数调 用 add( ) 函 数调 用 mod ify_ data ( )函 数调 用 del() 函 数调 用 print f_ba ck() a=1,2,3,……6结束三、具体设计代码如下#include&stdio.h& #include&string.h& #define N 15 typedef struct people { char name[20]; char num[20]; char sort[20]; char email[30]; }PEO; PEO peo[N]; void enter(); void menu(); void browse(); void add(); void modify(); void del(); modify_data(int i,int n); void printf_face(); void printf_one(int i); void input(int i); void save(int n); load(); void printf_sort(int i); void no_input(int i,int n); void name_input(int i,int n); void printf_back(); void menu() { int n,w1; do { puts(&\t\t\t **手机通讯录**\n&); puts(&\t\t**************** 菜单 ****************\n\n&); puts(&\t\t\t\t1.输入新信息&); puts(&\t\t\t\t2.查看类型&); puts(&\t\t\t\t3.添加信息& ); puts(&\t\t\t\t4.修改信息&); puts(&\t\t\t\t5.删除信息&); puts(&\t\t\t\t6.返回&); puts(&\n\n\t\t***************************************\n&); printf(&选择所需功能(1-6)[]\b\b&); scanf(&%d&,&n); if(n&1||n&6) { w1=1;getchar(); } else w1=0; }while(w1==1); switch(n) { case 1:enter(); case 2:browse(); case 3:add(); case 4:modify(); case 5:del(); case 6:exit(0); } } main() { menu(); }void enter() { int i,n; printf(&输入联系人的个数(0-%d)?:&,N-1); scanf(&%d&,&n); printf(&\n 现在请开始输入\n\n&); for(i=0;i&n;i++) { printf(&\n 输入 %d 个联系人信息.\n&,i+1); input(i); } if(i!=0)save(n); printf_back(); } void browse() { int i,k,n; PEO n=load(); printf(&\n\n 选择类型 sort(a:办公类 b:个人类 c:商业类):& ); scanf(&%s&,p.sort); printf(&\n\tName num\n&); for(i=0;i&n;i++) if(strcmp(p.sort,peo[i].sort)==0) { k=i; printf_sort(k); printf(&\n&); } printf(&\n\n&); menu(); } void add() { int i,k,m,n,j; FILE * n=load(); printf(&您要添加多少个联系人信息(1-%d)?:&,N-n); scanf(&%d&,&m); k=m+n-1; for(i=n;i&=k;i++) { if(i&N-1) { printf(&储存已满,不能添加新信息&); } printf(&\n 输入 %d 个联系人记录.\n&,i-n+1); input(i); } if((fp=fopen(&shouji.txt&,&ab&))==NULL) { printf(&无法打开文件\n&); } for(j=n;j&i;j++) if(fwrite(&peo[j],sizeof(struct people),1,fp)!=1) printf(&文件读写出错\n&); fclose(fp); printf_back(); } void modify() { int i,k,n,w0=1,w1,w2=0; FILE * PEO n=load(); do { k=-1; printf_face(); for(i=0;i&n;i++) { if((i!=0)&&(i%5==0)) { printf(&\n\n 请记住你要修改的联系人姓名,按任意键继续...&); getchar(); puts(&\n\n&); } printf_one(i); } do { printf(&\n\n 请输入您所需修改的联系人姓名! name:&); scanf(&%s&,p.name); for(i=0;i&n;i++) if(strcmp(p.name,peo[i].name)==0) { k=i; p=peo[i]; } if(k==-1)printf(&\n\n 输入错误!请重新输入&); }while(k==-1); printf_face(); printf_one(k); w1=modify_data(k,n); if(w1==1) { printf(&\nSuccessful^_^.\n\n 确 认 需 要 修 改 其 他 信 息 ? \n\n\t1). 是 2). 返 回 \t[]\b\b&); scanf(&%d&,&w0); w2=1; } else { w0=0; if(w2==1) peo[k]=p; } if(w0!=1&&w2==1) save(n); }while(w0==1); menu(); } void del() { PEO FILE * int k,w1,w0=0,w2=0,n,i; n=load(); do { k=-1; printf_face(); for(i=0;i&n;i++) { if((i!=0)&&(i%5==0)) { printf(&\n\n 请记住你要删除的联系人姓名,按任意键继续....&); getchar(); puts(&\n\n&); } printf_one(i); } do { printf(&\n\n 请输入需要删除的联系人姓名 name:&); scanf(&%s&,p.name); for(i=0;i&n;i++) if(strcmp(p.name,peo[i].name)==0) { k=i; p=peo[i]; } if(k==-1)printf(&\n\n 输入错误!请重试&); }while(k==-1); printf_face(); printf_one(k); printf(&\n 确认删除?\n\n\t1).确认 2).重新删除 3).返回 []\b\b&); scanf(&%d&,&w1); if(w1==1) { peo[k].name[0]=0; printf(&\nSuccessful^_^.\n\n 需要删除其他数据??\n\n\t1).是 2).返回\t[]\b\b&); scanf(&%d&,&w0); w2=1; } else { w0=0; if(w2==1) peo[k]=p; } if(w0!=1&&w2==1) save(n); }while(w0==1); menu(); } modify_data(int i,int n) { int c,w1; do { puts(&\nmodify by=&\n\n 1).姓名 2).电话 3).类型 据 6).取消并返回&); printf(&请选择你要修改的选项(1-6)[]\b\b&); scanf(&%d&,&c); if(c&6||c&1) { puts(&\n 选择错误!请重新选择!&);4).邮箱地址\n5).所有数 getchar(); } }while(c&6||c&1); do { switch(c) { case 1:name_input(i,n); case 2:no_input(i,n); case 3:printf(&sort:&);scanf(&%s&,peo[i].sort); case 4:printf(&email:&);scanf(&%s&,peo[i].email); case 5:input(i); } puts(&\nNow:\n&); printf_face(); printf_one(i); printf(&\n 确认修改??\n\n\t1).是 2).重新修改 3).立即返回 []\b\b&); scanf(&%d&,&w1); }while(w1==2); return(w1); } void printf_face() { printf(&\n\t 姓名 电话 类型 邮箱地址\n&); } void printf_one(int i) { printf(&%10s %14s %10s %10s&,peo[i].name,peo[i].num,peo[i].sort,peo[i].ema il); printf(&\n&); } void input(int i) { name_input(i,i); no_input(i,i); printf(&sort(a:办公类 b:个人类 c:商业类):&); scanf(&%s&,peo[i].sort); printf(&email:&); scanf(&%s&,peo[i].email); } void save(int n) { FILE *
if((fp=fopen(&shouji.txt&,&wb&))==NULL) { printf(&\nCannot open file\n&); return NULL; } for(i=0;i&n;i++) if(peo[i].name[0]!=0) if(fwrite(&peo[i],sizeof(struct people),1,fp)!=1) printf(&file write error\n&); fclose(fp); } load() { FILE * if((fp=fopen(&shouji.txt&,&rb&))==NULL) { printf(&\nCan not open file\n&); return NULL; } for(i=0;!feof(fp);i++) fread(&peo[i],sizeof(struct people),1,fp); fclose(fp); return(i-1); } void printf_sort(int i) { printf(&%10s %14s&,peo[i].name,peo[i].num); } void no_input(int i,int n) { int j,w1,k; do { w1=0; printf(&NO.:&); scanf(&%s&,peo[i].num); for(j=0;peo[i].num[j]!='\0';j++) if(peo[i].num[j]&'0'||peo[i].num[j]&'9') { puts(&输入错误!只能输入数字(0-9).请重新输入!\n&); w1=1; } if(w1!=1) for(k=0;k&n;k++) if(k!=i&&strcmp(peo[k].num,peo[i].num)==0) { puts(&这个记录不存在,请重新输入!\n&); w1=1; } }while(w1==1); } void name_input(int i,int n) { int k,w1; do { w1=0; printf(&Name.:&); scanf(&%s&,peo[i].name); for(k=0;k&n;k++) if(k!=i&&strcmp(peo[i].name,peo[k].name)==0) { puts(&这个记录不存在,请重新输入!\n&); w1=1; } }while(w1==1); } void printf_back() { printf(&\n\n\tSuccessful. ^_^\n\n&); menu(); }四、界面分析1、开始界面 2、输入功能3、查看功能 4、添加功能5、修改功能6、删除功能 7、返回五、本次的 C 程序实设计实验是我进入大学以来第一次独立设计的实验。通过自己动手,发 现和解决问题, 我发现了自己的许多缺陷与不足。平时没有掌握好的知识在这次实验中彻底 暴露出来。在经过不断思考和,以及不断查阅资料和上机运行,尝试再尝试的过程中, 我终于解决其中大部分问题,但是还是存在一些问题无法解决。但我相信,在今后的学 习过程中能够解决好它们。当我选择手机通讯录管理系统这个题目时, 一开始想运用大量子函数及指针来完成, 但 是在仔细的构思之后,觉得不一定要用很多子函数解决问题,于是改变了编程思路,令程序 设计起来没有那么复杂, 界面看起来也清爽整洁多了。通过结构体的使用, 令定义方便简洁; 通过大量的使用 if 和 while、do……while、switch…case 语后,充分了他们的强大 功能与作用;指针的运用也给设计带来了方便。当然还有不少文件的读写问题,不过通过不 断测试以及上网查询之后都顺利解决了。 在 C 课程设计过程中,遇到的许许多多的困难都让人抓狂。在软件一次次的调试失败 下想放弃的念头也不断出现,但最后我还是让自己坚持了下来,毫不畏惧困难。在同学的帮 助与老师之前的讲解下, 我总算是不太顺利的完成了课程设计。当软件调试成功时那种喜悦 的感觉,真好,它是没有什么东西可以代替,这也有也是程序设计员都会为之兴奋之事吧。在程序的编写过程中,发现的很多的知识的漏洞和缺陷,都将是我以后学的借鉴之处,通过 不足,才知道如果改进、完善,才会更迫切的努力学习来弥补不足。这次的最深刻的体会就是, 书上和老师教的内容是很有限的, 如果真的想学会 C 语言和 其他科目,我们需要的不但是老师的教导,更应该不断地靠自己去学习,去向他人请教,积 极地去了解和掌握更多的知识,而不能被动学习,这样我们才能编出更好的 C 程序,这样我 们才能学好更多。
【c语言程序报告】- 1 -- 1 -课题一:用指针优化学生成绩排名一、目的 1.熟悉变量的指针和指向变量的的指针变量的概念和使用 2.熟悉数组的指针和指向数组的的指针变量的概念和使用 3. 掌握冒泡法或选择法排序的算法 4. 掌握函数的定义、调用、声明,以及参数的两种传递方式 二、实习环境 个人计算机,Windows 操作系统,Turbo C 2.0 或 WinTC 或 Visual C++等编 译开发环境 三、实习内容与步骤 1.定义一个数组 stu[10]存放 10 个学生的成绩,从键盘输入数据,要求用指 针实现 2.将数组 stu[10]的内容输出到屏幕上,要求用指针实现 3.将成绩数组按照从高到低进行排序,要求用指针实现 4.将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现, 输出排序后的成绩单 5.采用指针方法,输入字符串“student score ”,复制该字符串并输出(复 制字符串采用库函数或用户自定义函数) 6.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序运 行结果(屏幕截图) 。7. 在实习报告中说明知识点。8. 在实习报告中说明程序设计过程中的难点、 解决办法及编程小结或体会。四、程序流程图、算法及运行结果 1.程序流程图:开始 - 2 -- 2 -由 键 盘 输 入 成 绩输 出 成 绩比 较 成 绩 的 高 低复 制student score对成绩排序输出排序好的成绩输 出 字 符 串结束2.算法先定义一个函数接收 10 个学生的成绩, 利用指针将数据保存在数组中, 再定义第二个函数输出所以学生的成绩,同样也是使用指针,最后定义一个 函数用选择排序法对成绩进行由大到小的排序, 将指针指向的是数组中的第 一个地址,在主函数中依次调用这两个函数; 定义一个字符指针指向字符串,利用库函数中的 strcpy 将 student score 复制给字符指针,输出字符串 3.程序#include&stdio.h& #include&string.h& struct student { }stu[10]; void input(struct student *p) { for(i=0;i&10;i++,p++) { printf(&请输入第 %-2d 个学生的成绩:&,i+1); scanf(&%d%d&,&p-&num,&p-&grade); } - 3 -- 3 -} void printout(struct student *p) { for(i=0;i&10;i++,p++) printf(&第 %-2d 个学生的成绩为:%d\n&,i+1,p-&grade); } void arrow (int *p1,int *p2,int *px,int *py) { int t,m; t=* m=*p1; } void place(struct student stu[]) { int i,j; for(i=1;i&10;i++ ) for(j=0;j&10-i;j++) if (stu[j].grade&stu[j+1].grade) arrow(&stu[j].num,&stu[j+1].num,&stu[j].grade,&stu[j+1].grade); } int main(void) { struct student stu[10],* char string[100],*s; s=ptr= input(ptr); printout(ptr); place(stu); printf(&排序后的成绩单为:\n&); for(i=0;i&10;i++) printf(&第 %-2d 名 printf(&\n&); strcpy(s,&student score&); printf(&%s\n&,string); %-2d %-5d\n&,i+1,stu[i].num,stu[i].grade); *px=* *p1=*p2; *py=t; *p2=m; - 4 -- 4 -} 4.运行结果:五、知识点、难点及解决办法。主要考察的是利用指针作为函数参数以及指针数组的知识点, 如何使指针指 向数组并能将值返回给主函数是一个难点 首先定义一个整型指针指向数组 stu[]的首地址,在自定义函数中运用循环 结构实现指针的移动并分别存储各个学生的成绩返回给主函数 六、编程小结或体会。编程时除了注意指针与函数如何调用外, 还要注意细节问题, 比如自定义变 量类型的统一,循环结构的循环次数等等,要谨慎对待课题二:学生成绩单制作一、目的 1.掌握结构体变量及数组的定义、赋值、初始化、输入、输出 2.结构体数组的操作。二、实习环境 个人计算机,Windows 操作系统,Turbo C 2.0 或 WinTC 或 Visual C++等编 译开发环境 三、实习内容与步骤 1.定义一个结构体数组,存放 10 个学生的学号,姓名,三门课的成绩 2.从键盘输入 10 个学生的以上内容 3.输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩 - 5 -- 5 -4.输出三门课程的平均分数最高的学生的学号、姓名及其平均分 5.将 10 个学生按照平均分数从高到低进行排序,输出结果,格式如下所示number 103 101 name tom alice math 90 90 Chinese 90 80 English 100 70 average 95 806.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行 结果(屏幕截图) 。7.在实习报告中说明知识点。8.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会 四、程序流程图、算法及运行结果 1.程序流程图:开始键入每个学生的信息比 较 每 个 学 生 单 门 课 成 绩计 算 每 个 学 生 平 均 分 比 较按 平 均 分 高 低 排 序根据返回值输出相应的学生信息按照排序输出学生信息结束2.算法先定义一个结构体,存储学生的各项信息,定义一个结构体指针指向 结构体数组,第一个函数比较每个学生单门课的成绩,返回每一门课最高 分学生的 stu 的下标;第二个函数比较每个学生的平均分,返回平均分最 - 6 -- 6 -高的学生;第三个函数主要按照平均分高低对学生进行排序,通过循环和 选择排序法实现指针的移动以及重新排列,主函数中依次调用这三个函数 3.程序#include&stdio.h& #define N 10 struct student { char name[20]; float grade[3]; }stu[10]; int hanshu_best(struct student *p,int m) { int q, a=p-&grade[m]; num=0; for(q=0;q&N-1;q++) if((p+q)-&grade[m]&a) { a=(p+q)-&grade[m]; num=q; } int hanshu_average(struct student *p) { int i,m, for(m=0;m&N;p++,m++) { p-&average=0; for(i=0;i&3;i++) p-&average=p-&average+p-&grade[i]; p-&average=p-&average*1.0/3; a=p-& } } - 7 -- 7 -for(m=0;m&N;p++,m++) if(p-&average&a) { a=p-& index=m; else index=0; } void hanshu_place(struct student stu[]) { int i,j; for(i=0;i&N;i++) for(j=i;j&N-1;j++) if(stu[j+1].average&stu[i].average) { t=stu[j+1]; stu[j+1]=stu[i]; stu[i]=t;} } void main() { struct student stu[10],* int i,j,index,m, ptr= for(i=0;i&N;i++) { printf(&请输入第%d 个学生的学号、姓名及三科成绩:\n&,i+1); scanf(&%ld%s&,&stu[i].number,stu[i].name); for(j=0;j&3;j++) scanf(&%f&,&stu[i].grade[j]); printf(&\n&); for(m=0;m&3;m++) { num=hanshu_best(ptr,m); } }printf(& 学 号 %ld 姓 名 %-10s 最 高 分 % -8.2f\n&,stu[num].number,stu[num].name,stu[num].grade[m]); } - 8 -- 8 -index=hanshu_average(ptr); printf(&\n 三门课平均分最高的学生信息是:\n&); printf(& 学 号 %ld 姓 名 %-10s 平 均 分 %-8.2f\n&,stu[index].number,stu[index].name,stu[in dex].average);printf(&\n10 个学生由高分到低分排名为:\n&); printf(&number name average\n&); hanshu_place(ptr); for(i=0;i&N;i++) { printf(&%-10ld%-10s%&,stu[i].number,stu[i].name); for(j=0;j&3;j++) printf(&%-10.2f&,stu[i].grade[j]); printf(&%-10.2f\n&,stu[i].average);} } 4.运行结果Math Chinese English五、知识点、难点及解决办法。主要考察的是结构体指针的运用, 比较难的地方也就是如何将指针指向结构 体并返回我们所要的数值 先定义一个结构体数组, 再定义一个结构体指针, 令指针指向数组的首地址, 在自定义函数中通过指针的运算实现数组的运算,并返回相应的值 六、编程小结或体会。 - 9 -- 9 -在输出我们所需要的数据时候可以通过一些小技巧使程序看起来更好看。掌握结构体指针的技巧可以解决很多问题, 使自己的程序具有解决多个复杂 问题的能力,以后多练习此类的程序设计问题,使自己更加熟练课题三:学生成绩文件管理一、目的 1.掌握文件指针的概念和运用 2.掌握文件的相关操作:打开、读、写、关闭 3.掌握文件的定位操作 二、实习环境 个人计算机,Windows 操作系统,Turbo C 2.0 或 WinTC 或 Visual C++等编译开 发环境 三、实习内容与步骤 1.定义一个结构体数组,存放 10 个学生的学号,姓名,三门课的成绩 2.从键盘输入 10 个学生的以上内容,存入文件 stud.txt,关闭文件 3.打开 stud.txt 文件,将数据读出,查看是否正确写入,关闭文件。4.打开文件 stud.txt 文件,读出数据,将 10 个学生按照平均分数从高到低进 行排序, 分别将结果输出到屏幕上和另一文件 studsort.txt 中。5.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行 结果(屏幕截图) 。6.在实习报告中说明知识点。7.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。四、程序流程图、算法及运行结果 1.程序流程图:开始 键入每个学生的信息将 学 生 信 息 存 入 文 件 中将 文 件 中 的 信 息 读 出按 平 均 分 高 低 排 序将 排 序 后 的 信 息 存 入 另 一 文 件结 束2.算法: - 10 -- 10 -首先创建一个可读可写的新文件 stud.txt,键入十个学生的信息并储 存在文件中,关闭程序;打开文件 stud.txt,读出文件中的信息并输出, 检查有无错漏, 并按照平均分通过选择排序法对学生由高到低排序, 关闭程 序;将排好序的信息输出并存储在新的可写文件 studsort.txt 中 3.程序#include&stdio.h& #include&stdlib.h& #define N 10 struct student { char name[20]; int grade[3]; }stu[10]; int main(void) { FILE *fp,* struct student stu[10],t; float average[100]; int i=0,j; if((fp=fopen(&stud.txt&,&w+&))==NULL) { printf(&该文件打开失败!&); exit(0); }for(i=0;i&N;i++) { printf(&第 %-2d 个学生的学号、姓名及三门课成绩:\n&,i+1); scanf(&%ld%s&,&stu[i].num,stu[i].name); fprintf(fp,&第%-2d 个学生的学号、 姓名及三门课成绩\n&,i+1); fprintf(fp,&%ld for(j=0;j&3;j++) { scanf(&%d&,&stu[i].grade[j]); fprintf(fp,&%d fprintf(fp,&\n&); } if(fclose(fp)) &,stu[i].grade[j]); } %-5s&,stu[i].num,stu[i].name); - 11 -- 11 -{printf(&该文件无法正常关闭!\n&); exit(0); }if((fp=fopen(&stud.txt&,&r+&))==NULL) { printf(&该文件打开失败!&); exit(0); printf(&\n&); for(i=0;i&N;i++) { printf(&第%d 个学生的学号、姓名及三门课成绩:\n&,i+1); fscanf(fp,&%ld%s&,&stu[i].num,stu[i].name); printf(&%ld %-5s&,stu[i].num,stu[i].name); }for(j=0;j&3;j++) { fscanf(fp,&%d&,&stu[i].grade[j]); printf(&%d printf(&\n&); } if(fclose(fp)) { printf(&该文件无法正常关闭!\n&); exit(0); } &,stu[i].grade[j]); }if((fp=fopen(&stud.txt&,&r+&))==NULL) { printf(&该文件打开失败!&); exit(0); }for(i=0;i&N;i++) { fscanf(fp,&%ld%s&,&stu[i].num,stu[i].name); for(j=0;j&3;j++) fscanf(fp,&%d&,&stu[i].grade[j]); for(i=0;i&N;i++) { for(j=0;j&3;j++) average[i]=average[i]+stu[i].grade[j]; average[i]=average[i]*1.00/3; for(i=0;i&N-1;i++) for(j=i;j&N;j++) if(average[j+1]&average[i]) } } - 12 -- 12 -{t=stu[j+1];stu[j+1]=stu[i];stu[i]=t;}if(fclose(fp)) { printf(&该文件无法正常关闭!\n&); exit(0); }if((fpp=fopen(&studsort.txt&,&w+&))==NULL) { printf(&该文件打开失败!&); exit(0); }printf(&\n 由高到低排序为:\n&); for(i=0;i&N;i++) { printf(&%ld %-5s&,stu[i].num,stu[i].name); %-5s&,stu[i].num,stu[i].name);fprintf(fpp,&%ld for(j=0;j&3;j++) {fprintf(fpp,&%d printf(&%d&,stu[i].grade[j]); }&,stu[i].grade[j]);printf(&\n&); fprintf(fpp,&\n&); } if(fclose(fp)) { printf(&该文件无法正常关闭!\n&); exit(0); } 4.运行结果} - 13 -- 13 -五、知识点、难点及解决办法。主要考察对于文件信息的存储以及读取文件内的信息,难点在于如何将 信息存储起来以及如何从文件中读取有效信息并显示在调式框中 首先定义一个指针指向文件,然后创建或是打开一个的文件,注意文件 的类型和打开方式,如果是写入信息则用 fprintf,如果是读取信息则是 fscanf,注意写入和读取的书写格式,前面许注明指向该文件的指针 六、编程小结或体会。通过文件的学习,以后调试程序后还可以将信息永久的保存起来随时使 用或更改,不需要使用一次就输入一次,方便又省时间,课题四:链表的创建与使用一、目的 - 14 -- 14 -1.掌握单向链表的概念 2.掌握单向链表的创建、查找、删除方法 二、实习环境 个人计算机,Windows 操作系统,Turbo C 2.0 或 WinTC 或 Visual C++等编译开 发环境 三、实习内容与步骤 1.创建一个单向链表,存放 10 个学生的学号,姓名,并输出这种 10 个学生的 信息。2.在链表中查找指定学号的学生,输出其姓名。3.在链表中删除指定学号的学生,然后输出其余学生的信息。4.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行 结果(屏幕截图) 。5.在实习报告中说明知识点。6.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。四、程序流程图、算法及运行结果 1.程序流程图:开始 主函数创建链表将学生信息存储进去键入 10 个学生的信息查 找 指 定 学 号 的 学 生删 除 指 定 学 号 的 学 生结 束输出该学生姓名输出其余学生信息2.算法用指针处理单向链表,定义一个头指针,尾指针,通过尾指针的移动实 现数据信息的存储与读取;删除结点时,应该先将要删除结点前后的结点连 上,然后再将其删除,保证链表不会“断” 。3.程序#include&stdio.h& #include&stdlib.h& #define N 10 - 15 -- 15 -#define len sizeof(struct student) struct student { char name[20]; struct student * }; void search(struct student *head) { struct student *p; p= printf(&请输入要查找的学生学号:&); scanf(&%ld&,&number); do { if(p-&num==number) printf(&%-15s\n&,p-&name); p=p-& }while(p!=NULL); } void cdelete(struct student *q) { struct student *p1,*p2; printf(&请输入你要删除的学生学号:&); scanf(&%ld&,&count); p1=q; while(count!=p1-&num&&p1-&next!=NULL) { p2=p1; p1=p1-& }; if(count==p1-&num) { if(p1==q) q=p1-& else p2-&next=p1-& printf(&delete :%ld\n&,p1-&num); } } int main(void) { struct student *head,*tail,*p,*p1,*p2,*q; int n=0,i; long number,NUM; printf(&请输入%d 个学生的信息:\n&,N); p=tail=(struct student *)malloc(len); head=NULL; scanf(&%ld%s&,&p-&num,p-&name); while(p-&num!=0) { n+=1; if(n==1) - 16 -- 16 -head=p; else tail-&next=p; tail=p; p=(struct student *)malloc(len); scanf(&%ld%s&,&p-&num,p-&name); }; tail-&next=NULL; printf(&\n 这 10 个学生的信息为:\n&); p= if(head!=NULL) do { printf(&%-15ld%-15s\n&,p-&num,p-&name); p=p-& }while(p!=NULL); search(head); q= cdelete(q); do { printf(&%-15ld%-15s\n&,q-&num,q-&name); q=q-& }while(q!=NULL); } 4.运行结果:五、知识点、难点及解决办法。主要考察利用指针制作单向链表,难点在于各个结点的链接以及对于链表 的输出,删除结点时如何不让链表断开 定义一个头指针和一个尾指针,通过尾指针的移动实现结点的链接,删除结 点时先将要删除结点两端的结点链接上,再删除。六、编程小结或体会。制作单向链表是对指针的充分运用,可以节省内存,但是要熟练掌握还是有
【c语言程序实习报告】青岛大学软件技术学院C 语言程序设计实训报告姓 专 班名 业 级指导2011年 7 月 14 日 目录一.实训目的和要求 ................................................................................................... 1 1. 实训目的 ........................................................................................................... 1 2. 实训要求 ........................................................................................................... 1 二.试训任务内容 ....................................................................................................... 1 1.问题定义 ........................................................................................................... 1 2.问题分析 ........................................................................................................... 2 三. 总体设计 ................................................................................................................ 2 1.设计 ............................................................................................................. 2 2.实现方法 ............................................................................................................. 2 3.主要模块 ............................................................................................................. 2 4.模块关系 ............................................................................................................. 3 5.详细设计 ............................................................................................................. 3 四.软件使用说明 ......................................................................................................... 7 五.实训与体会 ..................................................................................................... 8 参考文献 ....................................................................................................................... 9 附录代码 ..................................................................................................................... 10I 一.实训目的和要求 1. 实训目的本实训是软件技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程 后进行的一次全面的综合练习。本实训的目的和任务1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力2. 实训要求1. 分析实训题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交实训报告二.试训任务内容1.问题定义汉诺塔问题 (Towers of Hanoi) )1 2.问题分析假设有三根木桩 A、B 和 C。在木桩 A 上放置了 N 个圆盘,由上到下编号为 1,2, ,…,N, 编号越大的圆盘直径越大。而我们必须将圆盘由木桩 A 通过木桩 B 全部搬到木桩 C 。在移 动过程中,必须按照下述移动1.直径较小的圆盘永远置于直径较大的圆盘上; 2.圆盘可任意地由任何一个木桩移到其他的木桩上; 3.每一次仅能移动一个圆盘。三.总体设计1.设计思想如果盘子为 1,则将这个盘子从塔座 A 移动到塔座 C; 如果不为 1,则采用递归思想。将塔座 A 的前 n-1 个盘子借助 C 盘(即目的盘)移到塔座 B,移后,此时 C 为空座,那我 们就可以将塔座 A 的第 n 个盘子移到塔座 C 了。接下来就将塔座 B 的 n-1 个盘子借助 A 移 到塔座 C,从而完成盘子的移动。2.实现方法通过函数的递归调用来实现。如图例 图 3 是当 N=3 时的递归调用树状图,可以使我们更清楚的了解递归的调用过程。3.主要模块Main 函数实现函数的调用,move 函数实现输出,hanoi 函数调用 move 函数实现移动和 最终输出。功能模块主要有以下几个输入界面(由用户输入演示盘子的个数) ;2 基本界面(包括 3 个柱子和若干放置在 A 上的盘子) ; 演示模块(即递归的过程) ; 主函数(对以上模块进行调用) 。4.模块关系程序从 Main 函数开始,到 main 函数结束。Main 函数通过调用 hanoi 函数来实现盘子 的移动,然后由 move 函数输出在屏幕上。如图 4.1汉诺塔程序输 入 界 面基 本 界 面演 示 模 块主 函 数4.1 模块关系图5.详细设计a) 输入界面涉及 C 的字体显示方式,返回值为盘子的个数,无参数 。b) 基本界面涉及 C 的图形功能,无返回值,参数为盘子的个数 。c)使用 for 循环函数,对阶数判断并执行循环。d) 演示模块需要先写出汉诺塔的递归算法代码,在递归过程中完成演示,无返回值, 参数为盘子个数,3 个柱子代号 为完成演示,需设计出两个全局变量 (0 上当前的盘子个数, int count[4][10]={0};/*count[i][0]表示每个柱子 1―3 号 号不用) count[i][j]的表示第 j 个盘子是几号盘子,自底向上数,初始时 A 柱上盘子自底向上依3 次编号为 1―n*/ 。主函数模块流程图如图 1 所示。其中 outputt 函数为自定义的输出函数。开始System(“cls”)Strlen(s)!=1||s[0] Y Nn=s[0]-48i=0i&=n-1 Y x[n-1-i]=2*i+1 YNi++i=ni&9x[i]=0;y[i]=0;z[i]=0i++Output(‘a’,’b’,’1’);Return0 图 1 主函数模块流程图4 如图 2,为移动函数模块流程图。Move 为自定义的移动函数。开始 N c= =1 Y i=0 a!=’x’&&b!=’x’ i&9 Y Y break i++ move(a,’x’,c-1); a!=’y’&&b!=’y’ N move(a,’z’,c-1); Y For 和 if 函数对数组赋值和判断 move(a,’y’,c-1); If??else 函数判定,move 实现移动 ? NCount++结束 图 2 移动模块流程图5 如图 3,为输出函数模块图流程图。开始N i&9 Y 数组赋值i++System(“cls”); N Count&10 Y Printf(“======”) Count&=10&& count&100 Y Printf(“======”) Printf(“=====”) NPrintf(“\n\n\n\n\n\”)For 函数运算,printf 输出Printf(“\n\n\按回车键继续 \”)结束图 3 输出模块流程图6 四. 软件使用说明1.运行程序,窗口提示“此为汉诺塔演示程序\n 请输入汉诺塔阶数(1-9)”如 图 4。图 4 提示窗口2.如输入盘子数后,按 Enter 键,使盘子移动,如图 5。图 5 移动盘子3.连续按 Enter 键,使阶层移动直到演示完该汉诺塔游戏,如图 6 所示。7 图 6 游戏完成五.实训心得与体会通过此次C实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论。通过自己动手亲自编写,平时乏味的课程,变的生动有趣。这次实训有很大的收获,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用 的技能。如果是一个程序写完一处错误也没用,会有种成就感,于是兴趣就来了,自然学的 东西也就多了,能把理论变成实际的技能,让我对C语言有了浓厚的兴趣和更深层的认识。C 语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是 一 个零散的知识,实际上所有的课程都如此。同时我也存在不少问题, 比如自己写的小程序出 了问题,不会解决了就叫老师帮忙,虽然解决了困难,但是会养成一种依赖的心理,碰到问 题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己 的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。另外,自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生 的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简 单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路, 把基础知识掌握了,然后有条不紊的分析,一步一步理解,C语言还是很有意思的课程。学 习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后 的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。8 当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训, 摆脱了那种似懂非懂的状态! 感谢安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学 之间的互相探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同,也 增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学 到更多的实用技能,为以后的工作打下一个良好的基础。参考文献[1] 刘振安,刘燕君.《C程序设计课程设计》[M].北京:机械工业出版社,2004年9月. [2] 谭浩强.《C程序设计》 (第三版).清华大学出版社,2005年7月. [3] 严蔚敏,吴伟民.《数据结构》 (C语言版).清华大学出版社,1997年4月. [4] 张岳新, 《Visual C++ 程序设计》.苏州大学出版社,2007年12月. [5] 徐宝文,《The C Programming Language 》.机械工业出版社,2004年1月. [6] 黄明,梁旭,周绍斌,《Visual C++ 信息系统设计与开发实例》.机械工业出版社, 2005 年3月. [7] AL KELLEY等著,麻志毅译.《C语言解析教程》.北京:机械工业出版社,2002年. [8] 李志球,《实用C语言程序设计教程》.北京:电子工业出版社,1999年. [9] 王立柱,《C/C++与数据结构》.北京:清华大学出版社,2002年. [10] 李大友,《C语言程序设计》.清华大学出版社,1999年.9 附录代码#include &stdio.h& #include &stdlib.h& #include &conio.h& #include &string.h& /*------------------------函数申明-------------------------*/ void move(char a,char b,int c); void outputt(char a,char b,int c); //移动函数 //输出函数/*-----------------------定义全局变量-----------------------*/ /*三个数组中所放每个数据代表每个塔层,数据大小代表塔层大小(即长度)*/ int x[9],y[9],z[9],count=0; int main() { char s[99]; system(&color 0A&); do { system(&cls&); printf(&此为汉诺塔演示程序\n 请输入汉诺塔阶数(1-9):\n&); scanf(&%s&,s); }while(strlen(s)!=1||s[0]&49||s[0]&57); n=s[0]-48; for(i=0;i&=n-1;i++) //初始化三个数组 x[n-1-i]=2*i+1; for(i=n;i&9;i++) x[i]=0; for(i=0;i&9;i++)10//用 s 接受塔层数,然后赋值给 n,这样容许一些错误输入 y[i]=0; for(i=0;i&9;i++) z[i]=0; outputt('a','b',1); /*输出,其中的传递 ('a','b',1)没有意义 只为 cfree 的特殊编译需要*/ getchar(); move('x','z',n); return 0; } /*--------移动函数,将 a 代表的塔的上面 c 层移到 b 代表的塔上-----*/ void move(char a,char b,int c){ int i,xtop,ytop, if(c==1) { for(i=0;i&9;i++) if(x[i]==0) xtop=i-1; for(i=0;i&9;i++) if(y[i]==0) ytop=i-1; for(i=0;i&9;i++) if(z[i]==0) ztop=i-1; if(a=='x'&&b=='y') { y[ytop+1]=x[xtop]; x[xtop]=0; } else if(a=='x'&&b=='z')11// 只移动一层 { z[ztop+1]=x[xtop]; x[xtop]=0; } else if(a=='y'&&b=='x') { x[xtop+1]=y[ytop]; y[ytop]=0; } else if(a=='y'&&b=='z') { z[ztop+1]=y[ytop]; y[ytop]=0; } else if(a=='z'&&b=='x') { x[xtop+1]=z[ztop]; z[ztop]=0; } else { y[ytop+1]=z[ztop]; z[ztop]=0; } count++; outputt('a','b',1); } else { if(a!='x'&&b!='x') {12// 移动多层 move(a,'x',c-1); move(a,b,1); move('x',b,c-1); } else if(a!='y'&&b!='y') { move(a,'y',c-1); move(a,b,1); move('y',b,c-1); } else { move(a,'z',c-1); move(a,b,1); move('z',b,c-1); } } } /*------------------------输出函数-------------------------*/ /*------------每次都是清屏再逐行输出,纯数字计算------------------------*/ void outputt(char a,char b,int c) { int i,j; int p1[9],p2[9],p3[9],p4[9],p5[9],p6[9],p7[9]; for(i=0;i&9;i++) p1[i]=x[i]-(!x[i]); for(i=0;i&9;i++) p1[i]=8-(p1[i]-1)/2; for(i=0;i&9;i++) p2[i]=x[i]; for(i=0;i&9;i++)13 p3[i]=y[i]-(!y[i]); for(i=0;i&9;i++) p3[i]=25-(p3[i]-1)/2-p1[i]-p2[i]; for(i=0;i&9;i++) p4[i]=y[i]; for(i=0;i&9;i++) p5[i]=z[i]-(!z[i]); for(i=0;i&9;i++) p5[i]=42-(p5[i]-1)/2-p1[i]-p2[i]-p3[i]-p4[i]; for(i=0;i&9;i++) p6[i]=z[i]; for(i=0;i&9;i++) p7[i]=51-p1[i]-p2[i]-p3[i]-p4[i]-p5[i]-p6[i]; system(&cls&); printf(&===================此为汉诺塔演示程序===================\n&); printf(&=========================第%d 步&,count); if(count&10) else if(count&=10&&count&100) else printf(&\n\n\n\n\n&); for(i=8;i&=0;i--) { for(j=1;j&=5;j++) printf(& &); printf(&==========================\n&); printf(&=========================\n&); printf(&========================\n&);for(j=1;j&=p1[i];j++) printf(& &); for(j=1;j&=p2[i];j++) printf(&%c&,22); for(j=1;j&=p3[i];j++) printf(& &); for(j=1;j&=p4[i];j++) printf(&%c&,22); for(j=1;j&=p5[i];j++) printf(& &); for(j=1;j&=p6[i];j++) printf(&%c&,22); for(j=1;j&=p7[i];j++) printf(& &); printf(&\n&);14 } printf(&\n\n 按回车键继续...&); getchar(); /*-----若为自动演示,可将前面两句改为 for(i=0;i&2e8;i++);即可*/ }15
【c语言程序实习报告】本科生课程封面课 程 名 称 C 语言程序课程设计 教师姓名 本科生姓名 本科生学号 本科生专业 材料科学与工程 所 在 院 系 材化学院 类别工科 日期2012 年 7 月 2-9 日 课程设计评语对课程论文的评语:平时成绩总 成 绩:课程论文成绩评阅人签名:注:1、无评阅人签名成绩无效; 2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效; 3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。1 摘要:本文完成了综合练习中第 20 题物业管理系统的编程,程序用于小区的管理,管 理的项目包括小区住户管理、物业收费项目管理、物业收费管理,并用文件存储 相关信息。文中给出了需求分析、功能模块图、数据结构、详细设计、程序运行 结果、总结和致谢,2 目录课程设计评语...................................................................................................................................1 个人简介...........................................................................................................................................2 摘要...................................................................................................................................................2 目录...................................................................................................................................................3 题目及要求.......................................................................................................................................4 需求分析...........................................................................................................................................4 功能模块图.......................................................................................................................................4 数据结构...........................................................................................................................................5 源代码...............................................................................................................................................5 程序运行结果..................................................................................................................................21 总结..................................................................................................................................................25 致谢..................................................................................................................................................25 参考文献..........................................................................................................................................253 1、题目要求 用于小区的物业管理,管理的项目包括小区住户管理、物业收费项目管理、 物业收费管理。要求用文件存储相关信息。⑴可随时浏览、录入和更改小区住户、收费项目等数据。⑵可随时增、删、改、查收费项目及其标准。⑶生成小区住户收费报表(包括全部、已交、欠交) 。2、需求分析 住户信息、 物业收费信息要用文件存储 (可用一个文件, 也可分成两个文件) 因而提供文件的输入/输出操作;另外,还要提供键盘式选择菜单以实现功能选 择。3、功能模块图 整个管理系统可以设计为住户信息、物业收费信息的浏览、修改、增加等模块。依据程序的数据结构和功能,遵照“自顶向下”原则,采用基于函数的逐步 求精法,描述该程序的层次结构主函数物业信息系统统计查询系统业主信息管理收费信息管理信 息 录 入信 息 修 改信 息 浏 览信 息 删 除查 询 缴 费 信 息查 询 欠 费 名 单4 4、数据结构 可以把住户信息、物业收费信息分别放在两个结构体内。住户信息结构体struct yezhu { //业主结构体// char id[100]; char name[20]; int family_ int floor_ char room_num[100]; char rz_time[20]; struct yezhu * }; 物业收费信息结构体struct wuye { //物业信息结构体// char ID[100]; int last_ int last_ int to_ struct wuye * };5、源代码 程序:#include&stdio.h& #include&stdlib.h& #include&string.h& #include&malloc.h& #include&conio.h& //函数声明// int mainmenu(); //主菜单 void xinximenu(); //物业信息菜单5 void tongjimenu();//统计查询菜单 void mychaozhao(); //欠费名单 void yezhumenu();//业主菜单 void wuyemenu();//物业菜单 void myAdd1();//录入业主信息 void myAdd2(); //录入物业信息 void myDelete1();//删除业主信息 void myDelete2();//删除物业信息 void myReplace1();//修改业主信息 void myReplace2();//修改物业信息 void Display1();//浏览业主信息 void Display2();//浏览物业信息 void myfind();//查询缴费 void Display(struct wuye *p); void Read1(); void Read2(); void save1(struct yezhu *p);//保存业主信息至文件 void save2(struct wuye *p);//保存物业信息至文件 struct yezhu *find1(char *id); //查找业主信息 struct wuye *find2(char *id);//查找物业信息` struct yezhu *myAdd3(struct yezhu *p);//添加业主信息 struct wuye *myAdd4(struct wuye *p); struct yezhu { //业主结构体// char id[100]; char name[20]; int family_ int floor_ char room_num[100]; char rz_time[20]; struct yezhu * }; struct wuye { //物业信息结构体// char ID[100]; int last_ int last_ int to_ struct wuye * }; struct yezhu * //业主头结点 struct wuye *pH //物业头结点6 int mainmenu()//主菜单// { printf(&************************** 欢 迎 进 入 小 区 物 业 管 理 系 统 ***************************\n&); printf(&----------------------------------------------------------------------------\n&); printf(&* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n&); printf(&* *\n&); printf(&* *\n&); printf(&* ⒈物业信息系统; *\n&); printf(&* *\n&); printf(&* ⒉统计查询系统; *\n&); printf(&* *\n&); printf(&* ⒊退出程序。*\n&); printf(&* *\n&); printf(&* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n&); printf(&请您输入选项★№:&); scanf(&%d&,&n); } void xinximenu()//物业信息菜单显示// { do { printf(&***************************** 物 业 信 息 系 统 ************************************\n&); printf(&----------------------------------------------------------------------------\n&); printf(&* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n&); printf(&* *\n&); printf(&* *\n&); printf(&* ⒈小区业主信息管理; *\n&); printf(&* *\n&); printf(&* ⒉物业费用信息管理; *\n&); printf(&* *\n&); printf(&* ⒊返回主菜单。*\n&); printf(&* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n&); printf(&请您输入选项★№:&);7 scanf(&%d&,&choose); switch(choose) { case 1:yezhumenu(); case 2:wuyemenu(); case 3: default:printf(&输入错误,请重新输入:\n&); } } while(1); } void tongjimenu() //统计查询菜单显示// { do { printf(&****************************** 统 计 查 询 系 统 ***********************************\n&); printf(&----------------------------------------------------------------------------\n&); printf(&* * * * * * * * * * * * * * * 〓请选择〓(1~3)* * * * * * * * * * * * * * *\n&); printf(&* *\n&); printf(&* *\n&); printf(&* ⒈查询缴费信息; *\n&); printf(&* *\n&); printf(&* ⒉欠费名单一览表; *\n&); printf(&* *\n&); printf(&* ⒊返回主菜单。*\n&); printf(&* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n&); printf(&请您输入选项★№:&); scanf(&%d&,&choose); switch(choose) { case 1 myfind(); case 2 mychaozhao(); case 3
defaultprintf(&输入错误,请重新输入!\n\n&); }8 } while(1); } void yezhumenu()//业主菜单函数 { do { printf(&******************************** 业 主 信 息 编 辑 系 统 ******************************-\n&); printf(&------------------------------------------------------------------------------\n&); printf(&* * * * * * * * * * * * * * * *〓请选择〓(1~5)* * * * * * * * * * * * * * *\n&); printf(&* *\n&); printf(&* *\n&); printf(&* ⒈业主信息录入; *\n&); printf(&* *\n&); printf(&* ⒉业主信息修改; *\n&); printf(&* *\n&); printf(&* ⒊业主信息删除; *\n&); printf(&* *\n&); printf(&* ⒋业主信息浏览; *\n&); printf(&* *\n&); printf(&* ⒌返回上级菜单。*\n&); printf(&* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n&); printf(&请输入选项★№:&); scanf(&%d&,&choose); //getchar(); switch(choose) { case 1 :myAdd1(); case 2 :myReplace1(); case 3 :myDelete1(); case 4 :Display1(); case 5
defaultprintf(&输入错误,请重新输入:\n&); } } while(1);9 } void myAdd1()//录入业主信息// { struct yezhu *p; p=(struct yezhu *)malloc(sizeof(struct yezhu)); printf(&请录入业主信息:\n&); printf(&ID:&); scanf(&%s&,p-&id); printf(&姓名:&); scanf(&%s&,p-&name); printf(&年龄:&); scanf(&%d&,&p-&age); printf(&家庭成员数:&); scanf(&%d&,&p-&family_num); printf(&所在楼号:&); scanf(&%d&,&p-&floor_num); printf(&单元房间号:&); scanf(&%s&,p-&room_num); printf(&住宅面积:&); scanf(&%d&,&p-&area); printf(&入住时间:&); scanf(&%s&,p-&rz_time); myAdd3(p); save1(p); printf(&录入成功!\n&); } struct yezhu *myAdd3(struct yezhu *p)//添加业主信息结点// { struct yezhu *t; if(phead==NULL) { phead=p; p-&next=NULL; } else { t= while(t-&next!=NULL) t=t-& t-&next=p; p-&next=NULL;10 } } void myReplace1()//修改业主信息 { struct yezhu *k; char id[100]; printf(&请输入要修改的业主 ID:&); scanf(&%s&,id); k=find1(id); if(k!=NULL) { printf(&请输入要修改的业主信息:\n&); printf(&ID:&); scanf(&%s&,k-&id); printf(&姓名:&); scanf(&%s&,k-&name); printf(&年龄:&); scanf(&%d&,&k-&age); printf(&家庭成员数:&); scanf(&%d&,&k-&family_num); printf(&所在楼号:&); scanf(&%d&,&k-&floor_num); printf(&单元房间号:&); scanf(&%s&,k-&room_num); printf(&住宅面积:&); scanf(&%d&,&k-&area); printf(&入住时间:&); scanf(&%s&,k-&rz_time); save1(k); printf(&修改成功!\n&); } else { printf(&无此业主 ID!\n&); } } struct yezhu *find1(char *id)//通过 ID 查找业主信息// { struct yezhu *p; p= while(p!=NULL)11 { if(strcmp(p-&id,id)==0) p=p-& } return NULL; } void Display1() { struct yezhu *p; p= while(p!=NULL) { printf(&\n\n&); printf(&ID:%s\n&,p-&id); printf(&姓名:%s\n&,p-&name); printf(&年龄:%d\n&,p-&age); printf(&家庭成员数:%d\n&,p-&family_num); printf(&所在楼号:%d\n&,p-&floor_num); printf(&单元房间号:%s\n&,p-&room_num); printf(&住宅面积:%d\n&,p-&area); printf(&入住时间:%s\n&,p-&rz_time); printf(&\n\n&); p=p-& } } void myDelete1() { struct yezhu *p,* struct wuye *k,* char id[100]; pp= kk=pH printf(&请输入要删除人的 ID:&); scanf(&%s&,id); p=find1(id); k=find2(id); if(p!=NULL) { if(p==phead) { phead=p-&12 free(p); } else { while(pp-&next!=p) pp=pp-& pp-&next=p-& free(p); } } else { printf(&无此业主 ID!\n&); } printf(&删除业主信息成功!\n&); save1(p); if(k!=NULL) { if(k==pHead) { pHead=k-& free(k); } else { while(kk-&link!=k) kk=kk-& kk-&link=k-& free(k); } } else { printf(&无此业主 ID!\n&); } printf(&删除物业信息成功!\n&); save2(k); } void save1(struct yezhu *p) { FILE *13 fp=fopen(&yezhu.dat&,&wb&); p= while(p!=NULL) { fwrite(p,sizeof(struct yezhu),1,fp); p=p-& } fclose(fp); } void Read1() { FILE * struct yezhu *p; fp=fopen(&yezhu.dat&,&rb&); while(1) { p=(struct yezhu *)malloc(sizeof(struct yezhu)); if(feof(fp)) { } if(fread(p,sizeof(struct yezhu),1,fp)) { myAdd3(p); } } fclose(fp); } void wuyemenu() { int choose=0; do { printf(&********************************* 物 业 费 用管 理 系 统 ************************\n&); printf(&------------------------------------------------------------------------\n&); printf(&* * * * * * * * * * * * * * * 〓请选择〓(1~5)* * * * * * * * * * * * *\n&); printf(&* * \n&); printf(&* *\n&); printf(&* ⒈物业信息录入; *\n&); printf(&* *\n&);14 printf(&* ⒉物业信息修改; *\n&); printf(&* *\n&); printf(&* ⒊物业信息删除; *\n&); printf(&* *\n&); printf(&* ⒋物业信息浏览; *\n&); printf(&* *\n&); printf(&* ⒌返回上级菜单。*\n&); printf(&* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n&); printf(&请输入选项:&); scanf(&%d&,&choose); switch(choose) { case 1myAdd2(); case 2myReplace2(); case 3myDelete2(); case 4Display2(); case 5 default:printf(&输入错误,请重新输入:\n&); } } while(1); } void myAdd2()//录入物业信息// { struct wuye *p; struct yezhu *t; p=(struct wuye *)malloc(sizeof(struct wuye)); printf(&请录入物业信息:\n&); printf(&ID:&); scanf(&%s&,p-&ID); t=find1(p-&ID); if(t!=NULL) { printf(&上一次缴费年份:&); scanf(&%d&,&p-&last_year); printf(&月份:&); scanf(&%d&,&p-&last_month); printf(&缴费金额:&);15 scanf(&%f&,&p-&money); x=p-&money/(0.4*t-&area); p-&to_time=(int)x; myAdd4(p); save2(p); printf(&录入成功!\n&); } else { printf(&无此业主 ID!\n&); } } struct wuye *myAdd4(struct wuye *p)//添加物业信息结点// { struct wuye *t; if(pHead==NULL) { pHead=p; p-&link=NULL; } else { t=pH while(t-&link!=NULL) t=t-& t-&link=p; p-&link=NULL; } return pH } struct wuye *find2(char *id)//通过姓名查找缴费信息// { struct wuye *p; p=pH while(p!=NULL) { if(strcmp(p-&ID,id)==0) p=p-& } return NULL;16 } void myfind() { struct wuye *p; char a[100]; printf(&请输入要查找的业主 id:&); scanf(&%s&,a); p=find2(a); if(p!=NULL) { printf(&业主已经存缴!\n&); } else { printf(&业主尚没存缴信息!\n&); } Display(p); } void myReplace2()// { char id[20]; struct wuye *k; struct yezhu *t; printf(&请输入要修改的业主 ID:&); scanf(&%s&,id); if(k!=NULL) { printf(&您要修改的信息为:\n&); printf(&请输入新的信息:\n&); printf(&ID:&); scanf(&%s&,k-&ID); printf(&上一次缴费年份:&); scanf(&%d&,&k-&last_year); printf(&月份:&); scanf(&%d&,&k-&last_month); printf(&缴费金额:&); scanf(&%f&,&k-&money); t=find1(k-&ID); x=(int)k-&money/(0.4*t-&area); k-&to_time=(int)x;17 myAdd4(k); save2(k); printf(&修改成功!\n&); } else { printf(&无此业主 ID!\n&); } } void myDelete2()// { struct wuye *p,* char id[100]; pp=pH printf(&请输入要删除人的 ID:&); scanf(&%s&,id); p=find2(id); if(p!=NULL) { if(p==pHead) { pHead=p-& free(p); } else { while(pp-&link!=p) pp=pp-& pp-&link=p-& free(p); } } else { printf(&无此业主 ID!\n&); } save2(p); printf(&删除成功!\n&); } void Display2()18 { struct wuye *p; p=pH while(p!=NULL) { printf(&ID:%s\n&,p-&ID); printf(& 最 后 一 次 缴 费 日 期 %d \n&,p-&last_year,p-&last_month); printf(&缴费金额:%f 元\n&,p-&money); printf(&费用有效期:%d 个月\n&,p-&to_time); printf(&\n\n\n&); p=p-& } } void Display(struct wuye *p) { printf(&业主 ID:%s\n&,p-&ID); printf(& 最 后 一 次 缴 费 日 期 \n&,p-&last_year,p-&last_month); printf(&最后一次缴费金额:%f\n&,p-&money); printf(&费用有效期:%d 个月\n&,p-&to_time); }年 %d月%d年%d月void Read2()// { FILE * struct wuye *p; fp=fopen(&wuye.dat&,&rb&); while(1) { p=(struct wuye *)malloc(sizeof(struct wuye)); if(feof(fp)) if(fread(p,sizeof(struct wuye),1,fp)) myAdd4(p); } fclose(fp); } void save2(struct wuye *p)// { FILE * fp=fopen(&wuye.dat&,&wb&); p=pH19 while(p!=NULL) { fwrite(p,sizeof(struct wuye),1,fp); p=p-& } fclose(fp); } void mychaozhao()// { int year, struct wuye *k; struct yezhu *l; k=pH l= printf(&请输入当前年份:&); scanf(&%d&,&year); printf(&请输入当前月份:&); scanf(&%d&,&month); while(k!=NULL) { if(year&k-&last_year) { l=find1(k-&ID); l-&lost=(float)(month+12-k-&to_time-k-&last_month)*(0.4*l-&area); if(l-&lost&0) { printf(&业主 ID*:%s\n&,l-&id); printf(&业主姓名*:%s\n&,l-&name); printf(& 最 后 一 次 缴 费 日 期 %d 年 %d 月 \n&,k-&last_year,k-&last_month); printf(&欠费金额*:%f\n&,l-&lost); printf(&\n\n&); } } if(year==k-&last_year) { l=find1(k-&ID); l-&lost=(float)(month-k-&to_time-k-&last_month)*(0.4*l-&area); if(l-&lost&0) { printf(&业主 ID:%s\n&,l-&id);20 printf(&业主姓名:%s\n&,l-&name); printf(& 最 后 一 次 缴 费 日 期 %d 年 %d 月 \n&,k-&last_year,k-&last_month); printf(& 欠 费 金 额 %f\n&,l-&lost); printf(&\n\n&); } } k=k-& } } void main()// { //Read1();//第一次没有信息,不可用!! ! //Read2();//第一次没有信息,不可用!! ! do { m=mainmenu(); switch(m) { case 1xinximenu(); case 2tongjimenu(); case 3:printf(&***************************** 谢 谢 使 用,再见!***********************************\n&); exit(0); } } while(1); } 6、程序运行结果 ⒈输入信息模块21 ⒉信息浏览模块22 ⒊信息修改模块23 ⒋查询模块⒌信息删除模块24 7、总结 这次课程设计为期八天,时间不长,却感受很深。无论是在学习知识还是在 解决问题的能力上,都有深刻的认识。首先就是对理论知识的进一步巩固,再一次接触 C 语言的数据类型、语句、 、 数组、指针结构等等一系列与 c 语言有关的东西,通过“庖丁解牛” ,我开始懂 得不管一个程序多么复杂, 其实它都是由最基本的函数组成, 只要我们弄清结构、 一切都会迎刃而解。与之前不同的是:这次是体会理论结合实际的过程。编程是 一项考验综合能力的事情, 仅仅有课本知识还不够,必须要有自己的知识框架才 能通过所学理论解决实际问题。尽管只有八天,但我却碰到许多问题,诸如无法 抽象出问题模型, 不知道用哪一个或哪几个知识点来解决问题等等,并且一开始 设计的程序冗长复杂,效率低,通过与同学的交流和在老师的帮助下,让程序成 功地运行,虽然不是自己全部编写的。(说实话,我还没达到完全靠自己编写的 能力。通过在网上找答案并进行修改调试,还是坚持了下来并取得了成功。) 此次实习很有意义,它将教会我不断的提高自己的时间能力,挖掘自己解决 问题的能力。8、致谢 在课程设计过程中经常遇到这样、那样的问题,多亏有陈老师指导和小组内 的同学的热情帮助, 才能坚持做下去,在间还得到了计算机学院的研究生 的帮助,在此一并表示感谢。9、参考文献[1]张冬梅,刘远兴,陈晶等.基于 PBL 的 C 语言课程设计及学习指导.北京:清华大学出版 社,2011 [2]谭浩强.C 语言课程设计(第四版).北京:清华大学出版社,201025
【c语言程序实习报告】高级语言程序设计训 高级语言程序设计训题目:员工信息管理程序 计算机工程系 朱建国 院系专业院系专业姓 学 名号:2011年 01月 05日 一、需求分析员工档案是企业劳动,人事在招用、调配、、考核、奖惩和任用等 工作中形成的有关职工个人经历、政治思想、业务技术水平、工作表现以及工作 变动等情况的文件材料。1、基本要求 基本要求基本要求 (1)程序菜单功能或详细的提示功能; (2)员工信息的输入(包括员工号、姓名、年龄、职位、工资)功能 ; (3)员工信息的浏览功能; (4)员工信息的添加功能; (5)员工信息的删除功能; (6)员工信息的排序功能; (7)员工信息的查询功能; 2、其他要求 其他要求其他要求 (1)结构体数组实现,用指针访问结构体成员; (2)自行设计的程序不少于 100 行,总体程序不少于 200 行; (3)输出数据要求格式美观; (4)程序要有详细的注释,并画出程序流程图及必要的文字说明书文档,程序 内容和文档 内容要体现个性化设计思想; (5)严禁雷同,任务书除外全部手写;二、程序总体设计程序总体设计1、程序主要包括三大模块:输入输出模块、管理模块和文件操作模块。如 程序主要包括三大模块程序主要包括三大模块 输入输出模块、管理模块和文件操作模块。下图下图输入输出终端输入输出模块管理模块文件操作模块存储文件1 2、界面设计、界面设计程序中 visual C++的编译环境中进行, 界面将通过屏幕的输出显示功 能选项。通过键盘输入完成相应操作。程序主界面是一个文本方式的菜 单,通过键盘相应选择操作指令。3、数据结构设计、数据结构设计员工档案中的记录项由多个不同的数据项构成,是一个结构体数据, 因此需要定义结构体数据类型。根据要求,数据项为:员工号、姓名、 性别、年龄、职位、工资。据此定义如下结构体数据类型struct worker {/*―――――――― 员工号*/ char name[10];/*―――― 姓名*/ 性别*/ char sex[10];/*―――――/*―――――――― 年龄*/ char position[10];/*――――职位*//*―――――――――工资*/ }work[N]; 4、程序函数设计 、 main ();/*主函数*/ void menu_handle();/*函数处理菜单*/ int menu_choose();/*函数选择菜单*/ void input_worker();/*创建文件并对工人信息输入函数*/ void save_file(int n);/*文件保存*/ int load();/*提取员工数*/ void message_output();/*员工信息浏览函数*/ void add_worker();/*员工添加函数*/ void dele_worker();/*员工信息删除函数*/ void fine();/*员工信息查询函数*/ void fine_num();/*员工号查询函数*/ void fine_name();/*按姓名查询函数*/ void sort_age();/*按年龄排序函数*/ void sort_pay();/*按工资排序函数*/ void sort();/*排序函数处理*/ void change(struct worker *p,int n);/*交换元素*/2 三、程序流程图1、员工信息输入功能 、 开始 3、添加员工信息 、 开始新建文件清屏打开文件以追加方式 打开数据文件提示输入 提示输入 输入 输入 写入文件 写入文件 关闭文件 关闭并返回 结束并返回 2、员工信息浏览功能 、开始打开数据文件读文件关闭文件结束并返回3 4、 员工信息删除 、开始显示该记录清屏删除与否 否提示输入姓名是输入将数组后移调用浏览函数调用文件保存函数结束 数据读到数组中对比查找返回5、员工信息查询 员工信息查询 开始6、 员工信息排序 开始清屏清屏提示输入提示 按什么排序输入选择数据与数组比较调用浏览函数读该数组冒泡排序结束并返回输出结束并 返回4 四、实训 实训计划第一天:设计程序设计书; 第二天:实现函数菜单功能; 第三天:实现员工信息输入(保存在文件中)与浏览功能; 第四天:实现员工信息的添加及删除功能; 第五天:实现员工信息的查询功能; 第六天:实现员工信息的排序功能; 第七天:对源程序进行改进与美化;五、详细设计◆设计总图如下 设计总图如下设计总图如下1、 :建立头文件:头文件包含各种调用函数,如图 2、建立主函数文件:里面的是主函数并调用菜单函数 3、建立菜单函数文件:调用各种功能函数:员工信息的输入输出、添加删除、查询排序 4、建立子函数文件:包括各种功能函数:员工信息的输入输出、添加删除、查询排序六、实训过程◆在菜单功能的源程序编写过程没有遇到什么困难, 但在界面的设计上, 花费了许多时间寻 找适合的符号和设计,以下是程序菜单选择界面:5 ◆ 菜单功能完成之后,就开始各种功能函数的编写,输入函数一开始没有想到调用一个保 存文件的函数,后来在资料上看到这样这个方法,但当时已经编好了,就没有修改。但 这次功能我也学会了这样一个方法。下次可以应用到程序中。这个功能的实现也没有遇 到困难??之后我便一口气把员工信息的浏览功能做好了。? ◆ 然 而 在 做 员 工 信 息 添 加 功 能 时 , 开 始 遇 到 困 难 了 , 当 时 我 的 fwrite() 语 句 为 fwrite(work,sizeof(struct worker),1,fp);使得加进去的信息读出来的是一堆乱码,结果我不 知道错误在哪里,一直以为是输入函数那边出错或者浏览函数那边错误,这么改都改不 得,花了很多时间,最后才发现是这里错误,才改成 fwrite(p,sizeof(struct worker),1,fp); ◆ 实现了添加功能之后,就开始做员工信息的删除功能,这个功能的实现花了我更多的时 间。首先,我当时把结构体数组放在头文件的文件中并初始化一个数组,使得调用这个 文件时出现一个重复定义的错误,解决完这个错误之后,开始调试,没发现别的错误, 但在运行的时候,前面的几个人的信息都无法删除,只能删除最后一个人的信息,这个 错误让我苦恼了很久??设置断点调试的时候,输入功能的 work[0]、work[1]???都 ? ?? 没问题, 然而添加功能的 work[0]、 work[1]??? ?? 却发生了变化! 删除功能那边的 work[0] 是居然是储存最后一名员工的信息, 而在浏览员工信息之后的 work[0]、 work[1]??? ?? 却 是我想得到的,于是我便在删除函数功能那里调用了浏览函数,终于解决了这个困难。这个困难花了我好几天?? ? ◆ 解决完那个问题之后,我的编程开始一马平川,之后的功能实现也没有遇到很大的困 难??提前了两天完成这个任务。?七、程序的调试与测试◆程序调试时在录入员工信息设断点如下:用于调试数组当前储存的数据 程序调试时在录入员工信息设断点如下:◆在浏览信息函数里设的断点如下:用于调试数组当前储存的数据 在浏览信息函数里设的断点如下:◆ 在删除信息函数里设如下断点删除信息函数里设如下断点①用于调试数组当前储存的数据 ②用于调试数组当前储存的数据6 存的数据 ③用于调试数组当前储存的数据④用于调试数组当前储存的数据◆调试结果调试结果发现这几个数组储存的数据不一样, 原本以为只要把数组定义在头文件数组内容就 不会改变,结果发现这个想法是错误的。。这给我的 C 语言上了一课! 。七、程序的运行1、程序的欢迎界面 、7 2、按 1 进入员工信息输入,并输入员工数为 2,姓名为张三、李四,如下图、 进入员工信息输入, ,姓名为张三、李四,如下图:3,、录入员工信息后, 、录入员工信息后,按回车,退出员工信息的录入功能,按 2 浏览员工信息,操作如下图浏览员工信息,操作如下图按回车,退出员工信息的录入功能,8 3、浏览无误之后,按 3 进行下一个功能 员工信息的添加,并添加 3 名员工,如图、浏览无误之后, 进行下一个功能,员工信息的添加 员工信息的添加, 名员工,如图:4、添加完成后,按 2 进行浏览员工信息,如图、添加完成后, 进行浏览员工信息,如图:9 5、浏览无误之后,按 4 进行员工信息的删除,以下以删除朱总为例、浏览无误之后, 进行员工信息的删除,以下以删除朱总为例:删除后, 按 1 删除后,程序浏览删除后的信息并提示是否继续删除或者返回10 6、按 2 退出删除功能,并按 5 进行员工信息的查询功能 如图、 退出删除功能, 进行员工信息的查询功能,如图 如图(1) 程序将提示按什么方式查询,以下以按姓名查询为例:(2)输入要查询的姓名为朱总,显示如下图:(2) 按 1 选择重新输入,以张三为例:7、按 3 退出,并选择 6 进行排序、 退出, 进行排序(1)提示按什么方式排序)(2)按 2,以按工资排序为例,提示按从小到大或者从大到小排序:11 (3)按 1,以从大到小排序:8、按 3 退出,功能演示完毕,按 2 浏览员工信息是否改变,如下图、 退出,功能演示完毕, 浏览员工信息是否改变,如下图:9、演示完毕按 7 退出程序、 退出程序:12 八、结论分析问题 问题的解决不能想着一步登天, 当时一拿到这个任务的时候, 就开始酝酿着用什么是用 数组还是用链表去做这个任务,由于对链表的认识不够深刻,就选择了数组。因为员工信息 包含多种不同的信息,就着手于结构体,之后开始以菜单为一条线索,随着这条线索,一步 一步的把各种功能调用到菜单中,这样才能有清晰的思路去编程。算法分析 算法是各个功能函数实现的核心与前提, 首先算法是结合数组来思考的, 比如在做删除 函数的时候, 首先要想到如何把你输入的要删除的信息与数组中储存的信息做一个比较, 只 有这样才能找得到你想要删除的内容。因此就不由自主的想到用 strcmp()这个函数,这样 不仅节约了许多不必要的程序代码, 还能使自己的思维方式更宽。找到更合适自己的算法去 解决问题?? ?九、心得与体会经过了两个星期的实训培训,虽然这期间很苦很累,在这段时间里,可以说我花了几天 几夜去编了吧,从早上 9 点到凌晨 12 点半,每次厚着脸皮去找学长借电脑使用,我都会有 些不好意思??然而,这说明了我已经陷入了编写程序的乐趣当中,虽然每次遇到困难,我 ? 都会去研究许久。甚至想到放弃(我第一次的程序啊,有时候看到别人都已经做出来了???我 自己却没能完成, 是不是太执着了呢?其实我也好想借鉴一下别人的方法啊, 可是这样能提 高吗?哎???好累,花了那么多精力去编了,别人却不怎么花时间,好累好累???这就是传说中 的困难吗?我有些像放弃了。。好吧。。坚持!跨过去,相信自己理解问题就更深一步了) 。。上面这句话是我在遇到困难的时候勉励自己的话,自己鼓励自己,让我能继续的坚持下去, 哪怕花更多的时间。之后, 我能提前几天完全结束我的程序编写, 调试运行都没有什么错误, 那时候自己真的很开心, 我觉得自己选择这个专业确实是对了, 不管别人怎么去评价我的专 业,我以后会说:走自己的路,让别人说去吧?? ?13

我要回帖

更多关于 c 冒泡排序子函数 的文章

 

随机推荐