您的位置:

矩阵储存c语言,C语言矩阵

本文目录一览:

double类型的矩阵保存与读取,用C语言

“fscanf(fp,"%lf",w[i][j]);” 读取的时候不要漏掉取地址运算&

“fseek(fp, 1L, 1);    //从当前位置跳过一个字节” 为什么要跳过一个字节?fscanf会自动调整指针位置

“for (i = 0; i=n2; i++)” =的写法比较少,你得确保i真的能取到n2

c语言矩阵的压缩存储

#define N 4

#define M 5

#includestdio.h

#includestdlib.h

#includetime.h

typedef int ElemType;

typedef struct triplist

{

int row,col;

ElemType val;

}tl;

tl a[N*M];

void print_array(ElemType b[][M+1])

{

int i,j;

printf("\n");

for(i=1;i=N;i++)

{

for(j=1;j=M;j++)

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

printf("\n");

}

}

void create_triplist(ElemType b[N][M+1],tl a[ ])

{

int i,j;

int t=1;

for(i=1;i=N;i++)

for(j=1;j=M;j++)

if(b[i][j])

{

a[t].row=i;

a[t].col=j;

a[t].val=b[i][j];

t++;

}

a[0].row=N;

a[0].col=M;

a[0].val=t-1;

for(i=1;i=N*M;i++)

printf("%d\t%d\t%d\n",a[i].row,a[i].col,a[i].val);

}

int main()

{

ElemType b[N+1][M+1]; //这里我把b[N][M+1] 的N后边加一

int e,f;

srand((unsigned)time(NULL));

for(e=1;e=N;e++)

for(f=1;f=M;f++)

b[e][f]=rand()/10000;

print_array(b);

create_triplist(b,a);

return 0;

}

看看能不能运行,因为我运行出来的和这个结果都一样,只是有内存问题,加一之后就没有这个提示了

C语言对矩阵的存储与读取如何进行?

这个要你自己实现一个串化和反串化的类。Mfc你可以使用Archive对象做,c的话要自己实现过程。

C语言矩阵按行存储相乘?

#includestdio.h

int main()

{

float a[100][100],b[100][100],c[100][100];//定义三个数组,分别存储矩阵A,B,C

int m1,n1,m2,n2,i1,j1,i2,j2,i3,j3,i4,j4,k;

float s[100][100]={0};//赋值使数组s元素初值全部为零

printf("请输入矩阵A行数m1,列数n1:");//输入矩阵A行数,列数

scanf("%d,%d",m1,n1);

printf("请输入矩阵B行数m2,列数n2:");//输入矩阵B行数,列数

scanf("%d,%d",m2,n2);

printf("\n\n");//如果不可以相乘,下面将出现判断,在此换行,便于观看

if(n1!=m2)

printf("不可以相乘!!!");//判断是否可以相乘

printf("\n\n");

if((m1100)||(n1100))

printf("数目过多!!!");//控制矩阵A元素数量在数组容纳范围内

else

{

for(i1=1;i1=m1;i1++)

{

for(j1=1;j1=n1;j1++)

{

printf("a[%d][%d]=:",i1,j1);

scanf("%f",a[i1-1][j1-1]);//输入矩阵A元素

}

}

}

printf("\n");//分隔开A,B的元素输入,便于观看

if((m2100)||(n2100))

printf("数目过多!!!");

else

{

for(i2=1;i2=m2;i2++)

{

for(j2=1;j2=n2;j2++)

{

printf("b[%d][%d]=:",i2,j2);

scanf("%f",b[i2-1][j2-1]);//输入矩阵B元素

}

}

}

printf("矩阵A:\n");//输出矩阵A,便于观看,检验

for(i3=0;i3m1;i3++)

{

for(j3=0;j3n1;j3++)

{

printf("%f",a[i3][j3]);

}

printf("\n");

}

printf("\n");//与矩阵B的输出结果隔开,便于观看

printf("矩阵B:\n");//输出矩阵A,便于观看,检验

for(i4=0;i4m2;i4++)

{

for(j4=0;j4n2;j4++)

{

printf("%f",b[i4][j4]);

}

printf("\n");

}

printf("\n");

printf("矩阵C=A*B:\n");

for(i4=0;i4m1;i4++)

{

for(j4=0;j4n2;j4++)

{

for(k=0;kn1;k++)

{

s[i4][j4]=s[i4][j4]+a[i4][k]*b[k][j4];//定义矩阵乘法,相乘时,有一个指标是一样的,都用k

}

c[i4][j4]=s[i4][j4];//定义矩阵乘法

printf("%f",c[i4][j4]);

if(j4==n2)

printf("\n");//控制在列指标到达N时换行

}

}

return 0;

}

C语言,编辑一个程序,输入一个三阶矩阵,储存在数组中,并判断矩阵的行和,列和,对角线和是否相等

#includestdio.h

#define N 3

#define M 3

int abs(float x)

{

if(x0.0f) return -x;

else return x;

}

int main()

{

float m[N][M];

float sumr[N]={0.0f}, sumc[M]={0.0f},diag[N]={0.0f},sumd=0.0f,sumd2=0.0f; //

int i,j;

printf("Input %d * %d matrix :\n", N,N);

//create and compute sums

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

{

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

{

scanf("%f", m[i][j]);

sumr[i] += m[i][j];        //sum of rows

sumc[j] += m[i][j];        //sum of columns

if(i==j) diag[i] +=m[i][j]; //diagonal elements

}

}

//print 

int flag=1;     // 

printf("sum of rows\n");

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

{

printf("%7.2f\n",sumr[i]);

if(flag  iN-1) 

flag = flag(abs(sumr[i+1]-sumr[i])1e-10);

}

printf("\nsum of columns:\n");

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

{

printf("%7.2f",sumc[j]);

if(flag  jM-1) 

flag = flag(abs(sumc[j+1]-sumc[j])1e-10);

}

printf("\ndiagonal elements:\n");

const int K = (NM)?N:M;

for (i = 0; i  K; ++i)

{

printf("%7.2f",diag[i]);

sumd +=diag[i];

}

printf("\t-sum:");

printf("%7.2f\n",sumd);

//reverse diagonal

printf("\nreverse diagonals:\n");

for (i = K-1; i =0; --i)

{

printf("%7.2f",m[K-i-1][i]);

sumd2 +=m[K-i-1][i];

}

printf("\t-sum:");

printf("%7.2f\n",sumd2);

if (flag  abs(sumc[M-1]-sumd)1e-10  abs(sumc[M-1]-sumd2)1e-10)

 flag  = 1;

else flag  = 0;

if(flag)

printf("\nIS a magic matrix! \n");

else

printf("\nNOT a magic matrix! \n");

return 0;

}

/*Results:

Input 3 * 3 matrix :

8 1 6

3 5 7

4 9 2

sum of rows

  15.00

  15.00

  15.00

sum of columns:

  15.00  15.00  15.00

diagonal elements:

   8.00   5.00   2.00   -sum:  15.00

reverse diagonals:

   6.00   5.00   4.00   -sum:  15.00

IS a magic matrix!

*/

c语言 矩阵的存储和转置 实现

#define MAXSIZE 100;

后面的的分号去掉,应为是文本替换,所以后面的date[MAXSIZE+1];会变成 100;+1

#define MAXSIZE 100

--------

int q,p,m.n=1;

中间有个逗号写成句号了

int q,p,m,n=1;

--------

Static TransposeSMatrix(Matrix M,Matrix *T){

Static 大小写错了

static TransposeSMatrix(Matrix M,Matrix *T){

--------

q=1;

for(col=1;col=M.nu;++col)

for(p=1;p=M.tu;++p)

这里用的q,col,p都没定义

int col,p,q=1;

-----------

if(q==M.date[n].ip==M.date[n].j){

printf("%4d",M.date[n]);

n++;

};

else

这里的if块的大括号后的分号去掉

分号提前结束了if,后面的else就没有匹配的if了

if(...){

...

}

else

-----------

*M.mu=q;

*M.nu=p;

*M.date[n].i=p;

*M.date[n].j=q;

*M.date[n].e=m;

...

*T.date[q].i=M.date[p].j;

*T.date[q].j=M.date[p].i;

*T.date[q].e=M.date[p].e;

结构\类对象等的指针用-调用成员,如果用*的话要加括号,应为.的优先级比*高

M-date[n].i=p;

M-date[n].j=q;

M-date[n].e=m;

还有好几处都是这个问题

----------

void Input(M);

void Output(M);

Static TransposeSMatrix(M,T);

void Output(T);

调用是不加类型,用变量接受返回值, 传递表达式做参数

Input(M);

Output(M);

TransposeSMatrix(M,T);

Output(T);