C语言编程:打印一个圆形
程序员文章站
2024-03-18 15:25:16
...
题目
输入一个半径,用"*"打印这个半径的圆形
思路
每行打印两个点"*"。问题的关键是找到每行这两个"*"的位置,然后打印。
怎么找某行"*"的位置?假设当前在第i行(1<=i<=2r),那么:
第一个点的位置为:
第二个点的位置是:
每行,从第一个点循环到最后一个点(从j=1,循环到j =2r),一旦找到这两个点(即找到 j等于上面列出的两个点的位置),就打印。
代码
/*
*代码功能:输入圆半径r,打印这个圆
*微信公众号:C语言修仙
*/
# 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;
}
运行结果
文章首发于微信公众号“C语言修仙”,欢迎关注。
推荐阅读
-
C语言编程:打印一个圆形
-
c语言小游戏 flybird Easyx编程 项目源码讲解
-
用C语言做一个小游戏:扫雷(含全部源代码)(codeblocks无error无waring)
-
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array(C语言)
-
C语言编程练习题_03进制转换
-
2014, 关于学习C++编程语言对中国软件发展的的一些思考! C++基础架构库图形可视化源码工业C++源码开放源码
-
2014, 关于学习C++编程语言对中国软件发展的的一些思考! C++基础架构库图形可视化源码工业C++源码开放源码
-
编写一个程序,以每行一个单词的形式打印其输入 博客分类: C C
-
编写一个程序,以每行一个单词的形式打印其输入 博客分类: C C
-
【c语言】当你只会循环时,你也可以打印出好看的图案