『壹』 用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;
}