120行c语言代码绘制可移动的正弦曲线,在屏幕上用“*”显示 0~360 度的正弦函数 sin(x)曲线,并且可以用键盘控制正弦曲线左右移动(即改变相位)。代码需要附有注释。
时间: 2023-12-03 15:44:03 浏览: 50
```c
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define PI 3.14159265358979323846
#define WIDTH 80
#define HEIGHT 25
int main()
{
int x, y, i, j;
double phase = 0.0; // 初始相位为0
char screen[HEIGHT][WIDTH + 1];
// 初始化屏幕
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
screen[i][j] = ' ';
}
screen[i][WIDTH] = '\0';
}
while (1) {
// 计算正弦曲线上每个点的位置
for (x = 0; x < WIDTH; x++) {
double radian = phase + 2 * PI * x / WIDTH;
int amplitude = (int) (10 * sin(radian));
y = HEIGHT / 2 - amplitude;
if (y >= 0 && y < HEIGHT) {
screen[y][x] = '*';
}
}
// 显示屏幕
system("cls");
for (i = 0; i < HEIGHT; i++) {
printf("%s\n", screen[i]);
}
// 重置屏幕
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
screen[i][j] = ' ';
}
screen[i][WIDTH] = '\0';
}
// 控制相位,实现左右移动
if (_kbhit()) {
char ch = _getch();
if (ch == 'a') {
phase -= 0.1;
} else if (ch == 'd') {
phase += 0.1;
}
}
}
return 0;
}
```
注释:
- `PI` 定义了 π 的值
- `WIDTH` 和 `HEIGHT` 定义了屏幕的宽度和高度
- `phase` 存储了正弦曲线的相位,初始值为 0
- `screen` 存储了屏幕上每个位置的字符,初始值都是空格
- 初始化屏幕:用两个循环遍历每个位置,将字符设置为空格,并在每一行末尾添加 '\0'
- 正弦曲线每个点的计算:用一个循环遍历屏幕宽度内的每个位置,计算出该位置在正弦曲线上的振幅,然后根据振幅计算出该点的纵坐标,如果该纵坐标在屏幕高度范围内,则将该点标记为 '*'
- 显示屏幕:清空屏幕并输出每一行的字符数组
- 重置屏幕:用两个循环遍历每个位置,将字符设置为空格,并在每一行末尾添加 '\0'
- 控制相位:如果有键盘输入,则获取输入的字符,如果是 'a' 则将相位减小 0.1,如果是 'd' 则将相位增大 0.1,这样就可以实现正弦曲线的左右移动。