C++第10周项目3扩展参考——英尺到米的转换表

课程首页地址: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;
}

程序输出为:






posted on 2012-10-31 18:39  如果蜗牛有爱情  阅读(563)  评论(0编辑  收藏  举报

导航