完整word版长整数四则运算实验报告文档格式.docx

上传人:b****5 文档编号:19978546 上传时间:2023-01-13 格式:DOCX 页数:9 大小:30.72KB
下载 相关 举报
完整word版长整数四则运算实验报告文档格式.docx_第1页
第1页 / 共9页
完整word版长整数四则运算实验报告文档格式.docx_第2页
第2页 / 共9页
完整word版长整数四则运算实验报告文档格式.docx_第3页
第3页 / 共9页
完整word版长整数四则运算实验报告文档格式.docx_第4页
第4页 / 共9页
完整word版长整数四则运算实验报告文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

完整word版长整数四则运算实验报告文档格式.docx

《完整word版长整数四则运算实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版长整数四则运算实验报告文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

完整word版长整数四则运算实验报告文档格式.docx

(默认较长的数作为被加数、被减数)

三、详细设计

typedefstructDoubleNode//定义链表元素

voidInitNode(DLNode**head)//初始化链表

intInsertNode(DLNode*head,intn,DataTypex)//向链表第N个位置插入元素X

intdigit(intn)//判断整数N有几位

voidPrintNode(DLNode*head)//打印链表

voidDestroyNode(DLNode**head)//销毁链表

voidadd(DLNode*h1,DLNode*h2)//两数相加

voidjian(DLNode*h1,DLNode*h2)//两数相减

intmain()//入口函数

四、调试分析

由于在程序设计时,对于指针的不了解,编程时使用双重指针,无形中给自己增添了更多麻烦。

老师在检查的过程中指出并教导了这一点。

五、测试结果

1、输入0和0做加法运算,输出“0”,结果如下图:

2、输入2345,6789和-7654,3211做减法运算,输出“1,0000,0000”,结果如下图:

3、输入1,0000,0000,0000和9999,9999做减法运算,输出“9999,0000,0001”,结果如下图:

4、输入1,0001,0001和1,0001,0001做减法运算,输出“0”,结果如下图:

5、输入1,1111和1,1111做减法运算,输出“0”结果如下图:

六、心得体会

本次实验主要是针对双向链表的练习,通过这次试验我们大家对于双向循环链表有了更深刻的记忆。

另在讲解的过程中,老师指出了我们在编程中存在的不足点,我们对于指针跟双重指针有了更清晰的认识。

在与同学的交流中,也更清楚的认清了自己的不足,以后会更加努力的。

七、附录

#include<

stdio.h>

string.h>

stdlib.h>

#include<

math.h>

#defineN100

typedefintDataType;

typedefstructDoubleNode//定义链表元素

{DataTypedata;

structDoubleNode*prior;

structDoubleNode*next;

}DLNode;

voidInitNode(DLNode**head)//初始化链表

{

if((*head=(DLNode*)malloc(sizeof(DLNode)))==NULL)

exit

(1);

(*head)->

prior=*head;

next=*head;

}

intInsertNode(DLNode*head,intn,DataTypex)//向链表第N个位置插入元素X

{DLNode*p,*nt;

inti=0;

p=head->

next;

while(p!

=head&

&

i<

n)

{

p=p->

i++;

}

if(i!

=n)

printf("

插入位置错误\n"

);

return0;

if((nt=(DLNode*)malloc(sizeof(DLNode)))==NULL)

exit

(1);

nt->

data=x;

nt->

prior=p->

prior;

prior->

next=nt;

next=p;

p->

prior=nt;

return1;

intdigit(intn)//判断整数N有几位

inti;

for(i=1;

;

n/=10,i++)

if(n/10==0)

returni;

}

voidPrintNode(DLNode*head)//打印链表

{DLNode*p=head->

while(p->

data==0)//去掉前面的一串0

{p=p->

if(p==head)

{printf("

0\n"

return;

%d"

p->

data);

//最前面的一个数进行特殊处理,不用补零

p=p->

while(p!

=head)//打印后面的数字

"

if(p->

data==0)

0000"

continue;

for(i=0;

4-digit(p->

i++)//补零

0"

printf("

\n"

voidDestroyNode(DLNode**head)

{DLNode*p,*p1;

p=(*head)->

=*head)

{p1=p;

free(p1);

free(p);

head=NULL;

{DLNode*p1=h1->

prior,*p2=h2->

while(p1!

=h1&

p2!

=h2)//每个链表元素相加

{p1->

data+=p2->

data;

p1=p1->

p2=p2->

p1=h1->

while(p1!

=h1->

next)//处理链表元素

{if(p1->

data>

=10000)

{p1->

data+=p1->

data/10000;

p1->

data%=10000;

}if(p1->

data<

0)//处理负数

{if(h1->

next!

=0)

{p1->

data-=1;

p1->

data+=10000;

}p1=p1->

if(h1->

next->

=10000)//处理最前面的数

{InsertNode(h1,0,h1->

data/10000);

h1->

if(h1->

=-10000)

h1->

data%=-10000;

PrintNode(h1);

=h2)//每个链表元素相减

data-=p2->

p2=p2->

p1=h1->

if(p1->

data/-10000);

PrintNode(h1);

DLNode*head1,*head2;

InitNode(&

head1);

head2);

chardata1[N],data2[N];

chard1[10],d2[10];

inti,j,k;

intxun;

while

(1)

输入数据:

scanf("

%s%s"

data1,data2);

InitNode(&

i=0;

k=0;

while(data1[i]!

='

'

)//将数1用链表储存

for(j=0;

j<

10;

j++)

d1[j]=0;

j=0;

while(data1[i]!

data1[i]!

'

d1[j++]=data1[i++];

if(data1[i]=='

if(data1[0]=='

-'

)//处理正负数

j=-(int)fabs(atoi(d1));

//将字符串转换成整数

elsej=atoi(d1);

InsertNode(head1,k++,j);

k=0;

while(data2[i]!

)//将数2用链表储存

d2[j]=0;

j=0;

data2[i]!

d2[j++]=data2[i++];

if(data2[i]=='

)i++;

if(data2[0]=='

)//处理正负数

j=-(int)fabs(atoi(d2));

elsej=atoi(d2);

InsertNode(head2,k++,j);

选择加减法:

1—加法,2-减法\n"

scanf("

&

xun);

switch(xun)

case1:

if(strlen(data1)>

strlen(data2))//较长的数作为被加数

add(head1,head2);

elseadd(head2,head1);

break;

case2:

strlen(data2))//较长的数作为被减数

jian(head1,head2);

elsejian(head2,head1);

default:

break;

}

DestroyNode(&

return0;

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

当前位置:首页 > 工作范文

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

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