【C语言打印“菱形”,(仅支持单数行数)】
程序员文章站
2022-05-28 11:08:15
...
代码
#include <stdio.h>
int main(){
//输入行数打印菱形
int i;
int n; //行数
printf("输入奇数行数,如5,7,9等数(偶数不能打印对称的菱形): \n");
scanf("%d",&n);
/* 寻找规律
printf(" *\n"); //1
printf(" ***\n"); //2
printf(" *****\n"); //3
printf(" *******\n"); //4
printf(" *********\n"); //5
printf("***********\n"); //6
printf(" *********\n"); //7
printf(" *******\n"); //8
printf(" *****\n"); //9
printf(" ***\n"); //10
printf(" *\n"); //11
*/
/* 同理,得到规律。
第1行: 5个空格, 1个*
第2行: 4个空格, 3个*
第3行: 3个空格, 5个*
第4行: 2个空格, 7个*
第5行: 1个空格, 9个*
第6行: 0个空格, 11个*
第i行: (n+1)/2-i个空格, *个数=2i-1;
第7行: 1个空格, 9个*
第8行: 2个空格, 7个*
第9行: 3个空格, 5个*
第10行: 4个空格, 3个*
第11行: 5个空格, 1个*
第i行: i-(n+1)/2 个空格, *个数=2*n-(2*i-1);
*/
for(i=1;i<=n;i++){
//每次循环打印一行
if(i<=(n+1)/2){
//打印空格,空格数是(n+1)/2-i
for(int j=0;j<(n+1)/2-i;j++){
printf(" ");
}
//打印*个数是2i-1
for(int j=0;j<2*i-1;j++){
printf("*");
}
}
if(i>(n+1)/2){
//打印空格,空格数是i-(n+1)/2
for(int j=0;j<i-(n+1)/2;j++){
printf(" ");
}
//打印*个数是2*n-(2*i-1)
for(int j=0;j<2*n-(2*i-1);j++){
printf("*");
}
}
//打印换行符
printf("\n");
}
return 0;
}
演示
(1)输入偶数时 如 16(不对称)
(2)输入奇数时 如 17(对称)