C++第7周任务3-输出星号图详解示例

  任务要求见http://blog.csdn.net/sxhelijian/article/details/8045279,本文以输出下面的星号图为例,再次体会“自顶向下,逐步求精”的设计过程。

  要输出的星号图是:

  

  将一个图,看作为6行,完成了第一级的分解,提到的算法框架为:

i=1;
While(i<=6)  //需要输出6行
{
  输出第i行;
  换行;
  ++i;
}

  对于“输出第i行”的任务,可以进行细化:

先输出若干空格(多少个空格?第1行0个,第2行1个,第3行2……第6行5个);
再输出若干个星号(多少星号?第一行11个,第2行9个……第6行1个)

  其实把空格数和星号数和表示行数的变量 i 挂起钩来,上面的“若干个”可以用 i 表示出来,简单地做些推算可以写出式子。

  对于“输出第i行”的任务,可以进行细化:

先输出 i-1 个空格;
再输出 2*(6-i)+1 个星号;

  于是,算法就是:

i=1;
While(i<=6)  //需要输出6行
{
  //输出第i行
  先输出 i-1 个空格;
  再输出 2*(6-i)+1 个星号;
  换行;
  ++i;
}

  将输出若干个空格/星号等写成代码,得到了下面的代码

//参考解答一
#include <iostream>
using namespace std;
int main( )
{
	int i,j;
	i=1;
	while(i<=6)  //需要输出6行
	{
		//输出第i行
		for(j=1; j<=i-1; ++j)
			cout<<" ";
		for(j=1; j<=2*(6-i)+1; ++j)
			cout<<"*";
		cout<<endl;
		++i;
	}
	return 0;
}

  下面给出程序的另一种写法,其中引入了两个变化:(1)三角的行数可以由变量n控制;(2)最外层控制输出n行的循环改为了for循环,实际上,内层的循环用while也无不可。

//参考解答二
#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=15; //用n来灵活对待可能的行数
	for(i=1;i<=n;++i)  //将上一种解法中的while循环改造为for循环
	{
		//输出第i行
		for(j=1; j<=i-1; ++j) //内层的这个for循环可以写作while循环
			cout<<" ";
		for(j=1; j<=2*(n-i)+1; ++j) //这儿也可以用其他循环,可尝试改造
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

  下面的程序采用的是让控制循环的变量由大变小(与三角上大下小呼应)的思路,相应地,只需要改变控制空格数和星号数的式子即可

//参考解答三
#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;
	for(i=n;i>=1;--i) //i由大变小
	{
		//输出第i行
		for(j=1; j<=n-i; ++j) //关键:输出的是n-i个空格
			cout<<" ";
		for(j=1; j<=2*i-1; ++j) //关键:输出的是2*i-1个星号
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

  其他的星号图,思路类似,相信同学们可以独立做出来。

  

时间: 2024-09-16 07:53:03

C++第7周任务3-输出星号图详解示例的相关文章

C++第7周任务3-输出星号图全解

求解思路请参考http://blog.csdn.net/sxhelijian/article/details/8059505. 下面是任务http://blog.csdn.net/sxhelijian/article/details/8045279中所有星号图的参考解答.分别只给出一种参考,读者可以写出更多的其他解答. (1) 要输出的是: 代码: #include <iostream> using namespace std; int main( ) { int i,j,n=6; for(i

C++程序设计实践学材系列(21)——1.5.1 引入循环——输出星号图

回到系列文章的目录--[系列文章目录] 回到本章目录--[第1章目录] 1.5.1 引入循环--输出星号图 例 1.5 编程序,输出8个星号(即'*'),如下图 这个容易,也就输出一行信息. 可以写出程序: //例程ch1-9.cpp #include <iostream> using namespace std; int main() { cout<<"********"<<endl; return 0; } 现在问题变为,输出50个呢?你可以一边

C++实践参考解答 输出星号图

[项目:输出星号图]自选下面的几个图案,编程序输出(自选两个完成,其他的想想思路即可).   (c)"向下的等腰三角"详解 将一个图,看作为6行,完成了第一级的分解,设计的算法框架为: i=1; While(i<=6) //需要输出6行 { 输出第i行; 换行: ++i: } 对于"输出第i行"的任务,可以进行细化: 先输出若干空格(多少个空格?第1行0个,第2行1个,第3行2--第6行5个): 再输出若干个星号(多少星号?第一行11个,第2行9个--第6行1

C++第12周项目1——重温星号图

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目1-调用函数输出星号图] 这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能,打下基础. 任务1:补充完下面的程序,使程序输出上面的两个星号图,要求在main()函数中调用自定义函数printstars(). 要求:左图必需实现,右图尝试实现. 输出左图的参考解答: //for循环中调用函数printstars的程序

php echo 输出字符串函数详解_php基础

复制代码 代码如下: echo "asd";//字符串 echo "ads$c";//字符串+变量 echo 'ads$c';//字符串 asd$c $c不是变量 echo "sd"."vs"; echo "sd","vs"; echo $a; echo $a.$b; echo $a,$b; echo $a.$b.$c; echo $a,$b,$c; echo "kaskd{$

js控制台输出的方法(详解)_javascript技巧

console.log(object[, object, ...]) 在控制台输出一条消息.如果有多个参数,输出时会用空格隔开这些参数. 第一个参数可以是一个包含格式化占位符输出的字符串,例如: console.log("The %s jumped over %d tall buildings", animal, count); 上面的例子可以用下面的无格式化占位符输出的代码替换: console.log("The", animal, "jumped ov

php对csv文件的读取,写入,输出下载操作详解_php技巧

复制代码 代码如下: <?php       $file = fopen('text.csv','r');     while ($data = fgetcsv($file)) {    //每次读取CSV里面的一行内容      //print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可   $goods_list[] = $data;    }//print_r($goods_list);echo $goods_list[0][1];    fclose($fi

2014秋C++第11周项目1参考-函数版星号图

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目1-函数版星号图]这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能.(1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printsta

C++程序设计实践学材系列(24)——1.5.4 输出各种星号图

回到系列文章的目录--[系列文章目录] 回到本章目录--[第1章目录] 1.5.4 输出各种星号图 我们实践"自顶向下,逐步求精"的思维,设计和实现一些更好玩的星号图,也进一步建立循环的概念. 例1.8 编程序,输出如下的星号图 对这个"囫囵"的星号图,我们略加分解一下,可以发现一个星号图是由若干行构成,于是"求精"的结果是"输出一个星号图就是要输出若干行",接下来再考虑的"输出某一行"的问题. 在&quo