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个)

  其实把空格数和星号数和表示行数的变量 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;
}

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

所有三角全解参考:

(1)

要输出的是:

代码:

#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;
	for(i=n;i>=1;--i) //一共要输出n行
	{
		//输出第i行
		for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

(2)

要输出的是:

代码:

#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;
	for(i=1;i<=n;++i) //一共要输出n行
	{
		//输出第i行
		for(j=1; j<=n-i; ++j) //输出n-i个空格
			cout<<" ";
		for(j=1; j<=i; ++j) //输出i个星号
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

(3)

要输出的是:

代码:

#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;
}

(4)

要输出的是:

代码:

#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;
	for(i=1;i<=n;++i) //一共要输出n行
	{
		//输出第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;
}

(5)

要输出的是:

代码:这一个稍微麻烦一些在于,第1行和最后一行单独处理,而中间的n-2行则有规律:若干空格、1个星号、若干空格、1个星号

#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;
	//输出第一行:n-1个空格和1个星号并换行
	for(j=1; j<=n-1; ++j) //输出n-i个空格
		cout<<" ";
	cout<<"*"<<endl;

	//再输出中间的n-2行
	for(i=2;i<=n-1;++i) //一共要输出n-2行
	{
		//输出第i行
		for(j=1; j<=n-i; ++j) //输出n-i个空格
			cout<<" ";
		cout<<"*";  //再输出一个星号
		for(j=1; j<=2*i-3; ++j) //然后输出2*i-3个空格
			cout<<" ";
		cout<<"*"<<endl; //输出一个星号后本行结束,换行
	}

	//输出最后一行:2*n-1个星号
	for(j=1; j<=2*n-1; ++j)
		cout<<"*";
	cout<<endl;
	return 0;
}

(6)

要输出的是:

参考代码:

#include <iostream>
using namespace std;
int main( )
{
	int i,j,n=6;  //n代表上三角行数
	//先输出上三角
	for(i=1;i<=n;++i) //输出n行
	{
		//输出第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;
	}
	//下面输出下三角
	for(i=1;i<=n-1;++i) //输出n-1行
	{
		//输出第i行
		for(j=1; j<=i; ++j) //输出i个空格
			cout<<" ";
		for(j=1; j<=2*(n-i)-1; ++j) //输出2*i-1个星号
			cout<<"*";
		cout<<endl;
	}
	return 0;
}
时间: 2024-10-24 16:33:34

C++实践参考解答 输出星号图的相关文章

《C语言及程序设计》实践参考——函数版星号图

返回:贺老师课程教学链接  项目要求 [项目1-函数版星号图]这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能.(1)补充完下面的程序,使程序输出星号下面的星号图: #include <stdio.h> void printstars(int m) //定义能输出一行m个星号的函数 { int j; for (j=1; j<=m; ++j) printf("*"); } int main( ) { int n=6;

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个呢?你可以一边

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

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

C++实践参考解答 穷举法解决组合问题

[项目:穷举法解决组合问题](自选两题完成,其他的想一想即可.当然,全做完收效更好)先阅读例题,领会穷举法(意为"穷尽式列举",也称枚举)的思想,然后自行选题进行解决,掌握这种程序设计的一般方法. 例题:小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法? 问题分析与算法设计:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数.首先对五本书从1至5进行编号,然后使用穷举的方法.假设三个人分别借这五本书中的一本,当三个人所借的书的编

C++实践参考解答:我的数组类

[项目-我的数组类] 阅读程序,请完成成员函数的定义,因为存在指针型的数据成员,注意需要深复制的构造函数. #include<iostream> using namespace std; class MyArray { private: int *arrayAddr; //保存一个有len个整型元素的数组的首地址 int len; //记录动态数组的长度 int max; //动态数组中的最大值(并非动态数组中必须要的数据成员) public: MyArray(int *a, int n);

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

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

2013-C++第11周项目参考解答链接集

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 完整题目见:http://blog.csdn.net/sxhelijian/article/details/14109337 [项目1-调用函数输出星号图] 参考解答见:http://blog.csdn.net/sxhelijian/article/details/14548417 [项目2-求最大公约数]输入两个数,并求出其最大公约数 [项目2扩展-求四数的最大公约数]

2013-C++第7周项目参考解答链接集

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 完整题目见:http://blog.csdn.net/sxhelijian/article/details/12356657 [项目1]简单计算问题体验 参考解答见:http://blog.csdn.net/sxhelijian/article/details/12710137 输入底面半径r和高h,输出圆柱体的表面积. 样例输入:3.5  9 样例输出:Area = 2

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

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