当前位置:文档之家› 长整数运算说明书

长整数运算说明书

长整数运算说明书
长整数运算说明书

摘要

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。而在一般的程序运算中,长整数是无法计算的,因为计算机一次能够运算的位数是有限,一旦整数很长,就需要一个程序来进行多次计算,通过长整数运算这个程序,可一把一个长整数分成多个普通整数来进行计算,使得长整数也可以进行运算。我编写的这个程序就可以进行长整数的加减运算,各个数据也可以是负数。

关键词:长整数;运算;加法;减法

Abstract

Data structure course design, students in the logical characteristics and physical data structure for the representation of the design, selection and application of data structure, algorithm and its realization, deepen the understanding of basic content of courses. At the same time, by the systematic and rigorous training in basic skills program design method and the operation and scientific style of work. But in the general program operation, long integers can not be calculated, because the computer time to operation number is limited, once the integer is long, need a program to calculate several times, operation of this program through the long integer, can put a long integer into a plurality of ordinary integers to calculate, the long integer can be calculated. This program I wrote to long integer addition and subtraction, all data can be negative.

Keywords: long integer; arithmetic; additive; subtraction

目录

1概述 (1)

1.1题目内容 (1)

1.2需求分析 (1)

1.3设计要求 (1)

2概要设计 (3)

2.1设计分析 (3)

2.2功能模块介绍 (3)

2.3函数介绍 (4)

2.4数据结构介绍 (5)

3详细设计 (6)

3.1程序流程介绍 (6)

3.2函数功能介绍 (6)

3.2.1主函数 (6)

3.2.2插入函数 (8)

3.2.3读入数据并插入对应的链表函数 (9)

3.2.4输出函数 (10)

3.2.5加法函数 (10)

3.2.6判断俩正数大小函数 (12)

3.2.7 减法函数 (13)

4调试分析 (15)

4.1使用说明 (15)

4.2测试结果 (15)

5总结 (19)

参考文献 (20)

致谢 (21)

附录 (22)

1概述

1.1题目内容

题目:长整数运算

内容:使用双向循环链表存储长整数,每个结点含一个整型变量,主要功能有:长整数输入(建立双向循环链表)、长整数的加法、长整数的减法及结果的显示输出等。

1.2需求分析

1.本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。

2.本程序中,集合的元素限定为数字字符[…0?~?9?]和字符…,?与…;?,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

3.现实长整数的分组存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。

输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上限,以分号结束长整型数据的输入。

1.3设计要求

该设计要求设计程序,实现两个任意长的整数求和及差的运算问题。通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握线性表上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。

详细要求:

(1)至少要用10组测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;

(2)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;

(3)任何整型变量的范围是-(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,例1,0000,00 00,0000;而输入为1,0001,0001和-1,0001,0000实现加法时,应输出"1";

(4)较高要求:使程序在整型量范围是-(2n-1)~(2n-1)的计算机上都能有效地运行。其中,n是由程序读入的参量。

2概要设计

2.1设计分析

我们首先要考虑的是如何表示长整型数。按照传统习惯要求每4位数形成1组,而一个长整型数可能会有很多组这种4位数,而每节之间是有先后顺序的,因此我们可以考虑用数组和链表来存储数据。(1)再考虑到每个长整型数的长度在输入之间是无法预知的,因此使用链表在存储空间的分配上更方便一些。(2)在输入数据时总是从高位到低位地存储,而计算时总是从低位向高位运算,因此采用双向链表更方便,而为了从头结点方便地转到尾结点可以采用循环链表。总之,为了实现上述功能,应以双向循环链表表示长整数,每个结点含一个整型变量,且仅绝对值不超过9999的整数,整个链表用十进制数表示。

(3)对于每一个长整型数可以设置一个头结点,其中的数据域用来表示该长整型数的正负号及组数,该值的符号则表示该长整型数的符号,该数的绝对值表示该长整型数包含的4位数的组数。第一个存储4位数据组的结点称为首结点,而最后一个4位数据组结点称为尾结点。

为此需要两个结构数据类型:双向循环链表和长整数,两个类型采用相同的结构,只是双向循环链表用来存储数据,长整型用表示数据的运算。

利用双向循环链表来实现对长整数的存储。选择该数据结构来完成长整数的加减运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从左到右,而运算的顺序则是从右到左,这样位了操作方便选择循环链表,在运算过程中有进位和借位的操作,所以最终选择双向循环链表的数据结构。

2.2功能模块介绍

该程序主要由以下几大模块组成:

1.主程序模块:主要实现对个模块的调用和界面的管理,提示用户,帮助用户快速准确的完成运算。

2.双向循环链表处理模块:实现对数据的存储、管理,主要由void ListInitiate、int ListLength等函数组成。

3.长整型数的输入输出模块:主要由void OutputNumber、int InputNumber 等函数组成,实现数据的输入。

4.长整数运算模块:主要由void add、int change 、int change等函数组成。也就是函数void yunsuan(DLNode *head1,DLNode *head2,DLNode

*head3,char ch)实现的是正数,负数,加法,减法。计算式共分为八种运算,在这之前我已经实现了二种运算,那么这个函数就是把这八种运算按照一定的规则转化成已经实现的二种运算来实现完整的加减法运算。

程序功能模块图如图2.1所示。

主程序模块

长整数运算模块长整数输入输出模块

双向循环链表单元模块

图2.1功能模块图

2.3函数介绍

void ListInitiate(DLNode **head)

操作结果:初始化一个头结点为head的双向循环链表。

int ListLength(DLNode *head)

操作结果:计算以head为头结点的链表的长度。

int ListInsert(DLNode *head,int i,int x)

操作结果:将节点数据为x的节点插到第i个位置上去。

int abs(int x)

操作结果:绝对值函数,返回x的绝对值。

int InputNumber(DLNode *head)

操作结果:将从键盘中接收数据并把得到的数据存入以head为头结点的链表中。四位一存,中间以逗号区分,结束符为分号。

void OutputNumber(DLNode *head,int sign)

操作结果:将以head为头结点的链表中的所有数据输出到显示屏上。

void add(DLNode *head1,DLNode *head2,DLNode *head3)

操作结果:实现正数加正数的加法操作。

int change(DLNode *head1,DLNode *head2)

操作结果:判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2。

void minus(DLNode *head1,DLNode *head2,DLNode *head3)

操作结果:计算正数减正数的减法运算。

void main()

操作结果:主函数。调用以上的各个函数来引导用户进行长整数的加法运算,加法运算.。

2.4数据结构介绍

本次课设所使用的数据结构双向循环链表的节点由三个部分组成,第一是数据部分data存储此节点的数据,第二是此节点的前驱指针部分*prior指向此节点的前驱,第三是此节点的后继指针部分*next指向此节点的后继。数据部分我们约定它为整形变量,前驱后继指针均为结构体Node类型。代码如下:typedef struct Node // 双向链表的结构体定义

{ int data;

struct Node *prior;

struct Node *next;

}DLNode;

3详细设计

3.1程序流程介绍

由上面的提到的主程序、长整数运算、长整数输入输出、双向循环链表等几个主要模块,可得到程序运行图如下:

Y N

图3.1主程序流程图

3.2函数功能介绍

3.2.1主函数

主要的作用是为用户做一个提示,如何完成自己想要的运算。同时调用各个函数实现运算。代码如下:

输出结果

两个正数相加

情况判断

输入两位整数

第二个数减第一数

两个负数相加

第一个数减第二个数

数字转化链表

开始

输出转化

结束

void main()

{ int n;

char ch,ch1,m;

while(1)

{ DLNode *a,*b,*c;

ListInitiate(&a);

ListInitiate(&b);

ListInitiate(&c);

printf("\n---------------长整数运算--------------\n\n");

printf("请输入数A(以分号结束): ");

InputNumber(a);

printf("请输入数B(以分号结束): ");

InputNumber(b);

printf("请选择操作符:<+,->: ");

do

{ scanf("%s",&ch1);

if(ch1=='+'||ch1=='-')

{ yunsuan(a,b,c,ch1);

OutputNumber(c,1);

break;

}

else

{printf("\n此版本不支持%c运算!是否重新输入运算符?(y/n):",ch1); scanf("%s",&m);

if(m=='Y'||m=='y') { n=2; printf("\n请输入运算符'-'或'+':"); }

else break;

}

}

while(n=2);

printf("\n要继续新的运算吗?(y/n) : ");

scanf("%s",&ch);

if(ch=='Y'||ch=='y')

{ printf("\n"); system("cls");

continue;

}

else exit(0):

}

}

3.2.2插入函数

已知一双向链表,在第i个位置插入data为x的节点。函数需要注意的是在什么位置插入才是合法的,在就是在该节点指针时的顺序不要搞错。代码如下:

int ListInsert(DLNode *head,int i,int x) //双向链表的数据插入,i表示是插入的第几个元素

{ DLNode *p,*s;

int j;

p=head->next;

j=0;

while(p!=head&&jnext; j++; }

if(j!=i) { printf("\n插入位置不合法!"); return 0; }

if((s=(DLNode *)malloc(sizeof(DLNode)))==NULL) exit(0);

s->data=x;

s->prior=p->prior;//插入

p->prior->next=s;

s->next=p; p->prior=s;

return 1;

}

3.2.3读入数据并插入对应的链表函数

实现从键盘上得到数据根据三种情况进行不同的处理,判断是否是头结点,判断是否是整数,判断输入的字符是否是“;”分号。并且如果是正整数它的头结点data等于1否则为0。代码如下:

int InputNumber(DLNode *head) //读入输入的数据

{ int input,i=0;//第i个节点

char c;

scanf("%d%c",&input,&c);

while(1)

{ if(input<0&&i==0)//输入数为负且是第一个节点

{ head->data=0;//将长整数的符号保存在头结点中

ListInsert(head,i,input);//插入数据

}

else if(input>=0&&i==0)//输入数为正且是第一个节点

{ head->data=1;//将长整数的符号保存在头结点中

ListInsert(head,i,input);//插入数据

}

else

{ if(head->next->data>=0)

ListInsert(head,i,input);//非第一个节点

else

ListInsert(head,i,input);

}

i++;

if(c==';') break;//遇到数据输入完成标志,跳出循环

scanf("%d%c",&input,&c);

}

return 1;

}

3.2.4输出函数

实现将最后的结果输出到显示屏上,经过判断数据的正负和数据的范围来进行不同的处理,以保证在显示屏上显示的是正确的格式。代码如下:void OutputNumber(DLNode *head,int sign) //从表尾输出数据元素

{ DLNode *r=head->next;

while(r->data==0&&r!=head->prior)

{ r=r->next; }

if(sign==1) printf("结果是:");

else printf("结果是: -");

printf("%d",r->data);

r=r->next;

while(r!=head)

{ if(r->data<10) printf(",000%d",r->data);

else if(r->data<100) printf(",00%d",r->data);

else if(r->data<1000) printf(",0%d",r->data);

else printf(",%d",r->data);

r=r->next;

} printf("\n");

}

3.2.5加法函数

实现两个正数之间的相加运算,主要的算法和我们手算加法是一样的,首先设置一个进位计数的变量,根据存储的特点从低位开始相加带上进位即可得出相应的位和,最后更新进位变量。处理边界状况:如果两个链表一样长同时他们最高位在计算完成时仍然会有进位,那么应该考虑到在数据的更高位插入一个1表示最后的计算结果,这样才可以保证数据的完整性。代码如下:void add(DLNode *head1,DLNode *head2,DLNode *head3){

int z=0,e;

DLNode *p1,*p2;

p1=head1->prior;

p2=head2->prior;

while(p1!=head1&&p2!=head2)

{ e=p1->data+p2->data+z;

if(e>=10000)

{ z=1; e=e%10000; }

else z=0;

ListInsert(head3,0,e);

p1=p1->prior;p2=p2->prior;

}

if(p1==head1&&p2!=head2)

{ while(p2!=head2)

{ e=p2->data+z;

if(e>=10000) { z=1; e=e%10000; } else z=0; ListInsert(head3,0,e);

p2=p2->prior;

}

if(z==1) ListInsert(head3,0,z);

}

else if(p1!=head1&&p2==head2){

while(p1!=head1)

{ e=p1->data+z;

if(e>=10000) { z=1; e=e%10000; } else z=0;

ListInsert(head3,0,e);

p1=p1->prior;

} if(z==1) ListInsert(head3,0,z);

}

else { if(z==1) ListInsert(head3,0,z); } }

3.2.6判断俩正数大小函数

实现判断俩个正数的大小。考虑俩正数的在链表中所占存储单元的多少,多的一定大,当他们一样长时,一位一位的比较直到找到一个节点中的data比另一个链表的对应节点的data大为止。如果最后仍是一样大那么这两个数就是一样大的。返回值为自己约定的参数r等于2表示俩数一样大,等于1表示第二个数大,等于 0表示第一个数大。代码如下:

int change(DLNode *head1,DLNode *head2)

{ int length1,length2,r=2;

length1=ListLength(head1);

length2=ListLength(head2);

DLNode *p1,*p2;

p1=head1->next;

p2=head2->next;

if(length1>length2)

{ r=0; return r; }

else if(length1

{ r=1; return r; }

else

{ int i=0;

for(i=0;i

{ if(p1->data>p2->data)

{ r=0; return r; break; }

else if(p2->data>p1->data)

{ r=1; return r; break; }

else

{ p1=p1->next; p2=p2->next; r=2; }

}

} return r;

}

3.2.7 减法函数

实现两个正数的减法运算。整个函数分为俩大部分,第一部分处理第一个数大于第二个数,第二部分是处理第二个数大于第一个数。代码如下:void minus(DLNode *head1,DLNode *head2,DLNode *head3)

{ int z=0,x=-1,e;

DLNode *p1,*p2;

p1=head1->prior;

p2=head2->prior;

x=change(head1,head2);

if(x==0)

{ while(p1!=head1&&p2!=head2)

{ p1->data=p1->data+z;

if(p1->data>=p2->data)

{ e=p1->data-p2->data;

ListInsert(head3,0,e);

p1=p1->prior; p2=p2->prior;

z=0;

}

else

{ e=10000+p1->data-p2->data;

ListInsert(head3,0,e);

p1=p1->prior;p2=p2->prior;

z=-1;

}

}

p1->data=p1->data+z;

while(p1!=head1)

{e=p1->data;

ListInsert(head3,0,e);

p1=p1->prior;

}

}

else if(x==1)

{ p2=head1->prior; p1=head2->prior;

while(p1!=head2&&p2!=head1)

{ p1->data=p1->data+z;

if(p1->data>=p2->data)

{ e=p1->data-p2->data;

ListInsert(head3,0,e);

p1=p1->prior; p2=p2->prior;

z=0;

}

else

{ e=10000+p1->data-p2->data;

ListInsert(head3,0,e);

p1=p1->prior; p2=p2->prior;

z=-1; }

}

p1->data=p1->data+z;

while(p1!=head2)

{ e=p1->data;

ListInsert(head3,0,e);

p1=p1->prior;

}

head3->next->data=-1*head3->next->data;

}

else { head3->next->data=0; }

}

4调试分析

1.由于对任意长整数运算的算法推敲不足,是程序调试时费时不少。

2.本程序有些代码重复出现,从而减少了空间的利用率和增加了程序代码的杂乱性。

3.本程序模块划分比较合理,且把指针全部封装在链表模块中,操作方便。

4.算法的时空分析,由于链表采用双向循环链表结构,可以从链表两头操作,各种操作的算法时间复杂度比较合理,各函数以及确定链表中的结点位置都是O(n),n为链表长度。

5.本课设采用数据抽象的程序设计方法,将程序分为4个模块,使得设计时思路清晰,实现时调试顺利,各模块具有较好的可重用性,确实得到了一次良好的程序设计训练。

4.1使用说明

用户在使用该程序时,只需按照程序中的规定进行即可实现长整数的加减运算,具体使用步骤如下:

1.点击运行按钮,在DOS窗口下按照规定输入的数字需要从低位开始数四位一组用逗号隔开。输入第一个数字;

2.同上输入第二个数;

3.选择要对这两个长整数进行的运算;

4.两个操作数与运算符选择完毕后,按回车键即可得到运算结果。

4.2测试结果

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

图4.1 零的加减运算截图

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

图4.2正数减负数截图

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

图4.3大数减小数截图

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

图4.4两相等数相减截图

5.输入1,2345,6789 和9,8765,4321做减法运算,结果如下图:

图4.5小数减大数截图

6.输入3456,6547,1324,4352和6543,3452,8675,5648做加法运算,结果如下图:

图4.6两数相加截图

7.输入6,4567,1358,7821和-3456,2263,6524做加法运算,结果如下图:

图4.7正数加负数截图

两个任意长的整数的求和运算

两个任意长的整数的求和运算 进制的转换 2014 年6月 软件综合课程设计

目录 一、问题陈述 二、需求分析 三、概要设计 四、详细设计 五、程序代码 六、运行结果与测试 七、设计体会与总结

两个任意长的整数的求和运算 一、问题陈述 设计一个程序实现两个任意长的整数的求和运算。 利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。 二、需求分析 1、本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。 2、本演示程序中,集合的元素限定为数字字符[‘0’~’9’],输入字符可以任意长,输入形式以“#”为结束标志,串中字符顺序不限,且允许出现重复字符。 3、利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以#结束,每四位一组。 三、概要设计 在此说明数据结构设计和关键的算法设计思想 Add()函数是实现该问题的主要函数即相加。 typedef struct et 定义双循环链表的存储结构. void setin(dtp *a) 读入数据存储在双链表中的函数; void print1(dtp *w,int len) 原样输出输入的数,略去结束符"#"; void print2(dtp a,int len) 输出运算结果,以每四位一个","样式; 四、详细设计 程序流程图

五、程序代码 #include using namespace std; #define null 0 typedef struct et //自定义双循环链表的存储结构.

数据结构长整数四则运算(DOC)

实习1 1.4长整数四则运算 实习报告 题目:设计一个实现任意长的整数进行加法运算的演示程序。 一、需求分析 1.本演示程序中,利用双向循环链表实现长整数的存储,每个结点含一个整型变量任何整型变量的范围是-(215-1)—(215-1)。在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。输入和输出形式按中国对于长整数的习惯,每四位一组,组间用逗号隔开。 2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入数据中的非法字符)和运算结果显示在其后。 3.程序执行的命令包括: (1)构造链表;(2)输入数据;(3)数据处理;(4)结束 4.测试数据 (1)0;0;应输出0。 (2)-2345,6789;-7654,3211;应输出-1,0000,0000. (3)-9999,9999;1,0000,0000,0000;应输出9999,0000,0001 (4)1,0001,0001;-1,0001,0001;应输出0。 (5)1,0001,0001;-1,0001,0000;应输出1. (6)-9999,9999,9999;-9999,9999,9999;应输出-1,9999,9999,9998。 (7)1,0000,9999,9999;1;应输出1,0001,0000,0000。 二、概要设计 struct LinkNode //定义结构体LinkNode { int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *pre; //记录前一个节点的地址 }; class LinkList //定义类LinkList

第3课时 整数加法运算定律推广到小数(导学案)

第3课时整数加法运算定律推广到小数课题整数加法运算定律推广到小数课型新授课 设计说明 小数的简便运算是在学生已经学习了整数的运算定律和小数加减混合运算的基础上学习的。为了使学生直观地感知加法运算定律在小数的运算中同样适用,进一步体会运用这些定律能使计算简便,教学中从以下几点进行了设计: 1.创设情境,对比概括。 设计情境,让学生进一步了解、经历用加法运算定律进行简算的过程,理解整数的运算定律在小数运算中同样适用。采用对比的方式呈现出两位学生不同的计算思路,通过对比,使学生直观感知加法运算定律在小数运算中同样适用,并进一步体会用加法运算定律进行计算既简便,又快捷,使学生在以后的小数运算中能自觉地应用运算定律进行简算。 2.自主探究,合作交流。 《数学课程标准》中提到:“动手实践、自主探究、合作交流是学生学习数学的重要方式。”本节课让学生分组合作学习,给学生提供交流和表达的机会,多给学生自主学习的时间和空间。先学习运算定律,再进行实践练习,最后验证整数的运算定律在小数运算中同样适用。 3.边学边练,学以致用。 依据本节课的重难点,分散练习、边学边练,及时调整教学的状况,通过不同层次的练习,调动学生学习的积极性,体验数学的价值,同时充分发展学生的个性。 学习目标 1.理解整数加法的运算定律在小数加法中同样适用。 2.会运用运算定律和运算性质进行简便计算。 学习重点理解整数的运算定律在小数运算中同样适用。 学习难点能运用运算定律和性质灵活地进行简便运算。 学前准备 教具准备:多媒体课件 学具准备:口算卡 课时安排1课时 教学环节导案学案达标检测 一、复习旧知,导入新课。(5分钟)1.计算。 0.25+0.45=0.68-0.24= 7.4-6.8=3-0.75= 2.在○里填上适当的符号。 32+5○5+32 1.独立完成,汇报结果。 2.填写符号,说说运用了 哪些定律。 3.明确本节课的学习内 容。 1.在下面的□里填上适当的数, 在○里填上“+”或“-”。 (1)285+327=□+285 (2)926+82+18=926+(□○

长整数的运算算法与数据结构课程设计报告书

******************* 实践教学 ******************* 兰州理工大学 软件学院 2013年春季学期 算法与数据结构课程设计 题目:长整数的运算

专业班级:软件二班 姓名:齐祥荣 学号: 指导教师:王连相 成绩: 目录 摘要 (1) 前言 (2) 正文 (3) 1.采用类C语言定义相关的数据类型 (3) 2.各模块的伪码算法 (3) 3.函数的调用关系图 (6) 4.调试分析 (7) 5.测试结果 (7) 6.源程序(带注释) (8) 总结 (15) 参考文献 (16) 致谢 (17) 附件Ⅰ部分源程序代码 (18)

摘要 数据结构 该设计要求学生设计程序,实现两个任意长的整数求和及差的运算问题。通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握线性表上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力 关键词:双循环链表;插入;删除;长整数加减

前言 利用双向循环链表来实现对长整数的存储。每个节点只存储四位十进制数字,即不超过9999的非负整数。双向链表有头指针,它的data值存储长整数的符号,1为正,-1为负,0代表长整数为0;它的over值存储除头节点外节点的个数。其他节点的data值存储四位整数,over存储该四位整数溢出0~~9999范围的情况,一般over>0表示四位数超出9999,over<0表示四位数小于0。 选择该数据结构来完成长整数的加减运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从左到右,而运算的顺序则是从右到左,这样位了操作方便选择循环链表,在运算过程中有进位和借位的操作,所以最终选择双向循环链表的数据结构。

新苏教版四年级 整数四则混合运算练习题

整数四则混合运算题 姓名: 40+160÷40 288-144÷18+35 (58+37)÷(64-9×5)95÷(64-45)478-145÷5×6+46 122-36×4÷12+35 85+14×(14+208÷26)21+(327-23)÷19 539-513÷(378÷14) 74-3094÷17÷13 19+(253-22)÷21 50+129×28-42 (23+23)×24-597 (110-10)÷10-10 54-24+14×14 304-275÷(275÷25) (70+10)÷(18-10) 120÷12×18-54 44+15×16-32 (10-100÷10)×11 (53-588÷21)×36 (60+10)÷(17-10) 17+(233-43)÷10 110÷10×10-97

424-437÷19×16 22+(374-10)÷26 (245-11)÷18-11 22-(10+100÷10) (252-14)÷17-10 35-13+10×15 (346-10)÷16-12 215-198÷(121÷11) (45-651÷21)×33 19+192÷12-10 572÷22×23-158 19+56-1224÷34 (714-12)÷27-19 14+(21-19)×14 18-(13+15)÷262 736÷(43-20)×23 (227+11)÷(31-14) 36+19×14-23 828÷23×12-48 18-15+10×18 (31-154÷11)×12 (1369-37)÷37-32 160÷(22-12)×22 357÷21×13-213 985-728÷26×35 (438-39)÷21-12 (20+18)×11-239

长整数的加减运算系统说明文档11003601.

桂林电子科技大学综合设计说明书用纸 《数据结构与算法》 课程设计说明书 题目:长整数的加减运算 学院:计算机科学与工程学院 专业:信息安全 姓名:xxxxxxxx 学号:11003601xx 指导教师:张瑞霞老师

成绩评定标准及成绩 1、能按照格式进行写作,无抄袭现象(10分) 2、报告内容行文通畅,有条理性,无错别字,结构严谨。(10 分) 3、能够按照数据结构课设的格式要求、排版要求和字数要求 等,有需求分析,系统分析,详细设计,关键技术的介绍和参考文献。(10分) 4、在验收过程中,能合理的回答问题(20分) 5、软件能正常运行,实现所提出的功能(40分) 6、软件代码规范性较好(5分) 7、具有自己的创新或特色(5分) 总成绩:

目录 1、前言 (3) 2、需求分析 (4) 2.1.问题描述: (4) 2.2.基本要求: (4) 2.3.更高要求: (4) 2.4.测试数据: (4) 2.5.开发环境 Visual C++6.0(完整绿色版) (5) 3、系统概述 (5) 3.1.关键技术。 (5) 3.2.相关的函数接口 (6) 3.3.功能设计 (7) 4、系统分析 (7) 5、系统的调试与结果 (17) 5.1.调试过程出现的问题以及解决方法 (17) 5.2.成功的测试数据截图 (17) 6、课设小结 (20) 7、参考文献: (21)

1、前言 本系统主要内容是为数据结构长整数加法的实现,所以整个程序是为了实现长整数的加减法运算。设计一个实现任意长的整数间进行四则运算的程序,要求完成长整数的加运算和减运算。长整数的长度没有限制,可以是任意长,正确处理好运算之后的进位和借位。 每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数4位,即不超过9999的非负整数,整个链表视为万进制数。 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 由于在某些工程上进行加减运算时,有时候需要对很大的长整数进行计算,但是计算机本身提供的数据类型无法保证存在几百位甚至几千位的数字,所以需要设计专门的算法系统对数据进行相应的计算。因此本系统的设计主要任务是:设计一个程序能够实现任意长整数的加减运算的程序,而且能够对一些错误异常进行辨别调整,从而迅速计算出正确无误的结果。程序输入格式是字符串,包含元素的范围是数字,都好,负号以及分号,保存时需要用到双链表将字符串每四位保存在循环链表中的一个结点中,然后在计算出运行结果。 虽然程序有些复杂,但使用方法十分简单,只需按照相关提示进行操作即可,能够为用户的学习和工作带来快捷与方便。

实验报告长整数四则运算

实验报告:长整数四则运算 实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序 一.需求分析 1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。 2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据 (1)0;0;应输出“0” (2)-2345,6789;-7654,3211;应输出“-1,0000,0000” (3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001” (4)1,0001,0001;-1,0001,0001;应输出“0” (5)1,0001,0001;-1,0001,0000;应输出“1” (6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998” (7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。 二.概要设计 为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表 1.有序表的抽象数据类型定义为: ADT Dulinklist{ 数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0} 数据关系:R1={|ai-1,ai属于集合D,ai-1

数据结构课程设计长整数运算

一、需求分析 【问题描述】 设计一个程序实现两个任意长的整数求和运算。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。 任何整型变量的范围是:-(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【测试数据】 (1)0;0;应输出“0”。 (2)–2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)–9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。(4)1,0001,0001;-1,0001,0001;应输出“0”。 (5)1,0001,0001;-1,0001,0000;应输出“1”。 二、设计 1. 设计思想 (1)存储结构:循环双向链表 (2)主要算法基本思想: 1、每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加 不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数4位,即不超过9999的非负整数,整个链表视为万进制数。 2、可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示 元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 2. 设计表示 (1)函数调用关系图: (2)函数接口规格说明: 结构体: struct dl_node { int x; dl_node *pre; dl_node *next; };

初始化: void list_init(dl_node ** h) 插入元素: void list_insert(dl_node *h,int x) 输出链表: void prin(dl_node *h) 实现相加: void list_add(dl_node *h1,dl_node *h2) 实现相减: void list_sub(dl_node *h1,dl_node *h2) 3. 详细设计 (1)输入两个数,用链表来存储。链表的头结点的数据的值为1时,表示的是输入的数非负;为-1时表示输入的数是负数。 (2)在创建链表时,让高位在链表的尾部,低位在链表的头部。 (3)在做加法时,先判断两个数的符号是否相同,如果相同,在根据加数的符号,决定和数的符号,取两个数的绝对值做加法,但是的处理进位。 (4)如果异号,用一函数来判断和的符号,判断异号的两个数相加和的符号,当两个数的长度不相等时,取较长数的符号作为和的符号,否则比两个数的大小,再决定和的符号。 (5)异号的两个数想加时,先去两个数的绝对值,用较大的数减去较小的数,差作为和的绝对值。如果相应的位够减时,直接做减法,否则借位,但是要注意被借位的值是否为零,如果为零,则继续借位。 (6)输出最终结果,输出数时,要去掉大数最前面的零,直到数的首位不是零时为止。在输出地位的数时,有可能某些单元的数低于四位,必须要在四位数的高位补零,即四位一个单元输出。空缺处用零补齐。 三、调试分析 (1)经过不断的的DEBUG,不断的输出看结果调试,最终成功 (2)经验和体会: 通过这次学习,让我认识到自己在学习上的诸多不足。从刚拿到题目到完成整个编程,从理论到实践,虽然学到很多的的东西,但是也因为自己知识的不足,不能考虑周全,完全成功的完成此次课程设计。在认识自己的不足后,我便开始认真复习书本知识,同时与动手能力强的同学互相交流,让自己学到了很多平时

长整数运算说明书汇编

摘要 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。而在一般的程序运算中,长整数是无法计算的,因为计算机一次能够运算的位数是有限,一旦整数很长,就需要一个程序来进行多次计算,通过长整数运算这个程序,可一把一个长整数分成多个普通整数来进行计算,使得长整数也可以进行运算。我编写的这个程序就可以进行长整数的加减运算,各个数据也可以是负数。 关键词:长整数;运算;加法;减法

Abstract Data structure course design, students in the logical characteristics and physical data structure for the representation of the design, selection and application of data structure, algorithm and its realization, deepen the understanding of basic content of courses. At the same time, by the systematic and rigorous training in basic skills program design method and the operation and scientific style of work. But in the general program operation, long integers can not be calculated, because the computer time to operation number is limited, once the integer is long, need a program to calculate several times, operation of this program through the long integer, can put a long integer into a plurality of ordinary integers to calculate, the long integer can be calculated. This program I wrote to long integer addition and subtraction, all data can be negative. Keywords: long integer; arithmetic; additive; subtraction

四年级整数四则混合运算200题

四年级整数四则混合运算200 题 2100-21 X 53+2255 800-(2000-9600 - 8) (488+344) - (202-194) 605X(500-494)-1898 9125-(182+35X 22) 3800-136X 9-798 918 - 9 X (108-99) (2944+864) - (113-79) (5011-43X 85)+3397 816 - (4526-251 X 18) (28+172)- (24+16) 86 X (35+117 - 9) 16X 4+6X 3 24X 4-42- 3 56- 4+72- 8 920-1680- 40- 7 148+3328- 64-75 2100-94+48X 54 4215+(4361-716)- 81 36-720 -(360 - 18) (528+912)X 5-6178 (103-336- 21)X 15 40X48-(1472+328)-5 2940- 28+136X 7 (2886+6618) - (400-346) (154-76)X (38+49) (104+246)X (98- 7) (8645+40X 40)- 5 8080- 1877+1881-3 2300-1122- (21-15) (7353+927)- (801-792) 950-28X 6+666 2500+(360-160- 4) 39- 3+48- 6 7X 6-12X 3 2940- 28X 21 690+47X 52-398 360X 24- 32+730 51+(2304-2042)X 23

四年级数学下册整数加法运算定律推广到小数说课稿

整数加法运算定律推广到小数说课稿 一、说教材: 1、说课内容: 本节课的教学内容是人教版九年义务教育六年制数学第八册的内容。 2、说教材的作用及地位:这部分内容是学生在学完小数的加减法的意义和计算法则以及小数的连加、连减和加减混合运算的基础上进行学习的,它是提高学生计算能力、加强学生计算的正确性、烂熟性、灵敏性的一个严重方面。《数学课程标准》强调数学学习要“从学生已有的生活经验出发,让学生亲身经历将实际问题抽象成数学模型并进行解释与应用的过程,进而使学生获得对数学理解的同时,在思维能力、情感态度与价值观方面得到进步和发展。”因此,在本节课中,我大胆地改变教材的呈现方式,把小数加减法简易计算的呈现方式放到一个生活大背景中,让学生通过“商品大奉送”和“找朋友”两个游戏,亲身经历活动,亲自悟出道理,使他们从中很好地提炼了数学的模型。 3、说教学目标认知目标:使学生初步理解整数加法运算定律对小数加法同样适用,并会运用这些定律进行一些小数的简易运算。 能力目标:进一步培养学生分析、综合的能力和优良的计算习惯,训练计算的灵敏性。 情感目标:通过小组合作探究,培养学生团结合作意识;通过小组之间的比赛辩论,培养学生的竞争意识。同时渗透事物之间相互联系的观点。 4、教学重、难点:引导学生理解简易计算的依据,在理解的基础上掌握简易计算的方 法。: 二、说教法: 这节课我主要采用了游戏、创设情境;自主探究、讨论、发现的教学方法放手让学生在无限的时间和空间里,根据自己的学习体验,解放地、开放地去探究,去发现,去“再创造”新知识。 三、说学法: 课改的核心是改变学生的学习方式,也就是变这种“牵引式、接受式”的学习为

长整数的四则运算

课程名称: 《数据结构》课程设计课程设计题目: 长整数的四则运算 姓名: 院系: 计算机学院 专业:计算机科学与技术 年级: 学号: 指导教师: 2014 年月日

目录 1 课程设计的目的 (3) 2 需求分析 (3) 3 课程设计报告内容 (3) 3.1概要设计 (3) 3.2详细设计 (3) 3.3调试分析 (3) 3.4用户手册 (4) 3.5测试结果 (4) 3.6程序清单 (5) 4 小结 (x) 5 参考文献 (8)

1.课程设计的目的 (1) 熟练使用 C 语言编写程序,解决实际问题; (2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; (3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; (4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 2.需求分析 问题描述:设计一个实现任意长的整数进行加法运算的演示程序。基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -215 - 1 215 - 1。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。测试数据:(1)0;0;应输出?0?。 (2)-23456789;-76543211;应输出?-100000000?。(3)-99999999;1000000000000;应输出?999(4)100010001;-100010001;应输出?0?。(5)100010001;-100010000;应输出?1?。(6)-999999999999;-999999999999;应输出?1999999999998?。 (7)1000099999999;1;应输出?1000100000000?。 实现提示:(1)每个结点中可以存放的最大整数为 32767,才能保证两数相加不会溢出,但若这样存放,即相当于按 32768 进制存放,在十进制与 32768 进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的 4 位,即不超过 9999 的非负整数,整个链表表示为万进制。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。不能给长整数位数规定上限。 3.1概要设计 利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。 3.3调试分析 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

大数据结构课程设计(长整数四则运算)

一、需求分析 1.本程序实现计算任意长的整数的四则运算. 以用户和计算机对话的方式,先后输入数字的最多位数,然后程序就计算并显示出这两个数的运算。 2. 利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数,程序会过滤掉无效的字符。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。 3.测试数据(1)0; 0; 输出“0”; (2)-2345,6789; -7654,3211; 输出“-1,000,000”; (3)-9999,9999; 1,0000,0000,0000; 输出“9999,0000,0001”; (4)1,0001,0001; -1,0001,0001; 输出“0”; (5)1,0001,0001; -1,0001,0001; 输出“1”; (6)-9999,9999,9999; -9999,9999,9999; 输出“-1,9999,9999,9998”; (7)1,0000,9999,9999; 1; 输出"1,0001,0000,0000". 二、概要设计 为实现上述程序功能,应以双向循环链表表示长整数。为此,需要定义一个抽象数据类型。 1. 抽象数据类型定义为:

ADT OrderedList{ 数据对象:D={ai|ai∈int,i=1,2,...n, n≥0} 基本操作: init(&a,digit4) 操作结果:构造一个位数是digit4*4长整数。 pass(&a,&b,&c) 初始条件:a,b,c都已存在 操作结果:c等于a和b的和。nep(&a) 初始条件:a已存在。 操作结果:a变为输入参数的相反数。printlong(&a) 初始条件:a已存在。 操作结果:按四位一组,分隔符为","的格式,在屏幕上输出a。ston(&S,&a) 初始条件:a已存在。 操作结果:把字符串形式的长数字赋给a。}ADT OrderedList 2.本程序包含两个模块: 1)主程序模块:V oid main(){ 选择操作: 1:帮助。 2:加法。 3:减法。

整数加法运算定律推到小数

《整数加法运算定律推广到小数》教学设计 祖山总校杜玉华 教材分析: 教材以学生喜爱的校园体育运动为背景,采用对比的方式呈现两位学生不同的计算思路,通过对比,使学生看出两种算法的结果是一样的,从而直观感知加法的运算定律在小数运算中同样适用,并进一步体会用加法运算定律进行计算确实能使计算更快捷方便,从而让学生在今后的小数加减法计算中能根据数据特点自觉地应用运算定律进行简算。 学情分析:本节知识是在学生掌握了小数加、减法混合运算及整数的运算定律和运算性质的基础上进行学习的。 教学目标: 1、知识目标:通过有限个例证让学生理解整数的运算定律在小数运算中同样适用;并能根据数据特点正确应用加法的运算定律进行简便计算。 2、能力目标:在解决问题的过程中能培养学生的合作意识和分析、综合、推理的能力。 3、情感目标:培养学生做事认真,讲求方法,注重实效的生活观念。 教学重点:理解整数运算定律对于小数同样适用,并会运用这些定律进行一些小数的简便计算。 教学难点:能根据数据特点,应用加法的运算定律合理、灵活地解决实际生活中的一些简单问题。 教学准备: 1.预习提纲;2.课件。 教法、学法:教师以指导学生预习,组织探究活动,设疑解难为主;学生以自主尝试、合作探究学习为主。(先试后导,先练后讲) 教学过程: 一、口算抢答,引入课题。 题组一: 0.52+0.48= 2.8+0.2+5= 0.48+0.52= 2.8+(0.2+5)=

问:刚才口算的两组题目有什么特点?(让学生感受到凑整,并联想到加数相同,加数的位置不同或计算顺序不同,但计算结果一样。) 题组二: 135+39+65+11= 134-66-34= 问:你是怎样算得那么快的?(引出应用运算律可以让计算简便) 刚才简算时运用了哪些运算定律?用字母如何表示?(学生齐说,老师板书。) 二、自主学习,探究新知。 (一)提出猜想,举例验证。 1、猜一猜。 师:在我们以前的学习中,这些字母都表示整数,现在大家猜一猜,这些字母可以表示小数吗?换句话说,整数加法运算定律在小数加法运算中也能用吗? 2、交流预习成果。 师:课前我们已有过预习,现在在小组内跟同学交流一下你的想法,并举例验证你的猜想。 (学生交流时师板书出:整数的运算定律在小数运算中同样适用吗?) 3、指名几个学生汇报,并到在黑板上写出自己的例证。全班交流,验证猜想。 4、教师也举一例验证加法交换律和结合律在小数运算中也适用。 (二)在实际问题中验证猜想,展示预习成果。 师:刚才我们都是用计算的形式验证加法运算律在小数运算中也适用。下面我们在实际问题中再来验证刚才的猜想是否正确。 出示例4图:新圩小学上一届秋季运动会的比赛场景,这一个项目是四年级组男子4×50米接力赛。 课前老师已布置了预习任务:(1)从图中你了解到哪些数学信息?(2)通过例图中两位学生的对话,你明白了什么?(3)你是怎样计算他们可能的总成绩的?有不同的计算方法吗?(4)还有什么疑问吗?

C语言 长整数加减乘

长整数加减乘 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 typedef int Status; //--链表定义-- typedef struct DuLNode{ Status data; //数据域 struct DuLNode *next,*prior; //指针域 }DuLNode,*DuLinkList; int i; char str[400]; Status turn(Status &data){ for(int j=0;i>=0;--i,j++) { if(str[i]=='-'&&i==0)break; if(j%4==0)data=str[i]-'0'; if(j%4==1)data+=10*(str[i]-'0'); if(j%4==2)data+=100*(str[i]-'0'); if(j%4==3){data+=1000*(str[i]-'0');--i; if(i==-1||str[i]=='-')return OK;return 0;} if(i==0)return OK; } return OK; } Status Input(Status &data){ return turn(data); } Status ListCreate_L(DuLinkList &L,DuLinkList &dl){ DuLNode *r,*q; //r指向尾结点,q指向新开辟结点 L=(DuLNode*)malloc(sizeof(DuLNode)); if(L==NULL)exit(-1); r=L;q=L; for(;;){

任意长整数加法运算

课程名称: 《数据结构》课程设计 课程设计题目: 任意长整数加法运算 姓名: 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:退出系统。

两个任意长的整数的求和运算

软件综合课程设计两个任意长的整数的求和运算 进制的转换 2014 年6月

目录 一、问题陈述 二、需求分析 三、概要设计 四、详细设计 五、程序代码 六、运行结果与测试 七、设计体会与总结

两个任意长的整数的求和运算 一、问题陈述 设计一个程序实现两个任意长的整数的求和运算。 利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。 二、需求分析 1、本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。 2、本演示程序中,集合的元素限定为数字字符[‘0’~’9’],输入字符可以任意长,输入形式以“#”为结束标志,串中字符顺序不限,且允许出现重复字符。 3、利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以#结束,每四位一组。 三、概要设计 在此说明数据结构设计和关键的算法设计思想 Add()函数是实现该问题的主要函数即相加。 typedef struct et 定义双循环链表的存储结构. void setin(dtp *a) 读入数据存储在双链表中的函数; void print1(dtp *w,int len) 原样输出输入的数,略去结束符"#"; void print2(dtp a,int len) 输出运算结果,以每四位一个","样式; 四、详细设计 程序流程图

五、程序代码 #include using namespace std; #define null 0 typedef struct et {

人教版数学五年级下册整数加法运算定律推广到分数教学设计

《整数加法运算定律推广到分数》教学设计内容分析:《整数加法运算定律推广到分数》是新课标人教版第十册第五单元第7课 时的内容。是在学习了分数加减混合运算、整数加法运算定律推广到小数的基础上进 一步学习的。 教学目标: 1理解整数加法的交换律、结合律对分数加法同样适用。 2、会运用加法交换律、结合律进行分数加法的简便计算。 3、激发主动探究的学习欲望,感受学习数学的乐趣。 教学重点:会进行分数加法的简便计算。。 教学难点:灵活运用加法交换律、结合律进行分数加法的简便计算。 教学过程: 一、复习引入,揭示课题 1. 用简便方法计算下面各题,并说出简算的依据。 53 + 36+ 47 1.5+ 3.8 + 6.2 2. 学生独立完成,集体交流。(说出加法运算定律的字母表示形式。) 3. 教师板书: 加法交换律:a+ b= b+ a 加法结合律:(a+ b) + c= a+(b+ c) 4. 追问:式中的字母可以表示什么数? (预设:整数、小数、分数) 5. 揭示课题:我们知道加法交换律和结合律适用于整数和小数,是否也适用于分 数呢?这节课我们就一起来研究。(板书课题) 二、猜想验证,探索规律 1. 下面每组算式的左右两边有什么样的关系? _3 +_^g_2 +_3 ( _2 + 卫+_3°_2 十A +3 7 5 5 7 344344

2. 大胆猜想一下O 里应该填什么符号? 3. 说说你这样填的理由。 (预设:第一个算式左右两边的数都一样, 就是交换了位置,很像整数中的 加法交换律;第二个算式只是改变了加的顺序,很像加法结合律。 ) 4. 验证规律。 (学生动手计算验证,然后汇报结果相等的结论。教师随即 在0中板书出“=”) 二、 猜想验证,探索规律 5. 观察这些算式,你发现了什么? (预设1:整数加法的运算定律也可以在分数中使用。 预设2:整数加法的运算定律在分数中同样适用。) 6. 仅通过计算这两组题就下结论,有点为时过早。请你再举几个 分数加法的例子来验证一下,看看我们得出的结论是否正确。 7. 学生举例验证。 (学生组内验证,教师巡视指导,然后学生汇报通过验证得 到的结论。) 8?小结:整数加法的交换律和结合律对分数加法同样适用。利 用运算定律可以使一些分数计算变得简便。 三、 应用规律,巩固深化 1. 在。里填上合适的运算符号,在()里填上合适的数。 2. 怎样简便就怎样计算 4=2 1 4 + 5 丄+-3 3 + 8 4 +△ +3 2 ( 7 C 7 -7 +」+5 12 (5 C )2 () 6 / 3 7 7 ()() +? ()()

长整数的加法运算-数据结构与算法课程设计

题目:长整数的加法运算 学院:计算机科学与工程学院 专业:信息安全 姓名:农锦文 学号:1200360220 指导教师:张瑞霞 2014年10月18日

目录 引言 (4) 1、系统概述 (4) 2、系统分析 (5) 2.1需求分析 (5) 2.2系统功能 (5) 2.3开发环境 (5) 3、详细设计 (5) 3.1功能结构框图 (6) 3.2 软件设计 (6) 3.2.1 定义链表与接收数据输入 (6) 3.2.2长整数的加法运算 (8) 3.2.3显示长整数相加结果 (10) 4、所遇到的问题和分析解决 (10) 5、系统特色及关键技术 (11) 6、结论 (11) 参考文献 (12)

引言 随着计算机技术的发展,人们利用计算机开发了许许多多方便的,实用的应用软件,在信息化的现代社会里,人们依赖着很多的应用软件,这些软件在推进社会发展的同时,也丰富了人们的生活,然而,在开发过程中,由于计算机系统的局限性,在需要某些功能时,总会遇到困难。例如在开发某些工程项目时,有时需要对很大的数进行计算。但是计算机本身无法计算某些较大的数,所以我们有必要设计专门的算法对一些较大的数进行相应的计算,通过简化运算之后,对其他程序功能的编写能起到良好的促进作用,大大的减轻了程序员的负担。此次设计的程序将用于长整数的加法运算,程序运行时,将提示用户输入两个长整数,然后将两个长整数相加的结果输出。 1、系统概述 在该长整数加法运算系统中,我将定义双向循环链表来表示长整数,按照中国对长整数的表示方法,如199999999表示为1,9999,9999。双向循环链表数据域存储的是长整数的每4位。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。通过造双向循环链表,可以对长整数进行方便的存储,在对长整数进行数学运算时,也能通过方便的操作链表,从而对长整数进行需要的计算。 在实现该长整数加法运算的系统中,我将会编程实现以下功能。定义一个函数,用于接收长整数的输入,同时将长整数存储到双向循环链表当中,为了检验是否按预期要求进行存储,我还会编写一个函数,将双向循环链表中数据域的值打印出来。定义一个长整数相加的函数,实现两个长整数加法运算的功能,实际上是对双向循环链表进行操作,这里包括结点空间的申请,插入结点,修改指针所保存的值。 当两个长整数完成加法运算后,我会定义一个显示结果的函数,将它们相加的结果打印出来。一些较大的整数,在单纯的用计算机进行相加运算的时候可能会产生溢出现象,但该系统每次只对4位整数进行运算,避免了数据过大在计算时产生的溢出问题。

相关主题
文本预览
相关文档 最新文档