谁知道以下程序是怎么运行的啊?“setw”是个什么函数?

来源:百度知道 编辑:UC知道 时间:2024/06/23 20:53:49
//examplech215.cpp
#include<iostream.h>
#include<iomanip.h>
void main()
{
int i,a1,a2;
a1=1;
a2=1;
for(i=1;i<=15;i++)
{
cout<<setw(10)<<a1;
cout<<setw(10)<<a2;
if(i%2==0)cout<<endl;
a1=a1+a2;
a2=a1+a2;
}
}

功能是显示一个数列:1,1,2,3,5,8,13,21……1579,2584
显示格式是:10个空格+a1值+10个空格+a2值+10个空格+a1新值+10个空格+a2新值(换行)
4个一行,估计要输7行半

详细来说,共循环15次,每次循环的内容如下:
用setw(10)输出10个空格,紧接a1的值,再用setw(10)输出10个空格和a2的值,判断i是否为偶数,是的话就就立即换行。
循环2次才换一次行,就控制了输出的结果格式。
接下来把 现a1,a2的值相加,形成a1,再把a1新值和a2值相加,形成新的a2.
就成了第一行的数列:后一个值是前2个值的和。

setw(10)功能就是输出10个空格。

关于endl:
endl和"\n"不同,"\n"只是简单换行;
endl是一个ostream操作符,它把一个换行符插入到输出流中,然后再刷新ostream缓冲区(刷新ostream缓冲区:立即送显到屏幕(或立即写入文件)。
缓冲方式下有时为了IO的效率,会在缓冲区容量到一定限度时才输出。
如果仅输出\n,在缓冲区未到输出上限或人为调用清缓冲区例程前字符不会显示出来。而用endl就立即输出缓冲区的内容~

setw()设置域宽 就是你的输出要占多少个字符
该程序是按域宽输出菲波那契数列。a1=a1+a2; a2=a1+a2; 是菲波那契数列的定义式,输出格式为:每数占10格,右对齐(不足的字符数在左侧补空格),每行4个数。