矩阵的简单运算课程设计论文.docx

上传人:b****2 文档编号:18226535 上传时间:2023-04-24 格式:DOCX 页数:39 大小:201.37KB
下载 相关 举报
矩阵的简单运算课程设计论文.docx_第1页
第1页 / 共39页
矩阵的简单运算课程设计论文.docx_第2页
第2页 / 共39页
矩阵的简单运算课程设计论文.docx_第3页
第3页 / 共39页
矩阵的简单运算课程设计论文.docx_第4页
第4页 / 共39页
矩阵的简单运算课程设计论文.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

矩阵的简单运算课程设计论文.docx

《矩阵的简单运算课程设计论文.docx》由会员分享,可在线阅读,更多相关《矩阵的简单运算课程设计论文.docx(39页珍藏版)》请在冰豆网上搜索。

矩阵的简单运算课程设计论文.docx

矩阵的简单运算课程设计论文

学号:

200940410101

课程设计

 

题目

矩阵乘法

教学院

计算机学院

专业

09计算机科学与技术

班级

09计科

(1)班

姓名

张祥

指导教师

祁文青

 

 

2010

12

25

 

课程设计任务书

(2010~2011学年第一学期)

学生姓名:

张祥专业班级:

09计算机科学与技术

(1)班

指导教师:

祈文青工作部门:

计算机学院

一、课程设计题目

矩阵乘法

二、课程设计内容

1.矩阵的存储

2.矩阵的乘法

3.矩阵的的加法与减法

三、进度安排

1.分析问题,给出数学模型,选择数据结构.

2.设计算法,给出算法描述

3.给出源程序清单

4.编辑、编译、调试源程序

5.撰写课程设计报告

四、基本要求

1.用C语言实现矩阵的运算.

2.利用链表实现矩阵运算的存储.

3.该程序具有加法、减法、乘法基本运算功能.

4.程序的各个功能模块要求用函数的形式实现.

5.完成设计任务并书写课程设计报告。

 

教研室主任签名:

年月日

 

一、作品及人员信息……………………………………………3

二、概述…………………………………………………………3

三、设计目的……………………………………………………3

四、运行/开发环境……………………………………………3

五、流程图………………………………………………………4

六、功能介绍……………………………………………………5

七、算法分析……………………………………………………5

八、测试过程中所用过的数据及说明……………………9

九、使用价值及优点……………………………………………11

十、总结…………………………………………………………11

附录

(一):

参考文献……………………………………11

附录

(二):

成绩评定表………………………………………12

 

一、作品及人员信息

1、开发项目的名称:

矩阵乘法

2、本项目的提出者:

祈文青

3、本项目的开发者:

张祥、张宁、黄小强、龚江华

二、概述

数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。

通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。

为学生后继课程的学习打下良好的基础。

三、设计目的

1.使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。

2.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。

3.培养了我们的攻克难关的斗志以及团队合作精神,在一个团队里,每个成员都不同程度地存在着优缺点,成员之间应该积极去认真总结团队其他成员的特长和优点,并向他人学习,扬长避短,不断提高自己的综合能力。

让我们携手牢记“信任与尊重、团结与友爱、合作与创新”的团队精神。

4.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。

四、运行/开发环境

1、运行环境:

windowsxp及其以上版本

2、开发环境:

vc++6.0

 

五、流程图

 

 

能能

 

 

六、功能介绍

1.矩阵的加法

2.矩阵的的减法

3.矩阵的的乘法

4.矩阵的的转置

七、算法分析

1.用.h文件的调用代码

#include"voidMenu.h"

#include"voidjia.h"

#include"voidjian.h"

#include"voidcheng.h"

#include"voidzhuanzhi.h"

2.控制界面的前景背景

{

system("color0a");

}

3.

(1)设置符串型辅助变量,再将字符串型转换为整型

(2)判断是否为数字

(1)和

(2)增强程序的健壮性

(1)charc1[10];//辅助变量

intc=0;

cin>>c1;

j=strlen(c1);

for(i=j-1,j=0;i>=0;i--,j++)

c=c+(int)((c1[i]-'0')*pow(10,j));

(2)if(strcmp(c1,"0")>=0&&strcmp(c1,"5")<0)

4.使程序暂停和清屏功能

{

cout<<"\t\t\t\t";

system("pause");

system("cls");

}

 

5.判断能否相加以及行列是否为数字

if(m==f&&g==n&&strcmp(m1,"0")>0&&strcmp(m1,"9")<=0&&strcmp(n1,"0")>0&&strcmp(n1,"9")<=0)

6.定义矩阵

double**a=NULL;

(释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针)

a=(double**)malloc(m*sizeof(double*));

(这句是动态定义二维数组的行数新的标准ANSIC规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a)

for(i=0;i

a[i]=(double*)malloc(g*sizeof(double));

(这句是动态定义二维数组的列数)

7.从.txt文件输入数据

FILE*fpa;

printf("请输入矩阵A的元素\n\n\n");

system("input-a.txt");

fpa=fopen("input-a.txt","r");//读文件input-a.txt

if(fpa==NULL)

{

printf("文件写打开失败");

exit(0);

}

for(i=0;i

for(j=0;j

fscanf(fpa,"%lf",&a[i][j]);//从文件读取数据

fclose(fpa);

8.屏幕输出,用%g格式,可以输出小数

for(i=0;i

{

for(j=0;j

printf("%g\t",a[i][j]);//实数格式

printf("\n");

}

9.矩阵加法,减法类似。

for(i=0;i

for(j=0;j

result[i][j]=a[i][j]+b[i][j];

10.初始化为0,矩阵乘法

for(i=0;i

for(j=0;j

result[i][j]=0;/*初始化为0*/

for(i=0;i

for(j=0;j

for(k=0;k

result[i][j]+=a[i][k]*b[k][j];

11.矩阵的转置

for(i=0;i

for(j=0;j

result[i][j]=a[j][i];

12.文件输出(.txt)

FILE*fpc;

fpc=fopen("output-c.txt","wb");

if(fpc==NULL)

{

printf("文件打开失败");

exit(0);

}

for(i=0;i

{

for(j=0;j

fprintf(fpc,"%g\t",result[i][j]);

fprintf(fpc,"\r\n");

}

fclose(fpc);

13.打开.txt文件

system("output-c.txt");

14.内存空间的释放

for(i=0;i

{

free(a[i]);

a[i]=NULL;

free(result[i]);

result[i]=NULL;

/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/

}

free(a);

a=NULL;

free(result);

result=NULL;

for(i=0;i

{

free(b[i]);

b[i]=NULL;

}

free(b);

b=NULL;

}

16.菜单函数

voidMenu()

{

cout<<""<

cout<

cout<<"\t=========================矩阵的简单运算========================="<

cout<<"\t\t\t\t\t\t\t\t"<

cout<<"\t\t\t\t[1]矩阵加法\t\t"<

cout<<"\t\t\t\t[2]矩阵减法\t\t\t"<

cout<<"\t\t\t\t[3]矩阵乘法\t\t\t"<

cout<<"\t\t\t\t[4]矩阵转置\t\t\t"<

cout<<"\t\t\t\t[0]退出\t\t\t"<

cout<<"\t\t\t\t\t\t\t\t"<

cout<<"\t=========================矩阵的简单运算========================="<

cout<

cout<<"\t\t\t请选择:

";

}

 

8、测试过程中所用过的数据及说明

1.菜单:

 

2.容错及暂停:

 

3.矩阵从文件输入:

4.矩阵屏幕输出及文件输出:

 

9、使用价值及优点

可以当作简单的矩阵计算器使用,具有一定的容错性

10、总结

课程设计结束了,带给我很多的收获。

C程序设计、数据结构已经学完了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。

对这些知识也有了更深的理解和很好的掌握。

通过课程设计,明白到了原来开发一个项目,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。

我们要不断发现问题、提出问题,解决问题。

附录

(一)参考文献

【1】C程序设计(第三版)谭浩强著

【2】C++面向对象程序设计谭浩强著

【3】数据结构(C语言版)严蔚敏吴伟民著

【4】

附录

(二):

数据结构课程设计成绩评定表

姓名

张祥

性别

专业班级

09计算机科学与技术

(1)班

课程设计题目:

矩阵乘法

课程设计答辩或质疑记录:

 

成绩评定依据:

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

年月日

源代码:

#include

#include

#include

#include

usingnamespacestd;

voidjia()

{

charm1[10],g1[10],f1[10],n1[10];//辅助变量

intm=0,g=0,f=0,n=0;

inti,j;

printf("\n请输入矩阵A的行数和列数(>0):

\n");

cin>>m1>>g1;

printf("请输入矩阵B的行数和列数(>0):

\n");

cin>>f1>>n1;

//字符数组型转换为整型

j=strlen(m1);

for(i=j-1,j=0;i>=0;i--,j++)

m=m+(int)((m1[i]-'0')*pow(10,j));

j=strlen(g1);

for(i=j-1,j=0;i>=0;i--,j++)

g=g+(int)((g1[i]-'0')*pow(10,j));

j=strlen(f1);

for(i=j-1,j=0;i>=0;i--,j++)

f=f+(int)((f1[i]-'0')*pow(10,j));

j=strlen(n1);

for(i=j-1,j=0;i>=0;i--,j++)

n=n+(int)((n1[i]-'0')*pow(10,j));

if(m==f&&g==n&&strcmp(m1,"0")>0&&strcmp(m1,"9")<=0&&strcmp(n1,"0")>0&&strcmp(n1,"9")<=0)

{//判断能否相加以及行列是否为数字

//矩阵a

FILE*fpa;

printf("请输入矩阵A的元素\n\n\n");

system("input-a.txt");

fpa=fopen("input-a.txt","r");//读文件input-a.txt

if(fpa==NULL)

{

printf("文件写打开失败");

exit(0);

}

double**a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;

释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/

a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。

新的标准ANSIC规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。

*/

for(i=0;i

a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。

*/

for(i=0;i

for(j=0;j

fscanf(fpa,"%lf",&a[i][j]);//从文件读取数据

fclose(fpa);

//输出矩阵A

printf("*****矩阵A*****\n");

for(i=0;i

{

for(j=0;j

printf("%g\t",a[i][j]);//实数格式

printf("\n");

}

//矩阵B

FILE*fpb;

printf("请输入矩阵B的元素\n\n\n");

system("input-b.txt");

fpb=fopen("input-b.txt","r");

if(fpb==NULL)

{

printf("文件写打开失败");

exit(0);

}

double**b=NULL;

b=(double**)malloc(g*sizeof(double*));

for(i=0;i

b[i]=(double*)malloc(n*sizeof(double));

for(i=0;i

for(j=0;j

fscanf(fpb,"%lf",&b[i][j]);

fclose(fpb);

//输出矩阵B

printf("*****矩阵B*****\n");

for(i=0;i

{

for(j=0;j

printf("%g\t",b[i][j]);//实数格式

printf("\n");

}

//矩阵加法

printf("*****矩阵加法*****\n");

double**result=NULL;/*存放计算结果的二维数组*/

result=(double**)malloc(m*sizeof(double*));

for(i=0;i

result[i]=(double*)malloc(n*sizeof(double));

for(i=0;i

for(j=0;j

result[i][j]=0;/*初始化为0*/

for(i=0;i

for(j=0;j

result[i][j]=a[i][j]+b[i][j];

//屏幕输出矩阵加法

for(i=0;i

{

for(j=0;j

printf("%g\t",result[i][j]);//实数格式

printf("\n");

}

//文件输出矩阵加法

FILE*fpc;

fpc=fopen("output-c.txt","wb");

if(fpc==NULL)

{

printf("文件打开失败");

exit(0);

}

for(i=0;i

{

for(j=0;j

fprintf(fpc,"%g\t",result[i][j]);

fprintf(fpc,"\r\n");

}

fclose(fpc);

system("output-c.txt");

//释放

for(i=0;i

{

free(a[i]);

a[i]=NULL;

free(result[i]);

result[i]=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/

}

free(a);

a=NULL;

free(result);

result=NULL;

for(i=0;i

{

free(b[i]);

b[i]=NULL;

}

free(b);

b=NULL;

}

else

printf("\n\t\t\t*****输入有误!

*****\n\n");

}

 

voidjian()

{

charm1[10],g1[10],f1[10],n1[10];//辅助变量

intm=0,g=0,f=0,n=0;

inti,j;

printf("\n请输入矩阵A的行数和列数(>0):

\n");

cin>>m1>>g1;

printf("请输入矩阵B的行数和列数(>0):

\n");

cin>>f1>>n1;

//字符数组型转换为整型

j=strlen(m1);

for(i=j-1,j=0;i>=0;i--,j++)

m=m+(int)((m1[i]-'0')*pow(10,j));

j=strlen(g1);

for(i=j-1,j=0;i>=0;i--,j++)

g=g+(int)((g1[i]-'0')*pow(10,j));

j=strlen(f1);

for(i=j-1,j=0;i>=0;i--,j++)

f=f+(int)((f1[i]-'0')*pow(10,j));

j=strlen(n1);

for(i=j-1,j=0;i>=0;i--,j++)

n=n+(int)((n1[i]-'0')*pow(10,j));

 

if(m==f&&g==n&&strcmp(m1,"0")>0&&strcmp(m1,"9")<=0&&strcmp(n1,"0")>0&&strcmp(n1,"9")<=0)

{//判断能否相加以及行列是否为数字

//矩阵a

FILE*fpa;

printf("请输入矩阵A的元素\n\n\n");

system("input-a.txt");

fpa=fopen("input-a.txt","r");//读文件input-a.txt

if(fpa==NULL)

{

printf("文件写打开失败");

exit(0);

}

double**a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;

释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/

a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。

新的标准ANSIC规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。

*/

for(i=0;i

a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。

*/

for(i=0;i

for(j=0;j

fscanf(fpa,"%lf",&a[i][j]);//从文件读取数据

fclose(fpa);

//输出矩阵A

printf("*****矩阵A*****\n");

for(i=0;i

{

for(j=0;j

printf("%g\t",a[i][j]);//实数格式

printf("\n");

}

//矩阵B

FILE*fpb;

printf("请输入矩阵B的元素\n\n\n");

system("input-b.txt");

fpb=fopen("input-b.txt","r");

if(fpb==NULL)

{

printf("文件写打开失败");

exit(0);

}

double**b=NULL;

b=(d

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

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1