c语言编程求行列式代码,用C语言编程递归求行列式的值

/************************************************************************

功能: 用递归方法求行列式的值

作者: 黄志斌 于 广西河池

在自学《高等数学(二)》时,做行列式习题所得结果有些与教材所附

答案不一致,为了验证究竟答案的正确性,编写了这个程序。

其实用MS Office中Excel也可以验证,不过自己 DIY  感觉更舒服。

希望这个程序能对您有所帮助。

日     期     概  要

-----------------------------------------------------

2001.3.23     完成运算功能

2002.3.17     按照匈牙利式命名规则和

林锐博士的《高质量C/C++编程指南》

增强程序可读性

2002.3.19     停止使用全局变量iRowOrCol,

将原先的调试部分改为预处理

*********************************************************************/

#include

"stdio.h"

#include

"mem.h"

#define IsDebug 0

/*int iRowOrCol;*/

void ReadMatrix(

int *ipMatrixRead,

int iRowOrCol4Read)

{

int iRow4Read, iCol4Read;

for (iRow4Read = 0; iRow4Read 

{

for (iCol4Read = 0; iCol4Read 

{

printf(

"matrix[%d, %d]=", iRow4Read, iCol4Read);

scanf(

"%d", (ipMatrixRead + iRow4Read * iRowOrCol4Read + iCol4Read));

}

}

}

void WriteMatrix(

int *ipMatrixWrite,

int p_iRowOrCol)

{

int iRow4Write, iCol4Write;

putch('┌');

for (iRow4Write = 0; iRow4Write 

{

putch(' ');

}

printf(

"%c/n", '┐');

for (iRow4Write = 0; iRow4Write 

{

putch('│');

for (iCol4Write = 0; iCol4Write 

{

printf(

"%3d", *(ipMatrixWrite + iRow4Write * p_iRowOrCol + iCol4Write));

}

printf(

"%c/n", '│');

}

putch('└');

for (iRow4Write = 0; iRow4Write 

{

putch(' ');

}

printf(

"%c/n", '┘');

#if IsDebug == 1

getch();

#endif

}

int ComputMatrix(

int *ipMatrixComput,

int iColComput)

{

int iRow4Comput, iCol4Comput, iRowTmp, *ipNewMatrix, CurrentRow, iResult;

if (1 == iColComput)

{

iResult = *ipMatrixComput;

}

else

{

iResult = 0;

for (CurrentRow = 0; CurrentRow 

{

if (*(ipMatrixComput + CurrentRow * iColCom! put))

{

if (ipNewMatrix = (

int *)malloc((iColComput - 1) * (iColComput - 1) *

sizeof(

int)))

{

#if IsDebug == 1

printf(

"/n%d", *(ipMatrixComput + CurrentRow * iColComput));

#endif

for (iRowTmp = 0, iRow4Comput = 0; iRow4Comput 

{

if (iRow4Comput != CurrentRow)

{

for (iCol4Comput = 0; iCol4Comput 

{

*(ipNewMatrix + iRowTmp*(iColComput - 1) + iCol4Comput) = *(ipMatrixComput + iRow4Comput * iColComput + iCol4Comput + 1);

}

iRowTmp ++;

}

}

#if IsDebug == 1

for (iRow4Comput = 0; iRow4Comput 

{

for (iCol4Comput = 0; iCol4Comput 

{

printf(

" %d ", *(ipNewMatrix + iRow4Comput * (iColComput - 1) + iCol4Comput));

}

}

printf(

"]/n************/n");

WriteMatrix(ipNewMatrix, iColComput - 1);

#endif

iResult += *(ipMatrixComput + CurrentRow * iColComput) * ComputMatrix(ipNewMatrix, iColComput - 1) * ((CurrentRow + 1) % 2 ? 1 : -1);

#if IsDebug == 1

printf(

"result=%d/n", iResult);

getch();

#endif

free(ipNewMatrix);

}

}

}

}

return (iResult);

}

void main(

void)

{

int *ipMatrix, iRowOrCol;

char chSure;

while (1)

{

printf(

"/n/nEnter the row or col of matrix:");

scanf(

"%d", &iRowOrCol);

if (iRowOrCol > 0)

{

if (ipMatrix = (

int *)malloc(iRowOrCol * iRowOrCol *

sizeof(

int)))

{

while (1)

{

ReadMatrix(ipMatrix, iRowOrCol);

WriteMatrix(ipMatrix, iRowOrCol);

printf(

"Are you sure(Y/N)?");

chSure = getche();

if (toupper(chSure) == 'Y')

{

break;

}

else

{

printf(

"/n/n");

}

}

printf(

"/n/n= %d/n", ComputMatrix(ipMatrix, iRowOrCol));

free(ipMatrix);

}

else

{

printf(

"Error:No enough memory!/n");

break;

}

}

else

{

printf(

"Invalid col value!/n/n");

}

printf(

"/nCompute another Matrix(Y/N)?");

chSure = getche();

if (toupper(chSure) != 'Y')

{

break;   }  } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值