编一程序显示如下图案:
____*
___***
__*****
_*******
*********
程序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 <stdio.h>
int main() {
int i, j, k ;
// 控制行数
for ( i=1; i<=5; i++ ) {
for ( k=1; k<=5-i; k++ ) {
// 输出空格数
printf(" ");
}
for ( j=1; j<=2*i-1; j++ ) {
// 输出星号数
printf("*");
}
printf("\n");
}
}
程序3:( 通用程序,输出n 行 )
#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;
}
本文介绍了一个使用 C++ 实现的简单程序,该程序可以生成特定的星号图案。通过分析图案规律,利用 for 循环及变量间的线性关系控制输出的空格数和星号数,实现了图案的动态生成。此外,还提供了一个通用程序用于输出任意数量行的图案。
3万+

被折叠的 条评论
为什么被折叠?



