当前位置:首页 » 编程语言 » c语言用行列式求未知数编程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言用行列式求未知数编程

发布时间: 2022-11-28 06:47:21

㈠ 求行列式的值,用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);

}

(1)c语言用行列式求未知数编程扩展阅读

1、每个C语言程序中main函数是有且只有一个。

2、C语言程序写完后,都是先编译,后连接,最后运行。(.c-->.obj-->.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行

㈡ 行列式求值--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语言编程 求n阶行列式

#include"stdio.h"
#define n 100
int main()
{
int i, j, t, g, h, f = 1, N;
double m, k[n], a[n][n], detA = 1;
printf("请输入行列式的阶:\n");
scanf_s("%d", &N);
printf("请输入行列式:\n");
for (i = 1; i <= N; i++)
for (j = 1; j <= N; j++)
scanf_s("%lf", &a[i][j]);
for (i = 1; i < N; i++)
{
if (a[i][i] != 0)
m = a[i][i];
else
{
for (g = i; a[g][i] == 0 && g <= N; g++);
if (g == N + 1)
{
printf("detA=0");
return 0;
}
else
{
for (h = i; h <= N; h++)
{
a[i][h] = a[i][h] + a[g][h];
a[g][h] = a[i][h] - a[g][h];
a[i][h] = a[i][h] - a[g][h];
}
m = a[i][i];
f = f * (-1);
}
}
for (j = i + 1; j <= N; j++)
{
k[j] = a[j][i] / m;
for (t = i; t <= N; t++)
a[j][t] = a[j][t] - a[i][t] * k[j];
}
detA = detA * a[i][i];
}
for (i = 1; a[i][i] != 0 && i <= N; i++);
if (i == N + 1)
{
detA = detA * a[N][N] * f;
}
else
detA = 0;
printf("detA=%.0f\n", detA);
return 0;
}

㈣ 用C语言求解N个未知数的方法

。。。这还要问。。写一个10层循环不就完了。。

刚改了下你的程序,发现似乎没有满足条件的:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int main()
{int a,b,c,d,e,f,g,h,i,j;
bool used[10];
memset(used, 0, sizeof(used));

for(a=0;a<=9;a++){
used[a] = true;
for(b=0;b<=9 && !used[b];b++) {
used[b] = true;
for(c=0;c<=9 && !used[c];c++) {
used[c] = true;
for(d=0;d<=9 && !used[d];d++){
used[d] = true;
for(e=0;e<=9 && !used[e];e++) {
used[e] = true;
for(f=0;f<=9 && !used[f];f++) {
used[f] = true;
for(g=0;g<=9;g++)
for(h=0;h<=9;h++)
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)

if(f*10000+g*1000+h*100+i*10+j==a*10000+b*1000+c*100+d*10+e*10+20085) {
printf("%d%d%d%d%d%d%d%d%d%d\n",a,b,c,d,e,f,g,h,i,j);
}
used[f] = false;
}
used[e] = false;
}
used[d] = false;
}
used[c] = false;
}
used[b] = false;
}
used[a] = false;
}

system("PAUSE");
return 0;
}

㈤ 如何用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语言写行列式运算程序

#include <stdio.h>
#include <stdlib.h>
void fun3(float *,int);
float fun4(float *,int);
void main()
{
int i,j,n;
float *a,answer;
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n");
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
do
{
printf("请输入您要计算的行列式的行数或列数n(n>1):");
scanf("%d",&n);
}while(n<2);
a=(float *)malloc(n*n*sizeof(float));
for(i=0;i<n;i++)
{
printf("请输入您要计算的行列式的:\n");
for(j=0;j<n;j++)
{
printf("第%d行%d列:",i+1,j+1);
scanf("%f",&a[i*n+j]);
}
}
fun3(a,n);
answer=fun4(a,n);
printf("您要计算的行列式的值为:%.3f\n\n\n",answer);
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
printf(" 欢迎进入*雒森*行列式计算程序,请准确输入以便我为您正确计算! \n");
for(i=0;i<3;i++)
printf("<----------------------------------------------------------------------------->\n");
}
void fun3(float a[],int n)
{
int i,j,d,f;
float m=1,w;
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
if(a[j*n+j]==0)
{
for(d=j+1;d<n;d++)
{
if(a[d*n+j]!=0)
break;
}
for(f=j;f<n;f++)
a[j*n+f]+=a[d*n+f]*m;
}
if(i!=j)
{
w=-(a[i*n+j]/a[j*n+j]);
for(f=j;f<n;f++)
a[i*n+f]+=a[j*n+f]*w;
}
}
}
}
float fun4(float a[],int n)
{
int i;
float answer=1;
for(i=0;i<n;i++)
answer*=a[i*n+i];
return answer;
}

㈦ 关于C语言的问题:如何用C语言实现n阶行列式和矩阵的值

输入:
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语言编程递归求行列式的值

如下以2的10次为例给出代码:#include#includedouble p(double x,int n)//因为不确定X为整型还是浮点型所以用double{ double f; if(n==0)//如果0次直接返回1 { f=1; } else { f=p(x,n-1)*x;//此处为递归处理 } return f;}int main(){ printf

㈨ 用C语言 编写计算N阶行列式值得程序

不考虑效率直接代数余子式算呗,递归就好。
考虑效率有很多办法,去问你们线性代数老师吧。