函數(shù)類型是根據(jù)有無返回值判斷的,無返回值就把函數(shù)定義為void類型
成都創(chuàng)新互聯(lián)公司服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過10多年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應(yīng)用那就返回吧
1、首先打開編程軟件,新建一個項目,添加一個double.cpp文件,如圖所示。
2、包含stdio.h頭文件,如圖所示。
3、接著輸入main函數(shù),如圖所示。
4、然后定義兩個double類型變量并初始化,如圖所示。
5、使用scanf函數(shù)接受任意兩個小數(shù),計算兩個小數(shù)的乘積并打印出來,如圖所示。
6、然后運行程序,查看結(jié)果,如圖所示。
C語言實現(xiàn)矩陣相乘
問題描述:
編寫程序,可以實現(xiàn)m*n矩陣和n*p矩陣相乘。m,n,p均小于10,矩陣元素為整數(shù)。
分析:
首先我們可以根據(jù)題意寫出函數(shù)頭??梢远関oid
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX]),其中l(wèi)Matrix1和lMatrix2分別是輸入的m*n矩陣和n*p矩陣,lMatrixResult是輸出的m*p矩陣。
因為m,n和p都是未知量,要進行處理的矩陣大小是變量。但我們可以定義比較大的二維數(shù)組,只使用其中的部分數(shù)組元素。
矩陣相乘的算法比較簡單,輸入一個m*n矩陣和一個n*p矩陣,結(jié)果必然是m*p矩陣,有m*p個元素,每個元素都需要計算,可以使用m*p嵌套循環(huán)進行計算。
根據(jù)矩陣乘法公式:
可以用循環(huán)直接套用上面的公式計算每個元素。嵌套循環(huán)內(nèi)部進行累加前,一定要注意對累加變量進行清零。
數(shù)據(jù)要求
問題中的常量:
#define
MAX
10?
/*矩陣最大行數(shù)和列數(shù)*/
問題的輸入:
int
m,n,p;??
/*相乘的兩個矩陣的行列數(shù)*/
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
/*相乘的兩個矩陣*/
問題的輸出:
long
lMatrixResult[MAX][MAX];???
/*矩陣相乘后得到的矩陣*/
初始算法
1.輸入兩個矩陣的的行列數(shù)m,n,p;
2.輸入第一個矩陣的每個元素;
3.輸入第二個矩陣的每個元素;
4.調(diào)用函數(shù)進行乘法運算,結(jié)果放在lMatrixResult
中;
5.
打印輸出結(jié)果矩陣。
算法細化
算法的步驟4計算兩個矩陣的乘法算法如下:
4.1
定義循環(huán)變量i,j,k;
4.2
嵌套循環(huán)計算結(jié)果矩陣(m*p)的每個元素。
程序代碼如下:
#define
MAX
10
void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],
long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX])
{
int
i,j,k;
long
lSum;
/*嵌套循環(huán)計算結(jié)果矩陣(m*p)的每個元素*/
for(i=0;im;i++)
for(j=0;jp;j++)
{
/*按照矩陣乘法的規(guī)則計算結(jié)果矩陣的i*j元素*/
lSum=0;
for(k=0;kn;k++)
lSum+=lMatrix1[i][k]*lMatrix2[k][j];
lMatrixResult[i][j]=lSum;
}
}
main()
{
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
long
lMatrixResult[MAX][MAX],lTemp;
int
i,j,m,n,p;
/*輸入兩個矩陣的的行列數(shù)m,n,p*/
printf("\nPlease
input
m
of
Matrix1:\n");
scanf("%d",m);
printf("Please
input
n
of
Matrix1:\n");
scanf("%d",n);
printf("Please
input
p
of
Matrix2:\n");
scanf("%d",p);
/*輸入第一個矩陣的每個元素*/
printf("\nPlease
elements
of
Matrix1(%d*%d):\n",m,n);
for(i=0;im;i++)
for(j=0;jn;j++)
{
scanf("%ld",lTemp);
lMatrix1[i][j]=lTemp;
}
/*輸入第二個矩陣的每個元素*/
printf("\nPlease
elements
of
Matrix2(%d*%d):\n",n,p);
for(i=0;in;i++)
for(j=0;jp;j++)
{
scanf("%ld",lTemp);
lMatrix2[i][j]=lTemp;
}
/*調(diào)用函數(shù)進行乘法運算,結(jié)果放在lMatrixResult
中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*打印輸出結(jié)果矩陣*/
printf("\nResult
matrix:
\n");
for(i=0;im;i++)
{
for(j=0;jp;j++)
printf("%ld
",lMatrixResult[i][j]);
printf("\n");
}
}
程序運行結(jié)果如下:
Please
input
m
of
Matrix1:
3
Please
input
n
of
Matrix1:
2
Please
input
p
of
Matrix2:
3
Please
elements
of
Matrix1(3*2):
1
2
1
3
Please
elements
of
Matrix2(2*3):
1
2
3
1
1
Result
matrix:
7
4
2
3
1
1
3
6
#include?bits/stdc++.h
using?namespace?std;
int?a[233][233],b[233][233],c[233][233];
/*上述代碼*/
int?main(){
scanf("%d",n);
for?(int?i=1;i=n;i++)?for?(int?j=1;j=n;j++)?scanf("%d",a[i][j]);
for?(int?i=1;i=n;i++)?for?(int?j=1;j=n;j++)?scanf("%d",b[i][j]);??
mult(a,b,c);
}
童鞋,不知道你是用的什么測試數(shù)據(jù),在我的機器上測試了幾組數(shù)據(jù),結(jié)果都是正確的。
重復(fù)下我的測試代碼。
#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矩陣行數(shù)和列數(shù),以空格分開,,,");
scanf("%d %d",m,n);
p=(int *)malloc(sizeof(int)*m*n);
for(i=0;im;i++)
for(j=0;jn;j++)
{
printf("請輸入a矩陣%d行%d列的數(shù),,",(i+1),(j+1));
scanf("%d",(p+m*i+j));
}
printf("請輸入b矩陣行數(shù)和列數(shù),以空格分開,,,");
scanf("%d %d",l,h);
q=(int *)malloc(sizeof(int)*l*h);
for(g=0;gl;g++)
for(k=0;kh;k++)
{
printf("請輸入b矩陣%d行%d列的數(shù),,",(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;ia;i++)
{
for(j=0;jc;j++)
{
sum=0;
for(k=0;kb;k++)
{
sum=sum+(*(p+a*i+k))*(*(q+b*k+j));
}
printf("%d ",sum);
}
printf("\n");
}
}
附帶一組測試數(shù)據(jù)
A 3 4
2 1
B 3
4
Result
25
10
結(jié)果正確。
1,若程序定義為三行三列的矩陣,并在主函數(shù)中鍵盤賦值。請編寫函數(shù)juzhen(int a[][3],int n),函數(shù)功能是:使矩陣左下角元素中的值乘以.例如:若矩陣中的值為:
1 9 7
2 3 8
4 5 6
n=3,則矩陣值變?yōu)椋?/p>
1 9 7
6 9 8
12 15 18
注:二維數(shù)組下三角元素每行最后元素的列標和該列的列號一致
#include stdio.h
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i3;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;i3;i++)
for (j=0;j3;j++)
scanf("%d",a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;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;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,請編寫函數(shù)juzhen,該函數(shù)的功能是:將三行四列矩陣x乘以四行三列矩陣y,結(jié)果放在三行三列矩陣中。矩陣相乘的基本方法是:矩陣Xy中行列下標分別為i,j的元素的值,是矩陣X中第i行上四個元素與矩陣Y中第j列上四個元素對應(yīng)相乘的積。
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;i3;i++)
for (j=0;j4;j++)
for (z=0;z3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得為要填寫的內(nèi)容*/
}
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;i3;i++)
{
for (j=0;j4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i4;i++)
{
for (j=0;j3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由于你沒有說要求,我就寫了兩個,這是兩道比較精典的求c語言矩陣乘法程序