书上看到一个画空心圆的题,于是用C++写了一个实心圆...
#include <iostream> #include <math.h> using namespace std; class DrawCircle { public: void drawCircle(int r) { int x, y; int params_1 = 2; int params_2 = 5; for (y = 0; y < r; y++) { x = -(int)sqrt(2 * y * r - y * y) + r; for (int i = 0; i < params_1*x; i++) cout << ' '; cout << '*'; for (int i = ((int)sqrt(2 * y * r - y * y) + r - x)*params_1 + params_2; i >= 0; i--) cout << (i % 2 == 0 ? '*' : i % 3 == 0 ? '$' : '%'); cout << '*' << endl; } for (; y >= 0; y--) { x = -(int)sqrt(2 * y * r - y * y) + r; for (int i = 0; i < params_1*x; i++) cout << ' '; cout << '*'; for (int i = ((int)sqrt(2 * y * r - y * y) + r - x)*params_1 + params_2; i >= 0; i--) cout << (i % 2 == 0 ? '*' : i % 3 == 0 ? '$' : '%'); cout << '*' << endl; } } }; int main() { DrawCircle dc; int r = 12; dc.drawCircle(r); getchar(); return 0; }
运行结果:
更简洁一点的代码:
#include <iostream> #include <math.h> using namespace std; class DrawCircle { public: void drawCircle(int r) { int x, y; int i; double params_1 = 2.5; for (y = 10; y >= -r; y--) { x = (int)sqrt(r * r - y * y); for (i = 0; i < 30 - params_1 * x; i++) cout << ' '; cout << '*'; for (; i < 30 + params_1 * x; i++) cout << (i % 2 == 0 ? '*' : i % 3 == 0 ? '$' : '%'); cout << '*' << endl; } } }; int main() { DrawCircle dc; int r = 10; dc.drawCircle(r); getchar(); return 0; }
运行截图: