zoukankan      html  css  js  c++  java
  • 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("
    ");
    
        }
    
        return 0;
    
    }
    
    int main()
    
    {
    
        int r;
    
        while(1){
    
            printf("请输入半径: 
    ");
    
            scanf("%d", &r);
    
            print_circle(r);
    
        }
    
        return 0;
    
    }

    运行结果


     

    - End -

    ————————————

    不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

    【值得关注】我的 编 程 学 习 交 流 俱 乐 部 !【点击进入】

    C语言入门资料(网盘链接免费分享):


     

    C语言推荐书籍(PDF免费分享):


     
  • 相关阅读:
    最大比例(压轴题 )
    HDU-1016-素数环
    HDU-1241-油藏
    POJ-2251-地下城
    UVa-12096-集合栈计算机
    UVa-156-反片语
    UVa-10815-安迪的第一个字典
    UVa-101-木块问题
    UVa-10474-大理石在哪
    HDU-2955-Robberies
  • 原文地址:https://www.cnblogs.com/huya-edu/p/15161891.html
Copyright © 2011-2022 走看看