您的位置:首页 > 其它

for循环输出图形

2018-02-09 11:26 337 查看
编一程序显示如下图案:

____*

___***

__*****

_*******

*********

程序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 >> n;
for ( 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;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: