📄 cpp1.cpp
字号:
#include<stdio.h>
#include<math.h>
#define N 3
//定义全局变量
int k;
//确定列主元,找出列主元标记k,对应的行数
float f(float a[N][N],int j)
{
int i;
k=j;
for(i=j+1;i<N;i++)
if(fabs(a[j][j])<fabs(a[i][j])) k=i;
return a[k][j];
}
//交换列主元,包括a[N][N],b[N]
void g(float a[N][N],float b[N],int j)
{
int m;
float temp1,temp2;
for(m=0;m<N;m++)
{temp1=a[k][m];a[k][m]=a[j][m];a[j][m]=temp1;}
{temp2=b[j];b[j]=b[k];b[k]=temp2;}
}
//消元
void z(float a[N][N],float b[N],int j)
{
float t;
int i,m;
for(i=j+1;i<N;i++)
{
t=-a[i][j]/a[j][j];
for(m=j;m<N;m++)
{a[i][m]=a[i][m]+a[j][m]*t;}
b[i]=b[i]+b[j]*t;
}
}
//回代
void w(float a[N][N],float b[N],float c[N])
{
float s;
int i,j;
for(i=N-1;i>=0;i--)
{
s=0;
for(j=i+1;j<N;j++)
s=s+a[i][j]*c[j];
c[i]=(b[i]-s)/a[i][i];
}
}
//子函数
int zf(float a[N][N],float b[N],float c[N],float ep)
{
int flag=1;
int j;
for(j=0;j<N;j++)
{
if(f(a,j)<ep) {flag=0; break;}
g(a,b,j);
z(a,b,j);
}
if(flag=1) w(a,b,c);
return(flag);
}
//主函数
void main()
{
float ep;
float a[N][N],b[N],c[N];
int i,j;
i=N;
printf("请输入 ep:(如果列主元的绝对值小于ep,则退出)\n");
scanf("%f",&ep);
printf("请输入系数矩阵 a[%d][%d]:\n",i,i);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
scanf("%f",&a[i][j]);
}
printf("请输入矩阵 b[%d]:\n",i);
for(i=0;i<N;i++)
{
scanf("%f",&b[i]);
c[i]=0.0;
}
i=zf(a,b,c,ep);
if(i==0) printf("error\n");
else
{
printf("输出结果:\n");
for(j=0;j<N;j++)
printf("%f\n",c[j]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -