趣味100道C语言程序题num six

画一个空心圆

分析思路:图形在竖直方向上分割成若干份,依次一行输出相应的点(用星号表示),可以假设该圆的半径是10,设定y的值,求相应的x值,表示为m,因为圆是对称的,会有两个点,所以记得要进行判断。

#include <stdio.h>
#include <math.h>


int main()
{
    int y;
    double x;
    double m;

    for(y = 10;y >= -10;y--)     //r = 10
    {
        m = 2.5 * sqrt(100 - y * y);    
        for(x = 0;x < 30 - m;x++)    //2.5是屏幕调整系数
        {
            printf(" ");
        }
        printf("*");
        for(;x <= 30 + m;x++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}
图形为:
 
                             * *
                    *                     *
               *                               *
             *                                   *
          *                                         *
         *                                           *
        *                                             *
       *                                               *
      *                                                 *
      *                                                 *
     *                                                   *
      *                                                 *
      *                                                 *
       *                                               *
        *                                             *
         *                                           *
          *                                         *
             *                                   *
               *                               *
                    *                     *
                              * *



程序中有一个屏幕调整系数,因为x和y的比值不为1,所以需要将通过sqrt(100 -x * x)求出来的m值进行调整,比较之后,选择了2.5,那么相应的取值范围也变化了。

               这是没有加屏幕调整系数亦未改变取值范围的程序:

#include <stdio.h>
#include <math.h>

int main()
{
    int y;
    double x;
    double m;

    for(y = 10;y >= -10;y--)     //r = 10
    {
        m = sqrt(100 - y * y);    
        for(x = 0;x < 10 - m;x++)
        {
            printf(" ");
        }
        printf("*");
        for(;x <= 10 + m;x++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}
效果图为是一个椭圆:

   
         * *
      *         *
    *             *
   *               *
  *                 *
  *                 *
 *                   *
 *                   *
 *                   *
 *                   *
*                     *
 *                   *
 *                   *
 *                   *
 *                   *
  *                 *
  *                 *
   *               *
    *             *
      *         *
          * *


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值