引用型參數(shù)應(yīng)該在能被定義為const的情況下,盡量定義為const 。
創(chuàng)新互聯(lián)公司專注于云溪網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供云溪營銷型網(wǎng)站建設(shè),云溪網(wǎng)站制作、云溪網(wǎng)頁設(shè)計(jì)、云溪網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造云溪網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供云溪網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
#define N 5 /*[注]:修改6為你所要的矩陣階數(shù)*/
#include "stdio.h"
#include "conio.h"
/*js()函數(shù)用于計(jì)算行列式,通過遞歸算法實(shí)現(xiàn)*/
int js(s,n)
int s[][N],n;
{int z,j,k,r,total=0;
int b[N][N];/*b[N][N]用于存放,在矩陣s[N][N]中元素s[0]的余子式*/
if(n2) {for(z=0;zn;z++)
{for(j=0;jn-1;j++)
for(k=0;kn-1;k++)
if(k=z) b[j][k]=s[j+1][k+1];
else b[j][k]=s[j+1][k];
if(z%2==0) r=s[0][z]*js(b,n-1); /*遞歸調(diào)用*/
else r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return total;
}
/*n_1()函數(shù)用于求原矩陣各元素對(duì)應(yīng)的余子式,存放在數(shù)組b[N][N]中,定義為float型*/
void n_1(s,b,n)
int s[][N],n;
float b[][N];
{int z,j,k,l,m,g,a[N][N];
for(z=0;zn;z++)
{l=z;
for(j=0;jn;j++)
{ m=j;
for (k=0;kn-1;k++)
for(g=0;gn-1;g++)
{ if(g=mkl) a[k][g]=s[k][g+1];
else if(k=lgm) a[k][g]=s[k+1][g];
else if(k=lg=m) a[k][g]=s[k+1][g+1];
else a[k][g]=s[k][g];
}
b[z][j]=js(a,n-1);
}
}
}
main()
{int a[N][N];
float b[N][N];
int r,z,j;
float temp;
//clrscr();
printf("Input original data:\n");
for(z=0;zN;z++) /*輸入所需要的數(shù)據(jù),為整型數(shù)據(jù)*/
for(j=0;jN;j++)
scanf("%d",a[z][j]);
printf("\nPress Enter continue......");
getchar();
//gotoxy(1,1);
printf("The original matrix is:\n");
for(z=0;zN;z++)/*打印原矩陣*/
{for(j=0;jN;j++)
printf("%5d",a[z][j]);
printf("\n");
}
r=js(a,N); /*調(diào)用js()函數(shù)計(jì)算原矩陣的行列式值*/
printf("\nThe original matrix hanglieshi is:|A|==%d\n",r);
if (r==0) printf("Because |A|==0,the original matrix have no nijuzhen!"); /*判斷條件:若|A|==0,則原矩陣無逆矩陣,反之則存在逆矩陣*/
else
{n_1(a,b,N); /*調(diào)用n_1()函數(shù),得到原矩陣各元素對(duì)應(yīng)的"余子式",存放在數(shù)組b[N][N]中*/
for(z=0;zN;z++) /*求代數(shù)余子式,此時(shí)b[N][N]中存放的為原矩陣各元素對(duì)應(yīng)的"代數(shù)余子式"*/
for(j=0;jN;j++)
if((z+j)%2!=0 b[z][j]!=0) b[z][j]=-b[z][j];
for(z=0;zN;z++) /*對(duì)b[N][N]轉(zhuǎn)置,此時(shí)b[N][N]中存放的為原矩陣的伴隨矩陣*/
for(j=z+2;jN;j++)
{temp=b[z][j];
b[z][j]=b[j][z];
b[j][z]=temp;
}
printf("Because |A|!=0,the original matrix have nijuzhen!\n");
printf("The bansuijuzhen A* is:\n");
for(z=0;zN;z++)/* 打印伴隨矩陣A* */
{for(j=0;jN;j++)
printf("%4.0f\t",b[z][j]);
printf("\n");
}
for(z=0;zN;z++) /*求逆矩陣,此時(shí)b[N][N]中存放的是原矩陣的逆矩陣*/
for(j=0;jN;j++)
b[z][j]=b[z][j]/r;
printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r); /*打印逆矩陣*/
for(z=0;zN;z++)
{for(j=0;jN;j++)
printf("%8.3f",b[z][j]);
printf("\n");
}
}
}
C語言程序如下:
#include?stdio.h
#include?math.h
#define?MAX?100
double?D(double?arr[][MAX],?int?n);
void?Display(double?arr[][MAX],?int?n);
void?main()
{
double?arr[MAX][MAX];
double?bak[MAX][MAX];
double?value;
int?n;
int?i,?j,?k,?c;
printf("Please?enter?matrix?size?n(1=n20):");
scanf("%d",?n);
printf("Please?input?matrix?line?by?line:\n");
for(i=0;?in;?i++)
{
for(j=0;?jn;?j++)
{
scanf("%lf",?arr[i][j]);
}
}
printf("matrix?a:\n");
Display(arr,?n);
/*?保存D(0,i)的值到bak中?*/
for(i=0;?in;?i++) /*?處理第1行的每一列元素?*/
{
for(j=1;?jn;?j++) /*?逐行處理?*/
{
for(c=0,k=0;?kn;?k++) /*?逐列處理?*/
{
if(k?==?i)
{
continue;
}
bak[j-1][c++]?=?arr[j][k];
}
}
value?=?D(bak,?n-1);
printf("Submatrix:\n");
Display(bak,?n-1);
printf("DValue?of?the?Submatrix?is???%f\n",?D(bak,?n-1));
}
value?=?D(arr,?n);
printf("result?=?%f\n",?value);
}
double?D(double?arr[][MAX],?int?n)
{
double?bak[MAX][MAX];
int?i,?j,?k,?c,?d;
double?sum?=?0;
if(n?==?1)
{
return?arr[0][0];
}
for(i=0;?in;?i++) /*?處理第1行的每一列元素?*/
{
for(j=1;?jn;?j++) /*?逐行處理?*/
{
for(c=0,k=0;?kn;?k++) /*?逐列處理?*/
{
if(k?==?i)
{
continue;
}
bak[j-1][c++]?=?arr[j][k];
}
}
/*?計(jì)算arr(row,?col)?*?D(row,?col)的值?*/
sum?+=?(i?%?2?==?0???1?:?-1)?*?arr[0][i]?*?D(bak,?n-1);
}
return?sum;
}
void?Display(double?arr[][MAX],?int?n)
{
int?i,?j;
printf("");
for(i=0;?in;?i++)
{
for(j=0;?jn;?j++)
{
printf("%10.1lf",?arr[i][j]);
}
printf("\n");
}
}
運(yùn)行測(cè)試:
用遞歸寫了一個(gè)求n階行列式的算法。用4階行列式舉例:
1?2?3?4
5?6?7?8
4?3?2?1
8?7?6?5
為了方便計(jì)算,我沒有用二維數(shù)組。
把矩陣用一維數(shù)組A存起來,并指出維數(shù)n。
第i行第j列的元素的下標(biāo)是i*n+j
#include?stdio.h
#include?stdlib.h
//求余子式M的函數(shù),參數(shù)是矩陣,維數(shù),i行,j列
//比如M(A,?4,?0,?0)表示去掉第1列,第1列的元素后剩下的數(shù)組成一個(gè)數(shù)組
//6?7?8
//3?2?1
//7?6?5
//然后用A[i*n+j]和余子式的值相乘
int*?M(int?*A,?int?n,?int?i,?int?j)
{
int?*B=?(int*)malloc((n?-?1)*sizeof(int));
int?k?=?0;
for?(int?k1?=?0;?k1??n;?++k1)
{
if?(k1?!=?i)
for?(int?k2?=?0;?k2??n;?++k2)
if?(k2?!=?j)
B[k++]?=?A[k1*n?+?k2];
}
return?B;
}
int?det(int?A[],?int?n)
{
int?sum?=?0,?N?=?n*n;
if?(n?==?1)
sum?=?A[0];
else
{
for?(int?i?=?0;?i??n;?++i)
{
int?*tmp?=?M(A,?n,?i,?0);
int?Aij?=?A[i*n]*det(tmp,?n?-?1);
if?(i%2?!=?0)
Aij?=?-Aij;
sum?=?sum?+?Aij;
}
}
return?sum;
}
int?main()
{
int?A[]={2,1,3,-1,1,-5,1,1,2,3,2,2,0,-1,4,2};
printf("%d\n",?det(A,?4));
return?0;
}
行列式的值的源代碼如下:
#include stdio.h
#include stdlib.h
void main()
{
int i,j,m,n,s,t,k=1;
double a[n][n],f=1,c,x,sn;
for (i=0;in;i++)
for (j=0;jn;j++)
scanf ("%lf",a[i][j]);
for (i=0,j=0;injn;i++,j++)
{
if (a[i][j]==0)
{
for (m=i;a[m][j]==0;m++);
if (m==n)
{
sn=0;
printf("deta=%lf\n",sn);
exit(0);
}
else
for (n=j;nn;n++)
{
c=a[i][n];
a[i][n]=a[m][n];
a[m][n]=c;
}
k*=(-1);
}
for (s=n-1;si;s--)
{
x=a[s][j];
for (t=j;tn;t++)
a[s][t]-=a[i][t]*(x/a[i][j]);
}
for (i=0;in;i++)
f*=a[i][i];
sn=k*f;
printf ("deta=%lf\n",sn);
}
擴(kuò)展資料
1、每個(gè)C語言程序中main函數(shù)是有且只有一個(gè)。
2、C語言程序?qū)懲旰螅际窍染幾g,后連接,最后運(yùn)行。(.c--.obj--.exe)這個(gè)過程中注意.c和.obj文件時(shí)無法運(yùn)行的,只有.exe文件才可以運(yùn)行