c - 我正在尝试使用 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");
}
解决方案
你的程序应该更像这样:
#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 y
and 进行计算,然后在最后一刻映射到屏幕的显示方法或类似方式,而不是使用i
and then-(i - 10)
或10 - i
every 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");
}
}
实际上,您不需要i
and j
,而是可以直接遍历x
and 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");
}
}
推荐阅读
- javascript - 如何用 Lodash 返回两个数组之间的交集数组?
- java - 如何读取文件中的算术方程并检查它在java中是否正确?
- java - 使用 powermock @Rule 时,至少会花费 3-4 秒以及如何加快测试用例的速度
- python - 在 Spyder 中运行 Pytorch 神经网络时出现属性错误
- c# - 无法将 JSON 反序列化为具有嵌套列表的对象
- highcharts - Highcharts 导航器缩放
- excel - Excel 主工作表模板的 VBA 代码产生错误“对象“_Worksheet”的方法“范围”失败”
- django - 所有用户名都由用户名短语表示
- c# - 升级到 net5.0 后 Blazor WebAssembly 项目出错
- jira - 我是 Confluence 的新手,我有一个任务