用C++打印实心菱形

打印实心菱形
题目描述
打印 n 阶实心菱形
输入描述
输入一个整数n,0 < n <= 10
输出描述
输出 n 阶实心菱形 , 占 2*n-1 行
样例输入
 
3
样例输出
   *

  ***

 *****

  ***

   *

以下是我的样例
语言:C++
环境:Microsoft Visual C++ 2010


#include<iostream>
using namespace std;
int main(){
int n; 
while(1){ //先确保输入的n为合法的值
cout << "请输入一个整数n,范围是0<n<=10: ";
cin >> n;
cout << endl;
//如果输入的不是数字,或超出范围,则重新输入
if((cin.fail()) || (n<1 || n>10)){  
cout << "请输入一个整数n,范围是0<n<=10: ";
//为了避免缓存里的数据流导致死循环,这里加了如下两行代码
cin.clear(); //更改状态标识符 
cin.sync(); //清空缓存区的数据流
cin >> n;
cout << endl;
}else{
break;
}
}
cout <<endl << "以下是输出" << n << "阶的空心菱形" << endl << endl;
/*
假如n=3   这是上面的正三角的方法 
i是行,j是空格,k是*
i=1:
j=n-1=2;k=(i*2-1)=1;
i=2:
j=n-2=1;k=(i*2-1)=3;
i=3:
j=n-3=0;k=(i*2-1)=5;
*/
for(int i=1;i<=n;i++){ //上面一共几层,如果n=3, 则上面一共3层
for(int j=0;j<=(n-i);j++){ //输出空格
cout << " ";
}
for(int k=0;k<(i*2-1);k++){
cout << "*";
}
cout << endl;
}
/*
假如n=3 这是下面的倒三角的方法 总共有2*n-1层,上面是n层,下面则为n-1层
i是行(条件是i<n-1),j是空格(条件是j<=i),k是*
i=1:
j=1;
k=(2n-1)-2i=(2*3-1)-2*1=5-2=3;
i=2:
j=1,2
k=(2n-1)-2i=(2*3-1)-2*2=5-4=1;
*/
for(int i=1;i<=(n-1);i++){ //总共有n-1层
for(int j=0;j<=i;j++){ //输出空格
cout << " ";
}
for(int k=0;k<((2*n-1)-(2*i));k++){
cout << "*";
}
cout << endl;
}
cout << endl;
return 0;
}