数据结构课程设计长整数四则运算汇总Word格式文档下载.docx

上传人:b****3 文档编号:16912706 上传时间:2022-11-27 格式:DOCX 页数:11 大小:19.15KB
下载 相关 举报
数据结构课程设计长整数四则运算汇总Word格式文档下载.docx_第1页
第1页 / 共11页
数据结构课程设计长整数四则运算汇总Word格式文档下载.docx_第2页
第2页 / 共11页
数据结构课程设计长整数四则运算汇总Word格式文档下载.docx_第3页
第3页 / 共11页
数据结构课程设计长整数四则运算汇总Word格式文档下载.docx_第4页
第4页 / 共11页
数据结构课程设计长整数四则运算汇总Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构课程设计长整数四则运算汇总Word格式文档下载.docx

《数据结构课程设计长整数四则运算汇总Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计长整数四则运算汇总Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构课程设计长整数四则运算汇总Word格式文档下载.docx

c)

初始条件:

a,b,c都已存在

操作结果:

c等于a和b的和。

nep(&

a)

a已存在。

a变为输入参数的相反数。

printlong(&

a)

初始条件:

按四位一组,分隔符为"

"

的格式,在屏幕上输出a。

ston(&

S,&

a)初始条件:

把字符串形式的长数字赋给a。

}ADTOrderedList

2.本程序包含两个模块:

1)主程序模块:

Voidmain(){

选择操作:

1:

帮助。

2:

加法。

3:

减法。

4:

乘法。

5:

除法。

6:

退出。

打印结果;

}

三、详细设计

1.元素类型,结点类型,指针类型

#defineNULL0

#include<

stdio.h>

stdlib.h>

conio.h>

typedefstructlongnode{/*每个节点的结构*/

intnum;

/*数字*/

structlongnode*low1;

/*指向低一位节点*/

structlongnode*high1;

/*指向高一位节点*/

}longnode;

typedefstructxlong{/*每个长整数的结构*/

longnode*High;

/*每个长整数的最高节点*/

longnode*Low;

/*每个长整数的最低节点*/

intdigit4;

/*每个长整数的总位数(不包括高位的0)/4*/

}*xlong;

intinit(xlong*a,intdigit4){

intI;

/*.init.*/

longnode*j;

(*a)=(xlong)malloc(sizeof(structxlong));

/*为a的头结构申请空间,并赋初始值*/

(*a)>

High=NULL;

(*a)->

Low=NULL;

(*a)->

digit4=0;

for(i=0;

i<

digit4;

i++){/*申请digit4个节点,初始化*/

j=(longnode*)malloc(sizeof(longnode));

j->

num=0;

high1=NULL;

j->

low1=(*a)->

High;

if((*a)->

High)(*a)->

High->

high1=j;

else

Low=j;

High=j;

digit4++;

}

intpass(xlonga,xlongb,xlongc){

intcf=0;

/*两个数字的相加*/

longnode*a1=a->

Low,*b1=b->

Low,*c1=c->

Low;

while(a1){c1->

num=a1->

num+b1->

num+cf;

if(c1->

num>

9999){

cf=1;

/*如果产生进位(借位)*/

c1->

num-=10000;

}else{cf=0;

}

a1=a1->

high1;

b1=b1->

c1=c1->

returncf;

/*最高位的进位(借位)*/

intpassa(xlonga,xlongb,xlongc){

/*两个数字的相减*/

num-b1->

num-cf;

9999){cf=1;

/*如果产生进位(借位)*/

/*最高位的进位(借位)*/

intpassb(xlonga,xlongb,xlongc){

intcf=0;

/*两个数字的相乘*/

longnode

*a1=a->

num*b1->

num*cf;

9999){cf=1;

/*如果产生进位(借位)*/

c1->

num=10000;

/*最高位的进位(借位)*/

intpassc(xlonga,xlongb,xlongc){

intcf=0;

/*两个数字的相除*/

while(a1){c1->

num/b1->

num/cf;

}else{cf=0;

}}

}

returncf;

nep(xlonga){/*求a的相反数*/

intcf=1;

/*因为求相反数是取反加一,所以这里cf=1;

*/

while(a1)

{a1->

num=9999-(a1->

num)+cf;

if(a1->

9999){a1->

else{cf=0;

}a1=a1->

return;

printlong(xlonga){

longnode*i=a->

/*打印长整数a*/

if(i->

=5000){

printf("

-"

);

/*最高位(bit)=1表示负数,即用补码表示*/

nep(a);

/*求反打印其绝对值*/

}while(i&

&

i->

num==0)i=i->

low1;

/*跳过最位的0*/

if(i){printf("

%d"

i->

num);

i=i->

if(i)printf(“,”);

}elseprintf(“0”);

/*a=0打0*/

while(i){printf("

%04d"

low1)

i=i->

intston(charin[],xlongout){/*把字符串转化为数字赋给a*/

intbit,i,jishu=1,num0=0;

longnode*j=out->

i=strlen(in)-1;

while(i>

=0&

j){/*循环每一个字节*/

bit=in[i]-‘0’;

/*把字符形式的值赋给整数形式的bit*/

if(bit>

bit<

=9){num0+=jishu*bit;

/*加进num0*/

jishu*=10;

/*基数自乘10*/}

if(jishu>

1&

(jishu>

=10000||bit<

0||bit>

9)){/*数字以外的字符*/

j->

num=num0;

j=j->

/*存入一个节点*/

num0=0;

jishu=1;

i--;

if(num0)

{j->

}/*把最后一个没存入节点的数存入节点*/

for(;

j;

high1)j->

/*最位不足补0*/

if(out->

=5000)

return1;

/*如果最高位是1,返回1表示出*/

if(in[0]=='

-'

)nep(out);

/*如果最后一个字符是'

-'

则取反*/return0;

intadd(){char*a1,*b1;

/*加*/

intdigit4,cf=0;

xlonga,b,c;

do{printf("

Howmuchdigitsdoyouneed?

"

/*输入最多位数*/

scanf("

&

digit4);

}while(digit4<

=0);

a1=(char*)malloc(digit4+1);

b1=(char*)malloc(digit4+1);

digit4=digit4/4+1;

init(&

a,digit4);

init(&

b,digit4);

c,digit4);

/*初始化a,b,c*/

do{cf=0;

Enter2number:

\n"

%s"

a1);

printf("

+\n"

b1);

cf|=ston(a1,a);

cf|=ston(b1,b);

}while(cf);

/*输入被加数和加数,如果转换出错,则重输*/

pass(a,b,c);

/*执行相加运算*/

printlong(a);

+"

/*打印结果*/

printlong(b);

="

printlong(c);

bioskey(0);

intsubtract()/*减*/

{

char*a1,*b1;

xlonga,b,c;

do{printf("

/*输入最多位*/

}while(digit4<

Enter2number:

/*输入被减数和减数,如果转换出错,则重输*/

passa(a,b,c);

/*执行相减运算*/

printlong(b);

intmultiply()/*乘*/

{char*a1,*b1;

/*输入最多位数*/

scanf("

a1=(char*)malloc(digit4+1);

digit4=digit4/4+1;

do{cf=0;

*\n"

cf|=ston(b1,b);

}while(cf);

/*输入被乘数和乘数,如果转换出错,则重输*/

passb(a,b,c);

/*执行相乘运算*/

printf(“*”);

/*打印结果*/

printlong(c);

intdivision()/*除*/

/*输入最多位数*/

/\n"

cf|=ston(a1,a);

/*输入被除数和除数,如果转换出错,则重输*/

passc(a,b,c);

/*执行相除运算*/

/"

2.主函数代码

voidmain()/*main*/

{intc;

clrscr();

textcolor(BLUE);

***********************************************\n"

*********WelcometoThunderstudio!

************\n"

*********本程序实现长整数四则运算**************\n"

one:

1:

------HELP\n"

2:

------ADD\n"

3:

------SUBTRACT\n"

4:

------MULTIPLY\n"

5:

------DiVISION\n"

6:

------EXIT\n"

;

){c=getch();

switch(atoi(&

c)){

case1:

gotoone;

break;

case2:

add();

case3:

subtract();

case4:

multiply();

case5:

division();

case6:

printf("

\n------------------------------------------------------------\n"

Thankscw'

swork!

!

default:

textcolor(4);

Sorrypleaseinputrightnumber!

break;

}

四、调试分析

1.由于对基本要求看得不仔细,一开始使用的形式是数组,并非链表,导致空间开销大.

2.本程序的模块划分比较合理,且尽可能将指针的操作封装在结构体中,对于一个长整数只需一个指针便可访问其所有信息,所以数据结构清晰.

3.算法的时空分析1)本程序的计算量不是很大,所以时间复杂度极低.

2)每个长整数的位数可能不同,考虑到根据位数调整空间比较麻烦,而且容易出错,所以对每个长整数都是用同样大小的空间储存的.

3)由于计算完毕,显示结果后程序即结束,所以无须释放空间.

五、用户手册

1.本程序的运行环境为DOS操作系统,执行文件为:

j01242_5.EXE。

2.进入程序有菜单提示,选择需要的操作进入程序。

3.进入程序后屏幕提示“Howmuchdigitsdoyouneed?

”用户输入两个数中最多的位数.如0则输1,12则输入2,依此类推.负号不必考虑在内.

4.接着屏幕提示“Enter2number:

”,用户应输入一个数,按回车,再输入一个数,再按回车.

5.接着屏幕即打印出计算结果.

六、测试结果

首先进入菜单选择:

如键入2<

回车>

(1)键入1<

0<

输出“0”

(2)键入8<

-2345,6789<

-7654,3211<

输出“-1,000,000”

(3)键入13<

-9999,9999<

1,0000,0000,0000<

输出“9999,0000,0001”

(4)键入9<

1,0001,0001<

-1,0001,0001<

输出“0”

(5)键入9<

1"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1