‘壹’ 用C或C++怎么编写求N阶行列式的值要求有具体算法和程序.
#include <stdio.h>
int main()
{
int a[100][100],b[100][100],c[100][100],n,i,j,h;
printf("first:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("second:\n"); //由矩阵的乘法原则 两个如果都是方阵 阶数 必须相同!
printf("%d\n",n); //所以直接打印出 第二个的阶数 输入第二个方阵
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&b[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=0;
for(h=0;h<n;h++)
c[i][j] = c[i][j] + a[i][h]*b[h][j];
}
}
printf("result:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%d ",c[i][j]);
if(j==n-1)
printf("\n");
}
return 0;
}
‘贰’ 用c语言计算N阶行列式
#include"stdio.h" void main() { int n,x; int i; scanf("%d",n); for (i=1;i<=n;i++) { x=x*n; printf("%d!=%d\n",i,x); }}
‘叁’ 用c语言编写一个n阶矩阵
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,**p,i,j;
scanf("%d",&n);
p=new int*[n];
for(i=0;i<n;i++)
{
p[i]=new int[n];
for(j=0;j<n;j++) scanf("%d",&p[i][j]);
}
for(i=0;i<n;i++)
{
printf("%d",p[i][0]);
j=1;
while(j<n)
{
printf(" %d",p[i][j]);
j++;
}
printf("\n");
}
return 0;
}
‘肆’ 用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语言的问题:如何用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语言怎么定义 一个动态n阶矩阵,n是一个变量
C语言以及绝大多数语言都不支持两维都不固定的数组,你只能定义一个含n个指针的指针数组,然后为每个指针再分配n块内存
‘柒’ 用C语言 编写计算N阶行列式值得程序
不考虑效率直接代数余子式算呗,递归就好。
考虑效率有很多办法,去问你们线性代数老师吧。
‘捌’ C语言 计算行列式
利用一定的固定方法把他化成上三角或者下三角,然后用一个新数组储存对角线上,连乘,得结果
‘玖’ 用c语言设计一n阶方阵!急!!
#include <stdio.h>
#include<malloc.h>
void matrix(int x,int y) //这里都是向一个方向发展的。
{
int **a;
a = (int **)malloc(x*sizeof(int)); //分配空间。
int num = x+y-1;
int k;
for(k=0;k<x;k++)
{
a[k] = (int *)malloc(y*sizeof(int));
}
int i;
int j;
int start=1; //从1开始的。元素的起始值。
for(k=0;k<num;k++)
{
for(i=0;i<y;i++) //这是列坐标,因为列是在行变后才变的。
{
for(j=0;j<x;j++) //这是行坐标。
{
if(i+j == k)
{
a[j][i] = start;
//printf("%d\n",a[j][i]);
start++;
}
}
}
//printf("k=%d\n",k);
}
for(i=0;i<x;i++) //输出矩阵。
{
for(j=0;j<y;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
for(k=0;k<x;k++) //释放空间。
{
free(a[k]);
}
free(a);
}
int main()
{
int n;
printf("please input (1-9):\n");
scanf("%d",&n);
matrix(n,n);
printf("\n");
matrix(3,5);
getchar();
getchar();
return 0;
}
‘拾’ 关于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;
}