C语言矩阵

C语言矩阵,第1张

bool FindMaxSort(int pMatrix,int Rows,int Cols, int &MaxSort )

{

MaxSort=-200000000;

int M;

for(int i=0;i<Rows;i++)

{

if (pMatrix[i][0]>pMatrix[i][1]&&MaxSort<pMatrix[i][0]) //递减

{

M=pMatrix[i][1];

for(int j=2;j<Cols;j++)

{

if(pMatrix[i][j]>=M) break;

M=pMatrix[i][j];

}

if (j==Cols)

{

MaxSort=pMatrix[i][0];

}

}

else if(pMatrix[i][0]<pMatrix[i][1]&&MaxSort<pMatrix[i][Cols-1]) //递增

{

M=pMatrix[i][1];

for(int j=2;j<Cols;j++)

{

if(pMatrix[i][j]<=M) break;

M=pMatrix[i][j];

}

if (j==Cols)

{

MaxSort=pMatrix[i][Cols-1];

}

}

}

return MaxSort!=-200000000;

}

这是我编的一个简易矩阵计算器,C++语言,非常容易理解的,你可以参考求行列式和逆部分

#include <iostream>

#include <iomanip>

#include <conioh>

#include "windowsh"

#include <string>

using namespace std;

void gotoxy(int x,int y) // 列x: 0~79 行y: 0~24

{ HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);

COORD coordScreen={x,y};

SetConsoleCursorPosition(hConsole,coordScreen);

return;

}

void setcolor(unsigned short ForeColor,unsigned short BackColor)

// 0--黑 1--暗蓝 2--暗绿 3--暗青 4--暗红 5--暗紫 6--蟹黄 7--暗白

// 8--灰 9--亮蓝 10-亮绿 11-亮青 12-亮红 13-亮紫 14-黄 15-亮白

{ HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hCon,(ForeColor % 16)|(BackColor % 16 16));

};

int main()

{

void plu();

void sub();

void amo();

void mul();

void ran();

void ord();

char sel='1';

while(sel != '0')

{ int i;

system("cls"); // 清屏

setcolor(15,0); // 下面显示黑底亮青字

gotoxy(8,1); cout<<"┌───────────────────────────┐";

for(i=2;i<20;i++)

{gotoxy(8,i);cout<<"│";gotoxy(64,i);cout<<"│";}

setcolor(15,6); // 下面显示红底白字

gotoxy(10,3); cout<<" ";

gotoxy(10,4); cout<<" 简 易 矩 阵 计 算 器 ";

gotoxy(10,5); cout<<" ";

setcolor(15,0); // 下面显示黑底亮青字

gotoxy(10,7); cout<<" 1 ---- 矩阵加法 2 ---- 矩阵减法 ";

gotoxy(10,9); cout<<" 3 ---- 矩阵数乘 4 ---- 矩阵乘法 ";

gotoxy(10,11); cout<<" 5 ---- 矩阵行列式 6 ---- 矩阵的逆 ";

gotoxy(10,13); cout<<" 0 ---- 退出 ";

gotoxy(10,15); cout<<" 请选择(0--6):";

gotoxy(8,20); cout<<"└───────────────────────────┘";

do

{ gotoxy(28,15); sel=getche( );}

while ( sel!='1' && sel!='2' && sel!='3' && sel!='4' && sel!='5' && sel!='6'&& sel!='0');

switch(sel)

{

case '1':plu(); break;

case '2':sub(); break;

case '3':amo(); break;

case '4':mul(); break;

case '5':ran(); break;

case '6':ord(); break;

case '0': break;

}

}

system("cls");

gotoxy(25,10);

cout<<"谢 谢 使 用 系 统 !"<<endl;

return 0;

}

void plu()//加法

{ char l;

system("cls"); // 清屏

setcolor(14,0); // 下面用黑底黄字

int a,b,i,j;

gotoxy(0,0);cout<<">>>>>> 矩阵加法 ";

gotoxy(0,2);cout<<"请输入矩阵的行数:";

cin>>a;

cout<<endl;

cout<<"请输入矩阵的列数:";

cin>>b;

cout<<endl;

double m[10][10],n[10][10];

cout<<"请输入第一个矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,2i+6); cin>>m[i][j];}

cout<<endl<<endl<<"请输入第二个矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,2a+2i+7);cin>>n[i][j];}

cout<<endl<<">>>>>>>"<<endl<<"矩阵加法结果为:";

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,4a+2i+8);cout<<m[i][j]+n[i][j];}

gotoxy(0,6a+9);

cout<<">>>>>>>>按任意键退出:";

l=getche();

}

void sub()//减法

{ char l;

system("cls"); // 清屏

setcolor(14,0); // 下面用黑底黄字

int a,b,i,j;

gotoxy(0,0);cout<<">>>>>矩阵减法";

gotoxy(0,2);cout<<"请输入矩阵的行数:";

cin>>a;

cout<<endl;

cout<<"请输入矩阵的列数:";

cin>>b;

cout<<endl;

double m[10][10],n[10][10];

cout<<"请输入第一个矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,2i+6); cin>>m[i][j];}

cout<<endl<<endl<<"请输入第二个矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,2a+2i+7);cin>>n[i][j];}

cout<<endl<<">>>>>>>"<<endl<<"矩阵减法结果为:";

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,4a+2i+8);cout<<m[i][j]-n[i][j];}

gotoxy(0,6a+9);

cout<<">>>>>>>>按任意键退出:";

l=getche();

}

void amo()//数乘

{ char h;

system("cls"); // 清屏

setcolor(14,0); // 下面用黑底黄字

int a,b,i,j;

gotoxy(0,0);cout<<">>>>>>矩阵数乘";

gotoxy(0,2);cout<<"请输入矩阵的行数:";

cin>>a;

cout<<endl;

cout<<"请输入矩阵的列数:";

cin>>b;

cout<<endl;

double m[10][10],c;

cout<<"请输入矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+20,2i+6);cin>>m[i][j];}

cout<<endl<<"请输入与矩阵相乘的实数:";

cin>>c;

cout<<endl<<endl<<"矩阵数乘结果为:";

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(8j+20,2a+2i+9);cout<<m[i][j]c;}

gotoxy(0,4a+12);

cout<<">>>>>>>按任意键退出:";h=getche();

}

void mul()//乘法

{

char k;

system("cls"); // 清屏

setcolor(14,0); // 下面用黑底黄字

int a,b,c,i,j,q;

gotoxy(0,0);cout<<">>>>>>矩阵乘法";

gotoxy(0,2);cout<<"请输入第一个矩阵的行数:";

cin>>a;

cout<<endl<<"请输入第一个矩阵的列数:";

cin>>b;

cout<<endl<<"则第二个矩阵的行数也为:"<<b;

cout<<endl<<endl<<"请输入第二个矩阵的列数:";

cin>>c;

cout<<endl;

double m[10][10],n[10][10],p[10][10]={0};

cout<<"请输入第一个矩阵:"<<endl;

for(i=0;i<a;i++)

for(j=0;j<b;j++)

{gotoxy(6j+18,2i+10); cin>>m[i][j];}

cout<<endl<<endl<<"请输入第二个矩阵:";

for(i=0;i<b;i++)

for(j=0;j<c;j++)

{gotoxy(6j+18,2a+2i+11);cin>>n[i][j];}

cout<<endl<<">>>>>>>"<<endl<<"矩阵相乘结果为: ";

for(i=0;i<a;i++)

for(j=0;j<c;j++)

for(q=0;q<b;q++) p[i][j]=p[i][j]+m[i][q]n[q][j];

for(i=0;i<a;i++)

for(j=0;j<c;j++)

{gotoxy(10j+18,2a+2b+2i+12);cout<<p[i][j];}

gotoxy(16,2a+2b+2i+15);

cout<<">>>>>>>按任意键退出:";k=getche();

}

//===================================================行列式

float Fun(int n1,float a1[10][10]);

void ran()

{

system("cls"); // 清屏

setcolor(15,0); // 下面用黑底黄字

char k;

int n,i,j;

cout<<">>>>>矩阵行列式"<<endl<<endl<<"请输入矩阵阶数: ";

cin>>n;

cout<<endl<<"请输入矩阵:"<<endl;

float a[10][10];

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{gotoxy(6j+12,2i+4);cin>>a[i][j];}

cout<<endl<<"行列式为: "<<Fun(n,a)<<endl<<endl;

cout<<">>>>>>按任意键退出:";

k=getche();

}

float Fun(int n1,float a1[10][10])//求行列式的递归函数

{

int i_1,j_1,c;//c为数组b的行

float b[10][10];

int p=0,q=0;

float sum=0;

if(n1==1) return a1[0][0];

for(i_1=0;i_1<n1;i_1++)

{

for(c=0;c<n1-1;c++)

{if(c<i_1) p=0;

else p=1;

for(j_1=0;j_1<n1-1;j_1++)

{b[c][j_1]=a1[c+p][j_1+1];}

}

if(i_1%2==0)

q=1;

else q=(-1);

sum=sum+a1[i_1][0]qFun(n1-1,b);

}return sum;

}

//================================================================

void ord()

{

char g;

system("cls"); // 清屏

setcolor(15,0); // 下面用黑底黄字

int i,j,n;

gotoxy(0,0);cout<<">>>>>矩阵的逆";

gotoxy(0,2);cout<<"请输入矩阵的阶数:";

cin>>n;

cout<<endl;

cout<<"请输入矩阵:";

float l[10][10],m[10][10],p;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{gotoxy(4j+12,2i+4); cin>>l[i][j];}

if(Fun(n,l)==0) cout<<endl<<"该矩阵无逆!!!"<<endl;

else

{p=Fun(n,l);

cout<<endl<<"矩阵的逆为: ";

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{{float f[10][10];

int r,w,e,d;//e为数组f的行数

for(int j_1=0,e=0;j_1<n-1,e<n-1;j_1++,e++)

for(int i_1=0,d=0;i_1<n-1,d<n-1;i_1++,d++)

{if(e<i) r=0;else r=1;

if(d<j) w=0;else w=1;

f[i_1][j_1]=l[i_1+w][j_1+r];};

if((i+j)%2==0) m[i][j]=Fun(n-1,f)/p;

else m[i][j]=-Fun(n-1,f)/p;

};

gotoxy(9j+12,2n+2i+4);cout<<m[i][j];};};

cout<<endl<<endl<<">>>>>>按任意键退出:";g=getche();

}

#define MAX 50

#define M MAX

#define N MAX

#define T MAX

#define S MAX

int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {

int i,j,k;

if(n != s) {

printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。\n");

return 0;

}

int c;

tmpm_Mat = new double [tmpm_Rows];

for(int i = 0;i < tmpm_Rows;i++) tmpm_Mat[i] = new double[tmpm_Cols];

for(i = 0; i < m; ++i) {

for(j = 0; j < n; ++j) {

c[i][j] = 0;

for(k = 0; k < t; ++k)

c[i][j] += c[i][k]  c[k][j];

}

}

return 1;

}

printf("输入数组a:\n");

for(i=0;i<2;i++)

for(j=0;j<3;j++)

scanf("%d",&a[i][j]);

2行三列的矩阵输入

printf("输入数组b:\n");

for(i=0;i<3;i++)

for(j=0;j<2;j++)

scanf("%d",&b[i][j]);

3行两列的矩阵输入

printf("输出数组c:\n");

for(i=0;i<2;i++){

for(j=0;j<2;j++)

printf("%d ",c[i][j]);

printf("\n");}

输出矩阵C和一个回车符

既然老师给的就肯定有问题

for(i=0;i<2;i++)

{h=i;

for(j=0;j<2;j++)

{f=j;

for(k=0;k<3;k++)c[h][f]+=a[h][k]b[f][k];

}

}

就在这一段C语言执行顺序问题要把c[h][f]+=a[h][k]b[f][k];改成c[h][f]=a[h][k]b[f][k];

还有什么问题追问吧

c语言输入矩阵方法:先自己输入阶数,再输入各个元素。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

思路:定了两个二维数组分别存储转置前后的矩阵,接着for循环依次转置即可。

//参考代码

#include<stdioh> 

int main() 

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},b[4][3]; 

int i,j; 

for(i=0;i<3;i++) 

for(j=0;j<4;j++) 

b[j][i]=a[i][j]; 

for(i=0;i<4;i++) 

for(j=0;j<3;j++) 

printf("%2d ",b[i][j]); 

printf("\n"); 

return 0;

}

/

运行结果:

 1  5  9

 2  6 10

 3  7 11

 4  8 12

/

i=i+1;//这里你i加了1造成下面的for循环不成立

a[i][j]=count;

count++;

for (;i==0;)上面你给i加了1,使得i不等于0,for语句循环条件也就不成立。所以不进循环。

下面另一个循环不进也是相同原因。

#include

"stdioh"

#include

"stdlibh"

void

main

()

{

int

m,l,p,q;

printf("输入第一个矩阵的维数m和l:\n");

scanf("%d%d",&m,&l);

printf("输入第二个矩阵的维数p和q:\n");

scanf("%d%d",&p,&q);

while

(l!=p)

{

printf("两个矩阵不匹配,不能进行相乘运算,请重新输入\n\n");

printf("输入第一个矩阵的维数m和l:\n");

scanf("%d%d",&m,&l);

printf("输入第二个矩阵的维数p和q:\n");

scanf("%d%d",&p,&q);

}

double

a[200][200]={0},

b[200][200]={0},sum=0;

int

i,j,k=0;

for

(i=0;i<m;i++)

{

for

(j=0;j<l;j++)

{

a[i][j]=(double)rand()/RAND_MAX;

}

}

printf("随机矩阵a是:\n");

for

(i=0;i<m;i++)

{

for

(j=0;j<l;j++)

{

printf("%f

",a[i][j]);

}

printf("\n");

}

//cout<<"输入一个32的矩阵:"<<endl;

for

(i=0;i<p;i++)

{

for

(j=0;j<q;j++)

{

b[i][j]=(double)rand()/RAND_MAX;

}

}

printf("随机矩阵b是:\n");

for

(i=0;i<p;i++)

{

for

(j=0;j<q;j++)

{

printf("%f

",b[i][j]);

}

printf("\n");

}

printf("ab相乘结果为:\n");

for

(i=0;i<m;i++)

{

while

(k<q)

{

for

(j=0;j<q;j++)

{

sum

=

a[i][j]b[j][k]+sum;

}

printf("%f

",sum);

k++;

sum=0;

}

k=0;

printf("\n");

}

}

如果不满足你要求,自己再改一下吧

以上就是关于C语言矩阵全部的内容,包括:C语言矩阵、用c语言怎么编写输入一个矩阵求其逆矩阵的程序、C语言编程求矩阵乘积等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9750572.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存