看看这两个程序的执行结果有什么不同?
程序1:
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main(){
double a[5][5]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,100,100,100,100};//定义数组存放各点的电位值
int n=0; //存放迭代次数
double a1; //临时存放电位值
double b=1.0; //存放加速收敛因子
//cout<<"输入加速收敛因子:";
//cin>>b;
int flag=0; //存放布尔值判断迭代是否继续
while(flag==0){
flag=1;
for(int i=1;i<4;i++){
for(int j=1;j<4;j++){
a1=a[j];
a[j]=a[j]+b/4*(a[i-1][j]+a[j-1]+a[i+1][j]+a[j+1]-4*a[j]);
flag*=(fabs(a[j]-a1)<1e-5);
}
}
n+=1;
}
flag=0; //控制输出格式
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cout<<a[j]<<" ";
flag+=1;
if(flag%5==0)cout<<'\n';
}
}
cout<<"加速收敛因子为"<<b<<"的时候迭代次数为:"<<n<<endl;
cout<<'\n';
system("pause");
return(1);
}
程序2:
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
void main()
{
double a[5][5];//单位为V
int N,i,j,c;
double w=0.00001,js=1.0,a0,a1;
//cout<<"输入加速因子,1<=a<2"<<endl;
//cin>>js;
for(j=0;j<5;j++)//赋值循环,给定边值和域内各点初值
{
if(j<4){
for(i=0;i<5;i++)a[j]=0;
}
else for(i=0;i<5;i++)a[j]=100;
}
N=0;//迭代次数初值
do{//迭代循环
c=0;
for(i=1;i<4;i++)//迭代计算循环
{
for(j=3;j>0;j--)
{
a0=a[j];
a[j]+=js*(a[i+1][j]+a[j+1]+a[i-1][j]+a[j-1]-4*a[j])/4;
a1=a[j];
if(((a1-a0)<w)&&(a0-a1<w))c++;//计算在最大允许误差范围内的点的个数
}
}
N++;
}while(c<9);
cout<<"迭代次数:"<<N<<endl;//输出迭代次数
for(j=4;j>=0;j--)//输出循环
{
for(i=0;i<5;i++)cout<<setw(12)<<a[j]<<'\t';
cout<<endl;
}
}
只用看的。。。说出执行结果有什么不同。。试试吧!
[ 本帖最后由 d_d 于 2008-4-3 22:15 编辑 ]
搜索更多相关主题的帖子:
代码 大学生编程