51C语言课程设计实习报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言课程设计实习报告班级:082093姓名:胡赓学号:20091004134指导老师:余林琛2010-12-30题目一、题目描述:【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。【提示】两个相对较大的数肯定是不能够用LONGINT类型存储的,因为LONG型数据的数据范围也并不是很大,于是就需要采用其他的存储结构。这里推荐用数组存储一个大数,数组的初始空间可以定义到如200或300个单元,每个单元存储一位数据,形如下图:25596207.。。。。这样理论上,比如数组定义为200,就可以存储200个数字的整数,应该是满足足够大的条件了。而结果的存储也需要考虑空间的问题,所以需要一个更大的数组。在解决了存储问题后,我们需要来实现乘法运送的过程,也就是说你必须要把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过程。设计思路:乘法计算的算法,从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果,之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加。通过调用函数得出最后结果。流程图:运行效果截图:输入两个大数作为字符串开始(调用大数相乘函数multiply(int*a,int*b,int*c))进行大数相乘运算运用链表(调用位函数GetDigits(int*a,char*s))用字符表示第一位乘数与被乘数的结果保存在链表中,之后把存储结果的头部后移一位、也就是从链表的第二加起,当第二位乘数与被乘数结果加到第二之后的各个项内。输出计算结果结束附源程序如下:#includestdio.h#includestring.h#includestdlib.h#defineN100intGetDigits(int*a,char*s);intmultiply(int*a,int*b,int*c);main(){chars1[N],s2[N];inti,j,a[N],b[N],c[N*2];printf(\n请输入数字a:);scanf(%s,s1);printf(\n请输入数字b:);scanf(%s,s2);GetDigits(a,s1);GetDigits(b,s2);multiply(a,b,c);j=N*2-1;while(c[j]==0)j--;printf(\n%s*%s=,s1,s2);for(i=j;i=0;i--)printf(%d,c[i]);}intGetDigits(int*a,char*s){inti;chardigit;intlen=strlen(s);for(i=0;iN;i++)*(a+i)=0;for(i=0;ilen;i++){digit=*(s+i);*(a+len-1-i)=digit-'0';}}intmultiply(int*a,int*b,int*c){inti,j;for(i=0;iN*2;i++)*(c+i)=0;for(i=0;iN;i++)for(j=0;jN;j++)*(c+i+j)+=*(a+i)**(b+j);for(i=0;iN*2-1;i++){*(c+i+1)+=*(c+i)/10;*(c+i)=*(c+i)%10;}}题目二、题目描述:1题目要求设计职工信息管理系统,要求职工心想包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存)(3)职工信息浏览功能(4)职工信息查询功能,查询方式可按学历查询或按职工号查询(5)职工信息删除修改功能(可选项)根据题目要求,要求对职工信息进行输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、浏览、插入、修改等操作;另外还应提供键盘式选择菜单实现功能选择。设计思路及程序代码:根据上面的需求分析,可以将这个系统设计分为以下模块:数据添加、数据查找、数据修改、数据删除、数据输出。主函数主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。[程序]:/*****************主函数**********************/main(){menu();}/*****************menu函数********************/voidmenu(){intn,w1;/*变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围*/do{puts(\t\t*****************menu****************\n\n);puts(\t\t\t\t1.Enternewdata);puts(\t\t\t\t2.Browseall);puts(\t\t\t\t3.Search);puts(\t\t\t\t4.add);puts(\t\t\t\t5.Exit);puts(\n\n\t\t***********************************\n);printf(Choiceyournumber(1-5):[]\b\b);scanf(%d,&n);if(n1||n5)/*对选择的数字作出判断,是否在菜单功能数字范围内*/{w1=1;getchar();}elsew1=0;}while(w1==1);switch(n)/*根据输入的数字,进入到相应的操作模块中*/{case1:enter();break;/*输入模块*/case2:browse();break;/*浏览模块*/case3:search();break;/*查找模块,其中包括按不同类别进行查找的多个子模块*/case4:add();break;/*插入模块*/case5:exit(0);/*退出*/}}注:menu函数能提供菜单方式选择功能,可以根据用户需要进入到所想要的操作模块中,此外把menu函数独立出来,可以方便随时对它进行调用,容易返回到系统界面。用结构体来存放职工信息:/********************结构体*******************/structworker{charnumber[11];charname[20];charsex[20];charadress[20];charxueli[20];chartelephone[20];charage[20];charsalary[20];}wor[N];/*wor[N]中每个数组元素对应一个职工*/其中可以根据宏定义#defineN随时对N的值进行调整,扩大信息的储存量。输入模块[程序]:/********************输入模块*******************/voidenter()/*输入函数*/{inti,n;printf(Howmanyworkers(0-%d):,N-1);scanf(%d,&n);/*输入记录的个数,赋值给n*/printf(\nEnterdatanow\n\n);for(i=0;in;i++)/*通过for循环语句依次输入个职工信息数据*/{printf(\nInput%dthworkerrecord.\n,i+1);input(i);/*调用单个输入函数*/}if(i!=0)save(n);/*调用保存函数*/printf_back();/*一个任务结束时让用户选择还是浏览还是返回*/}浏览模块[程序]:/****************浏览(全部)模块***************/browse()/*浏览(全部模块)*/{inti,j,n;n=load();/*调用加载函数,并计算可以记录的个数*/printf_face();/*调出显示数据结构项目函数*/for(i=0;in;i++)/*for循环语句用以分屏显示*/{if((i!=0)&&(i%10==0))/*判断i值能否整除10,每10行一屏显示*/{printf(\n\nPassanykeytocontinue...);getchar();puts(\n\n);}printf_one(i);/*调用显示一个记录的函数*/}printf(\tThereare%drecord.\n,n);/*提示用户储存信息数量*/printf(\nPassanykeytoback...);getch();/*按任意键*/menu();/*返回主菜单*/}按任意键显示下一屏按任意键返回主菜单查找模块search()/*查找模块*/{intc,w1;do/*do-while循环语句用来判断用户的选择是否在程序规定之内*/{puts(\nsearchby=\n\n1).number2}.xueli3).cancelandback);printf(Whichyouneeded?:[]\b\b);scanf(%d,&c);if(c3||c1)/*对选择的数字作出判断*/{puts(\nchoiceerror!pleaseagain!);getchar();}}while(c3||c1);{switch(c)/*switch语句提供按不同类别进行查找功能*/{case1:search1();break;/*按职工号进行查找*/case2:search2();break;/*按姓名进行查找*/case3:menu();break;/*返回主菜单*/}}}错误!未找到引用源。/***************按职工号查找模块***************/[流程图]:search1(){inti,n,k,w1=1,w2,w3,w4;structworkers;/*定义结构体变量s,用以储存输入的number的值,便于进行比较*/n=load();/*加载将要记录的个数*/do/*该do-while循环语句判断是否继续执行该函数*/{do/*该do-while循环语句判断是否找到要查找的对象*/{按职工号查找模块用户作出选择,输入一整型数值k=-1;printf(\n\nEnternumberthatyouwanttosearch!number:);scanf(%s,s.number);printf_face();/*调出显示数据结构项目函数*/for(i=0;in;i++)/*for循环语句用来判断原数据信息中是否有与输入职工号相同的职工号*/if(strcmp(s.number,wor[i].number)==0)/*原数据信息中找到与输入职工号相同的职工号*/{k=i;printf_one(k);break;}if(k==-1)/*原数据信息中没有找到与输入职工号相同的职工号*/{printf(\n\nNoexit!please);printf(\n\nAreyouagain?\n\t1).again2).Noandback[]\b\b);scanf(%d,&w1);if(w1==2)menu();/*返回主菜单*/}}while(k==-1&&w1==1);/*在没有找到且想再次查找的情况下继续进行循环*/w4=0;w3=0;if(k!=-1)/*在查找到的情况下*/{printf(\n\nWhatdoyouwanttodo?\n\t1).Searchanother2).Modify3).Backmenu[]\b\b);scanf(%d,&w2);switch(w2){case1:search1();break;/*继续按照职工号查找其他对象*/case2:w3=modify_data(k,n);break;/*对查找到的对象进行修改*/case3:menu();break;/*返回主菜单*/}}}while(w2==1);menu();/*返回主菜单*/}错误!未找到引用源。/***************按姓名查找模块*****

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功