C++矩阵的加法转置

更新时间:2023-05-23 12:27:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

南昌航空大学实验报告

2011 年 11 月 26 日

课程名称:面向对象程序设计B 实验名称:动态链接库的制作与调用 班级: 10201407 姓名: 吴彤 同组人: 指导教师评定: 签名:

一、实验目的(所实现功能、验证性目的、创新性目的,参考实验要求)

综合运用所学面向对象编程知识完成动态链接库文件的创建、调用,理解动态链接库的工作原理,体会声明和定义分开方法在程序设计中的优势,掌握利用动态链接库实现不同开发平台间混合编程的方法,掌握利用动态链接库实现代码可复用技术,进一步掌握混合开发的方法。

二、概要设计(例如数据类型、函数的声明部分以及函数的调用关系)

综合应用所学面向对象编程知识定义一个多项式矩阵类并应用该类实现多项式矩阵类的运算。具体实现该矩阵的加法(采用运算符“+”重载)、转置(采用运算符“-”重载)及输出(采用运算符“<<”重载)操作。将该类制作为动态链接库,然后在其他工程中对该动态链接库进行调用。

通过对普通矩阵的相加和转置,把它推广到多项式矩阵。

程序源代码:

(Node.h)

#ifndef NODE_H

#define NODE_H

#ifdef DLL_FILE

class __declspec(dllexport) Node

#else

class __declspec(dllimport) Node

#endif

{

public:

int data; Node *next;

};

#endif

(Snode.h)

#include"Node.h"

#ifndef SNODE_H

#define SNODE_H

#ifdef DLL_FILE

class __declspec(dllexport) Snode

#else

class __declspec(dllimport) Snode

#endif

{

private:

Node* head;

public:

Snode();

Node* set();

};

#endif

(snode.cpp)

#ifndef DLL_FILE

#define DLL_FILE

#endif

#include"Snode.h"

#include<iostream.h>

Snode::Snode()

{

head=new Node;

head->next=NULL;

}

Node* Snode::set()

{

int e,k;

Node *r=head,*s=new Node;

cout<<"输入二项式的项数:";

cin>>k;

for(int i=0;i<k;i++)

{

r->next=s;

cout<<i+1<<"项";

cin>>e;

s->data=e;

r=s;

s=new Node;

}

r->next=NULL;

return head;

}

(Matrix.h)

#include"Node.h"

#include"Snode.h"

#include<iostream.h>

#ifndef MATRIX_H

#define MATRIX_H

#ifdef DLL_FILE

class __declspec(dllexport) Matrix

#else

class __declspec(dllimport) Matrix

#endif

{

private:

Node *m; int a,b;

public:

Matrix(int i,int j);

}; void set(Snode aa); Matrix operator+(Matrix &s); Matrix operator-(); friend __declspec(dllexport)ostream &operator<<(ostream& out,Matrix& s);

#endif

(Matrix.cpp)

#ifndef DLL_FILE

#define DLL_FILE

#endif

#include"Matrix.h"

Matrix::Matrix(int i,int j)

{

} a=i; b=j; m=new Node[a*b];

void Matrix::set(Snode aa)

{

for(int i=0;i<a;i++) for(int j=0;j<b;j++) m[i*b+j]=*aa.set();

}

Matrix Matrix::operator+(Matrix &s)

{

Matrix num(s.a,s.b); Node *r,*q; for(int i=0;i<a;i++) for(int j=0;j<b;j++)

} r=&m[i*b+j]; q=&s.m[i*b+j]; while(r->next&&q->next) { r=r->next; q=q->next; int a=r->data; r->data=q->data+r->data; q->data=a+q->data; } if(q->next) num.m[i*b+j]=s.m[i*b+j]; else num.m[i*b+j]=m[i*b+j];

return num;

}

Matrix Matrix::operator-()

{

Matrix n(b,a); for(int i=0;i<a;i++) for(int j=0;j<b;j++) n.m[i*b+j]=m[j*a+i]; return n;

}

__declspec(dllexport)ostream &operator<<(ostream& out,Matrix& s)

{

for(int i=0;i<s.a;i++) { for(int j=0;j<s.b;j++) { Node *r; r=&s.m[i*s.b+j]; int k=0; while(r->next) { } r=r->next; out<<r->data<<"*x"<<'^'<<k<<'+'; k++; out<<' '; } out<<endl;

} return out;

(调用链接库的函数)

#include"I:\logic\DLL\Matrix.h"

#include"I:\logic\DLL\Snode.h"

#include"I:\logic\DLL\Node.h"

#pragma comment(lib,"dll.lib");

void main()

{

Snode aa; Matrix bb(2,2),dd(2,2),cc(2,2); bb.set(aa); dd.set(aa); cc=bb+dd;

cout<<cc;

}

四、调试

在动态调用动态链接库时出现找不到.h文件和build时不产生.lib文件,经调试后可以产生动态链接库文件了。

五、测试结果(输入数据语输出数据以及与预期结果的差异及原因,可有截图)

多项式矩阵相加及输出:

多项式矩阵转置及输出

:

五、结论与分析

重点分析本次实验所遇到的问题以及解决方法,通过本次实验掌握的内容

在矩阵的转置中出现越界,通过本次实验我基本了解了动态链接库的创建,但是还有许多不懂,对矩阵的运算,及矩阵的转置。

本文来源:https://www.bwwdw.com/article/u2d4.html

Top