C语言 求矩阵的逆

C语言 求矩阵的逆,第1张

//源程序如下#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<iostream.h>

#include<stdlib.h>

#include<math.h>

#define max 100void inputstyle(int *) //输入函数

void input(int **,int) //输入函数

long danx(int **,int)

int sgnx(int)

void martx(int **,int)int main(void)

{

int style=0,i=0

int matrix[max][max],*p[max]

for(i=0i<maxi++)*(p+i)=matrix[i] //*(p+i)是指针,指向第i个字符串

char exit1=' '

while(exit1!='E'&&exit1!='e'){ printf("求n阶矩阵的逆\n") inputstyle(&style)

input(p,style)

printf("原矩阵为:\n")

for(i=0i<stylei++){

for(int j=0j<stylej++){

printf("%4d",matrix[i][j])

}

printf("\n")

}

martx(p,style)

printf("\n")

printf("Exit=e Continue=Press any key\n")

cin>>exit1

fflush(stdin)

printf("\n\n")}

return(0)

} void input(int **p,int n){

for(int i=0i<ni++){

for(int j=0j<nj++){

printf("输入矩阵(%d行,%d列)元素:",j+1,i+1)

*(*(p+j)+i)=0

scanf("%d",*(p+j)+i)

fflush(stdin)

}

}

}void inputstyle(int *style){

do{

printf("输入矩阵n*n阶数n(0<n<%d):",max)

fflush(stdin)

scanf("%d",style)

fflush(stdin)

}while(*style<=0 &&*style>max)

}long danx(int **p,int n){

int i=0,j1=0,k1=0,j2=0,k2=0

long sum=0

int operate[max][max],*po[max]

for(i=0i<maxi++)*(po+i)=operate[i]if(n==1)return *(*(p+0)+0)

else{

for(i=0i<ni++){

for(j1=1,j2=0j1<nj1++,j2++){

k1=-1k2=-1

while(k2<n-1){

k1++

k2++

if(k1==i)k1++

*(*(po+j2)+k2)=*(*(p+j1)+k1)

}

}

/*for(int i1=0i1<n-1i1++){

for(int h1=0h1<n-1h1++){

printf("(%d,%d)%d ",i1,h1,*(*(po+h1)+i1))

}

printf("\n")

}*/

sum+=*(*(p+0)+i) * sgnx(1+i+1) * danx(po,n-1)

}

return sum

}

}int sgnx(int i){

if(i%2==0)return(1)

else return(-1)

}void martx(int **p,int n){

int i=0,j=0,j1=0,k1=0,j2=0,k2=0,num=0

int tramform[max][max]

int operate[max][max],*po[max]

for(i=0i<maxi++)*(po+i)=operate[i]

num=danx(p,n)

if(num==0)printf("矩阵不可逆\n")

else{

if(n==1)printf("矩阵的逆为: 1/%d\n",num)

else{

printf("矩阵的逆为: 系数 1/%d *\n",num)

for(i=0i<ni++){

for(j=0j<nj++){

j1=-1j2=-1

while(j2<n-1){

j1++j2++

if(j1==j)j1++ k1=-1k2=-1

while(k2<n-1){

k1++

k2++

if(k1==i)k1++

*(*(po+j2)+k2)=*(*(p+j1)+k1)

}

}

tramform[i][j]=sgnx(2+i+j) * danx(po,n-1)

}

}

for(i=0i<ni++){

for(j=0j<nj++){

printf("%4d",tramform[i][j])

}

printf("\n")

}

}

}

}

//运行结果//希望对你有帮助

学习C语言,我想应当首先手头有一本入门教材,如果有条件用计算机的话,在计算机上安装TC程序。

前面的基本内容我想你自己会学好学会的,关键就是在指针以后的内容比较复杂抽象,需要下一番功夫才行呀。

如果有什么问题可以在网上线我留言。QQ360795604

#include <stdio.h>

//产生任意均值与方差的正态分布随机数

// double u μ 正态分布的均值

// double g σ2=g2 正态分布的方差

// double * r指向随机数种子

// double grn1() 返回一个均值u 方差g2 正态分布 的随机数

double grn1(double u,double g,double * r)

{ int i,m

double s,w,v,t

s=65536.0w=2053.0v=13849.0

t=0.0

for (i=1i<=12i++)

{ *r=(*r)*w+vm=(int)(*r/s)

*r=*r-m*st=t+(*r)/s

}

t=u+g*(t-6.0)

return(t)

}

int main()

{

double u,g,r

r=5.0u=1.0g=1.5

printf("\n")

for(int i=0i<=9i++){

for(int j=0j<=4j++){

printf("%10.7lf", grn1(u,g,&r))

}

printf("\n")

}

printf("\n")

}

运行结果:

1.2386322-1.1779938 0.5128021 1.9047699 1.5916595

1.1672211-0.7747955 1.8593597 1.6634369 1.7311859

0.6563568-1.4673004-0.0460358-0.9860992 0.3062592

3.9247894-0.5367584 3.5153656-0.3250885 0.0356293

0.1912689 0.2355804 0.2623138 0.3652191 3.6380463

1.1745453 2.0684662 0.4135590 2.3035736 4.8322601

-0.9066315 0.1806488 2.1878510 2.2087250 1.8370209

-0.3335114 3.2908783 0.8039398 1.2994232-1.1289215

4.1126556 0.6179047 0.4805756 0.7944183-1.3468170

1.6506195 2.3804779 2.4365082 1.9124603 0.9020844

参考 常用算法程序集(c语言描述)第三版

第三章 随机数的产生

3.5 产生任意均值与方差的正态分布的一个随机数


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存