📄 hw_1.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
//n×m阶矩阵输入函数
float *A_input(int n,int m)
{
int i,j;
float *a;
a=(float *)malloc(n*m*sizeof(float));
for (i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("请输入增广矩阵矩阵的%d行%d列的值:",i+1,j+1);
scanf("%f",&a[i*m+j]);
}
}
return(a);
}
//n×m阶系数矩阵输出函数
void A_output(int n,int m,float *a)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%10f",a[i*m+j]);
}
printf("\n");
}
}
//按列元素大小生成新矩阵的函数
float *max_new(int n,int m,int l,float *a)
{
int i,j;
float t;
for(i=l-1;i<n-1;i++)
{
if(abs(a[(l-1)*(m+1)])<abs(a[(i+1)*m+l-1]))
{
for(j=0;j<=m-l;j++)
{
t=a[(m+1)*(l-1)+j];
a[(m+1)*(l-1)+j]=a[(i+1)*m+l-1+j];
a[(i+1)*m+l-1+j]=t;
}
}
}
return(a);
}
//将列元素化为零的函数
float *zero_f(int n,int m,int l,float *a)
{
int i,j;
float u;
for(i=l-1;i<n-1;i++)
{
u=a[m*(i+1)+l-1]/a[(l-1)*(m+1)];
for(j=0;j<=m-l;j++)
{
a[m*(i+1)+l-1+j]=a[m*(i+1)+l-1+j]-u*a[(l-1)*(m+1)+j];
}
}
return(a);
}
//消去过程函数
float *A_xiaoqu(int n,int m,float *a)
{
int i;
for(i=1;i<=n-1;i++)
{
a=max_new(n,m,i,a);
if(a[(i-1)*(1+m)]==0)break;
else a=zero_f(n,m,i,a);
}
return(a);
}
//回代过程程序
float *result(int n,int m,float *a)
{
float *result,mid,*xishu;
int i,j;
result=(float *)malloc(n*sizeof(float));
xishu=(float *)malloc(n*(m-1)*sizeof(float));
for(i=0;i<n;i++)
{
result[i]=a[(i+1)*m-1];
for(j=0;j<(m-1);j++)
{
xishu[i*(m-1)+j]=a[i*m+j];
}
}
//A_output(n,1,result);
//A_output(n,n,xishu);
if(xishu[n*n-1]!=0)
{
result[n-1]=result[n-1]/xishu[n*n-1];
for(i=n-1;i>0;i--)
{ mid=0;
for(j=n;j>i;j--)
{
mid=mid+xishu[(i-1)*n+j-1]*result[j-1];
}
result[i-1]=(result[i-1]-mid)/xishu[(i-1)*n+i-1];
}
return(result);
}
else
return(0);
}
//列主元素消去法主程序
void main()
{
int c,d;
char i;
float *head,*re;
do
{
printf("列主元素消去法解方程组 机械制造及自动化 刘丹丹 10011305209 \n\n");
printf("\t请输入选择:\n");
printf("\ta.使用列主元素消去法解方程组\n");
printf("\tb.退出程序\n");
scanf("%c",&i);
if(i=='a')
{
printf("\n\n请输入未知数的个数:");
scanf("%d",&c);
d=c+1;
head=A_input(c,d);
printf("\n输入的%d×%d阶增广矩阵矩阵如下:\n",c,d);
A_output(c,d,head);
head=A_xiaoqu(c,d,head);
printf("\n变换后的%d×%d阶增广矩阵矩阵如下:\n",c,d);
A_output(c,d,head);
re=result(c,d,head);
if(re==0)
{
printf("无解!\n");
}
else
{
printf("该方程组的解为:\n");
A_output(c,1,re);
}
}
else if(i=='a')break;
else printf("输入错误!\n");
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -