當前位置:編程學習大全網 - 熱門推薦 - C語言 求矩陣的逆

C語言 求矩陣的逆

//源程序如下#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<iostream.h>

#include<stdlib.h>

#include<math.h>

#define max 100void inputstyle(int *); //輸入函數

void input(int **,int); //輸入函數

long danx(int **,int);

int sgnx(int);

void martx(int **,int);int main(void)

{

int style=0,i=0;

int matrix[max][max],*p[max];

for(i=0;i<max;i++)*(p+i)=matrix[i]; //*(p+i)是指針,指向第i個字符串

char exit1=' ';

while(exit1!='E'&& exit1!='e'){ printf("求n階矩陣的逆\n"); inputstyle(&style);

input(p,style);

printf("原矩陣為:\n");

for(i=0;i<style;i++){

for(int j=0;j<style;j++){

printf("%4d",matrix[i][j]);

}

printf("\n");

}

martx(p,style);

printf("\n");

printf("Exit=e Continue=Press any key\n");

cin>>exit1;

fflush(stdin);

printf("\n\n"); }

return(0);

} void input(int **p,int n){

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

printf("輸入矩陣(%d行,%d列)元素:",j+1,i+1);

*(*(p+j)+i)=0;

scanf("%d",*(p+j)+i);

fflush(stdin);

}

}

}void inputstyle(int *style){

do{

printf("輸入矩陣n*n階數n(0<n<%d):",max);

fflush(stdin);

scanf("%d",style);

fflush(stdin);

}while(*style<=0 && *style>max);

}long danx(int **p,int n){

int i=0,j1=0,k1=0,j2=0,k2=0;

long sum=0;

int operate[max][max],*po[max];

for(i=0;i<max;i++)*(po+i)=operate[i]; if(n==1)return *(*(p+0)+0);

else{

for(i=0;i<n;i++){

for(j1=1,j2=0;j1<n;j1++,j2++){

k1=-1;k2=-1;

while(k2<n-1){

k1++;

k2++;

if(k1==i)k1++;

*(*(po+j2)+k2)=*(*(p+j1)+k1);

}

}

/*for(int i1=0;i1<n-1;i1++){

for(int h1=0;h1<n-1;h1++){

printf("(%d,%d)%d ",i1,h1,*(*(po+h1)+i1));

}

printf("\n");

}*/

sum+=*(*(p+0)+i) * sgnx(1+i+1) * danx(po,n-1);

}

return sum;

}

}int sgnx(int i){

if(i%2==0)return(1);

else return(-1);

}void martx(int **p,int n){

int i=0,j=0,j1=0,k1=0,j2=0,k2=0,num=0;

int tramform[max][max];

int operate[max][max],*po[max];

for(i=0;i<max;i++)*(po+i)=operate[i];

num=danx(p,n);

if(num==0)printf("矩陣不可逆\n");

else{

if(n==1)printf("矩陣的逆為: 1/%d\n",num);

else{

printf("矩陣的逆為: 系數 1/%d *\n",num);

for(i=0;i<n;i++){

for(j=0;j<n;j++){

j1=-1;j2=-1;

while(j2<n-1){

j1++;j2++;

if(j1==j)j1++; k1=-1;k2=-1;

while(k2<n-1){

k1++;

k2++;

if(k1==i)k1++;

*(*(po+j2)+k2)=*(*(p+j1)+k1);

}

}

tramform[i][j]=sgnx(2+i+j) * danx(po,n-1);

}

}

for(i=0;i<n;i++){

for(j=0;j<n;j++){

printf("%4d",tramform[i][j]);

}

printf("\n");

}

}

}

}

//運行結果//希望對妳有幫助

  • 上一篇:豆腐蒸雞蛋的做法
  • 下一篇:吳業坤是誰
  • copyright 2024編程學習大全網