本文目录一览:
- 1、double类型的矩阵保存与读取,用C语言
- 2、c语言矩阵的压缩存储
- 3、C语言对矩阵的存储与读取如何进行?
- 4、C语言矩阵按行存储相乘?
- 5、C语言,编辑一个程序,输入一个三阶矩阵,储存在数组中,并判断矩阵的行和,列和,对角线和是否相等
- 6、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
}
}
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);