C语言程序设计(第三版)何钦铭著 习题4-9
题目
打印菱形星号" * “图案。输入一个正整数n(n为奇数),打印一个高度为n的” * "菱形图案。例如,当n为7时,打印出以下图案。试编写相应程序。
分析过程
输入
条件:输入一个正整数n(n为奇数)
输出
条件:输出打印一个高度为n的" * "菱形图案
分析
假设n=7,i从1开始
前一半金字塔:(前n/2+1行)
第一行 6=32个空格 1个" "
第二行 4=22个空格 3个" "
第三行 2=12个空格 5个" "
…
可以推断出:第i行开头有(n/2+1-i)2个空格;有2i-1个" "
后一半金字塔:(后n/2行)
第一行 2个空格 5个"* "
第二行 4个空格 3个"* "
第三行 6个空格 1个"* "
…
可以推断出:第i行开头有2i个空格;有n-2i个"* "
代码
#include <stdio.h>
#include <math.h>
int main () {
/*定义变量*/
int n; /*定义变量,存储输入的正整数n*/
int i,j,k;
/*赋值*/
printf("请输入正整数n:\n"); /*输入提示*/
scanf("%d \n", &n); /*输入并赋给变量*/
/*计算*/
for (i = 1; i <= n/2+1; i++) { /*输出前一半金字塔*/
for(j=1; j <= (n/2+1-i)*2; j++) printf(" "); /*第i行前有(n/2+1-i)*2个空格*/
for(k=1; k <= (2*i-1); k++) printf("* "); /*第i行前有2i-1个“* ”*/
printf("\n");
}
for (i = 1; i <= n/2; i++) { /*输出后一半金字塔*/
for(j=1; j <= 2*i; j++) printf(" "); /*第i行前有2*i个空格*/
for(k=1; k <= (n-2*i); k++) printf("* "); /*第i行前有n-2i个“* ”*/
printf("\n");
}
return 0;
}