文档库 最新最全的文档下载
当前位置:文档库 › 数据结构程序设计 任意长的整数进行加法

数据结构程序设计 任意长的整数进行加法

数据结构程序设计 任意长的整数进行加法
数据结构程序设计 任意长的整数进行加法

任意长的整数进行加法课程设计报告

1目的:

通过课程设计,加深对《数据结构》课程所学知识的理解,熟练掌握和巩固数据结构的基本知识和语法规范。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;

2 需求分析

在加法运算中,C语言所能定义的整形变量是有一定长度限制的。例如int型变量所能储存值的值域为-32768~32767,最长的整型long int 值域为-2147483648~2157483646.当在需要位数更长的整数加法时计算器设计运用简单的加法运算符难以达到要求,或是在两个较大整数相加的值超过了整型变量所能储存的数值是程序会发生溢出。需要一种新的加法模式来解决上述问题,来实现任意长的整数进行加法,得到想要的结果。

本程序完成对任意长的整数进行加法运算:

1:输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。

2:输入值范围为任意长的整数,输入时需输入数字和被允许的字符(‘,’,‘-’)。

3:基本功能包括大整数输入、加法运算、大整数输出。

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”。

3 概要设计

本程序使用C语言编写,编辑器为C-FREE 4.1 编译器为MinGW3.4.5 ,输入输出界面为windows对话框。

本程序所用到的数据类型有自定义Lnode 型为节点类型,Lnode型变量包涵两个变量,一个为整型的int data变量,另一个为Lnode 型的指针。自定义Linklist 型变量包涵两个变量,一个为Lnode型的指针head,一个是整型变量int length。Linklist型变量为链表类型,head为链表的头指针,整型length为链表的长度(链表长度不包括头节点)。

本程序组成:

函数int *Iput(char *ch)功能:将输入的标准字符串,转换为所需要的数字储存在int 型数组中并返回数组指针。

函数Linklist *CreateList(Linklist *l) 功能:创建一个空的单链表,并返回该链表的指针。

函数Linklist *InList(Linklist *l,int data) 功能:在链表的头结点后插入一个节点,所需参数为所要插入的链表的指针,所插入节点的数据值。返回值为插入完成后的链表指针。

函数Linklist *Inlistfail(Linklist *list,int data) 功能:当结果需要进位时,对结果进行进位,参数为储存结果的链表,所插入节点的数据值。返回值为插入完成后结果链表的指针。

函数Linklist *OutList(Linklist *list) 功能:对输入的负数进行处理,使其变成标准加数或被加数。参数为储存输入数的链表指针。返回值为处理完成后的链表的指针。

函数Linklist *AddList(Linklist *one,Linklist *two) 功能:两个标准加数和被加数,进行加数。参数为储存加数和被加数的链表指针。返回值为储存结果的链表。

函数Linklist *SubList(Linklist *listone,Linklist *listtwo) 功能:两个标准减数和被减数进行相减。参数为储存标准减数和被减数链表指针。返回值为存储结果的链表。

函数Linklist *Linklistpush(int *number,Linklist *list) 功能:将输入的存储在数组中的数值依次插入到创建好的链表中,每个链表节点储存一位输入的数值。参数为储存数值的数组指针和创建好的链表的指针。返回值为存储输入数值的链表的指针。

函数char *test_takeprint(Linklist *list,int j) 功能:将储存结果的链表里的值变为字符串形式便于对话框输出。参数为存储结果的链表的指针,和整型输出控制变量。

函数int Judgmentsize(int *numone,int *numtwo,int numberone,int numbertwo,int v) 功能:对两个位数相同但符号不同的两个数进行大小比较。参数为两个储存值的数值的指针,和两连表的长度,和控制变量。返回值为判断后得出的标识值。

函数int Judgment(int *numone,int *numtwo,int numberone,int numbertwo) 功能:对输入的两个数值进行判断,是进行加法或是进行减法。参数为储存两个数的数组指针和两个数的位数。返回值为判断后的标志整型值。

函数int Judgementprint(Linklist *listone,Linklist *listtwo,int i) 功能:对输出的值的正负进行判断。参数为储存两个值的链表的指针,和标识整型数。返回值为标识整型数。

函数Linklist *Caseone(Linklist *listone,Linklist *listtwo) 功能:判断后的第一种情况对两数的处理。参数为储存两数的链表打的指针。返回值为处理后的储存结果的链表的指针。

函数Linklist *Casetwo(Linklist *listone,Linklist *listtwo) 功能:判断后的第二种情况对两数的处理。参数为储存两数的链表打的指针。返回值为处理后的储存结果的链表的指针。

函数Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i) 功能:判断后的第三种情况的对两数的处理。参数为储存两数的链表的指针,和整型标识位。返回值为处理后的储存结果的链表的指针。

函数char *mainlist(char *numberone,char *numbertwo) 功能:整个程序的流程。

参数为输入得到的两字符串的指针。返回值为最终要求输出的字符串的指针。

模块BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 对话框的定义。

模块BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)

对话框的定义。

函数void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) 功能:当消息响应时操作系统所调用的函数。

主程序流程图:

开始

输入两数

情况判断

数值转化链表

同正两数相加

同负两书相加相异判断

第一个数减第二个第二个数减第一个

输出转换输出结果

函数之间的调用关系为:

char *mainlist(char *numberone,char *numbertwo)

调用Linklist *CreateList(Linklist *l)

int *Input(char *ch)

Linklist *Linklistpush(int *number,Linklist *list)

int Judgment(int *numone,int *numtwo,int numberone,int numbertwo)

int Judgementprint(Linklist *listone,Linklist *listtwo,int i)

char *test_takeprint(Linklist *list,int j)

Linklist *Caseone(Linklist *listone,Linklist *listtwo)

Linklist *Casetwo(Linklist *listone,Linklist *listtwo)

Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i)

以上为平行关系

Linklist *AddList(Linklist *one,Linklist *two)

函数调用Linklist *Inlistfail(Linklist *list,int data)函数

int Judgment(int *numone,int *numtwo,int numberone,int numbertwo)

调用int Judgmentsize(int *numone,int *numtwo,int numberone,int numbertwo,int v)函数Linklist *Caseone(Linklist *listone,Linklist *listtwo)

调用Linklist *AddList(Linklist *one,Linklist *two)函数

Linklist *Casetwo(Linklist *listone,Linklist *listtwo)

调用Linklist *OutList(Linklist *list)和Linklist *AddList(Linklist *one,Linklist *two)函数Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i)调用

Linklist *SubList(Linklist *listone,Linklist *listtwo)函数

4详细设计

1:数据类型设计

typedef struct Lnode //节点类型

{

int data;

struct Lnode *next;

}Lnode;

typedef struct Linklist //链表类型

{

Lnode *head;

int length;

}Linklist;

2:输入输出函数设计

字符串转换函数

int *Input(char *ch)

{

int *number;

int i=2,j=0,k=0;

number=(int*)malloc(sizeof(int)*100); //为数组分配空间while(i!=0) //循环到字符串结束{

if(ch[j]==44) //如果取到的字符为‘,’,跳过该字符继{ //转换

k--;

}

else

{

number[k]=ch[j]-48; //根据ASCL码数值等于该字符的值减去48 }

j++;

k++;

if(ch[j]==0) //转换结束,数组的最后一位赋值为888,做{ //为标示位

number[k]=888;

break;

}

}

return number;

}

输出格式转换函数

char *test_takeprint(Linklist *list,int j) {

int length,i,remainder,shang,position=0,positionnum=0,k;

char *chfinal;

int num[100];

Lnode *now;

now=list->head->next;

chfinal=(char*)malloc(sizeof(char)*100); //为将要输出的字符穿申请内存空间length=list->length;

shang=length/4; //求链表长度对4 的商

remainder=length%4; //求链表长度除于4的余数

if(shang==0)

remainder=0; //如果商等于0时,将余数设为0

for(i=length-1;i>=0;i--) //将保存在链表中的数值反向复制到数组中{

num[i]=now->data;

now=now->next;

}

if(j==888) // j为结果符号标识变量,j=888时结果为负数{

chfinal[position]=45; //在字符串第一位加上‘-’号

position++;

}

if(length<=4) //结果少与4位时不需要,添加‘,’号直接添加到字符串中{

for(i=0;i

{

chfinal[position]=num[i]+48; //ASC码字符与数值相差48

position++;

}

}

Else //结果大于4位是的情况

{

for(i=0;i

chfinal[position]=num[positionnum]+48;

position++;

positionnum++; //此变量为整型变量数组的取值位

} //字符串数组与整型数组的同一个数不在同if(remainder!=0) //一位置,故要用不同的取值位

{

chfinal[position]=44;

position++;

}

for(i=0;i

{

for(k=0;k<4;k++) //每4位添加一个

{

chfinal[position]=num[positionnum]+48;

position++;

positionnum++;

}

if(i

chfinal[position]=44; //逗号的ASCII码值为44

position++;

}

}

}

chfinal[position]=0; //为字符串添加结束标识

return chfinal; //返回字符串

}

3:链表操作函数

链表创建函数

Linklist *CreateList(Linklist *l)

{

l->head=(Lnode*)malloc(sizeof(Lnode)); //头结点分配空间

l->head->next=NULL;

l->length=0; //链表长度为零

return l;

}

Linklist *InList(Linklist *l,int data) //链表插入函数

{

Lnode *n;

n=(Lnode*)malloc(sizeof(Lnode)); //为插入的节点分配空间

n->data=data; //节点数据位赋值为要插入的值

n->next=l->head->next; //修改节点和头结点的指针

l->head->next=n;

l->length++; //链表长度加一

return l;

}

Linklist *Inlistfail(Linklist *list,int data) //结果进位时链表插入函数{

Lnode *fail,*n;

int i;

fail=list->head;

for(i=0;ilength;i++) //寻找到链表的最尾部的节点{

fail=fail->next;

}

n=(Lnode*)malloc(sizeof(Lnode)); //分配一个新的节点的空间

n->next=fail->next; //将该节点插入到链表的最尾端

fail->next=n;

n->data=data;

list->length++; //链表长度加一

return list;

}

Linklist *OutList(Linklist *list) //链表去负号函数

{

Lnode *temporary,*temporary2;

int i=0;

temporary=list->head;

for(i=0;i<(list->length-1);i++) //寻找到链表中保存负号的节点{

temporary=temporary->next;

}

temporary2=temporary->next; //修改该节点附近指针使其在链表/ temporary->next=NULL; //中删除

free(temporary2); //释放该节点内存空间

list->length--;

return list;

}

4:主要加减函数

Linklist *AddList(Linklist *one,Linklist *two) //链表数值相加函数

{

int i=0,j=3,p=0;

Lnode *nowone,*nowtwo;

nowone=one->head->next; //节点指针分别指向链表的头结点nowtwo=two->head->next;

if(one->length==two->length) //判断两链表的长度,以便过后判断是否末位进位p=1;

for(i=0;ilength;i++) // 循环加数的位数次,来分别对个个位进行相加{

if(j==1) //j=1时表示该位有来至低位的进位

{

nowone->data=nowone->data+nowtwo->data+1; //该位有进位时的结果

j=0;

}

else

{

nowone->data=nowone->data+nowtwo->data; //该位没有进位的结果}

if(nowone->data >= 10) //判断该位是否需要向高位进位

{

nowone->data=nowone->data-10; //进位后该位的值

j=1;

}

nowone=nowone->next;

nowtwo=nowtwo->next;

}

if(j==1&&p!=1) //两数位数不同,但最高位需进位时的情况{

for(i=0;ilength - two->length;i++) //定位到加数的最高位

{

nowone->data++; //最高位向上进位一

if(nowone->data>=10) //如果该位加上来自低位的进位大于10时继{ //续向高位进位直至无需在进

nowone->data=nowone->data-10;

j=1;

nowone=nowone->next;

}

else

{

j=0;

break;

}

}

if(j==1) //如果结果的最高位也有进位

one=Inlistfail(one,1); //为储存结果的链表添加一个节点来保存进位}

if(j==1&&p==1)

{

one=Inlistfail(one,1);

}

return one;

}

Linklist *SubList(Linklist *listone,Linklist *listtwo) //减法函数

{

Lnode *nowone,*nowtwo;

int i=0,j=0;

nowone=listone->head->next; //定位到最低位的数值

nowtwo=listtwo->head->next;

for(i=0;ilength;i++) //做减数的位数次循环

{

if(j==1) //如果该位需向高位借位j=1

{

nowone->data=nowone->data - 1 - nowtwo->data; //该位借位后进行减法的结果j==0;

}

else

nowone->data=nowone->data - nowtwo->data; //无需借位情况

if(nowone->data<0) //若该位被低位借位至小{ //于零继续向高位借位

nowone->data=nowone->data+10; //借位后结果的值

j=1;

}

nowone=nowone->next;

nowtwo=nowtwo->next;

}

if(j==1) //若减数的最高位,仍需向高位借位,执行{

while(j==1) //向被减数的高位循环借位,直到无需在借位{

if(nowone->data==0)

{

nowone->data=9;

j=1;

nowone=nowone->next;

}

else

{

j=0;

nowone->data--;

}

}

}

return listone; //返回减法的到的结果}

5:不同情况操作函数

Linklist *Caseone(Linklist *listone,Linklist *listtwo)

{ //判断后第一种情况

Linklist *final;

if(listone->length>=listtwo->length) //判断两数的位长,位数长的做为加数final=AddList(listone,listtwo); //两数加法

else

final=AddList(listtwo,listone); //两数加法

return final;

}

Linklist *Casetwo(Linklist *listone,Linklist *listtwo)

{ //第二种情况

Linklist *final;

listone=OutList(listone); //两数值去负号,进行标准加法listtwo=OutList(listtwo);

if(listone->length>=listtwo->length)

final=AddList(listone,listtwo); //加数与被加数相加else

final=AddList(listtwo,listone);

return final;

}

Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i)

{ //第三种需要进行减法的情况Linklist *final;

if(i<10)

listone=OutList(listone); //去负号操作

else

listtwo=OutList(listtwo);

if(i==7||i==16)

final=SubList(listtwo,listone);

else

{

if(listone->length>=listtwo->length)

{

final=SubList(listone,listtwo);

}

else

final=SubList(listtwo,listone);

}

return final;

}

6:主函数设计

char *mainlist(char *numberone,char *numbertwo) //主程序函数{

Linklist *listone,listone1;

Linklist *listtwo,listtwo1;

Linklist *final,final1;

int i=0,j,p,experiment;

int *num1,*num2;

char *iii;

listone=&listone1;

listtwo=&listtwo1;

final=&final1;

listone=CreateList(listone); //创建两个链表

listtwo=CreateList(listtwo);

num1=Input(numberone); //将输入的字符串复制到数组中

num2=Input(numbertwo);

listone=Linklistpush(num1,listone); //将数组中的数复制到链表

listtwo=Linklistpush(num2,listtwo);

j=Judgment(num1,num2,listone->length,listtwo->length); //对两数值进行判断

switch(j) //分情况进行不同操作

{

case 1 : final=Caseone(listone,listtwo); b

case 2 : final=Casetwo(listone,listtwo); break;

case 3 : final=Casethree(listone,listtwo,j); break;

case 4 : final=Casethree(listtwo,listone,j); break;

case 6 : final=Casethree(listone,listtwo,j); break;

case 7 : final=Casethree(listone,listtwo,j); break;

case 15 : final=Casethree(listone,listtwo,j); break;

case 16 : final=Casethree(listone,listtwo,j); break;

default : printf("error");

}

p=Judgementprint(listone,listtwo,j); //判断结果是否为负

iii=test_takeprint(final,p); //将储存结果的链表变成标准字符串

return iii; //返回字符串

}

7:对话框操作设计

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{ //对话框主函数

char fuck[10];

fuck[0]=45;

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

两个任意长的整数的求和运算 进制的转换 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 //自定义双循环链表的存储结构.

数据结构课程设计

题目: 学院: 专业班级: 学生姓名: 指导教师: 2016 年06 月2 9日

目录 一、课程设计目的 (3) 二、课程设计步骤 (3) 三、课程设计内容 (4) 四、课程设计报告 (6) 五、提交材料 (6) 六、考核方式与评分标准 (7) 七、参考文献 (8) 附录1 齐齐哈尔大学软件工程系课程设计说明书(报告)撰写规范 (9)

一、课程设计目的及要求 《数据结构与算法分析》课程设计培养计算机专业的学生的算法程序设计能力。通过上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对数据结构课程和算法的理解。使学生更好地掌握数据结构的基本概念、基本原理、及基本算法,具有分析算法、设计算法、构造和开发较复杂算法的基本能力。 要求学生能综合运用《数据结构与算法分析》的相关知识,培养学生上机解决一些与实际应用结合紧密的、规模较大的问题的能力,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析实际问题的能力并提高C语言编程技巧,培养良好的编程风格。 课程设计要求独立完成,题目自选(参考题目见三,也可自拟),但需要老师确认(6月16日前定题),一人一题,要求程序有能采用交互式工作方式的界面进行功能的选择,只能用文件存储数据和处理数据不能使用数据库。要求在教学周的第18周前完成。 二、课程设计步骤 随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。然而,编制一个10000行的程序的难度绝不仅仅是一个5000行的程序的两倍,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的课程设计的复杂度远不如(从实际问题中提出来的)一个“真正的”软件,但为了培养一个软件工作者所应具备的科学工作的方法和作风,完成课程设计的应有如下的5个步骤: 1.问题分析和任务定义 通常,课程设计题目的陈述比较简洁,或者说是有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。注意:本步骤强调的是做什么,而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。 2.数据类型和系统设计 在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个

天津大学数据结构和程序设计考研真题

天津大学数据结构和程序设计考研真题-考研资料- 笔记讲义 许多学生在考研复习的时候,都会遇到重点不明确,不知道从何复习的情况。为此,天津考研网建议,考研复习中,专业的考研复习资料,是帮助考生能够快速掌握复习重点及方法必不可少的因素,然后就是真题和讲义,可以让同学了解历年考研的出题方向和大致范围。天津考研网推出了天津大学数据结构和程序设计的考研复习资料及真题解析班,以下为详细介绍: 天津大学数据结构和程序设计考研真题等资料由天津考研网签约的天津大学计算机科学与技术学院高分考研学生历时近一月所作,该考生在考研中取得了专业课129分的好成绩并在复试中更胜一筹,该资料包含该优秀本校考生的考研经验、考研试题解题思路分析、复试流程经验介绍以及针对官方指定参考书的重难要点并根据天津大学本科授课重点整理等,从漫漫初试长路到紧张复试亮剑为各位研友提供全程考研指导攻关。 特别说明:此科目06年以前科目名称为数据结构;自06年到08年科目名称改为计算机基础(包含数据结构、程序设计、计算机原理);自09年开始全国统考,科目名称为计算机学科专业基础综合;自2013年开始由学校自主命题,科目名称改为901数据结构与程序设计。 第一部分由天津考研网提供的核心复习资料: 天津大学数据结构和程序设计资料编者序言:本文的重点在于C++,数据结构的复习和复试基本情况介绍。C++、数据结构又分别从复习规划,复习用书,重点知识点结合历年考题这四个方面来展开的。复习规划大家务必看一下,然后根据自己的实际情况在制定自己的复习时间,因为内容很多,大多数同学都在考试之前复习不完,在心理因素上就落了一节。重点知识点一定要看了,这些知识点几乎每年都会有题了。另外我还给了历年试题的答案供大家参考。有的答案是自己做的答案,可能会有疏忽的地方。望大家提出宝贵的意见和建议。复试的东西现在了解一下即可,等到进复试了,还是有足够的时间看的。另外我还给了些自己复习心得。考完后感慨很多,回顾了这多半年来自己的成败得失。希望大家从一开始就沿着比较高效的方向前进,减少不必要时间的浪费。本资料格式为A4纸打印版,总量达到了130页

第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+(□○

程序设计与数据结构-2001

北京航空航天大学程序设计与数据结构试题 (2001年) 一、问答题(10’) 一般情况下,线性表可以采用哪几种存储结构?请分别叙述每一种存储结构的构造原理与特点。 二、(10’) 已知AOE网为G=(V,E),其中V={v1,v2,v3,v4,v5,v6,v7,v8,v9,v10},E={a1, a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14},其中: a1:(v1,v2)5a2:(v1,v3)6a3:(v2,v5)3a4:(v3,v4)3 a5:(v3,v5)6a6:(v4,v5)3a7:(v4,v7)1a8:(v4,v8)4 a9:(v5,v6)4a10:(v5,v7)2a11(v6,v10)4a12:(v7,v9)5 a13:(v8,v9)2a14:(v9,v10)2 注:顶点偶对右下角的数字表示边上的权值。 请按下述过程指出所有关键路径: ee[1:10]: le[1:10]: e[1:14]: l[1:14]: 其中,ee[i]与le[i]分别表示事件v i的最早发生时间与最晚发生时间;e[i]与l[i]分别表示活动a i的最早开始时间与最晚开始时间。 三、(10’) 欲建立一文献库,其正文(文献本身)存放在一个双向循环链表的各个链接点中。 1.为便于链接点的插入、删除操作,以及按题目、发表日期、发表者名称、主题词(假设每文最多给出三个主题词)进行检索,请设计该链表的链接点结构(给出链接点每个域的名称,并说明该域内存放什么信息。注:以下各小题设计链结点结构也这样要求)。画出整个链表结构的示意图。 2.设计一个三级索引结构,其中第三级索引称为题目索引,示按文献题目构造的稠密索引,通过该级索引并根据给定题目可得到每个文献的存放地址;该级索引按文献学科类分类存放。第二级索引称为中类索引,是题目索引的索引,指出同一中类的文献题目索引的存放位置(例如农林类、气象类……,古代史类,近代史类……)。第一级索引称为大类索引,指出同一大类(如:自然科学类、历史类……)的文献的中类索引的存放位置。请设计每一级索引的结点结构,并画出该索引的整体示意图。 3.在设计一种三级索引结构,其中第三级索引仍是题目索引(与2题所述相同),第二级索引把具有相同主题词的文献题目索引地址组织在一个单链表中。第一级索引称为主题词索引,用文献给出的主题词做关键字组成杂凑表,即该级索引为一个杂凑表,能够指出具有同一主题词的文献题目索引的索引链表的第一个链结点的存储位置。该杂凑表采用链地址法处理冲突。请设计每一级索引的结点结构,并画出该索引的整体示意图。 四、(10’) 已知非空线性链表由list 五、(5’+10’) 已知求两个正整数m与n的最大公因子的过程用自然语言可以表述为反复执行如下动作:

数据结构与程序设计C++描述(Kruse著)高等教育出版社_课后答案.

Programming Principles 1 1.2 THE GAME OF LIFE Exercises 1.2 Determine by hand calculation what will happen to each of the configurations shown in Figure 1.1 over the course of five generations. [Suggestion: Set up the Life configuration on a checkerboard. Use one color of checkers for living cells in the current generation and a second color to mark those that will be born or die in the next generation.] Answer (a) Figure remains stable. (b) (c) (d) Figure is stable. 1 2 Chapter 1 _ Programming Principles (e) (f) Figure repeats itself. (g) (h) (i) Figure repeats itself. (j) (k) (l) Figure repeats itself. Section 1.3 _ Programming Style 3 1.3 PROGRAMMING STYLE Exercises 1.3

E1. What classes would you define in implementing the following projects? What methods would your classes possess? (a) A program to store telephone numbers. Answer The program could use classes called Phone_book and Person. The methods for a Phone_book object would include look_up_name, add_person, remove_person. The methods for a Person object would include Look_up_number. Additional methods to initialize and print objects of both classes would also be useful. (b) A program to play Monopoly. Answer The program could use classes called Game_board, Property, Bank, Player, and Dice. In addition to initialization and printing methods for all classes, the following methods would be useful. The class Game_board needs methods next_card and operate_jail. The class Property needs methods change_owner, look_up_owner, rent, build, mortgage, and unmortgage. The class Bank needs methods pay and collect. The class Player needs methods roll_dice, move_location, buy_property and pay_rent. The class Dice needs a method roll. (c) A program to play tic-tac-toe. Answer The program could use classes called Game_board and Square. The classes need initialization and printing methods. The class Game_board would also need methods make_move and is_game_over. The class Square would need methods is_occupied, occupied_by, and occupy. (d) A program to model the build up of queues of cars waiting at a busy intersection with a traffic light. Answer The program could use classes Car, Traffic_light, and Queue. The classes would all need initialization and printing methods. The class Traffic_light would need additional methods change_status and status. The class Queue would need additional methods add_car and remove_car. E2. Rewrite the following class definition, which is supposed to model a deck of playing cards, so that it conforms to our principles of style. class a { // a deck of cards int X; thing Y1[52]; /* X is the location of the top card in the deck. Y1 lists the cards. */ public: a( ); void Shuffle( ); // Shuffle randomly arranges the cards. thing d( ); // deals the top card off the deck } ; Answer class Card_deck { Card deck[52]; int top_card; public: Card_deck( ); void Shuffle( ); Card deal( );

长整数的加减运算系统说明文档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的非负整数,整个链表视为万进制数。 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 由于在某些工程上进行加减运算时,有时候需要对很大的长整数进行计算,但是计算机本身提供的数据类型无法保证存在几百位甚至几千位的数字,所以需要设计专门的算法系统对数据进行相应的计算。因此本系统的设计主要任务是:设计一个程序能够实现任意长整数的加减运算的程序,而且能够对一些错误异常进行辨别调整,从而迅速计算出正确无误的结果。程序输入格式是字符串,包含元素的范围是数字,都好,负号以及分号,保存时需要用到双链表将字符串每四位保存在循环链表中的一个结点中,然后在计算出运行结果。 虽然程序有些复杂,但使用方法十分简单,只需按照相关提示进行操作即可,能够为用户的学习和工作带来快捷与方便。

数据结构课程设计

<<数据结构>> 课 程 设 计 班级:111004 姓名:董丽美 学号:111004122 指导教师:史延新 完成日期:2013 _07 _10

题目一:约瑟夫环问题 【问题描述】约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n 的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m 的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出列顺序。【基本要求】利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。 【测试数据】m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序应为:6,1,4,7,2,3,5) 一 .需求分析 1.用单循环链表存储并遍历及删除节点的方法,计算并输出约瑟夫环的问题。 2.环中总人数和节点信息由用户输入,且均为正整数。3.在窗口界面输出出列顺序的编号。 二.概要设计

1.设定链表的抽象数据类型定义: ADT List{ 数据对象:D={a(i)|a(i)∝Elemset,i=1,2,…,n,n>=0} 数据关系:R1={|a(i-1),a(i)∝D,i=2,…,n}基本操作: InitList(&L) 操作结果:构造一个空的线性表 ListInsert(&L,i,e) 初始条件:线性表L已经存在。 操作结果:在L中第i个位置之前插入新的数据元素 e,L的长度增加1。 ListDelete(&L,i,&e) 初始条件:线性表L已经存在且非空,1<=i<=ListLength(L)。操作结果:删除L的第i个数据元素,并用e返回其值,L 的长度减1 。 } 2.算法的基本思想: 根据题目要求,采用单循环线性表的基本操作来实现约瑟夫环问题。首先根据所给信息生成链表节点并插入,根据节点记录密码及其所在链表中的顺序,由给出的初始访问值进行遍历,当变量i增量等于所给的值(即关键字)时,指针所指的节点处的顺序值即为所需输出的顺序号。每输出一次顺

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

一、需求分析 【问题描述】 设计一个程序实现两个任意长的整数求和运算。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。 任何整型变量的范围是:-(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)经验和体会: 通过这次学习,让我认识到自己在学习上的诸多不足。从刚拿到题目到完成整个编程,从理论到实践,虽然学到很多的的东西,但是也因为自己知识的不足,不能考虑周全,完全成功的完成此次课程设计。在认识自己的不足后,我便开始认真复习书本知识,同时与动手能力强的同学互相交流,让自己学到了很多平时

数据结构毕业设计题目整理

数据结构课程设计题目 1.飞机订票系统(限1 人完成)(顺序或链式存储) 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况; 订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班; 退票:可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 修改航班信息: 当航班信息改变可以修改航班数据文件 要求: 根据以上功能说明,设计航班信息,订票信息,客户信息的存储结构,设计程序完成功能; 2.宿舍管理查询软件(限1 人完成) 任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: 采用交互工作方式 建立数据文件,包括学生信息、宿舍信息、住宿信息,学生信息按关键字(姓名、学号)进行排序(排序方法自选,不能相同); 查询: (用二分查找实现以下操作) 按姓名查询 按学号查询 (用顺序查找实现以下操作) 按房号查询 3.校园导航问题(限1 人完成) 设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。 要求:能增加场所 4.图书借阅管理系统(限1 人完成)(顺序或链式存储) 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息); 5.学生成绩管理(限1 人完成)(顺序或链式存储) 包括:课程信息,学生信息等;能增加课程或学生。 实现功能:输入、输出、插入、删除、查找、显示、保存、排序、退出。6.活期储蓄帐目管理(限1 人完成) 活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款、取款记账;

长整数的四则运算

课程名称: 《数据结构》课程设计课程设计题目: 长整数的四则运算 姓名: 院系: 计算机学院 专业:计算机科学与技术 年级: 学号: 指导教师: 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调试分析 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

C语言程序设计和数据结构

湖南师范大学硕士研究生入学考试自命题考试大纲 考试科目代码:[967] 考试科目名称:C语言程序设计和数据结构 一、试卷结构 1) 试卷成绩及考试时间 本试卷满分为150分,考试时间为180分钟。 2)答题方式:闭卷、笔试 3)试卷内容结构 C语言程序设计部分 80% 数据结构部分 20% 4)题型结构 a: 单项选择题,共40分 b: 程序填空题,共30分 c: 程序阅读题,共25分 d: 编程题,共45分 e: 分析题,共10分 二、考试内容与考试要求 (一)C语言程序设计部分 考试内容 1、基本知识 (1)C语言的数据类型 (2)C语言中各种类型常量的表示法 (3)各类数值型数据间的混合运算 (4)C运算符 (5)关系表达式及运算,逻辑表达式及运算

2、顺序、选择与循环结构 (1)赋值语句,格式输入与输出 (2)if语句,switch语句 (3)goto、while、do-while、for、break、continue语句3、数组 (1)一维数组的定义和引用 (2)二维数组的定义和引用 (3)字符数组的定义和引用,字符串及其处理函数 4、函数 (1)函数定义与调用 (2)局部变量和全局变量 (3)变量的存储类型 (4)内部函数与外部函数 5、宏定义 (1)带参数的宏定义 (2)包含文件的处理 6、指针 (1)地址和指针的概念 (2)数组的指针和指向数组的指针变量 (3)字符串的指针和指向字符串的指针变量 (4)函数的指针和指向函数的指针变量 (5)指针数组和指向指针的数组 7、结构体和共同体 (1)结构体变量的定义和使用方法 (2)指向结构体类型变量的指针 (3)用指针处理链表 (4)共同体变量的定义和使用方法

数据结构与C语言程序设计

《数据结构与C语言程序设计》复习大纲 《数据结构与C语言程序设计》包括“数据结构”与“C语言程序设计”两门课程的内容,各占比例50%。 《数据结构》部分 指定参考书: 《数据结构教程(第二版)》唐发根编著,北京航空航天大学出版社,2005 一、概述 1.简要了解数据的逻辑结构与存储结构的基本概念; 2.了解算法的定义、算法的五个基本性质以及算法分析最基本的概念,包括算法分析的前提、目的。 二、线性表 1.了解线性关系、线性表的定义,线性表的基本操作; 2.线性表的顺序存储结构与链式存储结构(包括单链表、循环链表和双向链表)的构造原理; 3.掌握在以上两种存储结构的基础上对线性表实施的基本操作,重点包括顺序表的插入和删除、链表的建立、插入和删除、检索等操作对应的过程和算法的设计。 三、堆栈与队列 1.了解堆栈与队列(不含循环队列)的基本概念、基本操作; 2.掌握堆栈与队列的顺序存储结构与链式存储结构的构造原理; 3.掌握在不同存储结构的基础上对堆栈与队列实施插入与删除等基本操作过程。

四、树与二叉树 1.了解树型结构的基本概念,基本特征、名词术语; 2.了解完全二叉树、满二叉树的概念;二叉树的基本性质(至少要记住结论); 3.了解二叉树的顺序存储结构与二叉链表存储结构的构造原理及特点,重点是二叉链表存储结构; 4.掌握二叉树的前序遍历、中序遍历、后序遍历和按层次遍历算法(非递归算法)以及利用遍历解决有关二叉树的其它操作; 5.掌握二叉排序树的基本概念、建立(插入)和查找。 五、图 1.了解图结构的基本概念、基本名词术语; 2.掌握图的邻接矩阵存储方法和邻接表存储方法的基本构造原理与特点; 3.图的深度优先搜索和广度优先搜索的基本过程,遍历的基本作用; 4.最小生成树的求解过程,拓扑排序及其目的。 六、文件及查找 1.掌握顺序查找法、折半查找法的查找过程,了解折半查找方法的基本要求; 2.了解散列(Hash)文件的基本特点,散列函数和散列冲突的概念,处理散列冲突的方法。 七、内排序 了解插入排序法、选择排序法、泡排序法、快速排序法以及堆积排序(大顶堆积)法等排序方法的排序原理、规律和特点。 《C语言程序设计》部分 指定参考书: 《C程序设计》(第三版)谭浩强著,清华大学出版社, 2005.7

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(;;){

814程序设计与数据结构考试大纲

814程序设计与数据结构考试大纲 085211计算机技术专业 一、考试目的 本考试是全日制计算机技术专业学位研究生的入学资格考试之专业基础课,各语种考生统一用汉语答题。各招生院校根据考生参加本考试的成绩和其他三门考试的成绩总分来选择参加第二轮,即复试的考生。 二、考试的性质与范围 本考试是测试考生计算机科学基础知识的水平考试。考试范围包括本大纲规定的C++语言程序设计和数据结构。 三、考试基本要求 1. 具备扎实的C++语言程序设计基本功。 2. 具备设计数据结构和算法求解问题的基本能力。 四、考试形式 本考试采取客观试题与主观试题相结合,单项技能测试与综合技能测试相结合的方法,强调考生设计数据结构和算法并编程实现来求解问题的能力。试题分类参见“考试内容一览表”。 五、考试内容 本考试包括两个部分:C++程序设计、数据结构。总分150分。 I. C++程序设计 1. 考试要求 该部分要求考生对C++语言基本特性、面向对象程序设计方法和Visual C++编译器相关特性有很好的了解。 2. 题型 选择题、读程序写出Visual C++下的执行结果、程序填空,共75分。 II. 数据结构 1. 考试要求 该部分要求考生掌握线性表(及其扩展:栈和FIFO队列)、树(包括基本的二叉树和堆、搜索树等特殊树结构)、图等基本数据结构及其上的操作;掌握二分搜索、Hash技术及搜索树等搜索方法;掌握选择、起泡、插入等简单排序算法,堆排序、快速排序、归并排序和谢尔(希尔)等快速排序算法,以及箱子、基数排序等非比较排序算法。具备利用上述数据结构和算法以及设计新数据结构和算法来求解问题的能力。 2. 题型 选择题、简答题、算法设计题,共75分。

数据结构程序设计题目共29题

目录 题目1:设计一元多项式简单计算 (1) 题目2:链表应用1 (1) 题目3:链表应用2 (1) 题目4:通讯录 (2) 题目5:停车场管理系统............................................. 错误!未定义书签。题目6:约瑟夫环 (3) 题目7:运动会分数统计 (3) 题目8:文学研究助手问题 (3) 题目9:银行业务模拟与离散事件模拟 (4) 题目10:学生信息管理系统任务(用顺序表/链表).... 错误!未定义书签。题目11:文章编辑功能 .............................................. 错误!未定义书签。题目12:实验室管理.................................................. 错误!未定义书签。题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).. (4) 题目14:纸牌游戏任务 (5) 题目15:算术表达式求值 (5) 题目16:内部排序算法比较 (5) 题目17:哈夫曼树的构造和哈夫曼编码/译码 (6) 题目18:构造可以使n个城市连接的最小生成树 (7) 题目19:交通咨询系统中的最短路径 (7) 题目20:集合的交、并、差运算 ................................ 错误!未定义书签。题目21:长整数四则运算 (7) 题目22:机订票系统.................................................. 错误!未定义书签。题目23:图书管理系统 (8) 题目24:哈希表应用 (8) 题目25:模拟旅馆管理系统的一个功能——床位的分配与回收 (9) 题目26:地图着色问题 (9) 题目27:俄罗斯套娃问题 (10) 题目28:扫雷 (11) 题目29:用C语言设计一个日历系统 (11)

北航数据结构与程序设计真题-2013北航991真题与答案

2013年“数据结构与C程序设计”(代码991)试题 一、单项选择题(本题共20分,每小题各2分) 1.对于长度为n的线性表,建立其对应的单链表的时间复杂度为( )。 A.O(1);B.O(log2n);.O(n);D.O(n2)。 2.一般情况下,在一个双向链表中插入一个新的链结点,( )。 A.需要修改4个指针域内的指针;B.需要修改3个指针域内的指针; C.需要修改2个指针域内的指针;D.只需要修改1个指针域内的指针。 3.假设用单个字母表示中缀表达式中的一个运算数(或称运算对象),并利用堆栈产生中缀表达式对应的后缀表达式。对于中缀表达式A+B*(C/D-E),当从左至右扫描到运算数E时,堆栈中的运算符依次是( )。(注:不包含表达式的分界符) A.+*/-;B.+*(/-;C.+*-;.+*(-。 4.若某二叉排序树的前序遍历序列为50,20,40,30,80,60,70,则后序遍历序列为( )。 A.30,40,20,50,70,60,80;B.30,40,20,70,60,80,50; C.70,60,80,50,30,40,20;D.70,60,80,30,40,20,50。 5.分别以6, 3, 8, 12, 5, 7对应叶结点的权值构造的哈夫曼(Huffman) 树的深度为( )。 A.6;B.5;C.4;D.3。 6.下列关于图的叙述中,错误的是( )。 A.根据图的定义,图中至少有一个顶点; B.根据图的定义,图中至少有一个顶点和一条边(弧); C.具有n个顶点的无向图最多有n(n-1)/2条边; D.具有n个顶点的有向图最多有n(n-1)条边(弧)。 7.若在有向图G的拓扑序列中,顶点vi在顶点vj之前,则下列4种情形中不可能出现的是( )。 A.G中有弧; B.G中没有弧; C.G中有一条从顶点vi到顶点vj的路径; D.G中有一条从顶点vj到顶点vi的路径。 8.下列关于查找操作的叙述中,错误的是( )。 A.在顺序表中查找元素可以采用顺序查找法,也可以采用折半查找法; B.在链表中查找结点只能采用顺序查找法,不能采用折半查找法; C.一般情况下,顺序查找法不如折半查找法的时间效率高; D.折半查找的过程可以用一棵称之为“判定树”的二叉树来描述。 9.在一棵m阶B-树中,除根结点之外的任何分支结点包含关键字的个数至少是( )。 A.m/2-1;B.m/2;C.m/2-1;D.m/2。 10.若对序列(49, 38, 65, 97, 76, 13, 27, 49’)进行快速排序,则第一趟排序结束(即确定了第1个分界元素的最终位置)时,序列的状态是( )。 A.(13, 27, 49’, 38, 49, 76, 97, 65);B.(13, 38, 27, 49’, 49, 76, 97, 65); C.(13, 38, 49’, 27, 49, 97, 76, 65);D.(13, 38, 49’, 27, 49, 76, 97, 65)。 二、填空题(本题共20分,每小题各2分) 1.非空线性表在采( )存储结构的情况下,删除表的一个数据元素平均需要移动表中近一半元素的位置。2.将一个长度为n的单链表链接到一个长度为m的单链表后面,该算法的时间复杂度用大O符号表示为( )。 3.若完全二叉树的叶结点的数目为k,且最下面一层的结点数大于1,则该完全二叉树的深度为( )。

相关文档
相关文档 最新文档