# 老笔记整理五：C实现10阶内通过展开代数余子式求行列式的值

``` 1 #include <stdio.h>
2
3 void main()
4 {
5     int det[3][3]={0};
6     int i,j,k;
7     int det_val=0,det_tval=1;
8
9 /*------------------- det Input Start -----------------------------------*/
10     for(i=0;i<3;i++)
11     {
12         printf("Give me the row%d (by space): ",i+1);
13         for(j=0;j<3;j++)
14             scanf("%d",&det[i][j]);
15     }
16 /*------------------- det Input End -------------------------------------*/
17
18
19
20 /*------------------- det Calculate Start -------------------------------*/
21     for(i=0;i<3;i++)
22     {
23         k=i;
24         for(j=0;j<3;k++,j++)//  left-up to right-down
25         {
26             if(k==3) k=0;
27             det_tval*=det[k][j];
28         }
29
30         det_val+=det_tval;
31         det_tval=1;
32     }
33
34     for(i=0;i<3;i++)
35     {
36         k=i;
37         for(j=3-1;j>=0;k++,j--)//  right-up to left-down
38         {
39             if(k==3)k=0;
40             det_tval*=det[k][j];
41         }
42
43         det_val-=det_tval;
44         det_tval=1;
45     }
46
47 /*------------------- det Calculate End --------------------------*/
48
49
50 /*------------------- Show det Start ------------------------------------*/
51     printf("\n");
52     for(i=0;i<3;i++)
53     {
54         for(j=0;j<3;j++)
55             printf("%5d",det[i][j]);
56         printf("\n");
57     }
58 /*------------------- Show det End --------------------------------------*/
59     printf("\n\nval=%d\n",det_val);
60 }```

```  1 #include <stdio.h>
2 #define max 10
3
4 void show_minor(int start,int end,int det[max][max]);
5
6 void main()
7 {
8     int det[10][10]={0};
9     int i,j,k,n=0;
10     int *dot=det;
11     int det_val=0,det_tval=1;
12
13     do{
14         printf("Give me the Order Number between 1 to 9:");
15         scanf("%d",&n);
16     }while(n<0||n>9);
17
18     for(i=1;i<=n;i++)
19     {
20         printf("Give me the row%d (by space): ",i);
21         for(j=1;j<=n;j++)
22             scanf("%d",&det[i][j]);
23     }
24
25     det[0][0]=n;
26
27     for(i=n+1;i<max;i++)
28     det[0][i]=det[i][0]=1;
29
30
31     det_val=Minor_In(n,dot);
32
33     printf("\n");
34     show_minor(1,n,dot);
35
36     printf("\n\nval=%d\n",det_val);
37 }
38
39
40 void show_minor(int start,int end,int det[max][max])
41 {
42     int i,j;
43     for(i=start;i<=end;i++)
44     {
45         for(j=start;j<=end;j++)
46             printf("%5d",det[i][j]);
47         printf("\n");
48     }
49
50 }
51 int fut2(num){
52     return 1-num%2*2;
53     }
54
55 int Minor_In(int msize,int det[max][max])
56 {
57
58     int i,j,k=1,Mvalue=0,l=1;
59     int *md=det;
60     int m00=1,m01=1,m10=1,m11=1;
61
62     if(msize==2)
63     {
64         for(i=1;i<=det[0][0];i++)
65             for(j=1;j<=det[0][0];j++)
66                 if(!det[i][0] && !det[0][j])
67                 {
68                     switch(k)
69                     {
70                         case 1:
71                             m00=det[i][j];break;
72                         case 2:
73                             m01=det[i][j];break;
74                         case 3:
75                             m10=det[i][j];break;
76                         case 4:
77                             m11=det[i][j];break;
78                         default:break;
79                     };
80                     k++;
81                 }
82         Mvalue=m00*m11-m01*m10;
83     }
84     else
85     {
86         k=det[0][0]-msize+1;
87         det[k][0]=1;
88
89         for(i=1;i<=det[0][0];i++)
90         {
91             if(!det[0][i])
92             {
93                 det[0][i]=1;l*=-1;
94                 Mvalue+=det[k][i]*l*Minor_In(msize-1,md);
95                 det[0][i]=0;
96             }
97         }
98         det[k][0]=0;
99     }
100     return Mvalue;
101 }```