首页 > 解决方案 > 我正在尝试使用 C 编程中的循环绘制一个带有坐标平面的圆,但它并没有给我圆的下半部分

问题描述

正如您在图像上看到的,圆圈的下部没有 *。这是为什么?

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

圆公式 = r^2 = (xa)^2 + (yb)^2

    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");
        }

在此处输入图像描述

标签: c

解决方案


你的程序应该更像这样:

#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,这很麻烦。

x如果您使用and yand 进行计算,然后在最后一刻映射到屏幕的显示方法或类似方式,而不是使用iand then-(i - 10)10 - ievery where to mean ,这也可能很好y,所以我添加了x和在你的y程序中。您也可以评论(a, b)应该是圆的中心。

在此处输入图像描述

还有一点,似乎y存在0与否之间的区别在于您打印出连字符(对于x轴)而不是空格,因此您的程序可能是:

#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");    
    }
}

实际上,您不需要iand j,而是可以直接遍历xand y,因为您的显示方式每次只有一个字符:

#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");    
        
    }
}

推荐阅读