C语言实现的矩阵加减乘法

C语言实现的矩阵加减乘法,第1张

#include<stdio.h>

/*

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

}

这样可以么?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12521950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存