1. 编程实现下面的矩阵运算 (1) 矩阵的界限使用#define进行定义 (2) 矩阵A和B内的数字由计算机键盘输

作者&投稿:从功 (若有异议请与网页底部的电邮联系)
求。用89C51单片机设计4*4矩阵式键盘计算器程序,~

/*我写的这个计算器可以算255范围以内的整数计算,本打算再加入小数与做最后的处理工作。可是又太费时间,所以就放那里了。看见了你的提问,也懒得改一改,你看看能不能用。*/#includeunsigned char Line,Row,Val;void delay(){ unsigned char count; for(count=0;count9&&Val<16){ if(Val!=13&&Val!=12) futemp=Val; //存符号并进行响应处理 else if(Val==12){ data1=0; data2=0; futemp=0; } else if(Val==13){ if(futemp==10){ data1=data1*data2; denghou(); } else if(futemp==11){ data1=data1/data2; denghou(); } else if(futemp==14){ data1=data1-data2; denghou(); } else if(futemp==15){ data1=data1+data2; denghou(); } else{ while(1){ P2=0xff; P0=0x00; } } } } else while(1){ P2=0xff; P0=0x00; } //显示错误}unsigned char GetKey1(void){ P1=0x0F; CheckValue=P1^0x0F; if(CheckValue==0x00) return 0x00; else if(CheckValue==0x01) Line=CheckValue; else if(CheckValue==0x02) Line=CheckValue; else if(CheckValue==0x04) Line=CheckValue; else if(CheckValue==0x08) Line=CheckValue; Key1=0x0F; return Key1; }unsigned char GetKey2(void){ P1=0xF0; CheckValue=P1^0xF0; if(CheckValue==0x00) return 0x00; else if(CheckValue==0x10) Row=CheckValue; else if(CheckValue==0x20) Row=CheckValue; else if(CheckValue==0x40) Row=CheckValue; else if(CheckValue==0x80) Row=CheckValue; delay1(); KeyTemp = P1^0xF0; if(KeyTemp==CheckValue) return 0x00; Key2=0xF0; return Key2; }void main(){ unsigned char Key1,Key2; InitialCPU(); InitialTimer0(); while(1) { Key1=GetKey1(); Key2=GetKey2(); if(Key1!=0x00&&Key2!=0x00) { Dispose(); P3=0x00; } }}

我以前写过一篇关于计算矩阵的秩的小论文,里面是我的一些看法,我从中摘录了一部分,附在下面,看看对你有没有什么帮助。我的看法也是通过将矩阵化成最简形来求解,以下是这么选择的原因。其实这个问题可以讨论讨论的,当时我对自己的算法也不算很满意,所以有什么问题尽管提。


本程序是为求解矩阵的秩而进行编译的。要说明其功能,首先要明白什么是矩阵的秩。设在矩阵A中有一个不等于0的r结子式D,且所有r+1阶子式(如果存在的话)全等于0,那么D称为矩阵A的最高阶非零子式,数r称为矩阵A的秩,记作R(A)。零矩阵的秩为1。根据定义推断,计算矩阵A的秩,可以转化为计算矩阵A的最大非零子式。但是,实际应用这条原理来解决此问题并不容易。因为,应用计算机计算矩阵A所对应的行列式|A|的值非常麻烦。一个m×n的矩阵,其k阶子式多达m!/[k!•(m-k)!]•n!/[k!•(n-k)!]个,这大大增加了程序的计算量。同时,由于不同阶的子式的值的算法不易通用,故也增加了程序员的编程负担,最重要的是,程序的通用性较低,不易应用于相似题目的求解。故,本程序算法并未采用这种思路。那么,本题又应当如何求解呢?实际生活中,我们一般的求解方法是应用初等变换求解。应用初等变换,将要求的矩阵A变换成行最简形或列最简形然后再进行判断,这才是我们求解矩阵的秩的常规做法。那么,编写程序求解矩阵的秩当然也可以遵循这种做法。相对于前面所讨论的原理来说,应用这种原理进行算法设计,可以减少不少的时间,同时计算机求解的速度也能大大提高。而且,再本算法的基础上稍加改进,即可适应任何阶次的矩阵的秩的求解。

矩阵加法:
#include "stdio.h"
#define M 2
#define N 4
void and(int A[M][N],int B[M][N],int C[M][N]);
main()
{
int A[M][N],B[M][N],C[M][N];
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&A[i][j]);
}
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&B[i][j]);
}
}
and(A,B,C);
printf("A=");
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",A[i][j]);
}
printf("\n");
}
printf("B=");
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",B[i][j]);
}
printf("\n");
}
printf("A+B=");
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",C[i][j]);
}
printf("\n");
}
}
void and(int A[M][N],int B[M][N],int C[M][N])
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
C[i][j]=A[i][j]+B[i][j];
}
}
}
矩阵乘法:
#include "stdio.h"
#define M 2
#define N 4
#define K 3
void multiple(int A[M][N],int B[N][K],int D[M][K]);
main()
{
int A[M][N],B[N][K],D[M][K];
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&A[i][j]);
}
}
for(i=0;i<N;i++)
{
for(j=0;j<K;j++)
{
scanf("%d",&B[i][j]);
}
}
multiple(A,B,D);
printf("A=");
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",A[i][j]);
}
printf("\n");
}
printf("B=");
printf("\n");
for(i=0;i<N;i++)
{
for(j=0;j<K;j++)
{
printf("%3d",B[i][j]);
}
printf("\n");
}
printf("A*B=");
printf("\n");
for(i=0;i<M;i++)
{
for(j=0;j<K;j++)
{
printf("%3d",D[i][j]);
}
printf("\n");
}
}
void multiple(int A[M][N],int B[N][K],int D[M][K])
{
int i,j,l,temp=0;
for(i=0;i<M;i++)
{
for(j=0;j<K;j++)
{
temp=0;
for(l=0;l<N;l++)
{
temp=temp+A[i][l]*B[l][j];
}
D[i][j]=temp;
}
}
}

D

hh


安徽省19819817104: 编程实现下面的矩阵运算A33*B33+(A的转置) -
赏诸妥抒: 矩阵加法:#include "stdio.h"#define M 2#define N 4 void and(int A[M][N],int B[M][N],int C[M][N]); main() { int A[M][N],B[M][N],C[M][N]; int i,j; for(i=0;i { for(j=0;j { scanf("%d",&A[i][j]); } } for(i=0;i { for(j=0;j { scanf("%d",&B[i][j]); } } and(A,B,C); ...

安徽省19819817104: C语言中文件包含功能怎么用? -
赏诸妥抒: 增加一个array.h文件,和array.c一起放到工程中; .h文件中,放入array.c里面所有函数的声明(这个声明只需要一次,另外两个.c中不要再次声明; 两个.c文件的首部,其它include之后,增加一行:#include "array.h",即可.

安徽省19819817104: c++编程实现矩阵运算 -
赏诸妥抒: 不好意思,现在好了 #include <stdio.h> #include <stdlib.h> #define X 3 #define Y 3 int a[X][Y]; int b[X][Y]; int c[X][Y]; void matrix(int b[][X],int c[][Y]); main() { int i,j,temp; printf("Please input int matrix b[%d][%d]\ ",X,Y); for(i=0;i<Y;i++) for(j=0;j<Y;j++){ ...

安徽省19819817104: 矩阵常用运算,c语言程序设计 -
赏诸妥抒: #include<stdio.h>#define N 3 void main() {int i,j, sum = 0; int a[N][N], b[N][N];int max , min,row_max = 0, col_max = 0, row_min = 0,col_min = 0;printf("请输入矩阵的元素:");for( i = 0; i < N; i++ )for( j = 0; j < N; j++ ) scanf("%d",&a[i][j]); ...

安徽省19819817104: matlab编程实现矩阵的运算 -
赏诸妥抒: f=0; for i=1:n A=x(:,(i-1)*[1:10]); Tt=A'; b=At*A; f=f+b; end

安徽省19819817104: 一、程序要求:写一个程序实现以下功能:一个 m*n 的矩阵(不一定是方阵),编程实现矩阵输出,从A(或a)一、程序要求:写一个程序实现以下功能:... -
赏诸妥抒:[答案] #include void main() { int M; int N; int flag=0; int num1=0; int num2=1; int i=0; int j=0; char str='A'; char Array[31][31]; printf("请输入矩阵的行M和矩阵的列N:"); scanf("%d%d",&M,&N); Array[0][0]=str; while(flag { switch(num2%4) { case 1: ++j; if(j ==...

安徽省19819817104: Java编写一个程序实现矩阵的运算加减乘除,(并对其中的异常进行处理) -
赏诸妥抒: /** * 矩阵:由 m * n 个数Aij排成的m行n列的数表称为m行n列的矩阵,简称m * n矩阵 * 说白了就是一个二维数组,下面的程序用整形作为数据类型,其他类型运算大同小异 **/ public class MatrixUtils { /** * 矩阵运算:加(减法与之类似) */ public...

安徽省19819817104: c语言编程实现一个螺旋矩阵,例如输入 2 4 输出:1 2 3 4 8 7 6 5 -
赏诸妥抒: #include#define N 20 void matrx1(int a[][N],int m,int n) { int d,x=0,y=0; int right,left,up,down; for(d=1;d { a[x][y]=d; right=y left=y>0&&a[x][y-1]==0; down=x up=x>0&&a[x-1][y]==0; /* if(right||down) y++; else x++; if(down||left) x++; else if(left||up) y--; else if(...

安徽省19819817104: 用C语言实现 矩阵的乘法 -
赏诸妥抒: void main() {int a[100][100],b[100][100],c[100][100],i,j,k,m,n,h;<br/> scanf("%d%d%d",&k,&m,&n);<br/> for(i=0;i<k;i++)<br/> for(j=0;j<m;j++)<br/> scanf("%d",&a[i][j]);<br/> printf("\n");<br/> for(i=0;i<m;i++)<br/> for(j=0;j<n;j++)<br/> scanf("%d...

安徽省19819817104: 编写程序形成如下矩阵 -
赏诸妥抒: 用C编的 int[5][5] A; int ii, jj; for (ii = 0; ii { for (jj = 0; jj{ if (ii - jj{ A[ii][jj] = 1; } else { A[ii][jj] = ii - jj; } } } 补充:C++用上面的就可以

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网