任意长整数加法运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程名称: 《数据结构》课程设计

课程设计题目: 任意长整数加法运算

姓名: XXX

专业: 计算机科技2班年级: 13级学号: E11314XXX

指导老师:XXX

2015年9月17

目录

1.课程设计的目的 (1)

2.需求分析 (1)

3任意长整数加法的设计 (2)

3.1概要设计 (2)

3.2详细设计 (3)

3.3调试分析 (9)

3.4用户手册 (10)

3.5测试结果 (10)

4总结 (11)

5、程序清单:(见附录) (11)

7、程序运行结果 (11)

附录1 (13)

1.课程设计的目的

(1) 熟练使用 C 语言编写程序,解决实际问题;

(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.需求分析

(1)设计一个实现任意长的整数加法运算演示程序。

(2)利用双向链表实现长整数的存储,每个结点含一个整型变量。

(3)输入输出形式按中国对长整数的表示习惯,每四位一组,用逗号隔开。

3任意长整数加法的设计

3.1概要设计

(1)主界面设计

图 1

图2

主界面,如图1所示,包含四个菜单项,输入数字选择对应菜单,进入子项。其中选项2包含子菜单,如图2所示。

(2)存储结构

本系统用结构体linlist存储数据,该结构体由数据data、下一节点指针next、上一节点指针prior组成。data是short型变量,存放每个结点的数据。本系统中data 一般不超过10000。用结构体linlist构建链表,头结点的data域符号代表长整数的符号,绝对值表示链表结点数目。

(3)系统功能设计

本系统主菜单包含四个选项,功能描述如下:

菜单1:输入两个任意长的整数。可按照标准四位一组中间用逗号隔开输入,也可直接输入,输入的数字保存在文件中,结束后自动返回主菜单。

菜单2:实现两个任意长整数的加法。可直接输入两个数也可读入一个文件,获取两个加数,相加结果可保存在文件中,也可不保存,结束后返回菜单2。

菜单3:输入文件名称,查询文件中的数字。文件中可能保存的是两个加数,也可能保存的是某次两个任意长整数相加的结果。

菜单4:退出系统。

3.2详细设计

(1)系统子程序及功能设计

本系统设置16个子程序,各程序的函数名及功能说明如下:

void append(LinList &L,Elemtype d);//以L为头结点,将d加入到链表L void Delete(LinList &L);//删除结点L

void display(LinList L);//按照输出标准,输出任意长整数

void add(LinList &L1,LinList L2);//将L1与L2相加

short StrToPosiNum(char * s);//将s转化为一个小于32767的正整数

void input(LinList &L);//输入一个很长的整数到L

void FREE(LinList &L1);//删除以L1为头结点的整个链表

void save(LinList L1,LinList L2);//把L1,L2写到文件

void load(LinList &L1,LinList &L2);//读文件到L1,L2

void inputdata();//调用input函数,实现两个任意长整数的输入

void welcome();//输出欢迎界面

void fileadd();//读入文件,调用add函数,实现两个任意长整数的相加void directadd();//直接输入数字相加

void calculayteadd();//实现两个任意长整数的相加

int maincourse();//菜单选择

void search();//查询文件中的数字

(2)数据类型定义

typedef struct linlist{

Elemtype data;

linlist * next;

linlist * prior;

} * LinList;

(3)系统主要子程序详细设计

本系统的各个函数之间的关系如下图:

图3

1)菜单1代码

void inputdata(){//调用input函数,实现两个任意长整数的输入system("cls");

LinList L1=NULL,L2=NULL;

printf("\t\t\t ------------------\n\t\t\t\t 输入数据\n\t\t\t ------------------\n");

printf("输入第一个长整数:");

input(L1); //调用input函数

printf("输入第二个长整数:");

input(L2);

printf("\n数据将存放于文件中...");

save(L1,L2); //调用save函数,存储L1L2

FREE(L1);

FREE(L2);//释放L1,L2

printf("写入完成!\n");

system("pause");

}

void input(LinList &L){//输入一个很长的整数到L

char s[1000],s2[5]={'0','0','0','0','\0'};

unsigned i=0,j;

int sign=1,num=0,flag=1;

Elemtype data;

while(flag){

flag=0;

s[0]=getchar();

if(s[0]=='-'){//若为负数

sign=-1;

i=i-1;

}

while(i==-1||s[i]!='\n'){//第一个输入负号或者输入数字

i=i+1;

s[i]=getchar();

if(s[i]==',')

i=i-1;

else if((s[i]>'9'||s[i]<'0')&&s[i]!='\n'){

printf("非法输入,请重新输入!\n");

flag=1;

continue;

}

}

}

s[i]=0;

append(L,(int)(sign*ceil((strlen(s))/4.0)));//第一个结点存放链表长度和数据的正负号

j=strlen(s)%4;

i=0;

if(j!=0){

for(;i

相关文档
最新文档