『壹』 c語言:輸入矩陣2行3列的矩陣A和矩陣3行4列的矩陣B,計算矩陣的乘積
#include <stdio.h>
#include <stdlib.h>
#define L 2
#define M 3
#define N 4
void genArr(double *Arr, int row, int col)
{
int i = 0;
int n = row * col;
srand(time(NULL));
for (i = 0; i < n; ++i)
{
Arr[i] = rand() % 10;
}
}
void printMatrix(double *Arr, int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; ++i)
{
for (j = 0; j < col; ++j)
{
printf("%lf\t", *(Arr + i * col + j));
}
printf("\n");
}
return;
}
int main(void)
{
double A[L][M] = {{0}};
double B[M][N] = {{0}};
double C[L][N] = {{0}};
int i = 0, j = 0, k = 0;
printf("\nGenerate A[%d][%d]:\n", L, M);
genArr(&A[0][0], L, M);
printMatrix(&A[0][0], L, M);
printf("\nGenerate B[%d][%d]:\n", M, N);
genArr(&B[0][0], M, N);
printMatrix(&B[0][0], M, N);
for (i = 0; i < L; ++i)
{
for (k = 0; k < N; ++k)
{
C[i][k] = 0;
for (j = 0; j < M; ++j)
{
C[i][k] += A[i][j] * B[j][k];
}
}
}
printf("\nCalc C[%d][%d]:\n", L, N);
printMatrix(&C[0][0], L, N);
return 0;
}
『貳』 c語言輸入一個兩行三列矩陣,將其行列互換後,將原矩陣和互換後矩陣輸出
#include<stdio.h>
#include<math.h>
intmain()
{inti,j,a[2][3],b[3][2];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);
b[j][i]=a[i][j];
}
printf("
");
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("
");
}
printf("
");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("%4d",b[i][j]);
printf("
");
}
return0;
}
『叄』 有一個2*3的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號要用C語言編寫
#include<stdio.h>
intmain()
{
inta[2][3],i,j,max,n,m;
printf("inputthearray:");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);//輸入兩行三列的矩陣
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
if(j==2)printf(" ");//輸出矩陣
}
max=a[0][0];//先設第一個數位最大值
for(i=0;i<2;i++)
for(j=0;j<3;j++)//逐個比較
if(a[i][j]>max)
{
max=a[i][j];//如果比max大就重新賦予max
n=i;
m=j;//記錄那個數的位置
}
printf("a[%d][%d]=%d ",n,m,max);//輸出
return0;
}//數組是從0,開始的
『肆』 c語言:輸入一個2行3列的矩陣A和一個3行4列的矩陣B,計算兩矩陣的乘積
解題過程如下:
#include <stdio.h>;#include <stdlib.h>
#define L 2,#define M 3,#define N 4
}printf(" ");}return;}int main(void){double A[L][M] = {{0}};
double B[M][N] = {{0}};double C[L][N] = {{0}};int i = 0, j = 0, k = 0;
printf(" Generate A[%d][%d]: ", L, M);
genArr(&A[0][0], L, M);
printMatrix(&A[0][0], L, M);
printf(" Generate B[%d][%d]: ", M, N);
{for (k = 0; k < N; ++k)
{C[i][k] = 0;for (j = 0; j < M; ++j)
{C[i][k] += A[i][j] * B[j][k];}}}printf(" Calc C[%d][%d]: ", L, N);
printMatrix(&C[0][0], L, N);return 0;}
(4)c語言兩行三列矩陣擴展閱讀
性質:
矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義 。
一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多數據緊湊地集中到了一起,所以有時候可以簡便地表示一些復雜的模型,如電力系統網路模型。
當矩陣A的列數(column)等於矩陣B的行數(row)時,A與B可以相乘。矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。乘積C的第m行第n列的元素等於矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。
當提及「矩陣相乘」或者「矩陣乘法」的時候,並不是指代這些特殊的乘積形式,而是定義中所描述的矩陣乘法。在描述這些特殊乘積時,使用這些運算的專用名稱和符號來避免表述歧義。
把給定的圖轉為鄰接矩陣,即A(i,j)=1當且僅當存在一條邊i->j。令C=A*A,那麼C(i,j)=ΣA(i,k)*A(k,j),實際上就等於從點i到點j恰好經過2條邊的路徑數(枚舉k為中轉點)。
類似地,C*A的第i行第j列就表示從i到j經過3條邊的路徑數。同理,如果要求經過k步的路徑數,只需要二分求出A^k即可。
『伍』 C語言中如何編程:將兩行三列的二維數組轉換為三行兩列的二維數組
利用矩陣轉置就行
#include <stdio.h>
#define MAX 20
int m,n;
void transpose(double a[][MAX],double b[][MAX])
{
int i,j;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
b[i][j]=a[j][i];
}
void main()
{
int i,j;
double a[MAX][MAX],b[MAX][MAX];
puts("輸入矩陣的行,列:");
scanf("%d %d",&m,&n);
puts("輸入矩陣元素:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]-int(a[i][j])!=0)
printf("%lf ",a[i][j]);
else
printf("%d ",int(a[i][j]));
}
puts("");
}
transpose(a,b);
puts("轉置後的矩陣為:");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(b[i][j]-int(b[i][j])!=0)
printf("%lf ",b[i][j]);
else
printf("%d ",int(b[i][j]));
}
puts("");
}
}
『陸』 C語言 :編寫 一個程序使一個2行3列的矩陣倒置成3行倆列的矩陣。就是矩陣的倒置、 謝謝拉 。。
#include<stdio.h>
void main()
{
int a[3][2]={1,2,3,4,5,6};
int b[2][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
b[j][i]=a[i][j];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",b[i][j]);
printf("\n");
}
}
『柒』 二十、編程序,將2行3列的矩陣實現行列互換。(提示:定義兩個二維數組,在程序中賦值,輸出轉置後的矩陣
main()
{
int t,i,j,r[3][3]={{1,2,3},{7,8,9}};
for(i=0;i<2;i++)
{ for(j=i;j<3;j++)
{t=r[i][j];
r[i][j]=r[j][i];
r[j][i]=t;}
}
for(i=0;i<3;i++)
{ for(j=0;j<2;j++)
printf("%d ",r[i][j]);
printf("\n");}
}
『捌』 C語言實現有兩個分別是2行3列和3行2列的矩陣,其數據均由鍵盤輸入,這兩個矩陣相乘後是一個2*2的矩陣
這是程序
#include <stdio.h>
int a[2][3],b[3][2],c[2][2]; //輸入a和b,輸出矩陣c
int temp; //計算c中每個元素時的中間變數
void main()
{
int i,j,k; //循環變數
//鍵盤輸入矩陣a
printf("請輸入矩陣a:"); //按行輸入
for (i=0; i<2; i++)
{
for (j=0; j<3; j++)
{
scanf("%d",&a[i][j]);
}
}
//鍵盤輸入矩陣b
printf("請輸入矩陣b:"); //按行輸入
for (i=0; i<3; i++)
{
for (j=0; j<2; j++)
{
scanf("%d",&b[i][j]);
}
}
//計算c=a*b
for (i=0; i<2; i++)
{
for (j=0; j<2; j++)
{
temp=0;
for (k=0; k<3; k++)
{
temp+=a[i][k]*b[k][j];
}
c[i][j]=temp;
}
}
printf("矩陣c為:\n");
printf("%d %d",c[0][0],c[0][1]);
printf("\n");
printf("%d %d",c[1][0],c[1][1]);
printf("\n");
}
經過VC++ 6.0調試通過的,你看行不行?
『玖』 輸入2行3列的矩陣元素,存入二維數組,再按行列格式輸出(要求用指針)C語言問題
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
printf("%i",array[i][j]);//如果矩陣元素是整數,
}
『拾』 請問C語言中如何計算任意兩個兩行三列矩陣相加
scanf("%d",a[i][j]);
改為:scanf("%d",&a[i][j]);
scanf("%d",a[i][j]);
改為:scanf("%d",&b[i][j]);