C++矩阵运算类库(很实用)

C++矩阵运算类库(很实用)
C++矩阵运算类库(很实用)

C++进行矩阵运算类库

头文件:Matrix.h

#ifndef MATRIX_H

#define MATRIX_H

#include "iostream"

#include "string"

#include

#include

#include

#include //istringstream 必须包含这个头文件using namespace std;

class Matrix

{

public:

void readMatrix(string fileName);

void showMatrix();

void writeMatrix(string str);

void inversion();//求矩阵的逆矩阵

void change();//求矩阵的转置

void operator +(Matrix &a);//声明重载运算符的“+”函数

void operator -(Matrix &a);//声明重载运算符的“-”函数

void operator *(Matrix &a);//声明重载运算符的“*”函数

void operator =(Matrix &a);//声明重载运算符的“=”赋值函数vector> _mat;

int row;

int col;

};

#endif

源文件:main.cpp

#include "iostream"

#include "string"

#include

#include

#include

#include //istringstream 必须包含这个头文件

#include "Matrix.h"

#include //使用随机数

#include //数学计算

using namespace std;

//将运算得到的数据存储到box中,形成一个完整的Matrix量

Matrix box_mul;//矩阵相乘的结果

Matrix box_inver;//矩阵的逆的结果

Matrix box_change;//矩阵转置的结果

Matrix box_plus;//矩阵加的结果

Matrix box_cut;//矩阵减的结果

void Matrix::readMatrix(string fileName)

{

ifstream ifile(fileName.c_str(),ios::in);/*声明一个输入句柄,打开fileName所指文件。

接下来就可以通过ifile>>***来读取1.txt中的内容了*/

double tmp;

string line;

vector row;//vector容器,相当于一个数组

while(getline(ifile,line))

{

istringstream istr(line);

while(istr>>tmp)

{

row.push_back(tmp);//在row尾部插入读入的数据

}

this->col = row.size();

_mat.push_back(row);

row.clear();

istr.clear();

line.clear();

}

this->row = _mat.size();//这里的row不是vector变量,是matrix中的row ifile.close();

}

void Matrix::showMatrix()

{

cout<<"矩阵:"<

//cout<<"row="<

//cout<<"col="<

for(int i=0;i

{

for(int j=0;j

cout<<_mat[i][j]<<" ";

cout<

}

}

void Matrix::writeMatrix(string str)

{

ofstream os(str,ios::trunc);

//ofstream os("C:\\Users\\Administrator\\Desktop\\数据矩阵W.txt",ios::trunc);

if (os)

{

for (int i=0;i

{

for (int j=0;j

os<< _mat[i][j]<<" ";

os<

}

}

else

cerr<<"无法打开文件!"<

}

void Matrix::operator+(Matrix &a)

{

//cout<<"矩阵的和:"<

double b[200][200];

for(int i=0;i

{

for(int j=0;j

b[i][j]=_mat[i][j]+a._mat[i][j];

}

box_plus.col=col;box_plus.row=row;//行列数设置好

box_plus._mat.clear();

vector t;

for(int i=0;i

{

for(int j=0;j

{

t.push_back(b[i][j]);

}

box_plus._mat.push_back(t);//数据输入_mat量中

t.clear();

}

}

void Matrix::operator-(Matrix &a)

{

//cout<<"矩阵的差:"<

double b[200][200];

for(int i=0;i

{

for(int j=0;j

b[i][j]=_mat[i][j]-a._mat[i][j];

}

box_cut.col=col;box_cut.row=row;//行列数设置好

box_cut._mat.clear();

vector t;

for(int i=0;i

{

for(int j=0;j

{

t.push_back(b[i][j]);

}

box_cut._mat.push_back(t);//数据输入_mat量中

t.clear();

}

}

void Matrix::operator*(Matrix &a) //可连续使用{

//cout<<"矩阵相乘:"<

double b[200][200];

for(int i=0;i

{

for(int j=0;j

{

b[i][j]=0;

for(int k=0;k

{

b[i][j]+=_mat[i][k]*a._mat[k][j];

}

}

}

box_mul.col=a.col;

box_mul.row=row;//行列数设置好

box_mul._mat.clear();

vector t;

for(int i=0;i

{

for(int j=0;j

{

t.push_back( b[i][j]);

}

box_mul._mat.push_back(t);//数据输入_mat量中

t.clear();

}

}

void Matrix::operator=(Matrix &a)

{

row=a.row;col=a.col;

_mat.clear();

vector t;

for (int i=0;i

{

for(int j=0;j

{

t.push_back(a._mat[i][j]);

}

_mat.push_back(t);

t.clear();

}

}

void Matrix::change() //可连续使用

{

//cout<<"矩阵的转置:"<

double b[200][200];

for(int i=0;i

{

for(int j=0;j

b[j][i]=_mat[i][j];

}

box_change.col=row;box_change.row=col;//行列数设置好box_change._mat.clear();

vector t;

for(int i=0;i

{

for(int j=0;j

{

t.push_back( b[i][j]);

}

box_change._mat.push_back(t);//数据输入_mat量中

t.clear();

}

}

void Matrix::inversion() //可连续使用

{

//cout<<"矩阵的逆:"<

int i,j,k,M=this->col,N=2*this->col;

double b[200][200];

for(i=0;i

{

for(j=0;j

b[i][j]=_mat[i][j]; }

for(i=0;i

for(j=M;j

{

if(i==(j-M))

b[i][j]=1;

else

b[i][j]=0;

}

for(i=0;i

{

if(b[i][i]==0)

{

for(k=i;k

{

if(b[k][i]!=0)

{

for(int j=0;j

{

double temp;

temp=b[i][j];

b[i][j]=b[k][j];

b[k][j]=temp;

}

break;

}

}

if(k==M)

{

cout<<"该矩阵不可逆!\n";

exit(0);

}

}

for(j=N-1;j>=i;j--)

b[i][j]/=b[i][i];

for(k=0;k

{

if(k!=i)

{

double temp=b[k][i];

for(j=0;j

b[k][j]-=temp*b[i][j];

}

}

}

box_inver.col=col;box_inver.row=row;//行列数设置好

box_inver._mat.clear();

vector t;

for(int i=0;i

{

for(int j=M;j

{

//cout<

t.push_back( b[i][j]);

}

box_inver._mat.push_back(t);//数据输入_mat量中

t.clear();

}

}

int main()

{

///////////////////////////////

system("pause");

return 0;

}

(完整版)第二章矩阵及其运算作业及答案

第二部分 矩阵及其运算作业 (一)选择题(15分) 1.设,均为n 阶矩阵,且,则必有( )A B 22 ()()A B A B A B +-=-(A) (B) (C) (D) A B =A E =AB BA =B E =2.设,均为n 阶矩阵,且,则和( ) A B AB O =A B (A)至多一个等于零 (B)都不等于零 (C) 只有一个等于零 (D) 都等于零 3.设,均为n 阶对称矩阵,仍为对称矩阵的充分必要条件是( ) A B AB (A) 可逆 (B)可逆 (C) (D) A B 0AB ≠AB BA =4.设为n 阶矩阵,是的伴随矩阵,则=( ) A A *A A *(A) (B) (C) (D) 1n A -2n A -n A A 5.设,均为n 阶可逆矩阵,则下列公式成立的是( ) A B (A) (B) ()T T T AB A B =()T T T A B A B +=+(C) (D) 111()AB A B ---=111 ()A B A B ---+=+(二)填空题(15分) 1.设,均为3阶矩阵,且,则= 。 A B 1 ,32A B ==2T B A 2.设矩阵,,则= 。 1123A -?? = ???232B A A E =-+1B -3.设为4阶矩阵,是的伴随矩阵,若,则= 。 A A *A 2A =-A *4.设,均为n 阶矩阵,,则= 。 A B 2,3A B ==-12A B *-5.设,为整数,则= 。 101020101A ? ? ?= ? ??? 2n ≥12n n A A --(三)计算题(50分) 1. 设,,且,求矩阵。 010111101A ?? ?=- ? ?--??112053B -? ? ? = ? ??? X AX B =+X

汇编语言四则运算

《微机原理与接口技术》 课程设计 电气与自动化工程系 通信工程 2010-12-28 院 系:专 业: 年级班级: 学 号: 姓 名: 指导教师:设计日期:

一、课程设计目的 每个同学在1-2周时间内,用汇编语言独立完成一个程序题,以达到熟练运用汇编语言编程实现有比较完整功能的程序的目的。 二、课程设计要求 从键盘上输入数字参与运算,并在屏幕上显示结果,至少实现加法减法运算。 三、课题分析 该程序设计的关键是要根据四则运算中()、*、/、+、-、= 的优先级设置符号的权值,其中(、*、/、+、-、)、= 的权值分别设置为5、4、4、3、3、1、0 ,然后根据权值的大小进行运算。程序使用数字标志SIGN1、括号标志SIGN2分别来判断数字是否输入完毕和括号是否配对,另外程序定义两个数据存储区域NUMB和MARK,其中NUMB用来保存输入的或运算的数值,MARK用来保存输入的符号及其对应的权值。程序不断判断输入的符号是否是左括号‘(’,当遇到左括号是在存储区MARK保存其符号,紧跟着将‘(’的权值改为2并保存之,这是为了使程序运算括号内的表达式,当遇到右括号‘)’时括号内运算将结束。需要注意的是程序执行完括号内表达式的运算及乘除运算后将在存储区MARK中覆盖符号(、)、*、/ 及紧跟着的权值,使得程序在运算整个四则运算表达式时当括号内表达式的运算及乘除运算结束后存储区MARK中只有‘ +、-’运算符及紧跟着的权值,然后按照+、- 运算符的左右顺序从左到右进行‘ +、- ’运算,当最后遇到等号‘ = ’时输出表达式的数值,然后再根据提示判断是否继续执行下一个四则运算表达式。

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期

目录 目录错误!未定义书签。 1 概述错误!未定义书签。 设计目的错误!未定义书签。 设计内容错误!未定义书签。 2 系统需求分析错误!未定义书签。 系统目标错误!未定义书签。 主体功能错误!未定义书签。 开发环境错误!未定义书签。 3 系统概要设计错误!未定义书签。 系统的功能模块划分错误!未定义书签。系统流程图错误!未定义书签。 4系统详细设计错误!未定义书签。 5 测试错误!未定义书签。 测试方案错误!未定义书签。 测试结果错误!未定义书签。 6 小结错误!未定义书签。 参考文献错误!未定义书签。 附录错误!未定义书签。 附录源程序清单错误!未定义书签。

实现加减乘除四则运算的计算器 1 概述 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 开发环境 集成环境 3 系统概要设计 系统的功能模块划分 本题目实现的模块图如图3-1所示

矩阵及其运算测试题

第二章 矩阵及其运算测试题 一、选择题 1.下列关于矩阵乘法交换性的结论中错误的是( )。 (A)若A 是可逆阵,则1A -与1A -可交换; (B)可逆矩阵必与初等矩阵可交换; (C)任一n 阶矩阵与n cE 的乘法可交换,这里c 是常数; (D)初等矩阵与初等矩阵的乘法未必可交换。 2.设n (2n ≥)阶矩阵A 与B 等价,则必有( ) (A) 当A a =(0a ≠)时,B a =; (B)当A a =(0a ≠)时,B a =-; (C) 当0A ≠时,0B =; (D)当0A =时,0B =。 3.设A 、B 为方阵,分块对角阵00A C B ??= ??? ,则* C =( )。 (A) **00 A B ?? ??? (B) **||00 ||A A B B ?? ??? (C) **||00||B A A B ?? ??? (D) **||||0 0||||A B A A B B ?? ??? 4.设A 、B 是n (2n ≥)阶方阵,则必有( )。 (A)A B A B +=+ (B)kA k A = (C) A A B B =-g (D) AB A B = 5.设4阶方阵 44(),()||,ij A a f x xE A ?==-其中E 是4阶单位矩阵,则()f x 中3 x 的系数为( )。 (A)11223344()a a a a -+++ (B)112233112244223344113344a a a a a a a a a a a a +++ (C) 11223344a a a a (D)11223344a a a a +++ 6.设A 、B 、A B +、11A B --+均为n 阶可逆矩阵,则1()A B -+为( )。 (A) 11A B --+ (B) A B + (C) 111()A B ---+ (D)11111()B A B A -----+

Matlab与工程计算 第二章 Matlab矩阵及其运算

第2章Matlab矩阵及其运算 2.1 Matlab变量 2.2 Matlab数值矩阵 2.3 运算符 2.4 基本数学函数 2.5 稀疏矩阵 2.6 矩阵分析 2.8 字符串 2.9 结构数据 2.10 细胞矩阵

2.1 Matlab变量 1. 变量命名规则 在MATLAB 6.5中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。在MATLAB中,变量名区分字母的大小写。 2.变量赋值 变量=表达式 3.预定义变量 i,j,pi,eps,realmin,realmax,inf,NaN 预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。

内存变量的管理 1.指令操作法 who whos clear 2. 现场菜单操作法 3. 内存变量文件(.mat) save [文件名] [变量名表] [-append][-ascii] load [文件名] [变量名表] [-ascii] help save help load

数值数据的输出格式 MATLAB用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法。 在一般情况下,MATLAB内部每一个数值数据元素都是用双精度数来表示和存储的。 数据输出时用户可以用format命令设置或改变数据输出格式。format 命令的格式为: format格式符 其中格式符决定数据的输出格式 help format

2.2 MATLAB数值矩阵 2.2.1 矩阵的建立 1.直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

第二章矩阵及其运算作业及答案

第二部分 矩阵及其运算作业 (一)选择题(15分) 1.设A ,B 均为n 阶矩阵,且22()()A B A B A B +-=-,则必有( ) (A) A B = (B) A E = (C) AB BA = (D) B E = 2.设A ,B 均为n 阶矩阵,且AB O =,则A 和B ( ) (A)至多一个等于零 (B)都不等于零 (C) 只有一个等于零 (D) 都等于零 3.设A ,B 均为n 阶对称矩阵,AB 仍为对称矩阵的充分必要条件是( ) (A) A 可逆 (B)B 可逆 (C) 0AB ≠ (D) AB BA = 4.设A 为n 阶矩阵,A *是A 的伴随矩阵,则A *=( ) (A) 1n A - (B) 2n A - (C) n A (D) A 5.设A ,B 均为n 阶可逆矩阵,则下列公式成立的是( ) (A) ()T T T AB A B = (B) ()T T T A B A B +=+ (C) 111()AB A B ---= (D) 111()A B A B ---+=+ (二)填空题(15分) 1.设A ,B 均为3阶矩阵,且1 ,32A B ==,则2T B A = 。 2.设矩阵1123A -??= ??? , 232B A A E =-+,则1B -= 。 3.设A 为4阶矩阵,A *是A 的伴随矩阵,若2A =-,则A *= 。 4.设A ,B 均为n 阶矩阵,2,3A B ==-,则12A B *-= 。 5.设101020101A ? ? ?= ? ??? ,2n ≥为整数,则12n n A A --= 。 (三)计算题(50分) 1. 设010111101A ?? ?=- ? ?--??,112053B -?? ?= ? ??? ,且X AX B =+,求矩阵X 。

汇编实验之四则运算

计算机原理实验室实验报告 课程名称: 姓名学号班级成绩 设备名称及软件环境 实验名称四则运算实验日期 一.实验内容 从键盘输入一个十进制两位数的四则运算表达式, 如23*56-(8*19)/6+67-8=,编程计算表达式的值, 输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。 并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。二.理论分析或算法分析 根据题目的要求,可以把整个源程序大致划分为几个基本结构: 程序加法、减法、乘法、除法、显示结果五个部分。 首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?,用户输入y/n执行继续计算和退出操作 三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) 主程序流程:

代码 : 根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分 源程序: CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS NEXTLINE MACRO ;显示换行宏 MOV AH,2 MOV DL,10 开始 从键盘输入字符 AL=‘+’ AL=‘-’ AL=‘*’ AL=‘=’ AL=‘/’ 输出结果 结束 从键盘输入加数并执行加运算 从键盘输入加数并执行减运算 从键盘输入加数并执行乘运算 从键盘输入加数并执行除运算 Y Y Y Y Y N N N N

第2章--MATLAB数据及其运算-习题答案教学内容

第2章--M A T L A B数据及其运算-习题答案

第2章 MATLAB数据及其运算 习题2 一、选择题 1.下列可作为MATLAB合法变量名的是()。D A.合计 B.123 C.@h D.xyz_2a 2.下列数值数据表示中错误的是()。C A.+10 B.1.2e-5 C.2e D.2i 3.使用语句t=0:7生成的是()个元素的向量。A A.8 B.7 C.6 D.5 4.执行语句A=[1,2,3;4,5,6]后,A(3)的值是()。B A.1 B.2 C.3 D.4 5.已知a为3×3矩阵,则a(:,end)是指()。D A.所有元素 B.第一行元素 C.第三行元素 D.第三列元素 6.已知a为3×3矩阵,则运行a (1)=[]后()。A A.a变成行向量 B.a变为2行2列 C.a变为3行2列 D.a变为2行3列 7.在命令行窗口输入下列命令后,x的值是()。B >> clear >> x=i*j A.不确定 B.-1 C.1 D.i*j 8.fix(354/100)+mod(354,10)*10的值是()。D A.34 B.354 C.453 D.43 9.下列语句中错误的是()。B A.x==y==3 B.x=y=3 C.x=y==3 D.y=3,x=y 10.find(1:2:20>15)的结果是()。C A.19 20 B.17 19 C.9 10 D.8 9 11.输入字符串时,要用()将字符括起来。C A.[ ] B.{ } C.' ' D." " 12.已知s='显示"hello"',则s的元素个数是()。A A.9 B.11 C.7 D.18

四则运算代码

Dim a, q, e(1 To 4), k, i, s, h, t(1 To 9), u(1 To 9), v(1 To 9) As Integer, d As String, r, n As Double '定义变量 Public Sub Command1_Click() form1.Cls '清屏 Label2.Caption = "": Label3.Caption = "" i = 0: h = 0: n = Val(Text1.Text) If n <= 0 Or n > 9 Then MsgBox "请输入1to9之间的1个正整数" Text1.Text = "": Text1.SetFocus '清空Text,光标在Text中闪烁 Else For s = 1 To n Randomize '生成随机数,如不加每次产生随机将相同 a = Int(Rnd * 101): q = Int(Rnd * 101): k = Int(Rnd * 4 + 1) e(1) = "+": e(2) = "-": e(3) = "*": e(4) = "/" t(s) = e(k): u(s) = a: v(s) = q: d = "=" Print a; t(s); q; d Next s: End If: End Sub Private Sub Command2_Click() If i < s - 1 Then i = i + 1 Select Case t(i) Case "+" If Text2.Text = u(i) + v(i) Then MsgBox "计算正确": h = h + 1 Else MsgBox "计算错误,正确答案是" & u(i) + v(i) End If Case "-" If Text2.Text = u(i) - v(i) Then MsgBox "计算正确": h = h + 1 Else MsgBox "计算错误,正确答案是" & u(i) - v(i) End If Case "*" If Text2.Text = u(i) * v(i) Then MsgBox "计算正确": h = h + 1 Else MsgBox "计算错误,正确答案是" & u(i) * v(i) End If Case "/" r = Int(u(i) / v(i)) r = Int((u(i) / v(i) - r) * 100 + 0.5) / 100 + r '保留两位小数 If Text2.Text = r Then MsgBox "计算正确": h = h + 1

实验二matlab矩阵的初等运算及其答案

百度文库- 让每个人平等地提升自我 实验二 Matlab矩阵的初等运算 实验目的:掌握Matlab的运算方法 实验内容: 2.1 在Matlab命令窗口输入: H1=ones(3,2) H2=zeros(2,3) H3=eye(4) 观察以上各输入结果,并在每式的后面标注其含义。 >> format compact >> H1=ones(3,2),disp('3行2列的全1矩阵') H1 = 1 1 1 1 1 1 3行2列的全1矩阵 >> H2=zeros(2,3),disp('2行3列的全零矩阵') H2 = 0 0 0 0 0 0 2行3列的全零矩阵 >> H3=eye(4),disp('4阶的单位矩阵') H3 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 4阶的单位矩阵 2.2 已知 123 456 ?? =?? ?? Q,[] 789 = P, 1 ?? =?? ?? R,3 = S,试把这四个矩阵组合 为一个大矩阵,看看有几种组合方式?8 >> format compact >> Q=[1 2 3;4 5 6];P=[7 8 9];R=[1;0]; S=3; >> [Q,R;P,S] ans = 1 2 3 1 4 5 6 0 7 8 9 3 >> [R,Q;P,S] ans = 1 1 2 3 0 4 5 6 7 8 9 3 >> [Q,R;S,P] ans = 1 2 3 1 4 5 6 0 3 7 8 9 >> [R,Q;S,P] ans = 1 1 2 3 0 4 5 6 3 7 8 9 >> [S,P;R,Q] ans = 3 7 8 9 1 1 2 3 0 4 5 6 >> [S,P;Q,R] ans = 3 7 8 9 1 2 3 1 4 5 6 0 >> [P,S;R,Q] ans = 7 8 9 3 1 1 2 3 0 4 5 6 >> [P,S;Q,R] ans = 7 8 9 3 1 2 3 1 4 5 6 0

汇编语言课程设计报告实现加减乘除四则运算的计算器

实现加减乘除四则运算的计算器 目录 1 概述 (1) 1.1 课程设计目的 (1) 1.2 课程设计内容 (1) 2 系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (2) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4系统详细设计 (4) 5 测试 (5) 5.1 正确输出 (5) 5.2 实际输出 (6) 6 小结 (7) 参考文献 (8) 附录 (9) 附录1 源程序清单 (9)

汇编语言课程设计报告(2011) 实现加减乘除四则运算计算器的设计 1 概述 1.1 课程设计目的 运用汇编语言,实现简单计算器的一般功能.通过该程序设计,让我们熟悉并掌握DOS系统功能调方法用及BIOS系统功能调用方法,同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程,以及掌握DEBUG的一系列的功能执行命令,及用它进行调试,运行功能。 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。由此可见汇编语言的重要性,学好这门课程,同样可为相关的专业打下基础。 汇编语言程序设计课程设计是在教学实践基础上进行的一次试验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计和制造出具有具有一定功能的应用系统,并且在实验的基本技能方面进行了一次全面的训练。 此外,它还可以培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够较全面的巩固和应用课堂上所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。它同样可以提高学生运用理论去处理实际问题的能力和独立思考的能力,使学生的编程思想和编程能力有所提高,最终达到熟练地掌握编写汇编源程序的基本方法的目的。 1.2 课程设计内容 设计一个能实现加减乘除取余计算的程序。将键盘输入的表达式预放入一缓冲区中,然后从该缓冲区的第一个字符开始读取判断,当读到一个有效的表达式时对表达式进行相应的运算后,输出用十六进制数表示的运算结果。 2 系统需求分析 2.1 系统目标 1.熟悉汇编指令、宏汇编语言的编程方法 2. BIOS中断调用、系统功能中断调用方法 3.磁盘文件、及文件内容操作 目标:要求该程序接受从键盘输入的十六进制数,执行相应的计算后,计算结 1

实验二Matlab矩阵的初等运算与其答案

实验二 Matlab矩阵的初等运算实验目的:掌握Matlab的运算方法 实验内容: 在Matlab命令窗口输入: H1=ones(3,2) H2=zeros(2,3) H3=eye(4) 观察以上各输入结果,并在每式的后面标注其含义。 >> format compact >> H1=ones(3,2),disp('3行2列的全1矩阵') H1 = 1 1 1 1 1 1 3行2列的全1矩阵 >> H2=zeros(2,3),disp('2行3列的全零矩阵') H2 = 0 0 0 0 0 0 2行3列的全零矩阵 >> H3=eye(4),disp('4阶的单位矩阵') H3 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 4阶的单位矩阵 已知 123 456 ?? =?? ?? Q,[] 789 = P, 1 ?? =?? ?? R,3 = S,试把这四个矩阵组合为 一个大矩阵,看看有几种组合方式?8 >> format compact >> Q=[1 2 3;4 5 6];P=[7 8 9];R=[1;0]; S=3; >> [Q,R;P,S] ans = 1 2 3 1 4 5 6 0 7 8 9 3 >> [R,Q;P,S] ans = 1 1 2 3 0 4 5 6 7 8 9 3 >> [Q,R;S,P] ans = 1 2 3 1 4 5 6 0 3 7 8 9 >> [R,Q;S,P] ans = 1 1 2 3 0 4 5 6 3 7 8 9 >> [S,P;R,Q] ans = 3 7 8 9 1 1 2 3 0 4 5 6 >> [S,P;Q,R] ans = 3 7 8 9 1 2 3 1 4 5 6 0 >> [P,S;R,Q] ans = 7 8 9 3 1 1 2 3 0 4 5 6 >> [P,S;Q,R] ans = 7 8 9 3

PICFA简单计算器设计报告汇编语言四位无符号整数加减乘除

课程设计报告 课程名称:单片机原理与接口技术课程设计设计题目:简单计算器 院系:机电工程学院 班级:2010级电气工程及其自动化专业姓名: 学号: 指导教师:史丽萍,闫广明,张波, 张扬,王冠然 设计时间:2013年12月

一、设计方案描述与论证 我们所设计的是一个简单计算器,它具有四位数以内的整数加减乘除运算。可以在输入错误的时候退格,也可以初始化。在初始化的状态下可以进行关机以减少耗能。显示使用的数码管扫描显示的方法来显示数字,所以我们每一次运算前我们都需要将个位、十位、百位和千位相结合。我们使用的是4×4的键盘,检测的时候是进行键盘扫描来完成确定哪一个键被摁下,然后是否释放。键盘被摁下后,先判断是什么键。如果是数字键,则进行数的输入,首先先把百位的数值赋给千位,十位赋给百位,个位赋给十位,然后把摁下键的对应数赋给个位。如果是算法键,则将对应的算法寄存地址赋上相应算法的值,并且在下一次输入数字时把十位、百位和千位清零以完成下一次的赋值,而这一次的值将转换为一个数储存在相应的地址中。当按下的是退格键,则将十位赋值给个位,百位赋值给十位,千位赋值给百位然后千位清零。当按下的是等号键的时候,将前一次储存的数取出与这一次的数进行相应的运算然后将得到的二进制数拆分为个位、十位、百位和千位然后扫描显示就可以。复位键是使用的中断,当个位、十位、百位和千位都不为零的时候按下将会初始化计算器的所有数据,如果个位、十位、百位和千位均为零这进入休眠状态等待下一次中断的唤醒。 二、硬件设计部分

我们使用的是PIC16F877A单片机,使用四位的八段数码管,4×4的键盘和一个独立的中断键。八段数码管我们使用的是共基极的接法,所以当给出低电平的时候导通,给出高电平的时候关断。我们以RD端口来控制段选,分别以RB0控制a、RB1控制b、RB2控制c、RB3控制d、RB4控制e、RB5控制f、RB6控制g和RB7控制dp。以RD1、RD2、RD3和RD4端口分别控制位选的千位、百位、十位和个位。 键盘我们使用RC端口扫描的方法来实现4×4的键盘。其中RC0、RC1、RC2和RC3端口分别设置为输出,RC4、RC5、RC6和RC7端口设置为输入。两组端口分别接入键盘的行和列。RC4、RC5、RC6和RC7端口再通过10K的电阻接VCC以实现为高电平。键盘扫描的时候,首先RC0、RC1、RC2和RC3端口均输入为低电平0,判断RC4、RC5、RC6和RC7端口是否全为高电平1,如果是则无按键被按下。如果不全为高电平1则证明有按键被按下。这时需要依次将RC0、RC1、RC2和RC3端口置低电平0,检测RC4、RC5、RC6和RC7端口何时有一个变为低电平0,这时可以对应出哪一个按键被按下。 中断键是单独接出的,外接电容增加其稳定性,减少被摁下是的抖动。

MATLAB实验二-矩阵基本运算(一)答案

实验一 矩阵基本运算(一) (1)设A 和B 是两个同维同大小的矩阵,问: 1)A*B 和A.*B 的值是否相等? ????? ?? =763514432A ???? ? ??=94 525 313 4B A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A*B, A.*B ans = 37 37 44 44 37 51 65 67 78 ans = 8 9 4 12 5 10 15 24 63 2)A./B 和B.\A 的值是否相等? A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A./B, B./A

ans = 0.5000 1.0000 4.0000 1.3333 0.2000 2.5000 0.6000 1.5000 0.7778 ans = 2.0000 1.0000 0.2500 0.7500 5.0000 0.4000 1.6667 0.6667 1.2857 3)A/B和B\A的值是否相等? A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A/B, B/A ans = -0.3452 0.5119 0.3690 0.7857 -0.7857 0.6429 -0.9762 1.3095 0.5952 ans = 110.0000 -15.0000 -52.0000

92.0000 -13.0000 -43.0000 -22.0000 4.0000 11.0000 4)A/B和B\A所代表的数学含义是什么? 解: A/B是B*A的逆矩阵 B\A是B*A的逆矩阵 (2)写出完成下列操作的命令。 1)将矩阵A第2—5行中第1,3,5列元素赋给矩阵B。 A=[0.9501 0.4565 0.9218 0.4103 0.1389 0.0153 0.2311 0.0185 0.7382 0.8936 0.2028 0.7468 0.6068 0.8214 0.1763 0.0579 0.1987 0.4451 0.4860 0.4447 0.4057 0.3529 0.6038 0.9318 0.8913 0.6154 0.9355 0.8132 0.2722 0.4660 0.7621 0.7919 0.9169 0.0099 0.1988 0.4186] B=A(2:5,[1,3,5]) A = 0.9501 0.4565 0.9218 0.4103 0.1389 0.0153 0.2311 0.0185 0.7382 0.8936 0.2028 0.7468 0.6068 0.8214 0.1763 0.0579 0.1987 0.4451 0.4860 0.4447 0.4057 0.3529 0.6038 0.9318 0.8913 0.6154 0.9355 0.8132 0.2722 0.4660 0.7621 0.7919 0.9169 0.0099 0.1988 0.4186 B = 0.2311 0.7382 0.2028 0.6068 0.1763 0.1987 0.4860 0.4057 0.6038 0.8913 0.9355 0.2722 2)删除矩阵A的第7号元素。 A=rand(6,6); >> A(7)=[inf] A = 0.8385 Inf 0.1730 0.1365 0.2844 0.5155

汇编语言课程设计四则运算计算器

汇编语言课程设计报告 ( 2012 -- 2013 年度第1 学期) 实验名称:实现加减乘除四则运算的计算器 专业生物医学工程 学生姓名周炳威 班级B100904 学号B10090406 指导教师乐洋

实现加减乘除四则运算的计算器 1 实验目的 深化学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用 2 实验内容 课题名称:实现加减乘除四则运算的计算器 主要功能:实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。 3 实现方法 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 第一步,用INT 21H的1号功能调用来进行输入。利用1号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算,先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。 第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是‘+’号、‘-’号、‘*’号、‘/’号中的哪一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行计算。

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期

目录 目录 (1) 1概述 0 设计目的 0 设计内容 0 2系统需求分析 0 系统目标 0 主体功能 (1) 开发环境 (1) 3 系统概要设计 (1) 系统的功能模块划分 (1) 系统流程图 (2) 4系统详细设计 (3) 5测试 (4) 测试方案 (4) 测试结果 (4) 6小结 (4) 参考文献 (6) 附录 (7) 附录源程序清单 (7)

实现加减乘除四则运算的计算器 1 概述 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。

汇编大作业(四则运算器含代码)

汇编程序大作业

云南大学软件学院实验报告 指导教师 (签名): 实验内容: 1.设计一个功能完善的四则运算器: ①程序有友好的运行界面; ②可以方便的输入输出2,10,16进制数据(要求可以处理4位的数据); ③可以方便的对数据进行四则运算; ④要求程序能够处理基本的错误信息; ⑤程序要求菜单控制; ⑥其他 程序简介: 该程序采用了主程序、子程序、宏相结合的编写方式,通过主程序调用了加、减、乘、除的子程序,在这四个子程序中有分别调用了二、十、十六进制输入输出、进制间转化的子程序。在数值转化为ASCII码的部分,定义了宏进行调整输出。 程序实现了16位的二进制、4位的十进制、4位的十六进制的加、减、乘、除运算,并可以通过用户的选择将其转化为其他相应的进制。其中乘法运算的进制转化功能尚不完善,当运算结果超过4位时不能正确的将结果进行输出并进行进制转化。 子过程: addition:加法部分 subtraction:减法部分 multiplication:乘法部分 division:除法部分 b_in:二进制输入 hd_in:十六进制、十进制输入 b_out:二进制输出 btod:二进制转化十进制并输出 both:二进制转化十六进制并输出 宏: btth:将数值转化为ASCII码保存 算法说明: 二进制计算时,要求输入0和1,从高到低为输入,将先输进的数*2+后输入的数,保存到寄存器中,如 1011则按((1*2+0)*2+1)*2+1 十进制计算时,要求输入0-9的整数,从高到低输入,将先输进的数*10+后输进的数,保存到寄存器中,如9817 则按((9*10+8)*10+1)*10+7 十进制计算时,要求输入0-F的整数,从高到低输入,将先输进的数*10H+后输进的数,保存到寄存器中,如AD17 则按((A*10H+D)*10H+1)*10H+7

第二章矩阵及其运算

第二章矩阵及其运算 第一节矩阵及其运算 一.数学概念 定义1.1由个数排成m行n列的数表 称为m行n列的矩阵,简称矩阵,记作 二.原理,公式和法则 1.矩阵的加法 (1) 公式 (2) 运算律 2.数乘矩阵 (1) 公式

(2) 运算律 3.矩阵与矩阵相乘 (1) 设, 则其中,且 。 (2)运算符(假设运算都是可行的): (3)方阵的运算 注意:①矩阵乘法一般不满足交换律。 ②一般 4.矩阵的转置 (1)公式

这里为A的转置矩阵。 (2)运算律 5.方阵的行列式 (1)公式 设A为n阶方阵,为A的行列式。 (2)运算律

6.共轭矩阵 (1)公式设为复矩阵,表示为的共轭复数,则为方阵的共轭矩阵。 (2)运算律(设A,B为复矩阵,为复数,且运算都是可行的): 第二节逆矩阵 一.数学概念 定义2.1设A为n阶方阵,若存在一个n阶方阵B使,则称矩阵A 是可逆的,并把矩阵称为A的逆矩阵。 1.可逆矩阵又称为非奇异矩阵。 2.不可逆矩阵又称为奇异矩阵。 二.原理,公式和法则 1. 定理 2.1方阵A可逆的充分必要条件是,且,其中 为A的伴随矩阵。 推论若AB=E(或BA=E)则B=A-1。 性质逆矩阵是唯一的。 2.运算律

①若A可逆,则A-1亦可逆,且。 ②若A可逆,数,则λA可逆,且。 ③若A,B为同阶矩阵且均可逆,则AB亦可逆,且 ④若A可逆,则A T亦可逆,且 第三节分块矩阵 一.数学概念 分块矩阵:用若干条横线和竖线将矩阵A分成若干小块,每一小块称为矩阵的子块,以子块为元素的矩阵为分块矩阵。 1.一般分块 2.按行分块

汇编语言课程设计四则运算计算器

微机原理实验报告 汇编语言课程设计报告 ( 2012 -- 2013 年度第1 学期) 实验名称:实现加减乘除四则运算的计算器 专业生物医学工程 学生姓名周炳威 班级B100904 学号B10090406 指导教师乐洋

实现加减乘除四则运算的计算器 1 实验目的 深化学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用 2 实验内容 课题名称:实现加减乘除四则运算的计算器 主要功能:实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。 3 实现方法 本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 第一步,用INT 21H的1号功能调用来进行输入。利用1号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算,先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。 第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是‘+’号、‘-’号、‘*’号、‘/’号中的哪一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行计算。 2

相关文档
最新文档