for循环输出图形

编一程序显示如下图案:

____*
___***
__*****
_*******
*********

程序1:

#include <iostream.h>
void main
{cout<<"____"<<"*";cout<<endl;
cout<<"___"<<"***";cout<<endl;
cout<<"__"<<"*****";cout<<endl;
cout<<"_"<<"*******";cout<<endl;
cout<<"*********";cout<<endl;
}
???

程序算法分析:  选用for循环

for ( i=1; i<=5; i++ )   // 控制行数
{
     //有了这个外壳后,中间每一行可用for语句来控制空格数和星号数。
   cout<<endl;         // 控制换行

}

关键问题: 如何实现控制 ?

分析图案得
 
行号I  空格数K          星号数J

1                  4                     1     (初始行)
2                    3                      3
3                    2                      5
4                    1                     7
5                    0                     9            (结束行)

观察:空格数和星号数分别与行号存在一定的线性关系。


空格数: 设空格数为 k ,  有   k <= 5-i ;      i为行号
星号数: 设星号数为 j ,   有   j <= 2*i –1;

程序2

#include <iostream.h>
void main()
{ int i, j, k ;
  for ( i=1; i<=5; i++ )       // 控制行数
   {

for ( k=1; k<=5-i;   k++ ) cout <<" " ;  // 输出空格数
      for ( j=1; j<=2*i-1; j++ ) cout << "*" ; // 输出星号数
      cout<<endl;
   }
}

程序3( 通用程序,输出n 行 )

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <iostream.h>
 void main()
 { int i, j, k ,n; cin >> nfor ( i=1; i<=n; i++ ) // 控制行数 { for ( k=1; k <= n - i; k++ ) cout <<" " ; // 输出空格数 for ( j=1; j <= 2*i - 1; j++ ) cout << "*" ; // 输出星号数 cout<<endl; } }

结论:1、存储结构: 用3个变量分别控制行号、输出空格数、输出星号数;

2、利用了3个变量之间的线性关系;

思考:编写一函数,函数的功能是实现通用程序输出由参数给定任意字符组成的n (参数给定)行图型。

递归法

  

  • #include <stdio.h>
  • using namespace std ;
  • void count(int p, int t) {
  •     int i;
  •     if (p <= 0) return;
  •     for (i = 1; i <= p; i++) cout << " ";
  •     for (i = 1; i <= t; i++) cout << "*";
  •     cout << endl;
  •     count (--p, t+=2);
  • }
  • int main() {
  •     count (5, 1);
  •     return 0;
  • }

猜你喜欢

转载自blog.csdn.net/correlate/article/details/79296750
今日推荐