编一程序显示如下图案:
____*
___***
__*****
_*******
*********
程序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;
-
}