当前位置:首页 » 编程语言 » c语言写矩阵

c语言写矩阵

发布时间: 2023-08-25 09:38:50

A. 如何用c语言编写程序求矩阵的值

#include<stdio.h>

void main()
{
//定义矩阵1、2为输入数据矩阵,3为乘积后的矩阵
int cJuZhen1[4][3],cJuZhen2[3][2],cJuZhen3[4][2];
//定义两个指针*p1,*p2分别指向矩阵1、2
int *p1,*p2,i,j;
p1=&cJuZhen1[0][0];
p2=&cJuZhen2[0][0];
//输入矩阵1的数据
printf("请输入4*3的矩阵A: \n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",cJuZhen1[i][j]);
}
}
printf("\n");
//输入矩阵2的数据
printf("请输入3*2的矩阵B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",cJuZhen2[i][j]);
}
}
printf("\n");
//输出矩阵1
printf("矩阵A:"\n);
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",cJuZhen1[i][j]);
}
if(j==3)
{
printf("\n");
}
}
printf("\n");
//输出矩阵2
printf("矩阵B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen2[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
//计算矩阵1、2的乘积
printf("两矩阵乘积为: \n");
for(i=0;i<4;i++)
{
cJuZhen3[i][0]=(*p1)*(*p2)+(*(p1+1))*(*(p2+2))+(*(p1+2))*(*(p2+4));
cJuZhen3[i][1]=(*p1)*(*(p2+1))+(*(p1+1))*(*(p2+3))+(*(p1+2))*(*(p2+5));
p1=p1+3;
}
//输出矩阵3(即矩阵乘积)数据
printf("矩阵A与B乘积为: \n");
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen3[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
}

或者这个#include<iostream>
#include<math.h>
using namespace std;
#define n 3 //三阶矩阵
#define N 20
#define err 0.0001

void main()
{
int i,j,k;
double A[n][n],X[n],u,y[n],max;

cout<<"Please input the matrix:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j]; //输入矩阵
cout<<"Please input the initialized vector:\n";
for(i=0;i<n;i++)
cin>>X[i]; //输入初始向量

k=1;
u=0;
while(1)
{
max=X[0];
for(i=0;i<n;i++)
{
if(max<X[i]) max=X[i]; //选择最大值
}

for(i=0;i<n;i++)
y[i]=X[i]/max;

for(i=0;i<n;i++)
{
X[i]=0;
for(j=0;j<n;j++)
X[i]+=A[i][j]*y[j]; //矩阵相乘
}

if(fabs(max-u)<err)
{
cout<<"The eignvalue of A is:"<<max<<"\n";
cout<<"The eignvector of A is:";
for(i=0;i<n;i++)
cout<<X[i]<<" ";
break;
}
else
{
if(k<N) {k=k+1;u=max;}
else {cout<<"error\n";break;}
}

}
}

B. c语言矩阵怎么写

方法1:直接定义10*10的数组,读取全部数据,再根据选择的行列数打印输出部分数据。

方法2:通过文件流指针的移动,跨过不需要的内容。(这里控制文件流指针可利用ftell和fseek函数来移动指定字节数)我是利用fscanf读取需要的内容,遇到需要跳行就用fgets来跳过。(注意常量参数根据自己需求修改)。

说明:边读取边打印输出,就不需要变量存储。我的代码是把读取出来的内容存放在三维数组中(文件内容你没指定,如是单纯数字,二维数组即可,我是作为字符串处理,故用三维数组。),数组是根据实际大小,动态申请,写成两个独立函数。

下面是代码:

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#define MAXR 10//文件中矩阵最大行

#define MAXC 10//文件中矩阵最大列

#define MS 3//矩阵中元素字符串最大字符数(包含结束符号,不可小于实际内容)

#define MBUF 100//文件中一行最大字符数,可设置大一点

char ***getMem(int r,int c,int len);//动态申请一个三维数组

void freeMem(char ***datas,int r,int c);//释放数组空间

void showDatas(char ***datas,int r,int c);//打印输出结果

int main()

{

int r=MAXR+1,c=MAXC+1,i=0,j=0;

char ***datas=NULL,str[3],buf[MBUF];

FILE *fp=NULL;

printf("请输入要获取的行数和列数: ");

while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);

datas=getMem(r,c,MS);

fp=fopen("C:\test.data","r");

if(!fp) return 1;

while(fscanf(fp,"%s",str)!=-1)

{

if(i<c) strcpy(datas[j][i],str),i++;

if(i==c)

{

if(!fgets(buf,sizeof(buf),fp)) break;

i=0,j++;

}

if(j==r) break;

}

showDatas(datas,r,c);

freeMem(datas,r,c);

return 0;

}

void showDatas(char ***datas,int r,int c)

{

int i,j;

for(i=0;i<r;i++,printf(" "))

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

printf("%s ",datas[i][j]);

printf(" ");

}

void freeMem(char ***datas,int r,int c)

{

int i,j;

if(!datas)

{

for(i=0;i<r;i++,free(datas[i]))

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

free(datas[i][j]);

free(datas);

}


}

char ***getMem(int r,int c,int len)

{

int i,j;

char ***datas=NULL,**dr=NULL;

datas=(char ***)malloc(sizeof(char **)*r);

if(!datas) return NULL;

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

{

dr=(char **)malloc(sizeof(char *)*c);

if(!dr) return NULL;

else

{

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

{

dr[j]=(char *)malloc(sizeof(char)*len);

if(!dr[j]) return NULL;

}

datas[i]=dr;

}

}

return datas;

}

C. c语言怎么输入矩阵

c语言矩阵分为两种:

第一种方法是动态的申请矩阵存储空间,该方法的好处有以下两点:

1.能够动态的申请和释放存储空间;

2.对于将矩阵作为函数返回值的情况,该方法具有独特的优势。

D. 急求!如何用C语言输出如下矩阵(N*N)

题目要求有一个问题,它要求N最小为2,却要求N为奇数,N为奇数应该最小为3或1才对.

按照题目要求编写的C语言矩阵程序如下

#include<stdio.h>

int main(){

int i,j,k,N,count=1;

scanf("%d",&N);

if(N<=2 || 15<N || N%2==0){

printf("请输入小于等于15且大于2的奇数");

}else{

int a[N][N];

for(i=N/2;i>=0;i--){

k=N-i-1;

for(j=N-i-2;j>=i;j--){

a[j][k]=count++;

}

for(j=N-i-2;j>=i+1;j--){

a[i][j]=count++;

}

for(j=i;j<N-i;j++){

a[j][i]=count++;

}

for(j=i+1;j<N-i;j++){

a[k][j]=count++;

}

}

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

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

printf("%-5d",a[i][j]);

}

printf(" ");

}

}

return 0;

}

E. 用C语言编写一个矩阵运算的程序,高分!

//矩阵三元组之矩阵相加 相乘
#include <iostream>
using namespace std;
typedef int Elemtype;
#define MAXSIZE 12500 //最大非零元素
typedef struct Triple
{
Elemtype value;
int row,col;
}Triple;

typedef struct TSMatrix
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
TSMatrix T;
void InputMatrix(TSMatrix &T) //输入t个非零元素
{
cout<<"请输入稀疏矩阵的信息,(行,列,非零元素个数)"<<endl;
cin>>T.mu>>T.nu>>T.tu;
int i;
cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl;
for(i=1;i<=T.tu;++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value;
}
}

void Output(TSMatrix T)
{
cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl;
int i;
for(i=1;i<=T.tu;++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl;
}
}

void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩阵的转置
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int i,j,k=1;
for(i=1;i<=M.nu;++i)
{
for(j=1;j<=M.tu;++j)
if(M.data[j].col==i)
{
T.data[k].row=i;
T.data[k].col=M.data[j].row;
T.data[k].value=M.data[j].value;
++k;
}
}
}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩阵相加
{
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i<=M.tu&&j<=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;
if(index_a<index_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_b)
{
Q.data[k]=T.data[j];
j++;
k++;
}
else if(index_a==index_b)
{
if((M.data[i].value+T.data[j].value)!=0)
{
Q.data[k]=M.data[i];
Q.data[k].value=M.data[i].value+T.data[j].value;
k++;
}
++i;
++j;
}
}
//复制剩余元素
for(;i<=M.tu;++i)
{
Q.data[k]=M.data[i];
k++;
}
for(;j<=T.tu;++j)
Q.data[k++]=T.data[j];
Q.tu=k-1;
}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘
{
if(M.nu!=T.mu)
{
cerr<<"两矩阵相乘不合法"<<endl;
return ;
}
int *rowSize=new int[T.mu+1]; //存放每行非零元素的个数
int *rowStart=new int[T.mu+2]; //矩阵每行在三元组开始位置
int *temp=new int[T.nu+1]; //存放结果矩阵中每行的计算结果
int i,Current,k,ROWM,COLM,COLB;
for(i=1;i<=T.mu;i++) rowSize[i]=0;
for(i=1;i<=T.tu;++i) rowSize[T.data[i].row]++;
rowStart[1]=1;
for(i=2;i<=T.mu+1;i++)
rowStart[i]=rowStart[i-1]+rowSize[i-1];
Current=1; k=1;
while (Current<=M.tu)
{
ROWM=M.data[Current].row; //当前三元组数据中元素的行号
for(i=1;i<=T.nu;++i) temp[i]=0;
while (Current<=M.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];i<rowStart[COLM+1];i++) //对应T矩阵中每行的个数
{
COLB=T.data[i].col;
temp[COLB]+=(M.data[Current].value)*(T.data[i].value);
}
Current++;
}
for(i=1;i<=T.nu;i++)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM;
Q.data[k].col=i;
Q.data[k].value=temp[i];
}
k++;
}
}
Q.mu=M.mu;Q.nu=T.nu;
Q.tu=k-1;
}
int main()
{
TSMatrix T,M,Q,S;
InputMatrix(M);
InputMatrix(T);
cout<<"两矩阵相乘"<<endl;
Multiply(M,T,Q);
Output(Q);
cout<<"两矩阵相加"<<endl;
AddMastrix(M,M,S);
Output(S);
system("pause");
return 0;
}

F. 如何用C语言输出3*3的矩阵

#include<stdio.h>

#define N 3

void fun(int a[][N],int m)

{

int i, j;

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

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

a[j][i] = a[j][i] * m;

}

int main()

{

int i, j;

int a[N][N];

printf("input a number: ");

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

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

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

printf("3 * 3 matrix: ");

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

{

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

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

printf(" ");

}

printf("change 3 * 3 matrix: ");

fun(a, 2);

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

{

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

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

printf(" ");

}


return 0;

}

G. 怎样用C语言写矩阵

用二维数组,如下:
#include <stdio.h>
main()
{
int i, j, a[4][4];

for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
scanf ("%d", &a[i][j]);
}
}
//这样就可以将一个3*3 的矩阵存在2维数组中了

for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
printf (" %-4d ", a[i][j]);
}
printf ("\n");
}
//这样就可以显示矩阵
return 0;
}

H. C语言矩阵

这样写就对了:
#include <stdio.h>

main( )
{
int b[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int i,k,t;

for (i=0;i<3;i++)
{
for (k=0;k<i;k++)
{
t=b[i][k];
b[i][k]=b[k][i];
b[k][i]=t;
}
}
for (i=0;i<3;i++)
{
for (k=0;k<3;k++)
{
printf("%5d",b[i][k]);
}
printf("\n");
}
}

热点内容
玩单机游戏要哪些配置的电脑 发布:2025-02-04 19:17:41 浏览:1002
c语言编程图书 发布:2025-02-04 19:01:52 浏览:896
在哪里开启密码显示 发布:2025-02-04 18:38:30 浏览:789
怎么查询qq密码 发布:2025-02-04 18:20:10 浏览:513
python编写接口 发布:2025-02-04 18:08:30 浏览:78
怎么给游戏设置密码 发布:2025-02-04 18:03:08 浏览:926
商品存储规划 发布:2025-02-04 17:45:24 浏览:567
ios访问共享 发布:2025-02-04 17:36:33 浏览:335
javabuild 发布:2025-02-04 17:30:19 浏览:592
gnulinux编译 发布:2025-02-04 17:30:18 浏览:134