📄 triangular.cpp
字号:
#include<iostream.h>
#include<math.h>
void main(void){
int i,j,n,k,q;
float a[10][11],s[10],s1[10];
cout<<"请输入n的值:";
cin>>n;
cout<<"输入数组a:"<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=(n+1);j++)
cin>>a[i][j]; //给矩阵a赋值
for(i=1;i<=n;i++){
for(j=1;j<=(n+1);j++)
cout<<a[i][j]<<'\t';
cout<<'\n';
} //输出数组a
cout<<"'''''''''''''''''''''''''"<<'\n';
//进行第一行和第一列元素的求取'''''''''''''''''''''''''//
int t=1;
for(i=1;i<=n;i++){
s[i]=a[i][1];
}
float max=fabs(s[1]);
for(i=2;i<=n;i++)
if(fabs(s[i])>max){
max=fabs(s[i]);
t=i;
}
for(j=1;j<=(n+1);j++){
float b=a[1][j];
a[1][j]=a[t][j];
a[t][j]=b;
} //进行第一列主元互换
for(i=2;i<=n;i++)
a[i][1]=a[i][1]/max; //第一列除以a[1][1]
for(i=1;i<=n;i++){
for(j=1;j<=(n+1);j++)
cout<<a[i][j]<<'\t';
cout<<'\n';
}
//输出进行第一步变换的数组a
cout<<"'''''''''''''''''''''''''"<<'\n';
//进行第k步分解'''''''''''''''''''''''''''''''''''''''''//
for(k=2;k<=n;k++){
for(i=k;i<=n;i++){
float sum=0;
for(q=1;q<k;q++)
sum+=a[i][q]*a[q][k];
s1[i]=a[i][k]-sum;
}
int l=k;
float m=fabs(s1[k]); //比较第k步分解的第k列值的大小
for(i=k;i<=n;i++){
if(fabs(s1[i])>m){
m=fabs(s1[i]);
l=i; //返回行值
}
}
for(j=1;j<=n+1;j++){ //交换两行元素
float s2=a[k][j];
a[k][j]=a[l][j];
a[l][j]=s2;
}//算出第k行行元素的值
for(j=k;j<=n+1;j++){
float sum1=0;
for(q=1;q<k;q++)
sum1+=a[k][q]*a[q][j];
a[k][j]=a[k][j]-sum1;
}//算出第k列列元素的值
for(i=k+1;i<=n;i++){
float sum2=0;
for(q=1;q<k;q++)
sum2+=a[i][q]*a[q][k];
a[i][k]=(a[i][k]-sum2)/(a[k][k]);
}
} //第k步分解结束
for(i=1;i<=n;i++){
for(j=1;j<=(n+1);j++)
cout<<a[i][j]<<'\t';
cout<<'\n';
} //输出改变后的数组
//输出解'''''''''''''''''''''''''''''''''''''''''''''''''''''''//
float x[10];
for(i=n-1;i>=1;i--){
x[n]=a[n][n+1]/a[n][n];
float sum3=0;
for(j=i+1;j<=n;j++)
sum3+=a[i][j]*x[j];
x[i]=(a[i][n+1]-sum3)/a[i][i];
} //回代过程
for(i=1;i<=n;i++){
cout<<'x'<<i<<'='<<x[i]<<endl;
} //输出解向量
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -