第11周 上机报告 2:英尺到米的转换表

题目要求:编程序生成一张从英尺到米的转换表(1米大约等于3.28英尺),以方便工厂里工人师傅使用。输出形式如下图所示,第i行第j列的值vij代表i*10+j英尺对应的米数。每输出10英尺的转换表后,另起一行输出。


I2M


0


1


2


3


j


5


6


7


8


9


0


0


0.3


0.61


0.91


1.22


1.52


1.83


2.13


2.44


2.74


1


3.05


3.35


3.66


3.96


4.27


4.57


4.88


5.18


5.49


5.79


2


 


 


 


 


 


 


 


 


 


 


3


 


 


 


 


 


 


 


 


 


 


i


 


 


 


 


vij


 


 


 


 


 


5


 


 


 


 


 


 


 


 


 


 


6


 


 


 


 


 


 


 


 


 


 


7


 


 


 


 


 


 


 


 


 


 


8


 


 


 


 


 


 


 


 


 


 


9


 


 


 


 


 


 


 


 


 


30.18

 一共要输出11行,第一行特殊,是“表头”,需特殊处理,其他行需要计算。所以程序分为两个部分:

(1)输出第一行;
(2)输出后面的10行;

可是有人就要将第一行与后10行搅在一起做,中间还加了if等判断;后来,行号i与计算中需要用到的运算量不对应了,产生了更复杂的计算,自找苦吃。
多想想自顶向下,要先有宏观的框架。

下面解决“(1)输出第一行”的问题
可以一个cout解决。简单,不漂亮,好象没有学过循环的样子。
写作下面的样子,不难。

cout<<"I2M\t";

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>

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";   //输出行号

    for(j=0;j<=9;j++)

    {

      vij=(i*10+j)/3.28;

      cout<<vij<<"/t";  

    }

    cout<<endl;

  }

  cout<<"不容易吗? 要头脑清楚地做,别碰运气。";

}

可见,核心就是后一个循环嵌套。用while做行不行?事实上,很多同学就是用while做的,显然稍显麻烦。
不管你以前如何做的,再做一遍,原先用for现用while,原先while,现用for。折腾出真知。

看到程龙等同学的一个好解法(他们用了数组,其实不必),后10行的输出只用一个循环,且思路也很明确,程序很漂亮。我稍加改动,给大家参考:

#include <iostream>

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<=99;i++) //后10行要输出100个数据

  { 

    if(i==0) cout<<endl<<(i/10)<<"/t"; //简直妙不可言,换行、行号,在这一刹那,刀起头落

    cout<<(i/3.28)<<"/t";  

  }

  cout<<endl<<"后生可畏也!";

}

说明:本程序未考虑输出格式是否整齐的问题,同学们自己参考书中P53页输入输出控制流部分调整。 

 

时间: 2024-09-17 01:59:33

第11周 上机报告 2:英尺到米的转换表的相关文章

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英尺的转换表后,另起一行输出.为使输出

第11周 上机报告 1:累加

上机题目:用各种方法求f=1-1/2!+1/3!-...+1/9!,并且要写在一个程序中. 目的在于锻炼各种循环. 提倡大家优先用for循环.计数型循环很方便,要习惯. 看题目,有点难度.题目显然将大家难住了.老师有责任,给大家跨度大了.大家要快进步,中间的招数你都领教过了,只不过现在要综合起来. 我带着大家把这个问题分解一下,由易到难解出来. *********************问题的解决************************ (一)先做一个简单程序:f=1+2+...+9 太

C02-程序设计基础提高班(C++)第11周上机任务-运算符重载

第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) [任务1]实现复数类中的运算符重载定义一个复数类重载运算符+.-.*./,使之能用于复数的加减乘除.(1)方案一:请用类的成员函数完成运算符的重载: class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Comple

第12周 上机报告 1之练习3 回文日

题目:很诱人的一个题目:2011年11月02日是一个回文日:2011 1102,我们刚刚度过!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的--).注意:一年只有12个月. 2012年11月30日新发的程序: #include <iostream> using namespace std; int main( ) { int year,month,day,y,anothery; bool is_cycle; int count=0; for(year = 2012; y

C03-Java同步实践加强班第11周上机任务

[感谢胡光老师提供题目] (回到C03-Java同步实践加强班学习安排) 1.编写一个算术测试小软件.程序组成:编写 一个Teacher类负责给出算术题目,随机给出两个整数并进行运算,并判断回答者的答案是否正确:编写一个GUI类ComputerFrame,回答者可以通过GUI看到题目并给出答案:编写一个程序执行入口运行该软件.GUI界面如下所示.  2.模拟一个信号灯的软件.在JFrame的北面添加一个下拉列表,该下拉列表有"默认无信号"."红灯"."绿灯

C02-程序设计基础提高班(C++)第9周上机任务-类和对象

第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下面的程序后,按要求编制新的成员函数,并增加类的功能 #include <iostream> using namespace std; class Time { public: void set_time( ); void show_time( ); private: bool is_time(in

C++程序设计-第七周上机实践项目

回到课程主页,链接:C++程序设计课程主页-2012级 本周教学内容:第1章   C++的初步知识.通过两个典型的程序(求大值和输出星号图),获得分支和循环结构程序设计的直接体验,使学生能够通过模仿,编写出类似的程序. 上机目的:初步体验分支结构和循环结构的程序设计 上机内容:(1)求两个正整数的正差值:(2)输出四个整数中的最大值:(3)输出各大式星号图. 项目1:分支结构程序设计体验 (1)阅读课件中"给两个数,求两数中的大者"例子,结合对课堂讲授内容的理解,仔细领会让计算机进行判

C02-程序设计基础提高班(C++)第7周上机任务-指针

第7周:阅读教材第6章(p164-200),主要内容是指针,完成第7周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践内容: 1. (数组的排序) 按模板中的要求,用指向数组的指针变量作为形式参数编写函数,完成冒泡排序.重点体会:(1)冒泡排序算法:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形式参数中不指定数组大小,实际数组的大小也一并作为参数传递. #include <io

2013级C++第11周(春)项目——通过继承拥有基类的资源

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 (注:本课资料由第9周直接到第11周,因为第10周是我校春假期,全校休课.春假,实际是五一.清明.端午打包一起休息,这亲戚的做法对按周安排活动的学校更好一些.) 第一部分 程序阅读 程序阅读1:  #include<iostream> using namespace std; class A { private: int x; protect