已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国矿业大学徐海学院软件开发基础实践报告姓 名: 学 号: 专 业: 计算机科学与技术 指导教师: 职 称: 2012 年 6 月 30 徐州姓名/学号:班级:一、程序来源:网络二、程序项目名称:矩阵运算3、 程序原理:此程序为矩阵运算的相关程序,用来计算包括两矩阵的加、减、乘运算,求矩阵的转置矩阵、最大值元素、最小值元素及对角线元素之和等运算。此程序涉及了老师讲授的多个知识点,包括:for、if、printf及scanf 等语句,顺序、选择、循环等结构。四、程序功能:利用for、if、printf及scanf 等语句来实现所需功能。输入矩阵a和b的元素之后,依次计算:程序一:计算a+b矩阵;程序二:计算a-b矩阵;程序三:计算a*b矩阵;程序四:计算a的转置矩阵;程序五:计算a矩阵的最小值元素;程序六:计算a矩阵的最大值元素;程序七:计算a矩阵的主对角线元素之和;程序八:计算a矩阵的副对角线元素之和;程序九:计算a矩阵的上三角元素之和;程序九:计算a矩阵的下三角元素之和;五、程序内容(输入输出): 运行结果如图所示:6、 数据流分析(定义的变量,类型,数组,类型,结构体):七、程序代码分析(每个函数和代码模块的功能作用分析):#includestdio.hvoid main() int a33,b33,c33, int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0; printf(矩阵运算n); printf(n); printf(请输入a矩阵元素:n); for(i=0;i3;i+) /*通过二重循环给a矩阵的元素赋值*/ for(j=0;j3;j+) scanf(%4d,&aij); printf(a矩阵:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,aij); printf(n); printf(n); printf(请输入b矩阵元素:n); for(i=0;i3;i+) /*通过二重循环给b矩阵的元素赋值*/ for(j=0;j3;j+)scanf(%4d,&bij); printf(b矩阵:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,bij); printf(n); printf(n); printf(程序一:计算a+b矩阵n); /*计算a+b矩阵并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d,cij); printf(n); printf(n); printf(程序二:计算a-b矩阵n); /*计算a-b矩阵并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij-bij; printf(%6d,cij); printf(n); printf(n); printf(程序三:计算a*b矩阵n); /*计算a*b矩阵(c矩阵)并输出*/ for(i=0;i3;i+) /*最外层循环控制c矩阵的行数*/ for(j=0;j3;j+) /*次外层循环控制c矩阵的列数*/ for(k=s=0;k3;k+) /*计算c矩阵的每个元素的值*/ s+=aik*bkj; cij=s; for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,cij); printf(n); printf(n); printf(程序四:计算a的转置矩阵n); /*计算a的转置矩阵并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) cji=aij; for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,cij); printf(n); printf(n); printf(程序五:计算a矩阵的最小值元素n); /*计算a矩阵的最小值元素min并输出*/ min=a00; for(i=0;i3;i+) for(j=0;j3;j+) if(aijmin) min=aij; printf(min=%dn,min); printf(n); printf(程序六:计算a矩阵的最大值元素n); /*计算a矩阵的最大值元素max并输出*/ max=a00; for(i=0;i3;i+) for(j=0;jmax) max=aij; printf(max=%dn,max); printf(n); printf(程序七:计算a矩阵的主对角线元素之和n); /*计算a矩阵的主对角线元素之和sum1并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i=j) sum1+=aij; printf(sum1=%dn,sum1); printf(n); printf(程序八:计算a矩阵的副对角线元素之和n); /*计算a矩阵的副对角线元素之和sum2并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i+j=2) sum2+=aij; printf(sum2=%dn,sum2); printf(n); printf(程序九:计算a矩阵的上三角元素之和n); /*计算a矩阵的上三角元素之和sum3并输出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(ij|i=j) sum3+=aij; printf(sum3=%dn,sum3); printf(n); printf(程序十:计算a矩阵的下三角元素之和n); /*计算a矩阵的下三角元素之和sum4并输出*/ for(i=0;i3;i+) for(j=0;jj|i=j) sum4+=aij; printf(sum4=%dn,sum4); printf(n); printf(运算完毕!n); /*运算完毕*/ printf(n);八、控制流分析(源程序整体流程图): printf(计算a+b矩阵:n); for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d); printf(n);九、源代码优点,好处:本程序是通过二叉树的链表方式存储数据,计算二叉树每个结点的频数,利用二叉树的层次遍历,输出二叉树的每个结点的频数,对于较大规模的作业都能很快地得到运行结果。而且整个程序是基于链表和二叉树这种数据结构来实现的,编程风格一致,容易理解。十、总结及心得体会: 通过此次课程设计,使我更加扎实的掌握了有关用层次遍历访问二叉树序列频数的问题。我知道,其实有很多比如像素、图像等等都用到层次遍历来计算它们的频数,由此也为自己第一次踏入这门知识的领域而感到骄傲。虽然在本次课程设计中,我曾遇到过种种问题。抱着对新领域的探索与求知,我一遍一遍的检查,终于找到了问题的所在,也暴露出了前期我在这方面上的知识欠缺与经验不足。实践出真知,通过自己亲自动手制作,使我掌握的知识不再是纸上谈兵。作为一名计算机专业的学生,从最开始学习的高等代数一直到已经即将结束的离散数学。我从终于将所学习的数学知识,在计算机上得到了应用,我觉得有必要对这门课程设计中自己的所感进行一次总结,希望对初学者有一定的帮助与启迪。为什么用面向对象的思想来设计数据结构用面向过程的程序设计方法,来进行数据结构的设计,学习时比较容易理解与掌握。但它的数据一般是事先具体给定的,是为其功能函数服务的,函数起着主导作用。以函数为中心,对于函数的运用并不方便。以排序问题为例,用于排序的函数不少,但对于一个实际问题,究竟应该选择哪一种排序函数,还必须根据实际问题的数据结构来定。对于链表,你总不能选择冒泡函数来进行排序吧。既然以函数为中心对于解决实际问题并不方便,那么,就只能选择以数据为中心,将为数据服务的函数与它绑定在一起,使这些服务于数据的函数成为数据的一部分。这就是面向对象程序设计中类的概念。首先要感谢我的老师给我们提供了这次课程设计的机会,让我将平时所学习的知识更加的系统化。老师给予的指导,提供的支持与帮助,是我能够完成本次课程设计的最主要的原因。我还要感谢给予我帮助的网络论坛上的朋友们,你们提供的宝贵意见,使我的程序能够进一步的优化。最后还要感谢在参考文献中列出的各位编者,你们所写的书在我课程设计完成的道路上给过我无数的指导。这份课程设计,是我对新领域的一次探索,我已经上路了。十一、对源程序过程及方法、手段的改进建议: 基本算法:按照题目要求,是按前进前出来遍历二叉树的,所以必然要用到队列来存储其结点,此题是按层次遍历二叉树,若按先序、中序、后序来遍历二叉树,采用堆栈即可简单实现,在此不在论述。 思路:先访问其根结点,将根结点指针送入队列,然后取出根结点指针,若根结点有左子树,则将其左子树入队列;若有右子树,将右子树入队列,遍历访问树即可。#include#include#define maxsize 10typedef struct binode char data; struct binode *lchild,*rchild;binode,*bitree; /定义树结点结构typedef struct queuenode bitree chmaxsize; int front; int rear;queuenode; /定义队列结点结构/建树int createbitree(bitree &T,int &sum) char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(bitree)malloc(sizeof(binode) return 0; T-data=ch; sum+; createbitree(T-lchild,sum); createbitree(T-rchild,sum); return 1;/初始化一个带头结点的队列void initqueue(queuenode &q) /q.ch=(bitree*)malloc(maxsize*sizeof(binode); q.front=q.rear=0;/入队列int enqueue(queuenode &q,bitree p) if(q.rear+1)%maxsize=q.front) printf(队列满!n); return 0; q.chq.rear=p; q.rear=(q.rear+1)%maxsize; return 1;/出队列void dequeue(queuenode &q,bitree &p) p=q.chq.front; q.front=(q.front+1)%maxsize; char data; data=p-data; printf(%c ,data);/判断队列是否为空int queueempty(queuenode q) if(q.front=q.rear) return 1; return 0;/按层次遍历树中结点void traverse(bitree bt) queuenode q; bitree p; initqueue(q); p=bt; enqueue(q,p); while(queueempty(q)!=1) dequeue(q,p); if(p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上家校活动方案
- 疫情过后假期活动方案
- 篝火晚会自驾活动方案
- 登山新颖活动方案
- 白内障义诊活动方案
- 相扑游戏活动方案
- 策划职工活动方案
- 相亲室内游戏活动方案
- 纸质图书活动方案
- 看软件充值活动方案
- 2016年上外杯-初赛英语试题(原卷版)
- 道路工程测量实习报告
- PKPM系列之-PKPT项目管理软件使用说明
- GB/T 37546-2019无人值守变电站监控系统技术规范
- GB/T 32381-2015全地形车辆轮胎
- GB/T 231.2-2012金属材料布氏硬度试验第2部分:硬度计的检验与校准
- GB/T 17505-2016钢及钢产品交货一般技术要求
- 建筑工地电动车辆安全检查验收表
- 道路交通标志和-标线课件
- 医院医疗器械询价采购相关表格(套)
- 初中数学华东师大七年级上册(2023年新编)第3章 整式的加减整式的加减 教案
评论
0/150
提交评论