首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试图用C编程中的循环来画一个具有坐标平面的圆,但是ıt没有给出圆的下部

我试图用C编程中的循环来画一个具有坐标平面的圆,但是ıt没有给出圆的下部
EN

Stack Overflow用户
提问于 2020-12-20 17:53:22
回答 1查看 92关注 0票数 0

正如你在图像上看到的,在圆圈的下部没有*。为什么会这样呢?

循环中的方程:y= 10 -i,x= j-10或k-10

圆公式= r^2 = (x-a)^2 + (y-b)^2

代码语言:javascript
复制
    int i, j, k;
    
        for (i = 0; i < 21; i++) {
            if (i == 10) {
                for (j = 0; j < 21; j++) {
                    if (pow(r * r - (j -10 -a)*(j -10 -a), 0.5) + b == 0) {
                        printf("*");
                    }
                    else if (j == 10) {
                        printf("|");
                    }
                    else {
                        printf("-");
                    }
                }
            }
            else {
                for (k = 0; k < 21; k++) {
                    if (pow(r * r - (k -10 -a)*(k -10 -a), 0.5) + b == 10 - i) {
                        printf("*");
                    }
                    else if (k == 10) {
                        printf("|");
                    }
                    else {
                        printf(" ");
                    }
                }
            }
            printf("\n");
        }

enter image description here

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 18:24:40

你的程序应该更像这样:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main() {
    int i, j, k;
    int a = 3, b = 4, r = 5;
    int x, y;
    
        for (i = 0; i < 21; i++) {
            y = -(i - 10);

            if (y == 0) {
                for (j = 0; j < 21; j++) {
                    x = j - 10;

                    if (r * r == pow(x - a, 2) + pow(y - b, 2)) {
                        printf("*");
                    }
                    else if (x == 0) {
                        printf("|");
                    }
                    else {
                        printf("-");
                    }
                }
            }
            else {
                for (k = 0; k < 21; k++) {
                    x = k - 10;

                    if (r * r == pow(x - a, 2) + pow(y - b, 2)) {
                        printf("*");
                    }
                    else if (x == 0) {
                        printf("|");
                    }
                    else {
                        printf(" ");
                    }
                }
            }
            printf("\n");
        }

}

当你匹配你的等式时,你应该允许(-3) ^2是9,而如果你取9的平方根,你只能匹配3,除非你还检查平方根的“负”是否是3,这很麻烦。

如果您使用xy进行计算,然后在最后时刻,映射到屏幕上显示它的方法,或者以类似的方式,而不是使用i,然后使用-(i - 10)10 - i来表示y,这也可能是件好事,所以我在程序中添加了xy。您可能还会评论说(a, b)应该是圆的中心。

还有一点,看起来y是否为0的区别在于,你打印出连字符(对于x轴),与空格,所以你的程序可能是:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main() {
    int i, j;
    int a = 3, b = 4, r = 5;
    int x, y;

    for (i = 0; i < 21; i++) {
        y = -(i - 10);

        for (j = 0; j < 21; j++) {
            x = j - 10;

            if (r * r == pow(x - a, 2) + pow(y - b, 2)) {
                printf("*");
            }
            else if (x == 0) {
                printf("|");
            }
            else {
                printf(y == 0 ? "-" : " ");
            }
        }
        printf("\n");    
    }
}

实际上,您不需要ij,但可以直接遍历xy,因为每次只显示一个字符:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main() {
    int a = 3, b = 4, r = 5;
    int x, y;

    for (y = 10; y >= -10; y--) {

        for (x = -10; x <= 10; x++) {
            if (r * r == pow(x - a, 2) + pow(y - b, 2)) {
                printf("*");
            }
            else if (x == 0) {
                printf("|");
            }
            else {
                printf(y == 0 ? "-" : " ");
            }
        }
        printf("\n");    
        
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65378681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档