




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计实训指导书一、课程基本知识1、实训目的:通过实训,学会为涉及的数据定义适当的结构体, 使用结构体设计;另一方面,通过实训,复习巩固二进制磁盘文件的建立,使用结构体数组作磁盘文件输入输出的中介,使用二进制磁盘文件存盘,增强数据抽象能力和程序设计的能力,为后续课程,特别是软件编码打下坚实的知识基础。课程设计主要目的:C语言程序设计课程实训是三年制高职计算机应用技术、计算机网络技术、软件技术专业的重要的实训环节之一。教育目标是在学生学习了C语言程序设计的基本知识、基本理论的基础上,通过综合实训,培养学生的动手能力,培养学生学习新知识的能力,提高学生分析问题和解决问题的综合能力,培养学生的团队合作精神,为今后从事专业工作打下必要的基础。 知识教学目标:(1)掌握模块化程序设计的方法; (2)进一步学习和掌握C语言中的文件操作函数及其应用; (3)学习和掌握C语言中的图形处理函数及其应用 能力培养目标:(1)能正确分析现实生活中的问题,并抽象成数学模型,进行模块分析和编程; (2)在程序调试过程中,能根据运行环境给出的错误提示,正确解决程序中的语法错误; (3)在程序调试过程中,能根据运行结果,运用相应的手段,正确地找出并解决程序中的逻辑错误; (4)在实训过程中,适当进行小组分工,培养团队谐调和团队合作的能力; (5)提交课程实训任务书,培养专业文档书写的能力2、实训内容:自行设计学生成绩管理系统或工厂职工工资管理系统、小型通讯录、机房收费管理系统、典型算法集成、RSA加密、制作表格、菜单的实现、动画的制作3、实训所用设施:PC机、Turbo C、VC6.0语言编辑、编译运行工具等。4、实训任务及要求:根据提供的实习题目,认真完成软件设计的全部过程,并以最终软件设计成果来证明其独立完成实际任务的能力,从而,反映出理解和运用C程序知识的水平和能力,最后完成软件设计和程序调试并提交文档:课程实训报告书,报告书中包含设计的算法及部分程序代码。二、实训基本操作方法1、按照系统用户手册及文档规范要求进行操作,养成查阅手册、文档的良好习惯;2、对特殊疑难问题采用讨论、协作等方式进行解决,有意识地训练团队合作意识;3、实训报告应多包含在实训过程中出现的错误及解决方法。三、实训项目1、请自行设计学生成绩管理系统或工厂职工工资管理系统(1)使用结构体数组作磁盘文件输入输出的中介学生成绩信息结构:学生编号,姓名,三门成绩,总分,平均分要求在子函数中分别解决学生编号,姓名,三门成绩输入和求总分,平均分问题等项功能,写盘,读盘,按总分排序,再按总分排序后的结构体数组写盘。(2)使用switch()多分支语句作管理系统用户界面设计:主调程序范本如下:#include “fa1.c”#include”fa2.c”#include”fa3.c”void main() int k,s=0; while(s!=1) aa:printf(“ please select: 1.create file 2. read filen”); printf(“ 3.append file 4.exitn”);scanf(“%d”,&k);switch(k) case 1: creat( ); goto aa; case 2: wread();goto aa; case 3: wappe();goto aa; case 4: s=1; (3)使用二进制磁盘文件存盘:使用fwrite(),fread()函数(4)对数据管理应包括:建立数据文件、增加数据、修改数据、查询数据、对数据排序和屏幕显示数据等功能。该系统应是选单式主控模块和子模块的程序调用结构。该系统应在VC+6.0版本系统环境下完成,以便提供汉字提示界面。亦可在Turboc2.0下完成。该系统应包括学生成绩信息文件的建立,写盘,读盘并显示,查找最高总分等项功能。2、小型通讯录每个用户的信息包括姓名和电话号码两部分,要求能根据菜单提示,完成以下功能: (1)将用户信息加入到不同的组中,即写入不同的文件 (2)可以按姓名或电话的方式查询用户信息 (注意:该题可以自由发挥其功能,即可以用数组实现,也可以用链表实现)示例代码:#include struct address /*结点的结构*/ char name20; char street20; char city10; char QQ10; struct address *next; struct address *prior; jilu;struct address *start;/*第一个进入列表的结点*/struct address *last;/*最后一个进入列表的结点*/void enter();void display();void search();void save();void load();void list();struct address *find(char *name);struct address *store(struct address *,struct address *);main()start=last=NULL;load();for (;)/*无限循环可不断回到主菜单*/ switch(menu() case 1:enter();break; case 2:delete();break; case 3:list();break; case 4:search();break; case 5:save();break; case 6:exit(0); menu()/*菜单函数*/char c;printf(1.Entern);printf(2.Deleten);printf(3.Listn);printf(4.Searchn);printf(5.Saven);printf(6.Quitn);do printf(nEnter you choice:); c=getche(); while (c6);return c-48;void enter()struct address *info;for (;) info=(struct address *)malloc(sizeof(jilu); if (!info) printf(nout of memory); return; inputs(nenter name:,info-name,19); if (!info-name0) break; inputs(enter street:,info-street,19); inputs(enter city:,info-city,9); inputs(enter QQ:,info-QQ,9); start=store(info,start); inputs(char *AA,char *s,int WW)char p255;do printf(AA); gets(p); if (strlen(p)WW) printf(ntoo longn); while (strlen(p)WW); strcpy(s,p);struct address *store(struct address *i,struct address *top)struct address *old,*p;if (last=NULL) i-next=NULL; i-prior=NULL; last=i; return i; p=top;old=NULL;while(p) if (strcmp(p-name,i-name)next; else if(p-prior) p-prior-next=i; i-next=p; i-prior=p-prior; p-prior=i; return top; i-next=p; i-prior=NULL; p-prior=i; return i; old-next=i; i-next=NULL; i-prior=old; last=i; return start;delete()struct address *info;char s80;printf(enter name:);gets(s);info=find(s);/*调用查找函数*/if (info) if (start=info) start=info-next; if (start) start-prior=NULL; else last=NULL; else info-prior-next=info-next; if(info!=last) info-prior-next=info-prior; else last=info-prior; free(info); struct address *find(char *name)/*查找函数*/struct address *info;info=start;while(info) if(!strcmp(name,info-name) return info; info=info-next; printf(name not foundn);return NULL;void list()struct address *info;info=start;printf(n%-20s%-20s%-10s%-10s%-6sn, name,street,city,QQ);while(info) display(info); info=info-next; printf(nn);void display(struct address *info)printf(%-20s%-20s%-10s%-10sn, info-name,info-street,info-city,info-QQ);void search()char name40;struct address *info,*find();printf(enter name to find:);gets(name);info=find(name);if(!info) printf(not foundn);/*显示函数*/else display(info);void save()struct address *info;FILE *fp;if(fp=fopen(mlist,wb)=NULL) printf(can not open filen); exit(1); printf(nSaving filen);info=start;while(info) fwrite(info,sizeof(struct address),1,fp); info=info-next; fclose(fp);void load()struct address *info,*temp=NULL;FILE *fp;if(fp=fopen(mlist,rb)=NULL) printf(can not open filen); return; while(start) info=start-next; free(info); start=info; printf(nLoading filen);start=(struct address *)malloc(sizeof(struct address);if(!start) printf(out of memory!n); return; info=start;while(!feof(fp) if(1!=fread(info,sizeof(struct address),1,fp) break; info-next=(struct address *)malloc(sizeof(struct address); if (!info-next) printf(out of memoryn); return; info-prior=temp; temp=info; info=info-next; temp-next=NULL;last=temp;start-prior=NULL;fclose(fp); /*关闭文件,释放内存*/3、机房收费管理系统(1)输入功能:输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。 (2)计算功能:计算每个学生的上机费用(计算公式:上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位) (3)修改功能:修改学生上机的个人档案(如:增添或删除) (4)查询功能:按条件(班级、学好、姓名)查询学生上机信息,并能显示查询学生的相应全部档案。示例代码:#include#include#include#define NULL 0#define LEN sizeof(struct student)struct student long num; long class; char name15; int hour1; int min1; int hour2; int min2; struct student *next;int n;#includefile1.h#includeinsert.c#includecreat.c#includetime.c#includedel.c#includesave.c#includecopy.c#includeprint.c#includeswit.cvoid main()char c; int flag,k; struct student *head,*stu; printf( one hour 1.0 yun !n); printf( Infed information-1n); printf( Search expense-2n); printf( delet the information-3n); printf( =n);printf( !Example!n); /例子示范/ printf( #*Infed information*#n); printf( number class name 12:30-14:21n); /注意号输入/ head=creat(); /使head=调用返回“头指针”/ for(flag=1;flag;) /flag为真,操作/ printf( Will you ? : ); /输入相应的数值,做相应的操作/ scanf(%d,&k); swit(head,stu,k); printf(go on ? y/n: ); getchar(); c=getchar(); if(c=N|c=n) flag=0; /如果输入norN则退出使用本软件,否则继续相应操作/ void swit(struct student *head,struct student *stu,int k) long dele,number; struct student *p1; switch(k) case 1: printf( !Example!n); /例子示范/ printf(#*Infed information*#n); printf(number class name 12:30-14:21n);/注意号输入 printf( =:); stu=(struct student *)malloc(LEN); /添加信息时必须开scanf(%ld%ld%s%d:%d-%d:%d,&stu-num,&stu-class,stu-name,&stu-hour1,&stu-min1,&stu-hour2,&stu-min2); while(stu-num!=0) /作用为多次输入后,多次开辟空间/ head=insert(head,stu); printf( =:); stu=(struct student *)malloc(LEN); /添加信息时必须开辟空间/ scanf(%ld%ld%s%d:%d-%d:%d,&stu-num,&stu-class,stu-name,&stu-hour1,&stu-min1,&stu-hour2,&stu-min2); copy(head); print(head); break; case 2: printf(#*Search.expense*#n); printf( search number :); /输入要找的号码“number-num”/ scanf(%ld,&number); while(number!=0) /输入0,则结束擦找/ time(head,number); printf( search number :); scanf(%ld,&number); break;case 3: printf(#*rmation*#n); printf( input the deleted number:); /输入删除号码/ scanf(%ld,&dele); while(dele!=0) /输入0,则结删除/ head=del(head,dele); print(head); copy(head); printf( input the deleted number:); scanf(%ld,&dele); break; struct student *creat(void) /1struct student *head; struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);/创建空间为LEN,强转换为结构型,第一次输入/printf( =:);scanf(%ld%ld%s%d:%d-%d:%d,&p1-num,&p1-class,p1-name,&p1-hour1,&p1-min1,&p1-hour2,&p1-min2); head=NULL; while(p1-num!=0) /号码不为0,可继续输入/ n=n+1; /输入一个,节点加一/ if(n=1) head=p1; /有一个用户/ else p2-next=p1; /多个用户,p1将指向下一个节点/ p2=p1; p1=(struct student *)malloc(LEN);/将创建下一个空间,创建下一个空间后,输入信息/ printf( =:);scanf(%ld%ld%s%d:%d-%d:%d,&p1-num,&p1-class,p1-name,&p1-hour1,&p1-min1,&p1-hour2,&p1-min2); p2-next=NULL; /表尾/ return(head); struct student * insert(struct student * head,struct student * stud) /stud是添加的用户/ struct student *p0,*p1,*p2; p1=head; p0=stud; if(head=NULL) /如果没有任何用户,添加为第一/ head=p0;p0-next=NULL; else while(p0-nump1-num)&(p1-next!=NULL) /按号码小到大排列,并寻找添加节点/ p2=p1;p1=p1-next; /p1将指向下一个节点/ if(p0-numnum) if(head=p1) head=p0; /恰好最小/ else p2-next=p0; /在中间/ p0-next=p1; elsep1-next=p0;p0-next=NULL; /在末尾/ n=n+1; /添加后接点数/ return(head); struct student *del(struct student *head,long num) struct student *p1,*p2; if(head=NULL) printf(NO list!n); /如果没有任何用户,不商除/ p1=head; while(num!=p1-num & p1-next!=NULL) /寻找符合节点/ p2=p1;p1=p1-next; /p1将指向下一个节点/ if(num=p1-num) if(p1=head) head=p1-next; /恰好最小/ else p2-next=p1-next; /在中间,便指向尾接点/ printf(delete %ld success !n,num); /输出商除用户 n=n-1; /商除后接点数/ else printf(%ld not been found !n,num);/当找不到时/ return(head);void print(struct student * head) struct student *p; printf(Now %d person!n,n); /当前用户/ p=head; if(head!=NULL) /要有用户/ do printf(%ld%ld%s%d:%d-%d:%dn,p-num,p-class,p-name,p-hour1,p-min1,p-hour2,p-min2); time(p,p-num); p=p-next; /指向下一个节点/ while(p!=NULL); else printf(NO one ! n);void time(struct student *head,long number) struct student *p=head; int i,a,b; float c; if(p=NULL) printf(NO list!n); else for(i=0;inum=number) break; else p=p-next; a=(p-hour2)-(p-hour1); b=fabs(p-min2)-(p-min1); c=(a+b/60.0)*1.0; printf( %ld Money is :%fn,number,c); void copy(struct student *head) save(head);void save(struct student *head) struct student *p; FILE *fp; int i; p=head; if(fp=fopen(list.c,w)=NULL) printf(cannot open ); return; do if(fwrite(p,sizeof(struct student),1,fp)!=1) printf(list write errorn); p=p-next; while(p!=NULL); fclose(fp);4、典型算法集成该系统要求根据显示的菜单(光条菜单),输入不同的选择,完成以下算法: (1)验证一个偶数可以写成两个素数之和 (2)显示n*n的魔方方阵(n可从键盘输入) (3)解密程序 (4)排序算法研究 (5)退出示例代码:#include#includemofang.c#includepaixu.c#includeyanghui.c#includetotle.cvoid main()int k;char i=21;aa:printf(*n);printf(*t%c1 魔方阵*n,i);printf(*t%c2 杨辉三角*n,i);printf(*t%c3 选择法排序*n,i);printf(*t%c4 计算该日是该年的第几天*n,i); printf(*t%c5 退出*n,i);printf(*n);printf(nnn);printf(t请选择算法:);scanf(%d,&k);printf(nn);switch(k)case 1:mofang();printf(nn);goto aa;case 2:yanghui();printf(nn);goto aa;case 3:paixu();printf(nn);goto aa;case 4:totle();printf(nn);goto aa;case 5:break;#includevoid mofang()int a1616;int n,i,j,k,p;p=1;while(p=1)printf(请输入魔方阵大小:);scanf(%d,&n);if(n!=0)&(n=15)&(n%2!=0)p=0;for(i=1;i=n;i+)for(j=1;j=n;j+)aij=0;j=n/2+1;a1j=1;for(k=2;k=n*n;k+)i=i-1;j=j+1;if(in)i=i+2;j=j-1;else if(in)j=1;if(aij=0) aij=k;else i=i+2;j=j-1;aij=k;for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%dt,aij);printf(n);#includevoid yanghui()int a80,b80;int n,i,j;printf(请输入大小:);scanf(%d,&j);b0=1;printf(%dn,b0);for(n=1;nj;n+)b0=1;for(i=0;in;i+)ai=bi;for(i=1;in;i+)bi=ai-1+ai;bn=1;for(i=0;in+1;i+)printf(%d ,bi);printf(n);#includevoid paixu()int a10,i,j,min,t;printf(请输入10个数:n);for(i=0;i10;i+)printf(a%d=,i);scanf(%d,&ai);printf(n);for(i=0;i10;i+)min=i;for(j=i+1;jaj) min=j;t=ai;ai=amin;amin=t;for(i=0;i10;i+)printf(%5d,ai);printf(n);#includeint leap(int n)int t;if(n%400=0)t=29;elseif(n%100!=0&n%4=0)t=29;elset=28;return(t);void totle()int year,mouth,day,n,totle;printf(请输入年月日:n);scanf(%d%d%d,&year,&mouth,&day);n=leap(year);switch(mouth)case 1:totle=day;break;case 2:totle=31+day;break;case 3:totle=31+n+day;break;case 4:totle=62+n+day;break;case 5:totle=92+n+day;break;case 6:totle=123+n+day;break;case 7:totle=153+n+day;break;case 8:totle=174+n+day;break;case 9:totle=205+n+day;break;case 10:totle=235+n+day;break;case 11:totle=266+n+day;break;case 12:totle=296+n+day;break;printf(是%d年的第%d天n,year,totle);5、RSA加密RSA(是三个发明者的名字的首字母:Rivest, AdiShamir和Adleman)是目前最为流行的加密算法,它既能用于数据加密,也能用于数字签名。RSA的理论依据是大整数因子分解,公钥和私钥都是大素数,而从一个密钥和密文推断出明文的难度等同于分解两个大素数的积,算法描述如下:(1)选择两个大素数、,这两个素数保密。(2)计算,并且公开。(2)计算的欧拉函数。(3)选择整数,且公开,使与互质,且。(4)利用Euclid算法计算解密密钥,使,是私钥,需要保密。其中,公钥,私钥。对于明文块和密文块,加/解密的形式如下:加密:解密:。示例算法:#includevoid main()int p,q,m,e,M,d;long int t,n,c;printf(please enter 1st prime:n);scanf(%d,&p);printf(please enter 2nd prime:n);scanf(%d,&q);n=p*q;printf(so the n is:%ldn,n);t=(p-1)*(q-1);printf(please enter the number e:n);scanf(%d,&e);if(et|e1)printf(enter error,please again);for(d=1;d=n)printf(enter error,please again);c=(Md)%n;printf(c=%ldn,c);printf(enter the c againn);scanf(%ld,&c);m=(ce)%n;printf(m=%dn,m);6、制作表格Turbo C具有强大的图形处理功能,具有70多个图形库函数,因此其图形功能相当丰富。这些库函数均包含在头文件graphics.h中。在缺省情况下,屏幕是80列50行的文本方式,所有的图形函数均不能操作,因此在使用图形函数之前,必须将屏幕显示器设置为图形模式,即以图形方式初始化。这是通过函数initgraph来完成的。其声明如下:Initgraph(int *gdriver,int *gmode,char *path)它通过从磁盘上装入一个图形驱动器程序来初始化图形系统,将系统设置为图形方式。gdriver用来设置图形显示模式,它是一个整型值。常用的是DETECT、EGA、VGA和IBM8514。其中,如果使用Detect,则系统自动检测图形适配器的最高分辨率模式,并装入相应的图形驱动器程序。Gmode用来设置图形显示模式,它是一个整型值。不同的图形驱动程序有不同的图形显示模式,即使在一个图形驱动程序下,也有几种图形显示模式。图形显示模式决定了显示的分辨率、可同时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 26958.20-2025产品几何技术规范(GPS)滤波第20部分:线性轮廓滤波器:基本概念
- GB/T 28062-2025柑橘黄龙病菌实时荧光定量PCR检测技术规程
- 2025年网络营销与传播策略能力测评试卷及答案
- 2025年数字营销策略与实施考试试题及答案
- Hydroxymycotrienin-A-生命科学试剂-MCE
- 2025年高中物理高考模拟试卷及答案
- 《地理地形地貌介绍与自然环境保护教案》
- 从诗文中找寻真我:高一语文美文赏析教学教案
- 夏日绝句赏析:五年级语文阅读理解教案
- 食品购销合同框架协议
- 一把手讲安全课警示教育
- 防蛇虫鼠蚁安全教育
- 银行网点数字营销整体解决方案
- 双液注浆施工方案
- 2025年国家公务员考试行测常识题库及答案(共300题)
- 脑血管畸形病人护理
- 2024冀少版七年级下册生物期末复习知识点提纲(详细版)
- 《渔业船舶重大事故隐患判定标准(试行)》 知识培训
- 2024北京西城区初一(下)期末数学试题和答案
- 全国卫生健康系统职业技能竞赛(传染病防治监督)参考试题(附答案)
- 人工智能算法与市场营销的融合研究
评论
0/150
提交评论