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语言每日编程:打印一个圆形!代码+思路一学就会!的主要内容,如果未能解决你的问题,请参考以下文章

专访丨一学就会的自然语言处理系统书

一学就会的便签整理法 帮你轻松收集灵感

单片机编程(C语言)问题

一学就会的顺序表 —— 结构及各种接口 ( 头插 / 删尾插 / 删特定位置查找 / 插入 / 删除 ) 的实现

0基础也能开发小程序,保姆级实战教程,一学就会

一学就会pip换镜像源