C++矩阵的加法转置
更新时间:2023-08-28 22:55: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文件,经调试后可以产生动态链接库文件了。
五、测试结果(输入数据语输出数据以及与预期结果的差异及原因,可有截图)
多项式矩阵相加及输出:
多项式矩阵转置及输出
:
五、结论与分析
重点分析本次实验所遇到的问题以及解决方法,通过本次实验掌握的内容
在矩阵的转置中出现越界,通过本次实验我基本了解了动态链接库的创建,但是还有许多不懂,对矩阵的运算,及矩阵的转置。
正在阅读:
C++矩阵的加法转置08-28
北师大版初中数学八年级下册期中测试题109-26
2第三章 VB 语言基础05-30
初三语文周周清07-06
计算机应用专业个人简历模板大全-优秀word范文(2页)01-07
小学生二年级动物的作文100字06-13
语文版中职语文(职业模块 服务类)第4课《我要用中文》word教案01-04
雕虫小技成语故事精选11-20
基于ADS的射频环行器仿真设计(很全面) - 图文05-02
《什么是面积》要用10-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 加法
- 矩阵
- 2019届安徽省蚌埠市高三下学期第二次教学质量检查考试数学(理)试题(解析版)
- 扫描电镜(Quanta200FEG)操作规程
- 1章 煤矿安全风险预控管理体系概述
- 肉桂酸的制备
- 电线导管电缆导管和线槽敷设分项工程检验批质量验收记录
- 数值分析实验二(matlab)插值法
- 安全资料目录(新)
- 服装画技法
- 餐饮店卫生、食品采购环境卫生餐饮用具操作间卫生管理制度
- 创先争优巾帼建功标兵事迹材料
- 电视剧里的那些古风歌
- 微积分答案(上册)(刘迎东版)第四章答案合集
- 高二化学选修1复习提纲
- 全国儿童医院院长齐聚重庆论医疗质量 医患关系成焦点
- 人口增长对生态环境的影响
- 第三章 文本处理技术
- 2011二级内蒙古自治区建造师最新考试试题库(完整版)
- AutoLISP语言
- word2003 快捷键大全
- 降血脂药物的研究进展