题目一:打印沙漏
1)代码截图
#include <stdio.h> int main(void) { int m,s=1,i=1; s为字符数 char op; scanf("%d %c",&m,&op); while(s<=m) { s=s+2*(2*(i+1)-1); if(s<=m) i++; } int j,n; for(j=0;j<i;j++) { for(n=0;n<j;n++) { printf(" "); } for(n=0;n<2*(i-j)-1;n++) { printf("%c",op); } printf("\n"); } for(j=2;j<=i;j++) { for(n=0;n<i-j;n++) { printf(" "); } for(n=0;n<2*j-1;n++) { printf("%c",op); } printf("\n"); } printf("%d",m-(s-2*(2*(i+1)-1))); }
2)设计思路
这个题目首先要利用数学知识的等差数列找出规律,明显沙漏上下输出的符号是对称的。这个规律没有找出来,在百度上搜索后面才知道。把规律找出来后用while语句来判断字符·的·函数,利用for语句来计算和统计字符的数量,最后要注意的是,即使是没有用完的字符也要在最后一行全部输出即可
3)本题调试过程中遇到的问题及解决方案
问题一:忘记把剩余的字符输出
问题一的解决方案:将几个测试点拿出来调试,不断的输入数字比对答案才发现错误地方
4)运行结果截图