當前位置:首頁 » 編程語言 » c語言求行列式ii表示什麼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言求行列式ii表示什麼

發布時間: 2022-09-21 13:25:53

c語言 計算行列式

利用一定的固定方法把他化成上三角或者下三角,然後用一個新數組儲存對角線上,連乘,得結果

② 求行列式的值,用C語言怎麼寫啊

行列式的值的源代碼如下:

#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;i<n;i++)

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

scanf ("%lf",&a[i][j]);

for (i=0,j=0;i<n&&j<n;i++,j++)

{

if (a[i][j]==0)

{

for (m=i;a[m][j]==0;m++);

if (m==n)

{

sn=0;

printf("deta=%lf ",sn);

exit(0);

}

else

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

{

c=a[i][n];

a[i][n]=a[m][n];

a[m][n]=c;

}

k*=(-1);

}

for (s=n-1;s>i;s--)

{

x=a[s][j];

for (t=j;t<n;t++)

a[s][t]-=a[i][t]*(x/a[i][j]);

}

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

f*=a[i][i];

sn=k*f;

printf ("deta=%lf ",sn);

}

(2)c語言求行列式ii表示什麼擴展閱讀

1、每個C語言程序中main函數是有且只有一個。

2、C語言程序寫完後,都是先編譯,後連接,最後運行。(.c-->.obj-->.exe)這個過程中注意.c和.obj文件時無法運行的,只有.exe文件才可以運行

③ 用C語言解決:求任意階(n階)矩陣的行列式

很遺憾,上面匿名的程序不正確。
比如n=2 輸入:
3---7
2---1
得出錯誤結果。
而當輸入n=3
0---1---3
3---0---2
5---2---0
時也會得出錯誤結果。
錯誤的原因有2:
1 是數據類型不對,匿名的程序是設定輸入都是整數int,顯然按照行列式的定義結果肯定是整數,但是他程序中使用了整型數的除法,結果是取整整數,雖然他使用了類型強制轉換,但結果顯然不同,有誤差而且有時候這個誤差很大形成錯誤。
2 是演算法有點問題。小可很欣賞匿名的演算法思路,簡潔明快。不過有相當缺陷,這在程序中註明。
下面的程序是在匿名的程序思路上改寫的。考慮到數據類型和精確度問題,程序中行列式數據使用double型。由於tc和win-tc是16位編輯器,對float型和double型數據支持不好,所以程序是在32位編輯器Dev-c++下調試並通過的。
本題的一個完整的c程序如下,程序在Dev-c++下都調試通過,結果正確。
/* 用C語言解決:求任意階(n階)矩陣的行列式值 */
#include <stdio.h>
#include <math.h>

void getarray(int n);
void showarray(int n);
double getresult(int n);
double array[10][10];/*設矩陣不超過10階,可更改*/

int main()
{
int n;
double result;
printf("\nPlease input the Array size n:");
scanf("%d",&n);
getarray(n);
showarray(n);
result=getresult(n);
printf("\nResult=%f\n",result);
system("pause");
return 0;
}

void getarray(int n)
{
int row,col;
for(row=0;row<n;row++)
{
printf("\nPlease input line %d:",row+1);
for(col=0;col<n;col++)
scanf("%lf",&array[row][col]);
}
}

void showarray(int n)
{
int row,col;
printf("\nA=");
for(row=0;row<n;row++)
{
for(col=0;col<n;col++)
printf("\t%f",array[row][col]);
printf("\n");
}
}

double getresult(int n)
{
double temp,result=1.0;
int switchtime=0,flag=0;
int row,nextrow,col,stemp;
for(row=0;row<n-1;row++)
{
nextrow=row+1;
if(array[row][row]==0)/* 開始處理第一列,如果行列式第一行第一個數為零,要交換行 */
{ while(array[nextrow][row]==0)
{
nextrow++; /* 如果行列式第二行第一個數為零,行增加繼續尋找非零數值的行 */
if(nextrow==n)/* 如果遍歷完行列式行列式第一列元素都為零,退出while循環 */
{ flag=1;
break;
}
}
if(flag==1) /* 退出while循環後回到for(row=0;row<n-1;row++)行加1?*/
continue; /* 從array[row][row]==0知列也相應加1,開始處理第二列 */
switchtime++; /* 每交換一次行,行列式符號變化1次,統計變化次數 */
for(col=0;col<n;col++) /* 交換非零行到行列式頂部 */
{
stemp=array[row][col];
array[row][col]=array[nextrow][col];
array[nextrow][col]=stemp;
}
}
for(nextrow=row+1;nextrow<n;nextrow++)
{ /* 類似高斯消去法,消第一行下各行第一列數值到零*/
temp=array[nextrow][row]/array[row][row];
for(col=0;col<n;col++)
array[nextrow][col]+=-temp*array[row][col];/* 化行列式為上三角行列式形式 */
}
}
showarray(n);
for(row=0;row<n;row++)
result*=array[row][row];
if(switchtime%2)
return -result;
else
return result;
}

④ 行列式求值--C語言

#include<stdio.h>
#include<stdlib.h>
void main()
{
float f(float *a,int n);
int i,j,n;
scanf("%d",&n);
float *a=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",a+i*n+j);
printf("行列式如下:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-5.2f ",*(a+i*n+j));
printf("\n");
}
printf("%-8.2f\n",f(a,n));
}
float f(float *a,int n)
{
int i,j,k,p=1;
float *b=(float *)malloc(n*n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
*(b+i*n+j)=0;
float s=0;
if(n==1)
return *a;
if(n==2)
return *a**(a+n+1)-*(a+1)**(a+n);
else
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=i)
*(b+n*j+k)=*(a+n*j+k+1);
else
*(b+n*j+k)=*(a+n*j+k);
s+=p**(a+n*(n-1)+i)*f(b,n-1);
p*=-1;
}
return s;
}

⑤ c語言問題 如何定義一個求解兩行兩列行列式的函數 求大神指教

假如是a[2][2]的二維數組
那麼result=a[0][0]*a[1][1]-a[0][1]*a[1][0];
例如a={(2 ,3)
(1, 4)}
結果就是5
可以傳參數
int f(int **a){
return a[0][0]*a[1][1]-a[0][1]*a[1][0];
}

⑥ C語言 ll的運算方法II在運算符中是或,運用到計算中如何計算,拜拜託舉個實例

if(a == 0 || b == 0)
{
...
}

意思就是或者a為0成立或者b為0成立
T為真,F為假
那麼
T || T = T
T || F = T
F || T = T
F || F = F

⑦ C語言計算行列式

你好,我用C#寫過計算行列式值的winform程序,不過演算法應該一樣,你可以看看

//按鈕事件

privatevoidbtnResult_Click(objectsender,EventArgse)

{

stringsInfo=txtInfo.Text.Trim();

string[]R=sInfo.Replace(" ","※").Split('※');

intn=R.Length;//維數

string[,]A=newstring[n,n];

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

{

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

{

string[]C=R[i].Split('');

if(C.Length!=n)

{

MessageBox.Show("請輸入n階行列式");

return;

}

A[i,j]=C[j];

}

}

try

{

lblResult.Text=DGRowLayout(A).ToString();

}

catch

{

MessageBox.Show("本程序只支持一般的數字形式,不支持特殊的數字形式");

return;

}

}

//遞歸演算法

privatedoubleDGRowLayout(string[,]A)

{

if(A.Length==1)

{

returndouble.Parse(A[0,0]);

}

doubles=0;

intm=0,n=0;

intN=int.Parse(Math.Sqrt(A.Length).ToString());

for(inti=0;i<N;i++)

{

string[,]B=newstring[N-1,N-1];

m=0;

for(intj=1;j<N;j++)

{

n=0;

for(intk=0;k<N;k++)

{

if(k!=i)

{

B[m,n]=A[j,k];

n++;

}

}

m++;

}

intO=0;

if(i%2==0)

{

O=1;

}

else

{

O=-1;

}

s+=double.Parse(A[0,i])*O*DGRowLayout(B);

}

returns;

}

⑧ c語言求行列式的值

你這樣全部叫別人寫是不可能的,除非把你的代碼發出來,大家給你檢查下錯誤,不要不好意思.

⑨ 如何用c語言來求一個四階行列式的值

#include <stdio.h>
#include <stdlib.h>
#define MAX 9 /*定義最大為9階行列式*/

int Fun(int n, int a[MAX][MAX] ); /*函數聲明*/
int main()
{
int n = 0; /*初始化階數n*/
int i = 0, j = 0; /*i,j分別表示行與列*/
int a[MAX][MAX] = {{0}}; /*定義行列式*/

scanf("%d",&n); /*讀入階數*/
while( n != 0) /*輸入為0時退出程序*/
{
for( i = 0; i < n; i++) /*此處2次循環將行列式存入數組中*/
{
for( j = 0; j < n; j++)
scanf("%d", &a[i][j]);
}
printf("%d\n", Fun( n, a ) );
scanf("%d", &n);
}

return 0;
}

/*以下為計算行列式值的遞歸函數*/
int Fun( int n, int a[MAX][MAX] )
{
int b[MAX][MAX] = {{0}}; /*定義數組b並初始化*/
int i = 0, j = 0, sum = 0; /*i,j為行與列,sum為行列式的值*/
int x = 0,c = 0,p=0; /*用x判斷加與減,c,p為中間變數*/

if(n == 1)
return a[0][0];

for(i = 0;i < n; i++) /*此處大循環實現將餘子式存入數組b中*/
{
for(c = 0;c < n-1; c++)
{
for(j = 0;j < n-1;j++)
{
if (c < i){ /*藉助c判斷每行的移動方法*/
p = 0; /*當p=0時,行列式只向左移,即消去對應的第一列的數*/
}
else{ /*否則行列式左移後再上移*/
p = 1;
}
b[c][j] = a[c+p][j+1];
}
}

if(i % 2 == 0){ /*i+j(此時j=0,故只考慮i)為偶數,加法預算*/
x = 1;
}
else{ /*i+j為奇數,減法運算*/
x = (-1);
}
sum += a[i][0] * Fun(n - 1, b ) * x; /*計算行列式的值*/
}

return sum; /*將值返回*/
}

⑩ C語言求行列式的值

C語言程序如下:

#include<stdio.h>
#include<math.h>

#defineMAX100

doubleD(doublearr[][MAX],intn);
voidDisplay(doublearr[][MAX],intn);

voidmain()
{
doublearr[MAX][MAX];
doublebak[MAX][MAX];
doublevalue;
intn;
inti,j,k,c;

printf("Pleaseentermatrixsizen(1<=n<20):");
scanf("%d",&n);

printf("Pleaseinputmatrixlinebyline: ");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%lf",&arr[i][j]);
}
}

printf("matrixa: ");
Display(arr,n);

/*保存D(0,i)的值到bak中*/
for(i=0;i<n;i++) /*處理第1行的每一列元素*/
{
for(j=1;j<n;j++) /*逐行處理*/
{
for(c=0,k=0;k<n;k++) /*逐列處理*/
{
if(k==i)
{
continue;
}
bak[j-1][c++]=arr[j][k];
}
}
value=D(bak,n-1);

printf("Submatrix: ");
Display(bak,n-1);

printf("DValueoftheSubmatrixis%f ",D(bak,n-1));
}

value=D(arr,n);
printf("result=%f ",value);
}

doubleD(doublearr[][MAX],intn)
{
doublebak[MAX][MAX];
inti,j,k,c,d;
doublesum=0;

if(n==1)
{
returnarr[0][0];
}

for(i=0;i<n;i++) /*處理第1行的每一列元素*/
{
for(j=1;j<n;j++) /*逐行處理*/
{
for(c=0,k=0;k<n;k++) /*逐列處理*/
{
if(k==i)
{
continue;
}
bak[j-1][c++]=arr[j][k];
}
}

/*計算arr(row,col)*D(row,col)的值*/
sum+=(i%2==0?1:-1)*arr[0][i]*D(bak,n-1);
}
returnsum;
}

voidDisplay(doublearr[][MAX],intn)
{
inti,j;
printf("");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%10.1lf",arr[i][j]);
}
printf(" ");
}
}


運行測試: