石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx

上传人:b****4 文档编号:8322131 上传时间:2023-05-11 格式:DOCX 页数:14 大小:19.39KB
下载 相关 举报
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第1页
第1页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第2页
第2页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第3页
第3页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第4页
第4页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第5页
第5页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第6页
第6页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第7页
第7页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第8页
第8页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第9页
第9页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第10页
第10页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第11页
第11页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第12页
第12页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第13页
第13页 / 共14页
石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx

《石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx》由会员分享,可在线阅读,更多相关《石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx(14页珍藏版)》请在冰点文库上搜索。

石大远程在线考试《数据结构课程设计》8541854054813Word文档格式.docx

注销对借阅者的登记,改变该书的库存量;

1.3产品进销管理系统

针对某个行业的库房产品进销存情况进行管理,系统要求具有下列功能:

采用一定的存储结构对库房的货品及其数量进行分类管理;

可以进行产品类的添加、产品的添加、产品数量的添加;

能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;

每种产品至少包含信息:

产品名、进货日期、进货数量、销出数量、销售时间、库存量;

1.4校园导航问题

设计中国石油大学(北京)的校园平面图,至少包括所的最短路径。

10个场所,可以实现任意两个场

2.课程设计报告书写规范

课程设计报告包括该题目的需求分析、概要设计、详细设计、程序测试、感想与体会几

部分内容。

下面以“稀疏矩阵运算器”为例说明如何写课程设计报告。

题目要求:

设计一个稀疏矩阵计算器,实现两个稀疏矩阵的加法、的转置运算。

采用菜单为应用程序的界面,用户通过对菜单进行选择,相减、相乘以及矩阵转速运算。

减法、乘法以及矩阵分别实现矩阵的相加、

2.1需求分析

1.稀疏矩阵是指稀疏因子小于等于0.5的矩阵。

利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。

实现一个能进行稀疏矩阵基本运算的运算器。

2.以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现矩阵转置,以及两个

矩阵的加、减、乘的运算。

稀疏矩阵的输入形式采用三元组表示,运算结果以阵列形式列出。

3.演示程序以用户和计算机的对话方式进行,数组的建立方式为边输入边建立。

首先输入矩阵的行数和列数,并判别给出的两个矩阵的行列数是否与所要求的运算相匹配。

4.程序可以对三元组的输入属性不加以限制;

根据对矩阵的行列,三元组作之间插入排序,从而进行运算时,不会产生错误。

5.在用三元组表示稀疏矩阵时,相加、相减和相乘所产生的结果矩阵另外生成。

6.运行环境:

VC6.0++。

2.2概要设计

稀疏矩阵元素用三元组表示:

typedefstruct{

inti;

//非零元的行下标

intj;

//非零元的列下标

inte;

//矩阵非零元

}Triple;

稀疏矩阵采用三元组顺序表存储:

#define

MSXSIZE12500

//假设非零元个数的最大值为

200

#defineMAXRC10

//假定矩阵的最大行数为10

typedefstruct

{

int

mu;

//矩阵的行数

nu;

//矩阵的列数

tu;

//矩阵的非零元素个数

Tripledata[MAXSIZE+1];

//非零元三元组表,

data[0]没有用

rpos[MAXRC+1];

//各行第一个非零元素的位置表

}Tabletype;

系统主要函数及功能如下:

Menu():

主控菜单,接收用户的选项;

Input_Matrix():

输入矩阵;

Print_matrix():

输出矩阵;

Cal_matrix():

计算矩阵每行第一个非零元在三元组中的位序号;

TransposeMatrix():

矩阵转置;

Add_Matrix():

矩阵加法运算;

Sub_Matrix():

矩阵减法运算;

Multi_Matrix():

矩阵乘法运算。

模块的调用关系如图1所示。

main

Multi_MatrixTransposeMatrixAdd_MatrixSub_Matrix

Cal_Matrix

Input_MatrixPrint_Matrix

图1程序调用模块示意图

2.3详细设计

1.主函数设计

//*****************************************

//*矩阵运算主函数*

主函数中,实现用户菜单菜单的打印,并根据用户的选项执行相应的功能,主函数力求

简洁、清晰。

voidmain()

num=Menu();

//打印主菜单

while(num)

switch(num)

case1:

Multi_Matrix();

//矩阵相乘

break;

case2:

TransposeMatrix();

//矩阵转置

case3:

Add_Matrix();

//矩阵加法

case4:

Sub_Matrix();

//矩阵减法

case0:

}//switch

}//while

}

2.主菜单设计

主控菜单是用来输出提示信息和处理输入,此函数返回用户的选项,提供给main函数

中的switch语句。

对于不符合要求的选项,提示输入错误并要求用户重新输入。

将此函数

与main函数合在一起,编译运行程序,即可检查并验证菜单选项是否正确。

主菜单如下:

//*打印主控菜单函数*

intmenu()

printf("

\n主菜单"

);

\n*********************"

\n1.矩阵乘法"

\n2.矩阵转置"

\n3.矩阵加法"

\n4.矩阵减法"

\n0.退出"

scanf("

%d"

&

num);

while(num<

0||num>

4)//输入非法,重新输入

returnnum;

3.矩阵乘法运算函数

//*矩阵乘法运算算法//*****************************************

*

StatusMulti_Matrix()

Input_Matrix(&

a);

//输入矩阵a

b);

//输入矩阵b

Cal_matrix(&

//计算矩阵a每行第一个非零元的位序号

//计算矩阵b每行第一个非零元的位序号

if(a.nu!

=b.mu)//不符合矩阵乘法条件,不能相乘

returnERROR;

c.mu=a.mu;

//对矩阵c初始化

c.nu=b.nu;

c.tu=0;

if(a.tu*b.tu!

=0){

for(arow=1;

arow<

=a.mu;

arow++){/*处理矩阵a的每一行*/

for(p=1;

p<

MAXRC+1;

p++)/*当前行各元素累加器清零

*/

ctemp[p]=0;

c.rpos[arow]=c.tu+1;

if(arow<

a.mu)

tp=a.rpos[arow+1];

else

tp=a.tu+1;

for(p=a.rpos[arow];

p<

tp;

p++){//求得c中第crow行的非零元brow=a.data[p].j;

if(brow<

b.nu)

t=b.rpos[brow+1];

t=b.tu+1;

for(q=b.rpos[brow];

q<

t;

q++){

ccol=b.data[q].j;

/*乘积元素在矩阵c中的列号*/

ctemp[ccol]+=a.data[p].e*b.data[q].e;

}/*forq*/}//forpfor(ccol=1;

ccol<

=c.nu;

ccol++)

if(ctemp[ccol])/*压缩存储该行非零元*/

if((c.tu)>

MAXSIZE)

exit

(1);

c.tu++;

c.data[c.tu].i=arow;

c.data[c.tu].j=ccol;

c.data[c.tu].e=ctemp[ccol];

}/*endif*/

}/*forarrow*/

}/*if*/

Print_matrix(a);

Print_matrix(b);

Print_matrix(c);

4.矩阵转置算法

//*矩阵转置算法*

voidTransposeMatrix(){

//输入矩阵a

b.mu=a.nu;

b.nu=a.mu;

b.tu=a.tu;

if(b.tu){

q=1;

/*b.data的下标*/

for(col=1;

col<

=a.nu;

col++)//对a的每一列

for(p=1;

=a.tu;

p++)/*p为a的下标*/

if(a.data[p].j==col){//寻找矩阵a中列为

col的非零元

b.data[q].i=a.data[p].j;

b.data[q].j=a.data[p].i;

b.data[q].e=a.data[p].e;

q++;

}//if(p)

}//if(b.tu)

//输出a的转置矩阵

5.矩阵加法算法

//*矩阵加法运算函数

//*c=a+b

StatusAdd_Matrix(){

//输入矩阵b

if(a.mu!

=b.mu||a.nu!

=b.nu)

//不满足矩阵加法条件

c.mu=a.mu;

c.nu=a.nu;

ta=1;

tb=1;

tc=1;

if(a.tu*b.tu!

while((ta<

=a.tu)&

&

(tb<

=b.tu)){

if(a.data[ta].i==b.data[tb].i){

if(a.data[ta].j==b.data[tb].j){

temp=a.data[ta].e+b.data[tb].e;

if(temp!

c.data[tc].i=a.data[ta].i;

c.data[tc].j=a.data[ta].j;

c.data[tc].e=temp;

tc++;

}//endif(temp)

ta++;

tb++;

}//endif

else{

if(a.data[ta].j<

b.data[tb].j){

c.data[tc].e=a.data[ta].e;

tc++;

}//endofelseif

c.data[tc].i=b.data[tb].i;

c.data[tc].j=b.data[tb].j;

c.data[tc].e=b.data[tb].e;

tb++;

}//

if(a.data[ta].i<

b.data[tb].i){

ta++;

while(ta<

=a.tu){//处理a中剩余非零元

while(tb<

=b.tu){//处理b中剩余非零元

c.tu=tc;

6.矩阵输入算法

用于输入矩阵的行数、列数、非零元个数,以及每个非零元素。

输入算法如下:

//*矩阵输入算法

StatusInput_Matrix(Tabletype*t)

scanf(t->

mu,t->

nu,t->

tu);

//获得矩阵行列数、非零元个数

for(i=1;

i<

=tu;

i++)

data[i].i,t->

data[i].j,t->

data[i].e);

returnOK;

7.矩阵输出算法

将三元组以矩阵方式输出在屏幕上,算法如下:

//*矩阵输出函数

StatusPrint_matrix(Tabletypem){

k=1;

=m.mu;

i++){

for(j=1;

j<

=m.nu;

j++){/*非零元素*/

if((m.data[k].i==i)&

(m.data[k].j==j)){

printf(m.data[k].e);

k++;

printf(“0”);

/*零元素*/

\n"

8.Cal_matrix函数

在矩阵乘法运算时,需要统计矩阵每行第一个非零元在三元组表中的位序号,算法如下:

voidcal_matrix(Tabletype*m){

//计算矩阵中每一行中第一个非零元的位序号

for(row=1;

row<

=m->

row++)

num[row]=0;

for(t=1;

t<

t++)

num[m->

data[t].i]++;

m->

rpos[1]=1;

for(row=2;

rpos[row]=m->

rpos[row-1]+num[row-1];

2.4程序测试

在这部分给出程序运行结果的屏幕截图,以及测试分析。

2.5感想与体会

这部分给出算法设计过程中的问题、程序调试过程的问题与收获。

3.要求

源程序没有语法错误,运行结果正确;

设计报告按照规范书写。

课程设计最后提交内容包括:

源程序与课程设计报告。

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2