本文目錄一覽:
- 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);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/160578.html