用C语言求7阶矩阵的行列式,求代码…… (矩阵定义在数组a[7][7]中)a[i][j]表示矩阵第i+1行,j+1列元素

用C语言求7阶矩阵的行列式,求代码…… (矩阵定义在数组a[7][7]中)a[i][j]表示矩阵第i+1行,j+1列元素,第1张

很遗憾,上面匿名的程序不正确。

比如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("

Please input the Array size n:")

scanf("%d",&n)

getarray(n)

showarray(n)

result=getresult(n)

printf("

Result=%f

",result)

system("pause")

return 0

}

void getarray(int n)

{

int row,col

for(row=0row<nrow++)

{

printf("

Please input line %d:",row+1)

for(col=0col<ncol++)

scanf("%lf",&array[row][col])

}

}

void showarray(int n)

{

int row,col

printf("

A=")

for(row=0row<nrow++)

{

for(col=0col<ncol++)

printf("%f",array[row][col])

printf("

")

}

}

double getresult(int n)

{

double temp,result=1.0

int switchtime=0,flag=0

int row,nextrow,col,stemp

for(row=0row<n-1row++)

{

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=0row<n-1row++)行加1?*/

continue/* 从array[row][row]==0知列也相应加1,开始处理第二列 */

switchtime++/* 每交换一次行,行列式符号变化1次,统计变化次数 */

for(col=0col<ncol++) /* 交换非零行到行列式顶部 */

{

stemp=array[row][col]

array[row][col]=array[nextrow][col]

array[nextrow][col]=stemp

}

}

for(nextrow=row+1nextrow<nnextrow++)

{ /* 类似高斯消去法,消第一行下各行第一列数值到零*/

temp=array[nextrow][row]/array[row][row]

for(col=0col<ncol++)

array[nextrow][col]+=-temp*array[row][col]/* 化行列式为上三角行列式形式 */

}

}

showarray(n)

for(row=0row<nrow++)

result*=array[row][row]

if(switchtime%2)

return -result

else

return result

}

>>a=magic(7)

a =

303948 1101928

3847 7 9182729

46 6 817263537

5141625343645

131524334244 4

2123324143 312

22314049 21120

#include<stdio.h>

main()

{   int i=2

    while(1){

     i++

     if(i%2==1&&i%3==2&&i%4==3&&i%5==4&&i%6==5&&i%7==0)

     break

}

    printf("%d",i)

}

如图所示,望采纳。。。。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11586811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存