




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沈阳航空航天大学设计用纸目录一、需求分析1二、设计分析2三、主要界面截图10四、技术要点11五、个人总结12六、参考文献13七、源程序1418一、需求分析该课程设计的题目是一个典型的超长整数处理问题。根据程序设计的要求,需要用链表解决一个超长整数奇偶数位相加问题,一方面使我们对链表的运用有了更深刻的认识,另一方面使我们理解了超长整数在计算机中的运算过程。1.问题要求分析采用链表来表示一个带符号的超长整数(20位以上)。并且进行如下处理。(1)将超长整数s上相邻的奇数位和偶数位的数相加,兵存放在奇数位上,构成一个新数(不考虑进位)。显示并保存在文件file31.txt中。(2)超长整数要用字符串
2、实现输入,按2位截取,转成整型存放在链表中,每个节点存两位,然后进行处理。2.主要功能分析:(1)数据输入:允许用户输入多组超长整数,每输入一个数都会将该数存入文件当中。(2)数据计算:对输入的数据,首先显示出来,允许用户去选择要计算哪个数据,然后按照题目的要求将结果计算出来并保存到文件当中。二、设计分析主要有5个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:(1)菜单模块void menu()printf("*n");printf("* *n");printf("* 菜单 *n");printf(&quo
3、t;* 1.输入超长整数 *n");printf("* 2.计算 *n");printf("* 0.退出 *n");printf("* *n");printf("*n");函数功能:在程序运行之前显示菜单,供用户进行选择。(2)字符串转换模块void read(int len)int i,k,count=0;char ch;struct unit *p;for(i=0,k=len-1;i<k;i+,k-)ch=numi;numi=numk;numk=ch;head=(struct unit*)mal
4、loc(sizeof(struct unit);head->next=NULL;for(i=1;i<=len;i+)if(count=0)p=(struct unit*)malloc(sizeof(struct unit);p->next=head->next;head->next=p;if(i%2=0)p->even=numi-1-'0'count+;if(count=2)count=0;elsep->odd=numi-1-'0'count+;函数功能:由于输入的数据用字符串进行存储的,需要将字符串转化成整型并且用链表
5、将其存储,该函数的功能就是将输入的字符串存储到一个链表中。(3)输入数据模块void input()FILE *file=fopen("file32.txt","a");if(file=NULL)printf("文件打开失败!n");exit(0);scanf("%s",num);fprintf(file,"%sn",num);printf("写入的数据为:%sn",num);fclose(file);函数功能:该函数功能是进行数据的输入,并显示到屏幕上,存储到文件当中。(4
6、)显示数据模块int show()int i; FILE *file=fopen("file31.txt","r");if(file=NULL)printf("打开文件失败!n");exit(0);for(i=1;!feof(file);i+)fscanf(file,"%sn",num);printf("%d.%sn",i,num);fclose(file);return i;函数功能:该函数主要是用于数据计算时进行数据选择,当进行数据运算时,需要用户选择进行哪个数据的计算,这之前需要将数据显示
7、在屏幕上。(5)数据计算模块void calculate()int i,k,count,len,temp,j;struct unit *p;char ch1,ch2;count=show();memset(num,0,sizeof(num); FILE *file=fopen("file31.txt","r");if(file=NULL)printf("打开文件失败!n");exit(0);printf("请选择要计算的数据的编号:");scanf("%d",&k);if(k>co
8、unt)printf("查无此数据!n");return;for(i=1;i!=(k+1);i+)fscanf(file,"%sn",num);fclose(file);file=fopen("file32.txt","a");if(file=NULL)printf("打开文件失败!n");exit(0);len=strlen(num);read(len);p=head->next;j=0;if(len%2=1)printf("%d",p->odd);ch1=p-
9、>odd+'0'tj=ch1;j+;p=p->next;while(p!=NULL)temp=p->even+p->odd;if(temp>=10)temp=temp%10;p->odd=temp;printf("%d%d",p->even,p->odd);ch1=p->even;ch2=p->odd;tj=ch1;tj+1=ch2;j+=2;p=p->next;tj='0'printf("n");fprintf(file,"%sn",t
10、);fclose(file);函数功能:该函数是本程序的核心,主要功能是进行数据的运算。1、程序总体结构图开始显示菜单输入数据计算保存数据退出图1程序总体结构图2、主要功能模块框图(1)输入数据函数input ()开始打开文件输入数据num计算数据num长度将数据num存入文件中结束图2 输入数据函数(2)字符串转换函数read ()开始将字符串反转i=0Ai<=len转换字符为整型,并传入链表中i+Y结束NA图3 字符串转换函数(3)计算数据函数calculate ()开始显示数据选择数据计算并保存数据结束图4 计算数据函数三、主要界面截图图5 程序主界面图6 输入数据图7 计算数据四
11、、技术要点1、结构体的应用定义了结构体用来存储超长整数的奇数位和偶数位,这样方便超长整数的计算并且符合题目的要求。具体的定义如下:struct unitint odd;/用于存储奇数位int even;/用于存储偶数位struct unit *next;所定义的结构体主要用于定义链表。2、文件操作包括了文件的写入和读取两个方面。文件的写入操作,用于保存录入的测试数据,也用于保存计算结果。题目只要求将计算结果存储到文件里,为了方便测试,这里用了两个文件,一个用于存储测试用例,另一个用于存储计算结果。例如如下程序段用于显示测试数据:FILE *file=fopen("file32.txt
12、","r");if(file=NULL)printf("打开文件失败!n");exit(0);for(i=1;!feof(file);i+)fscanf(file,"%sn",num);printf("%d.%sn",i,num);fclose(file);五、个人总结通过这次课程设计,收获很多。首先,这次课程设计让我更加深入的理解了C语言的精髓。之前学习C语言只是学习了一些理论知识,而真正的运用很少。在这次课程设计中,运用到了链表和文件,由最初的一知半解,到后来的不断学习,再到最后的完全理解,在这之中不
13、仅让我学到了知识,同时让我感受到了学习的乐趣,养成了认真的习惯。然后,通过这次课设也让我深刻的认识到,当代的大学生不仅仅要学习自己的专业技能,还需要更加多的了解其他领域的知识。这是一个需要全方位人才的时代,所以我觉得这样的课程设计对于我们非计算机专业的人来说还是有很重要的意义的。关于这次的程序,有优点也有缺憾。优点就是思路清晰,模块层次分明,很容易理解。但由于时间和个人能力有限,缺憾也很突出,程序中的功能模块不是很多,只是实现了题目要求的基本功能,另外,超长整数的长度也不是无限长的,也是有上限的。因此,个人认为该程序还有待进一步的开发,可以实现更多的功能。六、参考文献1 谭浩强C程序设计北京:
14、清华大学出版社,20052 王敬华. C语言程序设计教程. 北京:清华大学出版社,20103 严蔚敏. 数据结构(C语言版). 北京:清华大学出版社,20074 顾兵. C语言程序设计. 北京:华中科技大学出版社,2006七、源程序#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define Max 1000000000char numMax;struct unitint odd;/用于存储奇位数int even;/用于存储偶位数struct unit
15、*next;struct unit *head;/存储数据的表头void menu()/主菜单函数printf("*n");printf("* *n");printf("* 菜单 *n");printf("* 1.输入超长整数 *n");printf("* 2.计算 *n");printf("* 0.退出 *n");printf("* *n");printf("*n");void read(int len)/字符串转换函数int i,k
16、,count=0;/count用于记录奇偶位char ch;struct unit *p;for(i=0,k=len-1;i<k;i+,k-)/将字符串翻转/(因为输入数据时是高位在前,为了方便下面的工作,将字符串翻转,是低位在前)ch=numi;numi=numk;numk=ch;head=(struct unit*)malloc(sizeof(struct unit);head->next=NULL;for(i=1;i<=len;i+)/每两位存储到一个节点中if(count=0)/当count为0时,分配空间,创建一个新的节点p=(struct unit*)malloc
17、(sizeof(struct unit);p->next=head->next;head->next=p;if(i%2=0)/当i%2=0时,保存偶数位到节点中p->even=numi-1-'0'count+;if(count=2)count=0;else/当i%2=1时,保存奇数位到节点中p->odd=numi-1-'0'count+;void input()/输入数据函数FILE *file=fopen("file32.txt","a");/打开文件file32.txtif(file=NU
18、LL)printf("文件打开失败!n");exit(0);scanf("%s",num);fprintf(file,"%sn",num);/将测试数据存入到文件当中printf("写入的数据为:%sn",num);fclose(file);int show()/显示测试数据int i; FILE *file=fopen("file32.txt","r");if(file=NULL)printf("打开文件失败!n");exit(0);for(i=1;!f
19、eof(file);i+)fscanf(file,"%sn",num);printf("%d.%sn",i,num);/读取数据显示到屏幕上fclose(file);return i;void calculate()/计算int i,k,count,len,temp;struct unit *p;count=show();/显示测试数据,并返回测试数据的个数memset(num,0,sizeof(num); FILE *file=fopen("file32.txt","r");if(file=NULL)printf
20、("打开文件失败!n");exit(0);printf("请选择要计算的数据的编号:");scanf("%d",&k);/选择要计算的数据的编号if(k>count)printf("查无此数据!n");return;for(i=1;i!=(k+1);i+)/从文件中查找到要计算的数据并保存到num中fscanf(file,"%sn",num);fclose(file);file=fopen("file31.txt","a");/打开文件file31.txt,用于存储计算结果if(file=NULL)printf("打开文件失败!n");exit(0);len=strlen(num);read(len);/将字符串存到链表中p=head->next;printf("");if(len%2=1)/当数据长度为奇数时,第一个节点不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论