您的位置:

c语言处理矩阵,c语言程序设计矩阵运算

本文目录一览:

用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;

cinT.muT.nuT.tu;

int i;

cout"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"endl;

for(i=1;i=T.tu;++i)

{

cinT.data[i].rowT.data[i].colT.data[i].value;

}

}

void Output(TSMatrix T)

{

cout"矩阵的三元组表示(ROW=)"T.mu" COL="T.nu"非零个数="T.tuendl;

int i;

for(i=1;i=T.tu;++i)

{

cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;

}

}

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.tuj=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_aindex_b)

{

Q.data[k]=M.data[i];

i++;

k++;

}

else if(index_aindex_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.tuROWM==M.data[Current].row)

{

COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘

for(i=rowStart[COLM];irowStart[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;

}

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("请输入要获取的行数和列数:\n");

  while(r0 || rMAXR || c0 || cMAXC)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(ic) 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;ir;i++,printf("\n"))

      for(j=0;jc;j++)

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

  printf("\n");

}

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

{

  int i,j;

  if(!datas)

  {

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

          for(j=0;jc;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;ir;i++)

  {

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

      if(!dr) return NULL;

      else

      {

          for(j=0;jc;j++)

          {

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

              if(!dr[j]) return NULL;

          }

          datas[i]=dr;

      }

  }

  return datas;

}

c语言矩阵运算

我在这儿给你提供一些思路:码程序交给你自己了!

0、提示输入4*4的实数矩阵,然后键盘依次输入实数矩阵中各元素;在屏幕上先用printf输出了4*4 矩阵的形式;

1、4*4的实数矩阵,那以为这定义一个float a[4][4]的4*4的二维矩阵或者float a[16]的一维矩阵;

2、求所有的元素中负数的个数,意思是把你把数组中每个数和0比较一遍,即循环16次,发现小于 0则把一个全局变量加1,就求出了所有的负数的个数!

3、二维数组循环通常用两个for循环完成,再找一个全局变量用于求元素之和的。一维数组的话更 简单

4、输出(2)、(3)就把那2个全局变量的值输出即可!

希望可以帮到你,如果满意请采纳!

其实你屏幕上显示的是4*4矩阵的形式是输入的,但是存储可以使用长度为16的一维数组,这样更加容易了!

c语言处理矩阵,c语言程序设计矩阵运算

2022-12-01
54201矩阵c语言,01矩阵c语言

2023-01-04
矩阵储存c语言,C语言矩阵

2023-01-04
c语言数据矩阵,C语言矩阵

2022-12-01
将矩阵转置c语言,矩阵转置c语言程序

2023-01-06
c语言矩阵乘方,矩阵相乘c语言

2022-11-26
3x4矩阵的c语言,3x3矩阵转置c语言

2022-11-29
矩阵的加法c语言,c++实现矩阵加法

2022-11-24
c语言矩阵指针,C语言函数指针

2023-01-07
矩阵的加减法乘法c语言,c++矩阵加法运算

本文目录一览: 1、求通过C语言实现矩阵的加、减及乘法。要自己写的,不要复制过来 2、用c语言编写矩阵的加减乘除运算 3、C语言实现的矩阵加减乘法 4、!!!跪求C语言实现矩阵运算(加,减,乘、求逆、

2023-12-08
c语言矩阵口诀,c语言输出5×5矩阵

2022-11-23
c语言矩阵加减,c语言矩阵乘法优化

2023-01-05
c语言矩阵变量,c语言实现矩阵

2022-11-27
c语言指针输出矩阵,c输入矩阵

2023-01-03
旋转方阵c语言,C语言矩阵旋转

2022-11-25
矩阵内外c语言,矩阵在c语言编程中的应用

2022-11-29
c语言矩阵快速幂,快速幂算法c语言代码

本文目录一览: 1、矩阵的幂怎么算? 2、如何用c语言中的函数递归调用算法实现n阶矩阵的n次幂的求解? 3、c语言,快速幂代码是什么,怎么用? 4、用C/C++如何实现矩阵的幂运算,求高手作答~ 5、

2023-12-08
c语言矩阵乘法和点乘,c语言矩阵乘法和点乘的区别

2022-11-29
c语言打印螺旋矩阵的流程图,c语言输出螺旋矩阵

2022-11-29
矩阵c语言定义,c语言的矩阵如何定义

2022-12-02