湘 潭 大 学
数据结构与算法实验报告
题目:
学院
专业班级 学
号
学生姓名 指导教师
完成日期
目 录
1、实验要求 ................................................................................................................. 1
1.1 实验目的 ........................................................................................................ 1 1.2实验内容 ......................................................................................................... 1 2、逻辑设计 ................................................................................................................. 2
2.1 总体结构 ...................................................................................................... 2 2.2 功能模块分析 .............................................................................................. 2
2.2.1 求和模块 ............................................................................................. 2 2.2.2 乘积模块 ............................................................................................. 3
3、存储结构与算法设计 ............................................................................................. 5
3.1 存储结构 ...................................................................................................... 5 3.2算法描述 ......................................................................................................... 5
3.2.1 函数名定义 ......................................................................................... 5 3.2.2 函数名1 .............................................................................................. 6 3.2.2 函数名2 .............................................................................................. 6
4、算法应用实现 ......................................................................................................... 8
4.1 主函数程序流程图 ........................................................................................ 8 4.2 运行结果 ........................................................................................................ 8 总结................................................................................................................................ 9 数据结构与算法III指标点达成情况分析 ................................................................ 10 附录.............................................................................................................................. 12
1、实验要求
1.1 实验目的
目的:掌握对称矩阵的压缩储存方法及相关算法设计。
1.2实验内容
(宋体, 字体小四号,行距20磅)
内容:已知A和B为两个n*n阶的对称矩阵,在输入时,对称矩阵只输入下三角形元素,存入一维数组,如图6.15所示(对称矩阵M存储在一维数组A中),设计一个程序exp6-5.cpp实现以下功能。
(1)求对称矩阵A和B的和。 (2)求对称矩阵A和B的乘积。
1
2、逻辑设计
2.1 总体结构
说明该算法包含那些功能模块,可以用文字也可以用图说明。
通过main()函数的数字进行构建a,b
计算矩阵的乘积a*b 计算矩阵的和a+b 2.2 功能模块分析
(基于数据的逻辑结构,描述各个功能模块所需完成的具体工作) 2.2.1 求和模块
总体描述:通过main()函数来构建a,b矩阵,进而调用函数来求得a+b
流程图:
调用函数求得a+b 求和模块流程图
求得a,b 求和算法描述
static void madd(int a[], int b[], int c[][N])
2
{
int i, j;
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
c[i][j] = value(a, i, j) + value(b, i, j); } } }
2.2.2 乘积模块
总体描述:通过main()函数来构建a,b矩阵,进而调用函数来求得a*b
流程图:
调用函数求得a*b 求和模块流程图
求得a,b 求和算法描述
static void mult(int a[], int b[], int c[][N]) {
int i, j, k, sum;
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
sum = 0;
3
for(k = 0; k < N; k++) {
sum = sum + value(a, i, k) * value(b, k, j); }
c[i][j] = sum; } } }
4
3、存储结构与算法设计
3.1 存储结构
描述数据的存储的定义。
int a[M] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //a表示压缩存储的对称矩阵 int b[M] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; int c1[N][N], c2[N][N];
3.2算法描述
3.2.1 函数名定义
返回压缩存储a中a[i][j]的值 算法思路
对称矩阵M的第i行和第j列的元素的数据存储在一维数组a中的位置k的计算公式:
1、当i大于或等于j时,k = (i * (i + 1)) / 2 + j (下三角) 2、当i小于j时,k = (j * (j + 1)) / 2 + i (上三角) static int value(int a[], int i, int j) 求压缩存储a和b的和
static void madd(int a[], int b[], int c[][N]) 求压缩存储a和b的乘积
static void mult(int a[], int b[], int c[][N]) 输出压缩存储a static void disp1(int a[])
输出对称矩阵c
static void disp2(int c[][N])
5
3.2.2 函数名1
static void madd(int a[], int b[], int c[][N])//求和 1、程序流程图
2、函数定义
static void madd(int a[], int b[], int c[][N]) {
int i, j;
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
c[i][j] = value(a, i, j) + value(b, i, j); } } }
3.2.2 函数名2
static void mult(int a[], int b[], int c[][N])//乘积 1、程序流程图
调用函数求得a*b 6
求得a,b 调用函数求得a+b 求得a,b
2、函数定义
static void mult(int a[], int b[], int c[][N]) {
int i, j, k, sum;
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
sum = 0;
for(k = 0; k < N; k++) {
sum = sum + value(a, i, k) * value(b, k, j); }
c[i][j] = sum; } } }
7
4、算法应用实现
4.1 主函数程序流程图
计算矩阵的乘积a*b 通过main()函数的数字进行构建a,b 计算矩阵的和a+b 4.2 运行结果
8
总结
本系统是采用C语言技术开发的,由于在这个阶段中,基本是处于边学习边实践的状态,基础知识还不是很牢靠,加之自身水平原因,程序还是有许多不足之处。,比如界面模块做的不够好、实现的功能不够完整、界面需要更精确的美化。
经过这一段时间的努力,收获了很多,在收获的同时也发现了很多的不足,回首论文的写作过程,得到了许多人的帮助,尤其是我的实训老师,在我论文的完成过程中给予了我许多的帮助和鼓励。在系统开发的两个月里,我受到了指导老师的细心指导,老师老师严谨的指导态度与深厚的理论知识都让我受益非浅,让我学到了很多的东西,无论是理论还是实践都使我的知识有很大的提高。通过本次实训,我掌握了C编程技能,对C语言有了较深的理解。比较全面的巩固了编程思想.也通过本次实训,使我懂得在在编程工作中,程序员的工作态度以及良好的习惯的重要性
经过一学期的C语言学习,对C语言编程有了一定的认识,在做这个程序设计的时期,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。之后我查阅各种资料,无论是书本上的,还是网上的,只要是我认为有价值的,我都认真看,分析。接着,我就在一张白纸上列出了自己的思路。终于在两周的时间内完成了学生信息管理系统这一项目。当程序运行结果看到自己所想达的要求界面时感到很欣慰,虽然只是一个小的项目,但是却是自己第一次完成的一个完整项目,我也从中学到了很多书本知识不能体现的东西,对C语言也有了更深一步的认识与了解。
通过这次的程序设计,我发现自己平时对于编程实际操作的匮乏,没有把书本上的知识真正的掌握牢固,仍然有许多的问题考虑不全面。我相信,在今后的编程道路上,我一定会更加仔细认真,积累经验,成为一名合格的程序员。
9
数据结构与算法III指标点达成情况分析
数据结构与算法III达成毕业要求指标点
达成情况自评等级 数据结构与算法III教学大纲的能力指标点 5-完全达成;4-达成;3-基本达成;2-未达成;1-完全未达成 本实习 对该项能力指标点的具体体现(需说明在文档的第几页以及基本内容) 达成情况自评 3-1 能根据需求确定设计目标,提出合理的解决方案。 4-2 能够实现仿真实验或测试方案,并对仿真、测试或实验结果进行分析和解释,通过信息综合得出有效的结论,并用于调整系统或功能单元模块参数。
10
11
附录
参考程序:
(Courier New, 5号,行距20磅)
/**
* 实验题目:
* 求两个对称矩阵之和与乘积 * 实验目的:
* 掌握对称矩阵的压缩存储方法及相关算法设计 * 实验内容:
* 已知A和B为两个nxn阶的对称矩阵,输入时,对称矩阵只输入下三角形元素, * 存入一维数组。设计程序,完成如下功能: * 1、求对称矩阵A和B的和。 * 2、求对称矩阵A和B的乘积。 */
#include #define N 4 #define M 10 /*-----------------------返回压缩存储a中a[i][j]的值-----------------------*/ /** * 算法思路 * 对称矩阵M的第i行和第j列的元素的数据存储在一维数组a中的位置k的计算公式: * 1、当i大于或等于j时,k = (i * (i + 1)) / 2 + j (下三角) * 2、当i小于j时,k = (j * (j + 1)) / 2 + i (上三角) * */ static int value(int a[], int i, int j) { 12 if(i >= j) return a[(i * (i + 1)) / 2 + j]; else return a[(j * (j + 1)) / 2 + i]; } /*-----------------------求压缩存储a和b的和-----------------------*/ static void madd(int a[], int b[], int c[][N]) { int i, j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { c[i][j] = value(a, i, j) + value(b, i, j); } } } /*-----------------------求压缩存储a和b的乘积-----------------------*/ static void mult(int a[], int b[], int c[][N]) { int i, j, k, sum; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { sum = 0; for(k = 0; k < N; k++) { sum = sum + value(a, i, k) * value(b, k, j); } 13 c[i][j] = sum; } } } /*-----------------------输出压缩存储a-----------------------*/ static void disp1(int a[]) { int i, j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { printf(\"%4d\ } printf(\"\\n\"); } } /*-----------------------输出对称矩阵c-----------------------*/ static void disp2(int c[][N]) { int i, j; for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { printf(\"%4d\ } printf(\"\\n\"); } } 14 int main(int argc, char *argv[]) { int a[M] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //a表示压缩存储的对称矩阵 int b[M] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; int c1[N][N], c2[N][N]; printf(\"a矩阵:\\n\"); disp1(a); printf(\"b矩阵:\\n\"); disp1(b); madd(a, b, c1); printf(\"a+b:\\n\"); disp2(c1); mult(a, b, c2); printf(\"a*b:\\n\"); disp2(c2); return 0; } 15 程序设计实践报告评阅 序号 1 2 3 4 评阅内容 报告格式是否规范,撰写是否认真 报告内容是否充实,有无详细的实习内容介绍 是否认真详细地总结了本次程序设计实践的收获和体会 报告是否附有相关附录 权重系数 0.10 0.60 0.10 0.20 评定成绩 评分 程序设计实践报告评阅成绩 2、程序设计实践综合成绩评定: 序号 1 2 3 4 考核内容 考勤与纪律 程序实作 表达能力 程序设计实践报告 权重系数 0.1 0.5 0.1 0.3 评定成绩 评分 程序设计实践评定加权总分 总 成 绩: 指导教师: 年 月 日 16 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务