欢迎来到天天文库
浏览记录
ID:41693176
大小:192.48 KB
页数:17页
时间:2019-08-30
《编制函数实现矩阵运算》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编制函数实现矩阵运算C语言课程设计报告2012年9月1日目录K设计目的与要求22、总体设计23、详细设计24、调试分析5、设计总结及心得体会166、答辩记录167、教师意见171.1设计目的:巩固对c语言基本知识与技能的掌握,并11利用所学解决简单的程序设计问题。1.2.1设计要求:任选所给题目之一,也可以自己找难度相当的题目。其中A级题目可以一人完成也可以两人合作完成,B级要求个人单独完成。要对源程序进行注释和分析,并且工整书写程序。1.2.2题目:编制不同的函数实现以下矩阵运算的功能要求(a)矩阵加减;(b)矩阵数乘;(c)矩阵乘法;(d)矩阵转置。2.总体设计2.1(2)转置、数乘运算函
2、数流程图2.2子函数流程图(1)加法、减法、乘法运算函数流程图3.详细设计整个程序由一个主函数和五个子函数组成。主函数中通过调用子函数來完成运算过程,这样使得主函数看起来清晰明了,需要修改时也方便简洁,符合模块化设计的原则。在主函数中定义了两个整型变量chi和ch2,将chi的值初始化为1,以保证第一次计算的运行,在每一次计算结束后都会显示“重新运算?”,根据提示输入数字赋值给chi,从而决定是否执行while循环中的内容。ch2是用來选择运算类型的,主函数源代码如下:#include〈stdio.h>#includcintmain(){voidchcngO;/*函数声明*
3、/voidadd();voidjian();voidshuchengO;voidzhuanzhi();intchl=l,ch2;while(chl==l)/*设置循环,在一次运行里可以进行多次运算*/{printf(〃请选择运算类型l:加法2:减法3:乘法门4:数乘5:转置);/*显示选项,选择运算类型*/scanf&ch2);if(ch2==l)if(ch2==2)if(ch2==3)if(ch2==4)辻(ch2==5)add();/*根据不同的选择,执行相应的函数*/jian();cheng();shuchengO;zhuanzhi();printf(,z重新运算?
4、l是0否");/*显示提示,根据提示输入选项选择是否继续计算,不继续便结束程序*/scanf&chl);}return0;}各种运算所对应的函数如下:加法voidadd0:减法voidjian():乘法voidcheng():数乘voidshuchengO;转置voidzhuanzhi()。每个子函数都没有返回值,都是在子函数内部完成运算,并显示结果。每个子函数都是在一开始的时候询问矩阵的行数以及列数,然后根据显示的提示來输入数字,再将输入的数据赋给各自相应的整型变量。这样子设计是为了根据需要的大小來开辟二维数组空间,而不是从一开始就定义好数组及其大小,如inta[80][80K根据需要开
5、辟二维数组可以避免浪费原本不必要占用的空间,更具有灵活性,不会将矩阵的行数和列数限制在特定的范围内,如a[80][80]最多只能用来存放80行*80列的方阵,即便将80改成800,也是有所限制的。对于数乘和转置,是单个矩阵的运算,所以不用判断输入的矩阵之间是否可以计算。但是进行加减运算时,两个矩阵之间的行数和列数要都相等才能执行计算,所以需要判断计算的可行性,如果行数和列数之中有一项不相等便不能运算,结束程序;进行乘法运算时,根据线性代数的相关知识,若是矩阵A*B,那么矩阵A的列数就要等于矩阵B的行数,否则不可以计算,同样结束程序,冃「两个矩阵相乘得出的矩阵的行数与矩阵A相等,列数与矩阵B相等
6、。子函数中,在计算结束之后,用free函数释放之前开辟的二维数组空间。由于用到了malloc函数开辟空间和free函数,所以在开头要加上#include<>各个子函数源代码如下:voidcheng0/*定义实现矩阵乘法的函数*/{inti=0,j=0,linel=0,row1=0,line2=0,row2=0,n;int**p=NULL;/*p是二重指针,用來存储二维数组(即矩阵)*/int**q=NULL;/*q是二重指针,用來存储二维数组(即矩阵)*/int**result=NULL;Aresult是二重指针,用來存储二维数组(即矩阵)*/printf(〃***(温馨提
7、示:矩阵的乘法要求前一个矩阵的列数等于后一个矩阵的行数)***");printfC请输入矩阵1的行数:〃);scanf("%d",&rowl);printf(,z请输入矩阵1的列数:");scanf("%d",&1inel);p=(int**)malloc(sizeof(int*)*rowl);/*将p强制转换为(int**)型的指针,并FL根据需要的行数开辟行指针空间*/if(NUL
此文档下载收益归作者所有