长整数四则运算数据结构专业课程设计Word格式.docx
- 文档编号:22527083
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:14
- 大小:19.21KB
长整数四则运算数据结构专业课程设计Word格式.docx
《长整数四则运算数据结构专业课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《长整数四则运算数据结构专业课程设计Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
操作结果:
结构一个位数是digit4*4长整数。
pass(&
a,&
b,&
c)
初始条件:
a,b,c全部已存在
c等于a和b和。
nep(&
a)
a已存在。
a变为输入参数相反数。
printlong(&
按四位一组,分隔符为"
"
格式,在屏幕上输出a。
ston(&
S,&
把字符串形式长数字赋给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);
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);
printf("
***********************************************\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();
break;
case3:
subtract();
case4:
multiply();
case5:
division();
case6:
textcolor(BLUE);
\n------------------------------------------------------------\n"
Thankscw'
swork!
!
default:
textcolor(4);
Sorrypleaseinputrightnumber!
}
}
四、调试分析
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"
参考资料
作者:
严蔚敏
参考数据名称:
数据结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整数 四则运算 数据结构 专业课程 设计