當前位置:首頁 » 編程語言 » c語言矩陣相乘函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言矩陣相乘函數

發布時間: 2022-01-15 00:45:03

1. 求c語言矩陣乘法程序

1,若程序定義為三行三列的矩陣,並在主函數中鍵盤賦值。請編寫函數juzhen(int a[][3],int n),函數功能是:使矩陣左下角元素中的值乘以.例如:若矩陣中的值為:
1 9 7
2 3 8
4 5 6
n=3,則矩陣值變為:
1 9 7
6 9 8
12 15 18
註:二維數組下三角元素每行最後元素的列標和該列的列號一致

#include <stdio.h>
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i<3;i++)
for (j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",&m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,請編寫函數juzhen,該函數的功能是:將三行四列矩陣x乘以四行三列矩陣y,結果放在三行三列矩陣中。矩陣相乘的基本方法是:矩陣Xy中行列下標分別為i,j的元素的值,是矩陣X中第i行上四個元素與矩陣Y中第j列上四個元素對應相乘的積。
X和Y矩陣原型可運行後看到!
#include <conio.h>
#include <stdio.h>
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i<3;i++)
for (j=0;j<4;j++)
for (z=0;z<3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得為要填寫的內容*/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i<4;i++)
{
for (j=0;j<3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由於你沒有說要求,我就寫了兩個,這是兩道比較精典的求c語言矩陣乘法程序

2. C語言編程:編寫一個函數,實現矩陣的乘法。

#include
<stdio.h>
#include
"stdlib.h"
void
pr(int
**a,int
m,int
n)
{
int
i,j;
printf("\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
}
void
AB(int
**a,int
m1,int
n1,int
**b,int
m2,int
n2,int
**c)
{
int
i,j,k;
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];
}
void
main()
{
int
**a,**b,**c,m1,n1,m2,n2;
int
i,j;
printf("輸入第一個矩陣的行數列數:");
scanf("%d%d",&m1,&n1);
printf("輸入第二個矩陣的行數列數:");
scanf("%d%d",&m2,&n2);
if(n1!=m2)
{
printf("第一個矩陣的列必須等於第二個矩陣的行數!");
return;
}
//建立A矩陣
a=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
a[i]=(int
*)calloc(n1,sizeof(int));
printf("A:輸入%d個整數:",m1*n1);
for(i=0;i<m1;i++)
for(j=0;j<n1;j++)
scanf("%d",&a[i][j]);
//建立B矩陣
b=(int
**)calloc(m2,sizeof(int));
for(i=0;i<m2;i++)
b[i]=(int
*)calloc(n2,sizeof(int));
printf("B:輸入%d個整數:",m2*n2);
for(i=0;i<m2;i++)
for(j=0;j<n2;j++)
scanf("%d",&b[i][j]);
//建立C矩陣
c=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
c[i]=(int
*)calloc(n2,sizeof(int));
AB(a,m1,n1,b,m2,n2,c);
printf("A:\n");
pr(a,m1,n1);
printf("B:\n");
pr(b,m2,n2);
printf("C=AB\n");
pr(c,m1,n2);
}

3. C語言關於矩陣乘法的函數,,

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
void multiplication(int a,int b,int c,int *p,int *q);
void main()
{
int m,n,l,h;
int i,j,g,k;
int *p,*q;
char x;
printf("請輸入a矩陣行數和列數,以空格分開,,,");
scanf("%d %d",&m,&n);
p=(int *)malloc(sizeof(int)*m*n);

for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("請輸入a矩陣%d行%d列的數,,",(i+1),(j+1));
scanf("%d",(p+m*i+j));
}
printf("請輸入b矩陣行數和列數,以空格分開,,,");
scanf("%d %d",&l,&h);
q=(int *)malloc(sizeof(int)*l*h);
for(g=0;g<l;g++)
for(k=0;k<h;k++)
{
printf("請輸入b矩陣%d行%d列的數,,",(g+1),(k+1));
scanf("%d",(q+l*g+k));
}
multiplication( m, n, h, p, q);
}
void multiplication(int a,int b,int c,int *p,int *q)
{
int i,j;
int k;
int sum;
for(i=0;i<a;i++)
{
for(j=0;j<c;j++)
{
sum=0;
for(k=0;k<b;k++)
{
sum=sum+(*(p+a*i+k))*(*(q+b*k+j));
}
printf("%d ",sum);
}
printf("\n");
}
}
附帶一組測試數據

A 3 4
2 1
B 3
4
Result
25
10
結果正確。

4. c語言,用函數調用的方式求兩個矩陣相乘。

#include<bits/stdc++.h>
usingnamespacestd;

inta[233][233],b[233][233],c[233][233];

/*上述代碼*/

intmain(){
scanf("%d",&n);
for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)scanf("%d",&a[i][j]);
for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)scanf("%d",&b[i][j]);
mult(a,b,c);
}

5. 用c語言實現兩個矩陣相乘怎麼做

1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。

6. 用C語言寫一個兩個矩陣相乘的函數

自己看看吧,可以同時都換成注釋的行,有助於你理解參數傳遞
:)======================================================
#include<stdio.h>
#define M 5
#define P 4
#define N 3
void mltp(float (*a)[P],float (*b)[N],float (*c)[N])
//void mltp(float *a,float *b,float *c)
{
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
for(int k=0;k<P;k++)
c[i][j]+=a[i][k]*b[k][j];
//c[i*N+j]+=a[i*P+k]*b[k*N+j];
}

void main()
{
int i,j;
float a[M][P],b[P][N];
float c[M][N]={0};
printf("plz input a,b:\n");
for(i=0;i<M;i++)
for(j=0;j<P;j++)
scanf("%f",&a[i][j]);
for(i=0;i<P;i++)
for(j=0;j<N;j++)
scanf("%f",&b[i][j]);
mltp(a,b,c);
//mltp(&a[0][0],&b[0][0],&c[0][0]);//等
//mltp((float*)a,(float*)b,(float*)c);//價
printf("result is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%f\t",c[i][j]);
printf("\n");
}
}

7. C語言怎麼求矩陣的乘積呢

語言只提供+,-,*,/等低級運算功能,高級的都必須代碼實現,包括次方開放運算,都是編寫代碼實現。 你學過矩陣乘法,這就很容易,你需要定義一個結構體,作為矩陣。。。。
矩陣很簡單,行數,列數,元素。
typedef struct {
uint r,c;
float *d;
int size;
}matrix;
分別是行數,列數,數據指針,和數據最大長度。數據最好用指針不用數組,是因為增加靈活性,你只需要動態申請內存即可讓你的矩陣大小可變,數組長度不可變。最後一個參數代表內存長度,最好是要有,方便你重新定義數組時看內存夠不夠,不夠可以realloc,沒有的話你就不知道夠不夠(5*4的矩陣,乘以 4*5 矩陣必然變成5*5矩陣,賦值到新矩陣結構體里,如果還是20個單位,顯然裝不下,必須realloc,所以該參數必須有)。。。
你只要實現個函數 int mul(matrix *m1,*m2,*m3)即可,m1,m2分別為左右 矩陣,m3為結果。
按照運演算法則,你必須完成兩件事,判斷m1,m2是否可以相乘,不可以相乘返回一個錯誤(比如返回-1),(3*3和4*4矩陣不能相乘),如果可以那就先讓m3.r=m1.r,m3.c=m2.c;
m3.d[i][j]=0;
for(k=0;k<m1.c;k++)

m3.d[i][j]+=m1.d[i][k]*m2.d[k][j];
這你就能到到m3的一個元素,那你只要求出所有的元素就得到新矩陣了。
不過因為是C語言,你要考慮內存,m3也許內存不夠長,你必須要做一下內存長度判斷,不夠長要申請,否則就報錯沒法用了。。。所以size這個成員也是必須的。。

不過話說回來,如果是用C++,只要你寫一個矩陣類,重載運算符 * ,你就可以用
m3=m1*m2; 這樣運算,書寫更方便,但C語言沒這好事。

8. c語言矩陣乘法

main()
{
int i=0,j=0,k=0,n=0,m=0;/*k
為待輸入值
*/
int s=0;/*
此處作為輸出變數
*/
int middle=0; /*
中間值
*/
int a[row][line],b[line][row];
long c[row][row];
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
scanf("%d",&k);
a[i][j]=k;
printf("\ta[%d][%d]=%d\n",i,j,a[i][j]);
}
}
printf("\n");
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&k);
b[i][j]=k;
printf("\tb[%d][%d]=%d\n",i,j,b[i][j]);
}
}

9. c語言矩陣乘法函數

函數類型是根據有無返回值判斷的,無返回值就把函數定義為void類型
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數有其它應用那就返回吧

10. C語言中兩矩陣相乘

#include <stdio.h>
int main()
{
int x,y,z;
int i,j,l;
int sum=0;
printf("請輸入前一個矩陣的行數,列數與後一個矩陣的列數:\n");
scanf("%d %d %d",&x,&y,&z);
int a[x][y];
int b[y][z];
int c[x][z];
//讀入矩陣
printf("請輸入矩陣a:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&a[i][j]);
}
}
printf("請輸入矩陣b:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
scanf("%d",&b[i][j]);
}
}
printf("矩陣a為:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
printf("%d",a[i][j]);
if(j==y-1)
printf("\n");
else
printf("\t");
}
}
printf("矩陣b為:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
printf("%d",b[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
for(i=0;i<x;i++){
for(l=0;l<z;l++){
for(j=0;j<y;j++){
sum+=a[i][j]*b[j][l];
if(j==y-1){
c[i][l]=sum,sum=0;
}
}
}
}
printf("矩陣a與矩陣b的乘積為:\n");
for(i=0;i<x;i++){
for(j=0;j<z;j++){
printf("%d",c[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}

return 0;
}