C语言每日编程:打印一个圆形!代码+思路一学就会!
Posted C语言编程俱乐部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言每日编程:打印一个圆形!代码+思路一学就会!相关的知识,希望对你有一定的参考价值。
题目
输入一个半径,用"*"打印这个半径的圆。
思路
每行打印两个点"*"。问题的关键是找到每行这两个"*"的位置,然后打印。
怎么找某行"*"的位置?假设当前在第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("\\n");
}
return 0;
}
int main()
{
int r;
while(1){
printf("请输入半径: \\n");
scanf("%d", &r);
print_circle(r);
}
return 0;
}
运行结果
- End -
————————————
不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~
【值得关注】我的 编程学习交流俱乐部 !【点击进入】
C语言入门资料(网盘链接免费分享):
C语言推荐书籍(PDF免费分享):
以上是关于C语言每日编程:打印一个圆形!代码+思路一学就会!的主要内容,如果未能解决你的问题,请参考以下文章