#include <stdio.h> #include <stdlib.h> #include <graphics.h> #include <math.h> #include <time.h> double temperatureFunction(int hour) { double amplitude = 10.0; double period = 24.0; double phaseShift = 0; double offset = 25.0; double angle = (1.6 * M_PI / period) * (hour + phaseShift)+3; double temperature = amplitude * cos(angle) + offset; return temperature; } int main() { srand((unsigned)time(NULL)); int numHours = 24; int intervalMinutes = 5; int gd = DETECT, gm; initgraph(&gd, &gm, ""); int x[288]; int y[288]; int i=0; printf("时间\t实际温度\t测量温度\n"); for (int hour = 0; hour <= numHours; hour++) { for (int minute = 0; minute < 60; minute += intervalMinutes) { double temperature = temperatureFunction(hour); y[i]=getmaxy()-temperature*10; i++; printf("%02d:%02d\t%.2lf\t\t%.2lf\n", hour, minute,temperature,temperature+(0.02*rand()/RAND_MAX-0.01)*temperature); } } for(i=0;i<=287;i++){ x[i]=i; } setcolor(WHITE); setlinestyle(SOLID_LINE, 0); for (i = 0; i < 287; i++) { line(x[i], y[i], x[i+1], y[i+1]); } getch(); closegraph(); return 0; }这段代码那些语句实现了折线图
时间: 2024-04-10 08:32:52 浏览: 51
这段代码使用了图形库graphics.h来实现折线图的绘制。具体实现如下:
1. 使用initgraph函数初始化图形模式。
2. 创建两个数组x和y,分别用于存储折线图的横坐标和纵坐标。
3. 在for循环中,通过调用temperatureFunction函数计算温度,并将温度值存储在y数组中。
4. 使用printf函数打印时间、实际温度和测量温度。
5. 在for循环结束后,使用setcolor函数设置折线的颜色为白色。
6. 使用setlinestyle函数设置折线的样式为实线。
7. 使用line函数绘制折线图,依次连接数组x和y中的相邻点。
8. 使用getch函数等待用户按下任意键,然后使用closegraph函数关闭图形模式。
请注意,为了使代码能够成功运行,需要安装并配置相应的图形库。
相关问题
#include "graphics.h" #include "genlib.h" #include "conio.h" #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <windows.h> #include <olectl.h> #include <stdio.h> #include <mmsystem.h> #include <wingdi.h> #include <ole2.h> #include <ocidl.h> #include <winuser.h> #include <math.h> #define pai 3.1415926 double initangle,newangle=0.0;//一个表示六边形的角度,一个表示六边形绘制时每条边的角度 void forward(double distance); void turn(double angle); DWORD WINAPI ThreadProc(LPVOID lpParameter) { InitConsole(); } void Main() { double cx, cy; int i,j; InitGraphics();//创建画布 SetPenColor("green"); //设置画笔的颜色和大小 SetPenSize(2); cx = GetWindowWidth() / 2.0; cy = GetWindowHeight() / 2.0;//取画布中心点 for(i=0;i<18;i++) { MovePen(cx,cy); for(j=0;j<6;j++) { forward(1); turn(60); }//绘制六边形 initangle+=20; newangle=initangle;//转动20度,重复上面的动作 } FreeConsole(); } void forward(double distance)//沿着当前方向画出一定长度的线段 { double dx,dy; dx=distancecos(newanglepai/180); dy=distancesin(newanglepai/180); DrawLine(dx,dy); } void turn(double angle)//画笔方向转动一定的角度 { newangle+=angle; }给出这段代码的改进方向
1. 去掉不必要的头文件
这段代码中包含了很多不必要的头文件,可以考虑删除。
2. 统一头文件的引用方式
头文件的引用方式不统一,有的使用<>,有的使用"",可以考虑统一使用<>或""。
3. 去掉重复的头文件
这段代码中出现了重复的头文件,比如<stdio.h>、<windows.h>等,可以考虑删除。
4. 函数参数使用const
在函数定义时,如果某个参数不会被修改,可以将其声明为const类型,以增加代码的可读性和安全性。
5. 函数名使用动词开头
函数名应该使用动词开头,表明该函数的功能。
6. 优化循环结构
在循环结构中,可以将重复的代码提取出来,减少代码量。
7. 使用宏定义
在代码中出现了一些魔法数,可以考虑使用宏定义来提高代码的可读性。
8. 使用函数封装
可以将一些功能相似的代码封装成函数,提高代码的可读性和复用性。
9. 增加注释
在代码中增加注释,能够更好地帮助理解代码的功能和逻辑。
基于以上改进方向,可以对该代码进行如下改进:
```c
#include "graphics.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
#define PI 3.1415926
#define HEX_ANGLE 60.0 // 六边形的角度
#define TURN_ANGLE 20.0 // 每次转动的角度
void drawHexagon(double cx, double cy, double size); // 绘制六边形
void forward(double distance, double angle); // 沿着当前方向画出一定长度的线段
void turn(double angle); // 画笔方向转动一定的角度
void Main()
{
InitGraphics(); // 创建画布
SetPenColor("green");
SetPenSize(2);
double cx = GetWindowWidth() / 2.0;
double cy = GetWindowHeight() / 2.0;
for (int i = 0; i < 18; i++)
{
drawHexagon(cx, cy, 1.0);
turn(TURN_ANGLE);
}
WaitMouseClick();
CloseGraphics();
}
void drawHexagon(double cx, double cy, double size)
{
MovePen(cx + size, cy);
for (int i = 0; i < 6; i++)
{
forward(2 * size, HEX_ANGLE);
}
}
void forward(double distance, double angle)
{
double dx = distance * cos(angle * PI / 180);
double dy = distance * sin(angle * PI / 180);
DrawLine(dx, dy);
}
void turn(double angle)
{
newangle += angle;
}
```
这份代码的改进包含以下方面:
1. 去掉不必要的头文件
这份代码中只保留了graphics.h和stdio.h两个头文件,其他头文件都被删除了。
2. 统一头文件的引用方式
这份代码中统一使用<>来引用头文件。
3. 去掉重复的头文件
这份代码中只保留了stdio.h一个头文件。
4. 函数参数使用const
这份代码中没有需要使用const的参数。
5. 函数名使用动词开头
函数名都使用了动词开头。
6. 优化循环结构
将绘制六边形的代码封装到了drawHexagon函数中,减少了重复代码的量。
7. 使用宏定义
将魔法数HEX_ANGLE和TURN_ANGLE定义为宏,提高了代码的可读性。
8. 使用函数封装
将绘制六边形的代码封装到了drawHexagon函数中,提高了代码的可读性和复用性。
9. 增加注释
在代码中增加了注释,能够更好地帮助理解代码的功能和逻辑。
//分析:该图形是由正六边形不停旋转,每次旋转20°得到的,画面上一共有18个正六边形 #include <stdio.h> #include <stdlib.h> #include <math.h> #include "graphics.h" #define PI 3.1415926 static double Newangle = 90.0; static double Initangle = 0.0; //新图形绘制系统 void forward(double distance); /*沿当前方向画线,长度为distance,当distance为负数时后退*/ void turn (double angle); /* 顺时针旋转角度angle,角度单位为DEG,当angle为负数时逆时针旋转*/ void move(double distance); /*沿当前方向移动笔(不画线),长度为distance,当distance为负数时后退*/ void Main() { InitGraphics(); double cx, cy; int i;//对正六边形数目进行计数 cx = GetWindowWidth() / 2; cy = GetWindowHeight() / 2; SetPenColor("green"); for (i = 0; i < 18; i++) { MovePen(cx, cy);//回到原点 forward(1); turn(60); forward(1); turn(60); forward(1); turn(60); forward(1); turn(60); forward(1); Initangle += 20.0; Newangle = Initangle; } } void forward(double distance) { double dx, dy; dx = distance * cos(Newangle * PI / 180); dy = distance * sin(Newangle * PI / 180); DrawLine(dx, dy); } void turn(double angle) { Newangle += angle; } void move(double distance) { double x, y; x = GetCurrentX() + distance * cos(Newangle * PI / 180); y = GetCurrentY() + distance * sin(Newangle * PI / 180); MovePen(x, y); }针对本段项目代码编写一段项目特色
本段项目代码是一个使用C语言和graphics.h库绘制图形的程序。它使用了正六边形不断旋转的方法,每次旋转20°,最终绘制出18个正六边形。在绘制过程中,该程序使用了前进、旋转和移动等基本绘图操作,通过计算角度和距离来实现图形的绘制。该程序的特色在于使用简单的数学计算和基本的图形绘制操作,实现了复杂的图形效果。同时,该程序也展示了C语言和graphics.h库的基本应用,可以作为初学者学习图形编程的参考。
阅读全文