欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言编程:打印一个圆形

程序员文章站 2024-03-18 15:25:16
...

题目

输入一个半径,用"*"打印这个半径的圆形

 

思路

每行打印两个点"*"。问题的关键是找到每行这两个"*"的位置,然后打印。

 

怎么找某行"*"的位置?假设当前在第i行(1<=i<=2r),那么:

 

第一个点的位置为: 

C语言编程:打印一个圆形

 

第二个点的位置是:

C语言编程:打印一个圆形

 

每行,从第一个点循环到最后一个点(从j=1,循环到j =2r),一旦找到这两个点(即找到 j等于上面列出的两个点的位置),就打印。

C语言编程:打印一个圆形

 

代码

/*
*代码功能:输入圆半径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语言编程:打印一个圆形

相关标签: C语言趣味编程