C/C++,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 <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;
}

 

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页