武汉理工大学继续教育学院计算机应用技术《数据库实践报告》学生实践课程

2023年8月1910:08:40发布者:火花 248 views 举报
总字数:约12165字
第1页

第2页

第3页

第4页

武汉理工大学继续教育学院

学生实践课程报告

学习中心(函授

站)

主要内容

课程实践

计算机应用技术

辅导教师

1

主要内容及完成情况

一、课程训练目标

本课程的实践环节训练目标如下:

1、通过该课程的课程设计加深学生对课堂知识的理解;通过算法设计、编程提高学生的动手能力;

2、通过要求学生结合程序设计、数据结构、计算机原理等相关知识进行综合训练,提高学生综合

应用能力。

二、要求完成的主要任务

1.在学习完数据结构的双向循环链表后,为了能够加深对双向循环链表的理解和应用,本课程

设计用双向循环链表实现任意长度证书相加的操作。

2.本设计要求利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输

入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。

3.设计与编码在 VC++6.0 平台上开发、调试、模拟运行。

三、应完成的设计成果

1、需求分析

需要开发一个程序,该程序能够实现任意长的整数加法,该程序能够正确执行加法运算,并将结

果按照每四位加逗号的形式输出。如:1,0000,0000,0000,0000。

(l)输入的形式和输入值的范围

输入按照-XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX...的格式输入,范围不限。

(2)输出的形式

输出按照输入按照-XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX...的格式输出。

(2)程序所能达到的功能

程序能够将用户输入的-XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX...形式的两个加数存入

双向循环链表,并调用求和函数,将两个整数相加,并以-

XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX...格式输出两个整数相加的结果。

2、概要设计

(1)抽象数据类型定义

定义双向链表:

typedef struct DualNode

{

int data;

struct DualNode *prior, *next;

}DualNode, *DualList;

(1)函数定义

DualList InitList(int sign) //初始化双向链表

void InsertNodeAtTail(DualList L, int data) //在链表尾部插入新节点

void InsertNodeAtHead(DualList L, int data) //在链表头部插入新节点

void PrintList(DualList L) //顺序输出链表

DualList InputData() //链表赋值

void DelNode(DualList L, DualNode *p) //删除链表节点

2

void Add(DualList a, DualList b, DualList c) //操作数做加法

void Sub(DualList a, DualList b, DualList c) //操作数做减法

DualList AddList(DualList a, DualList b) //两个任意长整数链表相加

3、详细设计

(1)模块设计

初始化双向链表子模块:

DualList InitList(int sign)

{

//头结点存放符号位,1 为正,-1 为负

DualList L;

L = (DualList)malloc(sizeof(DualNode));

L->next = L->prior = L;

L->data = sign;

return L;

}

在链表尾部插入新节点:

void InsertNodeAtTail(DualList L, int data)

{

//尾插,用于存储数据的输入

DualNode *s;

s = (DualList)malloc(sizeof(DualNode));

s->data = data;

s->next = L;

s->prior = L->prior;

L->prior->next = s;

L->prior = s;

}

在链表头部插入新节点:

void InsertNodeAtHead(DualList L, int data)

{

// 即插在头结点之后,用于计算结果的存储

DualNode *s;

s = (DualList)malloc(sizeof(DualNode));

s->data = data;

s->next = L->next;

s->prior = L;

L->next->prior = s;

L->next = s;

}

顺序输出链表:

void PrintList(DualList L)

{

//打印结果

int FirstTime = 1;

DualNode *p = L;

if (p->data == -1) printf("-");

p = p->next;

while(p != L)

{

if (FirstTime)

{

FirstTime = 0;

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

}

else

{

printf(",%4d", p->data);

}

p = p->next;

}

printf("\n");

}

链表赋值:

DualList InputData()

{

int FirstNum = 1, data;

char c;

DualList L;

L = (DualList)malloc(sizeof(DualNode));

L->next = L->prior = L;

3

printf("Please Input as Format: -1234,1234,1234\n");

if ((c = getchar()) == '-')

L = InitList(-1);

else

L = InitList(1);

if (isdigit(c))

// 退格处理

ungetc(c, stdin);

do{

scanf("%d", &data);

InsertNodeAtTail(L, data);

}while((c = getchar()) != '\n');

printf("Your Input is:\n");

PrintList(L);

return L;

}

删除链表节点:

void DelNode(DualList L, DualNode *p)

{

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

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

free(p);

}

操作数做加法:

void Add(DualList a, DualList b, DualList c)

{

DualList pa, pb;

int carry = 0, tmp;

pa = a->prior;

pb = b->prior;

while((pa != a) && (pb != b))

{

tmp = pa->data + pb->data + carry;

if (tmp >= 10000)

{

carry = 1;

tmp -= 10000;

}else

carry = 0;

InsertNodeAtHead(c, tmp);

pa = pa->prior;

pb = pb->prior;

}

while(pa != a)

{

// pb = b

tmp = pa->data + carry;

if (tmp >= 1000)

{

carry = 1;

tmp -= 10000;

}

else

carry = 0;

InsertNodeAtHead(c, tmp);

pa = pa->prior;

}

while(pb != b)

{

// pa = a

tmp = pb->data + carry;

if (tmp >= 1000)

{

carry = 1;

tmp -= 10000;

}

else

carry = 0;

InsertNodeAtHead(c, tmp);

pb = pb->prior;

}

if (carry != 0)

InsertNodeAtHead(c, 1);

}

操作数做减法:

void Sub(DualList a, DualList b, DualList c)

{

DualList pa, pb, pc;

int borrow = 0,tmp;

pa = a->prior;

总页数:12
提示:下载前请核对题目。客服微信:diandahome
下载的文档都包含参考答案
特别声明:以上内容(如有图片或文件亦包括在内)为“电大之家”用户上传并发布,仅代表该用户观点,本平台仅提供信息发布。