c++打印实心菱形

题目描述

打印 n 阶实心菱形

输入描述

输入一个整数n,0 < n <= 10

输出描述

输出 n 阶实心菱形 , 占 2*n-1 行

样例输入

3

样例输出

  *
 ***
*****
 ***
  *
#include "stdafx.h"
#include 
using namespace std;
int main() {
	int i, j, k, side;
	cin >> side;
	//以最长横行为界限,先打印出上边的side行
	for (i = 1;i<= side;i++)
	{
		for (j = 1;j<= side - i;j++)//控制要打印的空格数,最多不超过side-1个
			printf(" ");
		for (k = 1;k <= 2 * i - 1;k++)//控制要打印的星号数,最多为2*side-1个
			printf("*");
		printf("\n");
	}
	//打印下边的side-1行
	for (i = 1;i <= side - 1;i++)
	{	
		//控制要打印的空格数,最少为0,最多为side-1个;因为在外层循环已经做过-1处理,所以此处不必再次进行重复操作。
		for (j = 1;j <= i;j++)
			printf(" ");
		for (k = 1;k <= (side - i) * 2 - 1;k++)//控制要打印的星号数,最少为1个,最多为2*side-3个。
			printf("*");
		printf("\n");
	}

	system("pause");//显示“请按任意键继续……”,用以解决vs执行程序后,命令行闪退问题。
	return 0;
	}

 总结:

  1. 打印菱形的代码逻辑要使用双重循环解决,单层循环无法控制两个平行的循环在输出同一行中的多次换行。所以,要将换行的问题交由外层循环来解决。
  2. 单个for循环只能做固定次数的输出,不能兼具改变次数与循环打印功能。所以,内层循环要借助外层循环的变量,来巧妙的控制内层循环的打印次数。
  3. 从整体思路来看,要先根据题意着手2*n-1行的分配(外层循环),再考虑每行的不同情况(内层循环),思路清晰,更利于题目的解答。

 

 

 

 

你可能感兴趣的:(c++,代码题)