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

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


      

  • 相关阅读:
    ES进阶--01
    JVM--02
    JVM--01
    ES--08
    ES--07
    ES--06
    python实现当前主机ip 主机名称的获取
    djang中的blank=True 和null = True的区别
    python中yield的用法详解
    python 编写古诗赤壁赋
  • 原文地址:https://www.cnblogs.com/hehe520/p/6142688.html
Copyright © 2020-2023  润新知