昨天搜了下“打印沙漏”的代码,找到的代码注释都好少啊!身为一个菜鸟,看那种没有注释的代码体验实在太糟糕了。于是我决定做一个注释多、条理清晰的“打印沙漏”。
思路:
1、简化问题,把问题分解成5个部分(因为题目有时间限制,所以没有使用函数)。
分别是:计算三角形行数(不带尖角)、输出上三角形(不带尖的)、输出三角形的尖、输出下三角、输出剩下的字符数。
2、逐步实现每部分的功能。
代码:
#include <stdio.h>
int main(){
int number;//输入符号的个数
char mark;//输入的符号
int i,j,z;//计数变量
int cnt = 0;//计数器:行数
int ood = 3;//奇数个数
scanf("%d %c",&number,&mark);//输入一个数和字符,以空格分隔
if(number == 1){//当输入1时执行
printf("%c\n", mark);
printf("0");
}
else{
/*求出三角形行数(不包含尖)*/
while(number - 1 >= ood * 2){
number -= ood * 2;
cnt++;
ood += 2;
}
ood -= 2; //减去最后一轮的加二
/*打印上三角 (不包含尖)*/
for( i = 0; i < cnt; i++ ){
for( j = 0; j < i; j++ ){//打印空格
printf(" ");
}
for( z = i * 2; z < ood; z++ ){//打印符号
printf("%c", mark);
}
printf("\n");
}
/*打印尖*/
for( i = 0; i < cnt; i++ ){
printf(" ");
}
printf("%c\n", mark);
/*打印下三角*/
for( i = 0; i < cnt; i++){
for( j = i + 1; j < cnt; j++ ){//打印空格
printf(" ");
}
for( z = 0; z < 3 + i * 2; z++ ){//打印字符
printf("%c", mark);
}
printf("\n");
}
/*打印剩下的字符数*/
printf("%d",number - 1);//再减去一个尖
}
}
不足之处敬请斧正,谢谢!