/*
m1和m2为两个相加的数组首元素地址,r和c为两个数组的行数和列数
m用于存放结果。
调用该函数时,要求m为有足够存储单元、能孙棚竖容纳运算结果的数和搜组首元素地址
*/
void add(int *m,int *m1,int *m2,int r,int c)
void sub(int *m,int *m1,int *m2,int r,int c)
void mult(int *m,int *m1,int *m2,int r,int p,int c)
void disp(int *m,int r,int c)
void main()
{
int a[3][4]={{2,4,6,8},{1,3,5,7},{11,33,44,22}}
int b[3][4]={{2,-4,6,-8},{-1,3,-5,7},{11,-33,-44,22}}
int c[4][3]={{2,4,6},{1,3,5},{1,0,3},{0,2,4}}
int d[3][4]={0}
int e[3][3]={0}
printf("\nA(3x4):\n")
disp(a[0],3,4)
printf("\nB(3x4):\n")
disp(b[0],3,4)
add(d[0],a[0],b[0],3,4)
printf("\nD(3x4)=A+B:\n")
disp(d[0],3,4)
sub(d[0],a[0],b[0],3,4)
printf("\nD(3x4)=A-B:\n")
disp(d[0],3,4)
printf("\nA(3x4):\n")
disp(a[0],3,4)
printf("\nC(4x3):\n")
disp(c[0],4,3)
mult(e[0],a[0],c[0],3,4,3)
printf("\nE(3x3)=A*C:\n")
disp(e[0],3,3)
}
void add(int *m,int *m1,int *m2,int r,int c){
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j)
}
void sub(int *m,int *m1,int *m2,int r,int c){
int i,j
for(i=0i<ri++)
for(j=0j<cj++)
*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j)
}
void mult(int *m,int *m1,int *m2,int r,int p,int c){
int i,j,k,t
for(i=0i<ri++)
for(j=0j<cj++)
{
t=0
for(k=0k<则大pk++)
t += *(m1+i*p+k) * *(m2+k*c+j)
*(m+i*c+j)=t
}
}
void disp(int *m,int r,int c)
{
int i,j
for(i=0i<ri++)
{
for(j=0j<cj++)
printf("%6d",*(m+i*c+j))
printf("\n")
}
}
1、首先打开vs2015(其他版本也可埋仔指以),新建一个Windows Form窗体程序或者弯配控制台都可以。
2、 定义一个名为array1的数组并赋值:double[,] array1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }下面求该矩阵转置矩阵。
3、接下来实现矩阵的转置运算,可以写函数也可以写类,右键解决方案下的项目名,添加-类。
4、创建一个名为“turnzhi”的类(名字随便取,最好用英文,有时候中文名程序会报错),然后点击“添加”戚清。
5、转置类的代码如下图所示。
6、在主程序调用转置类,用两个for循坏将转置后的数组(array)输出来;并将结果显示在textbox中。
7、最后运行程序查看编写的结果:147、258、369。转置后的结果正确,这样就实现了c#矩阵的转置运算。
因有别的事,我用别人的代码发给你,不过我运行了,可以用// 111.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
/****************************************************************************/
/*题目:矩阵加减乘演示*****/
/*作者:vc99 writed for c bar***/
/*日期:2005.9.5***/
/*版本:Version 1.1
/*简介:本演示引入第三个矩阵来保存运算结果,以达到连续运算的目的。***/
/***************************************************************************/
# include "stdio.h"
# include "stdlib.h"
# define X 3
# define Y 3
/**********输出数组*******/
void prt(int a[X][Y])
{
int i,j
for(i=0i<Xi++)
{
for(j=0j<Yj++)
printf(" %5d",a[i][j])
printf("\n")
}
}
/************输入数组*********/
void inp(int a[X][Y], char s)
{
int i,j,t
for(i=0i<Yi++)
for(j=0j<Yj++)
{
printf("%c[%d][%d]=",s,i,j)/**提示输入数组s的[i][j]元素 ****/
scanf("%d",&t)
a[i][j]=t
}
}
/********矩阵加,结果保存于m[][]*********/
void madd(int a[X][Y],int b[X][Y],int m[X][Y])
{
int i,j
for(i=0i<Xi++)
for(j=0j<Yj++)
m[i][j]=a[i][j]+b[i][j]/***矩阵加****/
prt(m)
}
/********矩阵减,结果保存于m[][]****/
void msub(int a[X][Y],int b[X][Y],int m[X][Y])
{
int i,j
for(i=0i<Xi++)
for(j=0j<Yj++)
m[i][j]=a[i][j]-b[i][j]/***矩阵减****/
prt(m)
}
/*******矩阵乘段好,结果保存于m[][]******/
void mmul(int a[X][Y],int b[X][Y],int m[X][Y])
{
int i,j,k
for(i=0i<Xi++)
for(j=0j<Yj++)
m[i][j]=0
for(i=0i<Xi++)
for(j=0j<Yj++)
for(k=0k<伍轿Yk++)
m[i][j]+=a[i][k]*b[k][j]/***矩阵乘****/
prt(m)
}
int main(int argc, char* argv[])
{
int sel=0,agn=1,cpt=1
int a[X][Y], b[X][Y], m[X][Y]
while(agn==1)
{
printf("请输入矩阵a!\n")
inp(a,'a')
printf("请输入矩阵b!\n")
inp(b,'b')
while (cpt==1)
{
printf("请选择矩阵运算:[1]+ [2]- [3]*\n\t")
scanf("%d",&sel)
if (sel==1) madd(a,b,m)
if (sel==2) msub(a,b,m)
if (sel==3) mmul(a,b,m)
printf("腔燃肆重新运算?[1]是 [0]否")
scanf("%d",&cpt)
}
printf("是否重新输入矩阵?[1]是 [0]否")
scanf("%d",&agn)
}
return 0
}
这样可以么?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)