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

简介:   任务要求见http://blog.csdn.net/sxhelijian/article/details/8045279,本文以输出下面的星号图为例,再次体会“自顶向下,逐步求精”的设计过程。  要输出的星号图是:    将一个图,看作为6行,完成了第一级的分解,提到的算法框架为:i=1;While(i<=6) //需要输出6行{ 输出第i行; 换行;

  任务要求见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-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;
}

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


  

目录
相关文章
|
3月前
|
编译器 C++
C++模板之——类模板详解及代码示例
C++模板之——类模板详解及代码示例
C++模板之——类模板详解及代码示例
|
3月前
|
C++
C++模板之——函数模板详解及代码示例
C++模板之——函数模板详解及代码示例
C++模板之——函数模板详解及代码示例
|
3月前
|
C++
C++多态详解及代码示例
C++多态详解及代码示例
|
30天前
|
存储 算法 Java
【C/C++ 线程池设计思路】 深入探索线程池设计:任务历史记录的高效管理策略
【C/C++ 线程池设计思路】 深入探索线程池设计:任务历史记录的高效管理策略
74 0
|
30天前
|
安全 Java 调度
【C/C++ 线程池设计思路 】设计与实现支持优先级任务的C++线程池 简要介绍
【C/C++ 线程池设计思路 】设计与实现支持优先级任务的C++线程池 简要介绍
44 2
|
30天前
|
存储 安全 C语言
C++中灵活 处理可变参数的多种方式:优缺点、应用场景及示例对比
C++中灵活 处理可变参数的多种方式:优缺点、应用场景及示例对比
75 1
|
1月前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
70 2
|
3月前
|
网络协议 C++
C++异步网络库workflow入门教程(1)HTTP任务
创建任务方法原型 在workflow中所有的客户端任务都放在`WFTaskFactory`工厂类中 + `url:`请求的http url + `redirect_max:`表示最大重定向次数。如果在请求过程中遇到重定向,该参数指定了最多允许重定向的次数。 + `retry_max`:表示最大重试次数。如果请求失败,该参数指定了最多可以重试的次数。 + `callback`:这是一个回调函数的指针,用于处理请求的响应。原型为`using http_callback_t = std::function
68 0
|
3月前
|
C++
C++多态之虚函数表详解及代码示例
C++多态之虚函数表详解及代码示例
|
3月前
|
编译器 C++
C++运算符重载详解及代码示例
C++运算符重载详解及代码示例