题目
输入一个半径,用"*"打印这个半径的圆。
思路
每行打印两个点"*"。问题的关键是找到每行这两个"*"的位置,然后打印。
怎么找某行"*"的位置?假设当前在第i行(1<=i<=2r),那么:
第一个点的位置为:
第二个点的位置是:
每行,从第一个点循环到最后一个点(从j=1,循环到j =2r),一旦找到这两个点(即找到 j等于上面列出的两个点的位置),就打印。
代码
# include <stdio.h> # include <math.h> /* * print_circle: 打印半径为r的圆 *@r: 圆的半径 */ int print_circle( int r) { /*每行打印两个点'*' point1_1: 第一个点上一行打印的位置,point1_2: 第一个点上上行打印的位置; point2_1: 第一个点上一行打印的位置,point2_1: 第一个点上上行打印的位置; */ int point1_1 = -1, point1_2 = -1, point2_1 = -1, point2_2 = -1; /*一共有2r行*/ for (int i = 0; i <= 2* r; i++){ /*每行打印两个星'*'*/ for(int j = 1; j <= 2 * 2 * r; j++){ /*打印第一个星'*'*/ if ( (int)sqrt( pow(r, 2) - pow(r -i, 2)) ==( r- j/2) && (r- j/2) != point1_1 && (r- j/2) != point1_2){ printf("*"); point1_2 = point1_1; point1_1 = r- j/2; j++; }/*打印第二个星'*'*/ else if(((int)sqrt( pow(r, 2) - pow(r - i, 2)) == j/2 - r) && (j/2 - r) != point2_1 && (j/2 - r) != point2_2){ printf("*"); point2_2 = point2_1; point2_1 = j/2 - r; j++; } else printf(" "); } printf(" "); } return 0; } int main() { int r; while(1){ printf("请输入半径: "); scanf("%d", &r); print_circle(r); } return 0; }
运行结果
- End -
————————————
不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~
【值得关注】我的 编 程 学 习 交 流 俱 乐 部 !【点击进入】
C语言入门资料(网盘链接免费分享):
C语言推荐书籍(PDF免费分享):