矿大软件课程设计第四阶段实验报告.docx
- 文档编号:29310758
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:11
- 大小:52.28KB
矿大软件课程设计第四阶段实验报告.docx
《矿大软件课程设计第四阶段实验报告.docx》由会员分享,可在线阅读,更多相关《矿大软件课程设计第四阶段实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
矿大软件课程设计第四阶段实验报告
编号:
()字号
《软件课程设计》报告
班级:
计科13-4班
姓名:
林森
学号:
08133293
指导老师:
中国矿业大学计算机科学与技术学院
2014年6月
数据结构
1求矩阵的转置
1.1需求分析:
程序要求:
输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),进而求出其转置矩阵B(数据放动态数组B中)并输出结果。
输入数据的类型:
整型
输出形式:
请输入矩阵的大小:
{
请输入行数:
_
请输入列数:
_
}
请向矩阵输入数据:
{
请输入第×行的数据:
____
请输入第×行的数据:
____
请输入第×行的数据:
____
}
该矩阵的转置为:
___
___
___
___
1.2概要设计:
对于本道题首要解决的问题是如何动态的建立矩阵。
我的思路是,若需建立m×n的矩阵,先开辟一个n个连续的空间用于存放每一行的第一个元素的地址,然后通过循环语句,每次循环都开辟一个m个连续的空间用于存放矩阵的每一行的元素,并将首地址赋值给n个空间的数组的相应位置,最后根据矩阵转置的定义编写相应的求转置的函数,该程序就算完成了。
矩阵存储方式图如下:
1.3详细设计与编码:
#include
#defineOK1
#defineERROR0
usingnamespacestd;
typedefintElemType;
typedefintStatus;
typedefstruct
{
intlownum;
intlinenum;
ElemType**low;
ElemType*line;
}Matrix;
StatusCreatMatrix(Matrix&M,intm,intn)
{
M.lownum=m;
M.linenum=n;
M.low=(ElemType**)malloc(m*sizeof(ElemType));
if(!
M.low)returnERROR;
cout<<"请向矩阵输入数据:
"< cout<<"{"< for(inti=0;i { M.line=(ElemType*)malloc(n*sizeof(ElemType)); if(! M.line)returnERROR; *(M.low+i)=M.line; cout<<"请输入第"< "< for(intj=0;j { cin>>*(M.line+j); } } cout<<"}"< returnOK; }//CreatMatrix StatusMatrixTranspose(Matrix&M,Matrix&N) { N.lownum=M.linenum; N.linenum=M.lownum; N.low=(ElemType**)malloc(N.lownum*sizeof(ElemType)); if(! N.low)returnERROR; for(inti=0;i { N.line=(ElemType*)malloc(N.linenum*sizeof(ElemType)); if(! N.line)returnERROR; *(N.low+i)=N.line; } for(i=0;i { for(intj=0;j { *(*(N.low+i)+j)=*(*(M.low+j)+i); } } returnOK; }//MatrixTranspose StatusOutputMatrix(MatrixM) { for(inti=0;i { for(intj=0;j { cout<<*(*(M.low+i)+j)<<""; } cout< } returnOK; }//Output intmain() { intm,n; MatrixM,N; cout<<"请输入矩阵的大小: "< cout<<"{"< cout<<"请输入行数: "< cin>>m; cout<<"请输入列数: "< cin>>n; cout<<"}"< CreatMatrix(M,m,n); cout<<"该矩阵的转置为: "< MatrixTranspose(M,N); OutputMatrix(N); return0; } 1.4运行结果: 1.5用户使用: 使用该程序仅需按照输出提示进行输入即可,简单实用! 1.6设计体会: 经过本次实验我又重温了一下数据结构的知识,我掌握了空间的动态分配,这是我最大的收获。 刚开始想用一个连续的空间需借助数组,因为一年级的时候曾编过这个程序,而现在感觉用数组开辟空间往往要浪费掉很多的空间,同时这种用动态的方式分配空间可以大大的增加空间的利用率。 2数据结构统计选票 2.1需求分析: 程序要求: 设计一个统计选票的算法,输出每个候选的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,3,……,N,且每张选票选且只选一人) 输入数据的类型: 整型 输出形式: 请输入候选人的个数: _ 候选人的编号依次为: _____ 请输入选票的总数: _ 请输入候选人的编号: _ 编号为×的候选人得×个选票 编号为×的候选人得×个选票 编号为×的候选人得×个选票 Pressanykeytocontinue 2.2概要设计: 以单链表形式存放选票,每个结点的data域存放该选票所选的候选人的编号,用一个数组a统计得票结果,最后通过遍历整个单链表读出每个结点的data域,根据data的值找到候选人在统计得票的数组的位置,该位置上的元素加1。 图释如下: 2.3详细设计与编码: #include usingnamespacestd; #defineNULL0 typedefstructLNode { intdata; structLNode*next; }*LinkList; voidCreatList(LinkList&L,intn) { LinkListp; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(inti=0;i { p=(LinkList)malloc(sizeof(LNode)); cout<<"请输入候选人的编号: "< cin>>p->data; p->next=L->next; L->next=p; } }//CreatList intmain() { LinkListL,p; intn,m,i; cout<<"请输入候选人的个数: "< cin>>m; cout<<"候选人的编号依次为: "< for(i=1;i<=m;i++) { cout< } cout< cout<<"请输入选票的总数: "< cin>>n; CreatList(L,n); int*a; a=(int*)malloc(m*sizeof(int)); for(i=0;i a[i]=0; p=L->next; for(i=0;i { a[p->data-1]++; p=p->next; } for(i=0;i { cout<<"编号为"< } return0; } 2.4运行结果: 2.5调试分析: 在运行程序时,程序给出候选人的编码。 在输入选票信息时,误输入了候选人的编码,程序不会显示错误的警告这是本程序的不足。 需设置一个循环语句,循环条件是输入的数据不符合要求,然后进行重新输入,直至达到要求后才跳出循环执行下面的语句。 2.6用户使用: 使用该程序仅需按照输出提示进行输入即可,但要确保输入的编号不要超出程序给的编号范围,这是本软件的一个不足,不过软件用起来还可以。 2.7设计体会: 做完这个实验,让我加深了对单链表的理解。 我收获最大的是学会了如何创建单链表。 该实验给了我好多启发,我发现生活中的好多事物都可以用单链表的方式实现,比如描述一个班级同学的信息,就可以用单链表的方式实现,每个结点的数据域用来存放班里每个同学的信息,指针域指向单链表的下一个元素。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 课程设计 第四 阶段 实验 报告