课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
【项目3扩展(选做)】编程序生成一张从英尺到米的转换表(1米大约等于3.28英尺),以方便工厂里工人师傅使用。输出形式如下图所示,罗列了从0英尺到99英尺对应的米数,即第i行第j列的值vij代表i*10+j英尺对应的米数。例如,通过下图所示,我们可以方便地查到17英尺相当于5.18米。只输出内容即可,不用考虑表格线。
提示:每输出10英尺的转换表后,另起一行输出。为使输出美观,可以在各项中间用’\t’分隔,或者用课本p53讲的输入输出控制流。再扩展,你还可以输出真正的表格。
观察一共要输出11行,第一行特殊,是“表头”,需特殊处理,其他行需要计算。
采用“自顶向下、逐步求精”的思路,程序分为两个部分:
(1)输出第一行; (2)输出后面的10行;
可是有人就要将第一行与后10行搅在一起做,中间还加了if等判断;后来,行号i与计算中需要用到的运算量不对应了,产生了更复杂的计算,自找苦吃。
多想想自顶向下,要先有宏观的框架。
下面解决“(1)输出第一行”的问题
可以一个cout解决。简单,不漂亮,好象没有学过循环的样子。
写作下面的样子,不难。
cout<<"I2M\t"; //Inch2Meter的缩写,米到英尺,2念作to for(i=0;i<=9;i++) cout<<i<<"\t"; cout<<endl; //为下面的工作先做点贡献,保证以后的输出从新的一行开始
再解决“(2)输出后面的10行”的问题
一共输出10行嘛,行号定为从0到9,又是一个典型的“计数型”,就用0到9,有
for(i=0;i<=9;i++) { (2.1)输出第i行; 换行; //cout<<endl;就可以了 }
对于“(2.1)输出第i行;”,每行先输出行号,再接着10个计算得到的数值,又是计数型的循环
cout<<i<<"/t"; //输出行号 for(j=0;j<=9;j++) { vij=(i*10+j)/3.28; cout<<vij<<"/t"; //可以不用vij变量,而是直接在cout中写表达式(i*10+j)/3.28,但用vij更漂亮 }
就这样了,问题就这样解决了。具体写程序时,考虑到输出需要对齐,
完整的参考代码如下:
#include<iostream> #include<iomanip> //用于支持格式控制 using namespace std; int main() { int i,j; //i,j用作计数,整型最好 double vij; //vij用小数,用成int自找苦吃 // (1)输出第一行; cout<<"I2M\t"; for(i=0;i<=9;i++) cout<<i<<"\t"; cout<<endl; //为下面的工作先做点贡献,保证以后的输出从新的一行开始 //(2)输出后面的10行; for(i=0;i<=9;i++) //前面的i的使命已经完成,在此可以挪作他用,但必须赋好初值 { cout<<i<<"\t"; //输出行号 cout<<setprecision(4); //设置输出精度为4 for(j=0;j<=9;j++) { vij=(i*10+j)/3.28; cout<<vij<<"\t"; } cout<<endl; } cout<<"不容易吗? 要头脑清楚地做,别碰运气。"<<endl; }
程序输出为: