编程总结
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)错误截图: