编程总结
7-1 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
1)实验代码:
#include <stdio.h>
int main(void)
{
int N,number,temp,a,sum,count,i,j;
char ch;
temp=7;a=3;
scanf("%d %c",&N,&ch);
if(N>1000||N<1) return 0;
if(N<temp&&N>=1){
printf("%c\n",ch);
count=N-1;
}
else{
do{
if(N>=temp){
if(N<(temp+(a+2)*2)){
break;
}else if(N==(temp+(a+2)*2)){
temp=temp+(a+2)*2;
a=a+2;
break;
}else{
temp=temp+(a+2)*2;
a=a+2;
}
}
}while(1);
sum=a;
number=(a/2);
for(i=0;i<number;i++){
for(j=0;j<sum-a-i;j++){
printf(" ");
}
for(j=0;j<a;j++){
printf("%c",ch);
}
printf("\n");
a=a-2;
}for(i=number;i>=0;i--){
for(j=0;j<sum-a-i;j++){
printf(" ");
}
for(j=0;j<a;j++){
printf("%c",ch);
}
printf("\n");
a=a+2;
}
count=N-temp;
}
printf("%d",count);
return 0;
}
2)设计思路:
第一步:首先要定义自己需要的变量,
第二步:观察完图形,发现是对称图形,要打印漏斗最少需要七个三行;
第三步:要确定打印漏斗所需要的符号数和你给定符号能打印了多少,还剩多少。
第四步:打印漏斗的上部分和下部分,进行换行。
3)遇到的问题:
刚开始判断不了怎么打印第二部分,对漏斗形状的打印不是很熟;
4)解决方法:网上查找去找到解题思路,请教了大佬。
5)错误截图: