㈠ 怎樣用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;
}
㈡ 如何用C語言編寫程序求矩陣的值
//矩陣乘積.cpp
#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");
}
㈢ 從鍵盤輸入一個3行4列的矩陣,將其轉置後,變成4行3列的矩陣輸出。這個c語言的代碼咋寫
# include <stdio.h>
int main(void)
{
int a[3][4] = {11,12,13,14,21,22,23,24,31,32,33,34};
int b[4][3];
int i, j;
for(i=0; i<4; i++) //轉置數組;
for(j=0; j<3; j++)
b[i][j] = a[j][i];
for(i=3; i>=0; i--) //反向輸出轉置後的數組;
{
for(j=2; j>=0; j--)
printf("%5d", b[i][j]);
putchar(' ');
}
return 0;
}
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:
#include<math.h>//一些數學函數的原型,以及相關的類型和宏
如果需要包含針對程序所開發的源文件,則應該使用第二種格式。
採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。
㈣ C語言矩陣問題
順時針旋轉,(xa, ya) 坐標變換: xb = ya; yb = (n-1)- xa;
#include <告備豎stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
int i,j,xa,ya,xb,yb,n;
int *p,*q;
printf("輸入n:");
scanf("%d", &n);
p = (int*) malloc(sizeof(int) * n*n);
q = (int*) malloc(sizeof(int) * n*n);
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
*(p+i*n+j) = i*n+j+1;
}
}
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
printf("%4d ", *(p+i*n+j));
}
printf("\n");
}
printf("\n");
//滾早旋轉90度
for (i=0;i<n*n;i++) {
xa= i/n; ya= i%n;
xb = ya; yb = n-1-xa;
*(q + xb*n+yb) = *(p+i);
}
printf("順襪大時針旋轉90---------------------------------------------\n");
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
printf("%4d ", *(q+i*n+j));
}
printf("\n");
}
printf("\n");
free(p);
free(q);
return 0;
}
㈤ C語言 矩陣問題
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
int main(void)
{
int i, j, k;
int m1, n1;//矩陣A的行數,列數
int m2, n2;//矩陣B的行數,列數
float *A[SIZE] = { NULL };//矩陣宏森早察A
float *B[SIZE] = { NULL };//矩陣B
float *C[SIZE] = { NULL };//矩陣C = 矩陣A * 矩陣B
printf("請輸入矩陣A行數m1,列數n1:");
scanf("%d%d", &m1, &n1);
printf("請輸入矩陣B行數m2,列數n2:");
scanf("%d%d", &m2, &n2);
printf("\n\n");
for (i=0; i<m1; i++)
{
A[i] = (float *) malloc (n1 * sizeof(float));
}
for (i=0; i<m2; i++)
{
B[i] = (float *) malloc (n2 * sizeof(float));
}
for (i=0; i<m1; i++)
{
C[i] = (float *) malloc (n2 *sizeof(float));
}//為矩陣A,B,C動態分配內存
if (n1 != m2)
{
printf("A,B矩陣不可蔽睜畝以相乘!\n");
return 0;
}
for (i=0; i<m1; i++)//為矩陣A賦值
{
for (j=0; j<n1; j++)
{
printf("A[%d][%d] = ", i, j);
scanf("%f", &A[i][j]);
}
}
printf("\n\n");
for (i=0; i<m2; i++)//為矩陣B賦值
{
for (j=0; j<n2; j++)
{
printf("B[%d][%d] = ", i, j);
scanf("%f", &B[i][j]);
}
}
printf("\n\n");
for (i=0; i<m1; i++)//矩陣C全部賦值為0
{
for (j=0; j<n2; j++)
{
C[i][j] = 0;
}
}
printf("矩陣A:\n");//輸出矩陣A
for (i=0; i<m1; i++)
{
for (j=0; j<n1; j++)
{
printf("%-6.2f ", A[i][j]);
}
printf("\n");
}
printf("\n");
printf("矩陣B:\n");//輸出矩陣B
for (i=0; i<m2; i++)
{
for (j=0; j<n2; j++)
{
printf("%-6.2f ", B[i][j]);
}
printf("\n");
}
printf("\n");
printf("矩陣C = 矩陣A * 矩陣B:\n");
for (i=0; i<m1; i++)
{
for(j=0; j<n2; j++)
{
for (k=0; k<n1; k++)
{
C[i][j] += A[i][k] * B[k][j];
}
printf("%-6.2f ", C[i][j]);
}
printf("\n");
}
return 0;
}
㈥ C語言矩陣問題
用戶輸入20個數(數<100)數為肢逗態int型,這20個數以6個數一組,歷源每一組至少一個數是不相同的
(所有可能出現的組數)
prntf("");出所有組,求指神原碼。
㈦ 用c語言實現兩個矩陣相乘怎麼做
1、程序運行輸入數據時,第一行為A矩陣的行列攜碰數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。
㈧ 用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;
}