计算器(图形界面)

功能介绍html

绘制出图形界面,支持鼠标点击实现四则运算(可带括号),同时具备清零和撤回操做。另一种模式,能够绘制一些特定的函数图像。windows

代码实现数组

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include <graphics.h>
  4 #include <windows.h>
  5 #include <conio.h>
  6 #include <string.h>
  7 #include<math.h>
  8 
  9 #define PI 3.1415926
 10 #define N 100
 11 
 12 typedef struct
 13 {
 14     char data[N][N];
 15     int top;
 16 
 17 }stack;
 18 
 19 typedef struct figure
 20 {
 21     char x[N];
 22 }figure;
 23 
 24 const int max = 100;
 25 int q;                  //定义一个全局变量,用来计数结构体数组的数量;
 26 int count = 0;
 27 char str[N] = { '0' };          //字符数组赋初始值;
 28 figure st[N];
 29 char suffix[N][N] = { '0' };
 30 stack sta;
 31 int select_;  //用户选择
 32 
 33 
 34 void gotoxy(int x, int y);
 35 void hidecursor();
 36 void introduce();
 37 void calcul_memu();
 38 void mouse_imfor();
 39 void clear_cal();
 40 void chuli(char ch[], struct figure a[]);
 41 void init(stack *sta);
 42 void suffixtoresult(stack *sta, char suffix[][N], int length);
 43 void inffixtosuffix(stack *sta, struct figure *a, char suffix[][N], int *length);
 44 
 45 void image_menu();
 46 
 47 void function1();
 48 void function2();
 49 void function3();
 50 void function4();
 51 void function5();
 52 void function6();
 53 void function7();
 54 void function8();
 55 void function9();
 56 void function10();
 57 void creatCoordinate();
 58 
 59 int main()
 60 {
 61     introduce();
 62     switch (select_)
 63     {
 64     case 1:
 65     {
 66         initgraph(480, 600);     //设置窗口的大小;
 67         setbkcolor(BLACK);      //设置背景色为黑色;
 68         cleardevice();          //用背景色来清空屏幕;
 69         calcul_memu();
 70         mouse_imfor();
 71         closegraph();
 72         break;
 73     }
 74     case 2:
 75     {
 76         image_menu();
 77         break;
 78     }
 79     default:
 80         break;
 81     }
 82 }
 83 void gotoxy(int x, int y)//函数gotoxy:定义光标位置
 84 {
 85     COORD coord;//坐标系coord 
 86     HANDLE handle;
 87 
 88     coord.X = x;//横坐标X 
 89     coord.Y = y;//纵坐标 y
 90     handle = GetStdHandle(STD_OUTPUT_HANDLE);
 91     SetConsoleCursorPosition(handle, coord);
 92 }//end gotoxy 
 93 
 94 void hidecursor()//函数hidecursor:隐藏光标
 95 {
 96     CONSOLE_CURSOR_INFO curinfo;
 97     HANDLE Out;
 98 
 99     Out = GetStdHandle(STD_OUTPUT_HANDLE);
100     curinfo.dwSize = 1;//光标百分比厚度:1~100
101     curinfo.bVisible = 0;//是否可见
102     SetConsoleCursorInfo(Out, &curinfo);
103 } //end hidecursor 
104 
105 //打印欢迎界面
106 void introduce()
107 {
108     int i;
109     HANDLE consolehwnd;//建立句柄
110     consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
111     SetConsoleTextAttribute(consolehwnd, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
112     //设置为亮白色 
113 
114     for (i = 14; i < 39; i++)
115     {
116         gotoxy(i * 2, 4);
117         printf("");
118     }
119 
120     for (i = 5; i < 20; i++)
121     {
122         gotoxy(28, i);
123         printf("");
124         gotoxy(76, i);
125         printf("");
126     }
127 
128     gotoxy(45, 5);
129     printf("欢迎来到计算器!");
130 
131     for (i = 15; i < 38; i++)
132     {
133         gotoxy(i * 2, 6);
134         printf("");
135     }
136 
137     gotoxy(45, 7);
138     printf("计算器控制台");
139 
140     for (i = 15; i < 38; i++)
141     {
142         gotoxy(i * 2, 8);
143         printf("");
144     }
145 
146     gotoxy(35, 9);
147     printf("1.计算 实现加减乘除运算(支持括号)");
148 
149     gotoxy(37, 10);
150     printf("按'C'清屏,按'>'撤退一个");
151 
152     gotoxy(35, 11);
153     printf("2.画图 基本函数类型");
154     gotoxy(37, 12);
155     printf("按右键退出");
156     gotoxy(35, 13);
157     printf("3.开始使用 按1进入计算,按2进入画图");
158     gotoxy(37, 14);
159     printf("按0退出");
160 
161 
162     for (i = 15; i < 38; i++)
163     {
164         gotoxy(i * 2, 17);
165         printf("");
166     }
167 
168     for (i = 14; i < 39; i++)
169     {
170         gotoxy(i * 2, 20);
171         printf("");
172     }
173 
174     gotoxy(51, 19);
175     scanf_s("%d", &select_);
176     fflush(stdin);
177 
178     getchar();
179     system("cls");
180 }
181 
182 //打印计算器界面
183 void calcul_memu()
184 {
185     setfillcolor(BLACK);
186     solidrectangle(0, 100, 480, 600);
187 
188     setcolor(DARKGRAY);
189     line(0, 100, 480, 100);
190     line(0, 200, 480, 200);
191     line(0, 300, 480, 300);
192     line(0, 400, 480, 400);
193     line(0, 500, 480, 500);
194     line(120, 100, 120, 600);
195     line(240, 100, 240, 600);
196     line(360, 100, 360, 600);
197 
198     settextstyle(60, 60, _T("宋体"));
199     outtextxy(30, 120, _T("("));
200     outtextxy(150, 120, _T(")"));
201     outtextxy(390, 120, _T("+"));
202     outtextxy(30, 220, _T("7"));
203     outtextxy(150, 220, _T("8"));
204     outtextxy(270, 220, _T("9"));
205     outtextxy(390, 220, _T("-"));
206     outtextxy(30, 320, _T("4"));
207     outtextxy(150, 320, _T("5"));
208     outtextxy(270, 320, _T("6"));
209     outtextxy(390, 320, _T("*"));
210     outtextxy(30, 420, _T("1"));
211     outtextxy(150, 420, _T("2"));
212     outtextxy(270, 420, _T("3"));
213     outtextxy(390, 420, _T("/"));
214     outtextxy(30, 520, _T("."));
215     outtextxy(150, 520, _T("0"));
216     outtextxy(390, 520, _T("="));
217     outtextxy(260, 120, _T("<"));
218     outtextxy(270, 520, _T("C"));
219 }
220 
221 //处理鼠标消息
222 void mouse_imfor()
223 {
224     int length = 0;
225     int i = -1;
226     int go = 0;
227     for (int a = 0; a < N; a++)
228         strcpy(st[i].x, "0");
229     MOUSEMSG m;
230     while (go == 0)
231     {
232         setcolor(DARKGRAY);
233         settextstyle(60, 20, _T("宋体"));
234         m = GetMouseMsg();
235         switch (m.uMsg)
236         {
237         case WM_LBUTTONDOWN:
238             if (m.x > 0 && m.x < 120 && m.y>100 && m.y < 200)
239             {
240                 ++i; count++;
241                 str[i] = '(';
242             }
243             if (m.x > 120 && m.x < 240 && m.y>100 && m.y < 200)
244             {
245                 ++i; count++;
246                 str[i] = ')';
247             }
248             if (m.x > 240 && m.x < 360 && m.y>100 && m.y < 200)
249             {
250                 i--;
251                 count--;
252                 outtextxy(460 - i * 20, 20, _T(str));
253                 outtextxy(460 - (i + 1) * 20, 20, _T(" "));     //按'<'键清除后一个,日后退;
254             }
255             if (m.x > 360 && m.x < 480 && m.y>100 && m.y < 200)
256             {
257                 ++i; count++;
258                 str[i] = '+';
259             }
260             if (m.x > 0 && m.x < 120 && m.y>200 && m.y < 300)
261             {
262                 ++i; count++;
263                 str[i] = '7';
264             }
265             if (m.x > 120 && m.x < 240 && m.y>200 && m.y < 300)
266             {
267                 ++i; count++;
268                 str[i] = '8';
269             }
270             if (m.x > 240 && m.x < 360 && m.y>200 && m.y < 300)
271             {
272                 ++i; count++;
273                 str[i] = '9';
274             }
275             if (m.x > 360 && m.x < 480 && m.y>200 && m.y < 300)
276             {
277                 ++i; count++;
278                 str[i] = '-';
279             }
280             if (m.x > 0 && m.x < 120 && m.y>300 && m.y < 400)
281             {
282                 ++i; count++;
283                 str[i] = '4';
284             }
285             if (m.x > 120 && m.x < 240 && m.y>300 && m.y < 400)
286             {
287                 ++i; count++;
288                 str[i] = '5';
289             }
290             if (m.x > 240 && m.x < 360 && m.y>300 && m.y < 400)
291             {
292                 ++i; count++;
293                 str[i] = '6';
294             }
295             if (m.x > 360 && m.x < 480 && m.y>300 && m.y < 400)
296             {
297                 ++i; count++;
298                 str[i] = '*';
299             }
300             if (m.x > 0 && m.x < 120 && m.y>400 && m.y < 500)
301             {
302                 ++i; count++;
303                 str[i] = '1';
304             }
305             if (m.x > 120 && m.x < 240 && m.y>400 && m.y < 500)
306             {
307                 ++i; count++;
308                 str[i] = '2';
309             }
310             if (m.x > 240 && m.x < 360 && m.y>400 && m.y < 500)
311             {
312                 ++i; count++;
313                 str[i] = '3';
314             }
315             if (m.x > 360 && m.x < 480 && m.y>400 && m.y < 500)
316             {
317                 ++i; count++;
318                 str[i] = '/';
319             }
320             if (m.x > 0 && m.x < 120 && m.y>500 && m.y < 600)
321             {
322                 ++i; count++;
323                 str[i] = '.';
324             }
325             if (m.x > 120 && m.x < 240 && m.y>500 && m.y < 600)
326             {
327                 ++i; count++;
328                 str[i] = '0';
329             }
330             outtextxy(460 - i * 20, 20, _T(str));
331             if (m.x > 240 && m.x < 360 && m.y>500 && m.y < 600)
332             {
333                 ++i; count++;
334                 str[i] = 'C';
335             }
336             str[i + 1] = '\0';
337             if (m.x > 360 && m.x < 480 && m.y>500 && m.y < 600)
338             {
339                 ++i; count++;
340                 str[i] = '=';
341                 str[i + 1] = '\0';
342             }
343 
344             Sleep(100); // 延时,下降 CPU 占用率
345             break;
346         case WM_RBUTTONUP:
347             go = 1;
348             break;
349         }
350         if (str[i] == 'C' || str[i] == '=')
351             break;
352     } //一次输入结束
353 
354     if (str[i] == 'C')
355     {
356         setbkcolor(BLACK);
357         cleardevice();
358         calcul_memu();
359         mouse_imfor();
360     }//按'C'键清空界面;
361     else if (str[i] == '=')
362     {
363         chuli(str, st);
364         init(&sta);
365         inffixtosuffix(&sta, st, suffix, &length);
366         setbkcolor(BLACK);
367         cleardevice();
368         calcul_memu();
369         init(&sta);
370         suffixtoresult(&sta, suffix, length);
371 
372         go = 0;
373         while (go == 0)
374         {
375             m = GetMouseMsg();
376             switch (m.uMsg)
377             {
378             case WM_LBUTTONDOWN:
379                 if (m.x > 240 && m.x < 360 && m.y>500 && m.y < 600)
380                 {
381                     str[i] = 'C';
382                 }
383                 str[i + 1] = '\0';
384                 break;
385             case WM_RBUTTONUP:
386                 go = 1;
387 
388                 break;
389             }
390             if (str[i] == 'C')
391                 break;
392         }
393         if (str[i] == 'C')
394         {
395             setbkcolor(BLACK);
396             cleardevice();
397             calcul_memu();
398             mouse_imfor();
399         }
400     }
401 
402 }
403 
404 void clear_cal()
405 {
406     setbkcolor(BLACK);
407     calcul_memu();
408 }//初始化界面;
409 
410 //处理输入的算术表达式
411 void chuli(char ch[], struct figure a[])
412 {
413     q = 0;
414     int m = 0, j;
415     char asd[15] = { '0' };
416     while (m < count)
417     {
418         j = 0;
419         if (ch[m] == '=')
420             break;
421         if (ch[m] == '(' || ch[m] == ')')
422         {
423             asd[j] = ch[m];
424             asd[j + 1] = '\0';
425             m++;
426             strcpy_s(a[q].x, asd);
427             q++;
428             continue;
429         }
430         if (ch[m] == '+' || ch[m] == '-')
431         {
432             if (ch[m - 1] == '+' || ch[m - 1] == '-' || ch[m - 1] == '*' || ch[m - 1] == '/' || m == 0 || ch[m] == '(')
433             {
434                 asd[j] = ch[m];
435                 m++;
436                 j++;
437                 while (ch[m] != '+'&&ch[m] != '-'&&ch[m] != '*'&&ch[m] != '/'&&ch[m] != ')')
438                 {
439                     asd[j] = ch[m];
440                     j++;
441                     m++;
442                 }
443                 asd[j] = '\0';
444                 strcpy_s(a[q].x, asd);
445                 q++;
446             }
447             else
448             {
449                 asd[j] = ch[m];
450                 asd[j + 1] = '\0';
451                 m++;
452                 strcpy_s(a[q].x, asd);
453                 q++;
454             }
455             continue;
456         }
457         if (ch[m] == '*' || ch[m] == '/')
458         {
459             asd[j] = ch[m];
460             asd[j + 1] = '\0';
461             m++;
462             strcpy_s(a[q].x, asd);
463             q++;
464             continue;
465         }
466         if (ch[m] != '+'&&ch[m] != '-'&&ch[m] != '*'&&ch[m] != '/'&&ch[m] != '('&&ch[m] != ')')
467         {
468             while (ch[m] != '+'&&ch[m] != '-'&&ch[m] != '*'&&ch[m] != '/'&&ch[m] != '('&&ch[m] != ')'&&ch[m] != '=')
469             {
470                 asd[j] = ch[m];
471                 j++;
472                 m++;
473             }
474             asd[j] = '\0';
475             strcpy_s(a[q].x, asd);
476             q++;
477             continue;
478         }
479     }
480 }//将字符串分割出来;
481 
482 void init(stack *sta)
483 {
484     int i;
485     for (i = 0; i < max; i++)
486         strcpy_s(sta->data[i], "0");
487 
488     sta->top = -1;
489 }//初始化栈;
490 
491 //中缀表达式变为后缀表达式
492 void inffixtosuffix(stack *sta, struct figure *a, char suffix[][N], int *length)
493 {
494     int i = 0;
495     int j = 0;
496     for (i = 0; i < q;)
497     {
498         if (strcmp(a[i].x, "(") == 0)
499         {
500             sta->top++;
501             strcpy_s(sta->data[sta->top], a[i].x);
502             i++;
503             continue;
504         }
505         else if (strcmp(a[i].x, ")") == 0)
506         {
507             while (strcmp(sta->data[sta->top], "(") != 0 && sta->top != -1)
508             {
509                 strcpy_s(suffix[j], sta->data[sta->top]);
510                 sta->top--;
511                 j++;
512             }
513             strcpy_s(sta->data[sta->top], "0");
514             i++;
515             sta->top--;
516             continue;
517         }
518         else if (strcmp(a[i].x, "=") == 0)
519         {
520             i++;
521             continue;
522         }
523         else if (strcmp(a[i].x, "+") == 0 || strcmp(a[i].x, "-") == 0)
524         {
525             while (strcmp(sta->data[sta->top], "(") != 0 && sta->top != -1)
526             {
527                 strcpy_s(suffix[j], sta->data[sta->top]);
528                 sta->top--;
529                 j++;
530             }
531             sta->top++;
532             strcpy_s(sta->data[sta->top], a[i].x);
533             i++;
534             continue;
535         }
536         else if (strcmp(a[i].x, "*") == 0 || strcmp(a[i].x, "/") == 0)
537         {
538             while (strcmp(sta->data[sta->top], "(") != 0 && sta->top != -1 && strcmp(sta->data[sta->top], "+") != 0 && strcmp(sta->data[sta->top], "-") != 0)
539             {
540                 strcpy_s(suffix[j], sta->data[sta->top]);
541                 sta->top--;
542                 j++;
543             }
544             sta->top++;
545             strcpy_s(sta->data[sta->top], a[i].x);
546             i++;
547             continue;
548         }
549         else
550         {
551             strcpy_s(suffix[j], a[i].x);
552             j++;
553             i++;
554             continue;
555         }
556     }
557     while (sta->top != -1)
558     {
559         strcpy_s(suffix[j], sta->data[sta->top]);
560         sta->top--;
561         j++;
562     }
563     *length = j;
564 
565 }
566 
567 //计算出后缀表达式的值
568 void suffixtoresult(stack *sta, char suffix[][N], int length)
569 {
570     int i = 0;
571     double result = 0;
572     while (i < length)
573     {
574         if (strcmp(suffix[i], "+") == 0)
575         {
576             printf("\n\nsta=%s\n\n", sta->data[sta->top]);
577             printf("\n\nsta=%s\n\n", sta->data[sta->top - 1]);
578 
579             result = atof(sta->data[sta->top - 1]) + atof(sta->data[sta->top]);
580             sta->top--;
581             sprintf(sta->data[sta->top], "%.5lf", result);
582             i++;
583             continue;
584         }
585         else if (strcmp(suffix[i], "-") == 0)
586         {
587             result = atof(sta->data[sta->top - 1]) - atof(sta->data[sta->top]);
588             sta->top--;
589             sprintf(sta->data[sta->top], "%.8lf", result);
590             i++;
591             continue;
592         }
593         else if (strcmp(suffix[i], "*") == 0)
594         {
595             result = atof(sta->data[sta->top - 1])*atof(sta->data[sta->top]);
596             sta->top--;
597             sprintf(sta->data[sta->top], "%.8lf", result);
598             i++;
599             continue;
600         }
601         else if (strcmp(suffix[i], "/") == 0)
602         {
603             result = atof(sta->data[sta->top - 1]) / atof(sta->data[sta->top]);
604             sta->top--;
605             sprintf(sta->data[sta->top], "%.8lf", result);
606             i++;
607             continue;
608         }
609         else
610         {
611             sta->top++;
612             strcpy_s(sta->data[sta->top], suffix[i]);
613             i++;
614             continue;
615         }
616     }
617 
618     setcolor(DARKGRAY);
619     settextstyle(60, 20, _T("宋体"));
620     if (sta->top == 0)
621         outtextxy(480 - strlen(sta->data[sta->top]) * 20, 20, _T(sta->data[sta->top]));
622     else if (sta->top != 0)
623         outtextxy(190, 20, _T("ERROR"));
624 }
625 
626 //画图菜单界面
627 void image_menu()
628 {
629     int serial_number, select, marker = 0;
630     printf("1.一次函数\n");
631     printf("2.二次函数\n");
632     printf("3.三角函数\n");
633     printf("4.幂函数\n");
634     printf("5.指数函数\n");
635     printf("6.对数函数\n");
636     printf("7.圆锥曲线\n");
637     printf("8.阿基米德螺线\n");
638     printf("9.心形线\n");
639     printf("10.玫瑰曲线\n");
640     printf("0.退出\n");
641     do
642     {
643         fflush(stdin);
644         printf("Please input serial number:");
645         scanf_s("%d", &serial_number);
646 
647 
648     } while (serial_number < 0 && serial_number>10);
649 
650     switch (serial_number)
651     {
652     case 0:
653         break;
654     case 1:
655         function1();
656         marker = 1;
657         break;
658     case 2:
659         function2();
660         marker = 1;
661         break;
662     case 3:
663         function3();
664         marker = 1;
665         break;
666 
667     case 4:
668         function4();
669         marker = 1;
670         break;
671     case 5:
672         function5();
673         marker = 1;
674         break;
675     case 6:
676         function6();
677         marker = 1;
678         break;
679     case 7:
680         function7();
681         marker = 1;
682         break;
683     case 8:
684         function8();
685         marker = 1;
686         break;
687     case 9:
688         function9();
689         marker = 1;
690         break;
691     case 10:
692         function10();
693         marker = 1;
694         break;
695     }
696 
697     if (marker == 1)
698     {
699         printf("是否继续画图?\n1.是  0.否");
700         scanf_s("%d", &select);
701         if (select == 1)
702         {
703             marker = 0;
704             image_menu();
705         }
706     }
707 }
708 
709 //创建坐标系
710 void creatCoordinate()
711 {
712     //setbkcolor(WHITE);
713     initgraph(600, 600);
714     setorigin(300, 300);
715 
716     setlinecolor(RED);
717     line(-300, 0, 300, 0);
718     line(0, -300, 0, 300);
719     settextcolor(RED);
720     settextstyle(30, 20, _T("宋体"));
721     outtextxy(280, 5, _T("x"));
722     outtextxy(5, -300, _T("y"));
723     setaspectratio(1, -1);
724 }
725 
726 //function1~10是十个画图函数
727 void function1()
728 {
729     float k, b, x, y;
730     printf("Please input k and b(y=k*x+b) :");
731     scanf_s("%f%f", &k, &b);
732     fflush(stdin);
733 
734     float sin = k / sqrt(k*k + 1);
735     float cos = 1 / sqrt(k*k + 1);
736 
737     creatCoordinate();
738 
739     for (double t = -300; t < 300; t = t + 0.001)
740     {
741         x = (int)(t * cos);
742         y = (int)(t * sin + b);
743         putpixel(x, y, RED);
744     }
745     getchar();
746     getchar();
747     closegraph();
748 
749 }
750 
751 void function2()
752 {
753     double x0, y0, a0;
754     int x, y, k = 10;    //k为放大比例
755     printf("请输入定点坐标X0,Y0:");
756     scanf_s("%lf%lf", &x0, &y0);
757     printf("\n请输入二次项系数:");
758     scanf_s("%lf", &a0);
759     fflush(stdin);
760 
761     creatCoordinate();
762     for (double t = -300; t < 300; t = t + 0.001)
763     {
764         x = (int)(k*x0 + k * t);
765         y = (int)(y0 + a0 * t*t);
766         putpixel(x, y, RED);
767     }
768     getchar();
769     getchar();
770     closegraph();
771 }
772 
773 
774 void function3()
775 {
776     double a, b, m, n;
777     int x, y, k = 10;
778     printf("绘制三角函数图像(y=asin(mx)+bcos(nx))");
779     printf("请输入a,b,m,n");
780     scanf_s("%lf%lf%lf%lf", &a, &b, &m, &n);
781     fflush(stdin);
782     creatCoordinate();
783 
784     for (double i = -10 * PI; i < 10 * PI; i = i + 0.001)
785     {
786         y = (int)(k*a*sin(m*i) + k * b * cos(n*i));
787         x = (int)k*i;
788         putpixel(x, y, RED);
789     }
790 
791     getchar();
792     getchar();
793     closegraph();
794 }
795 
796 void function4()
797 {
798     double a;
799     int x, y, k = 10;
800     printf("绘制幂函数图像(y=Xa");
801     printf("请输入a");
802     scanf_s("%lf", &a);
803     creatCoordinate();
804 
805     for (double i = -300; i < 300; i = i + 0.001)
806     {
807         x = (int)(k*i);
808         y = (int)pow(i, a);
809         putpixel(x, y, RED);
810     }
811 
812     getchar();
813     getchar();
814     closegraph();
815 }
816 
817 void function5()
818 {
819     double a;
820     int x, y, k = 10;
821     printf("绘制指数函数图像(y=aX(a>0且a!=1)");
822     printf("请输入a");
823     scanf_s("%lf", &a);
824     fflush(stdin);
825     creatCoordinate();
826 
827     for (double i = -300; i < 300; i = i + 0.001)
828     {
829         x = (int)(k*i);
830         y = (int)(pow(a, i));
831         putpixel(x, y, RED);
832     }
833 
834     getchar();
835     getchar();
836     closegraph();
837 }
838 
839 void function6()
840 {
841     double a, b, c, d;
842     int x, y;
843     printf("绘制对数函数图像(y=alogb(c+dx)");
844     printf("请输入a,b,c,d(b>0)");
845     scanf_s("%lf%lf%lf%lf", &a, &b, &c, &d);
846     fflush(stdin);
847     creatCoordinate();
848 
849     for (double i = -c / d + 0.1; i < 300; i = i + 0.001)
850     {
851         x = (int)i;
852         y = (int)(a * log(c + d * i) / log(b));
853         putpixel(x, y, RED);
854     }
855 
856     getchar();
857     getchar();
858     closegraph();
859 }
860 void function7()
861 {
862 
863     int x, y;
864     double e, p;  //e为离心率,p为焦准距
865     printf("请输入离心率e,焦准距p");
866     scanf_s("%lf%lf", &e, &p);
867     fflush(stdin);
868     double k = 50;    //调节图形大小
869 
870     creatCoordinate();
871     for (double i = 0; i < 2 * PI; i += 2 * PI / 3600)
872     {
873         x = k * e*p / (1 - e * cos(i))*cos(i);
874         y = k * e*p / (1 - e * cos(i))*sin(i);
875         putpixel(x, y, RED);
876     }
877 
878     getchar();
879     getchar();
880     closegraph();
881 }
882 
883 void function8()
884 {
885     creatCoordinate();
886 
887     int x, y, k = 10;
888     int a = 1, b = 5;
889     for (double i = 0; i < 6 * PI; i = i + 2 * PI / 360)
890     {
891         x = (int)k*(a + b * i)*cos(i);
892         y = -(int)k*(a + b * i)*sin(i);
893         putpixel(x, y, RED);
894     }
895     getchar();
896     getchar();
897     closegraph();
898 }
899 void function9()
900 {
901     creatCoordinate();
902 
903     int x, y;
904     double a = 100;
905     for (double i = 0; i < 2 * PI; i = i + 2 * PI / 720)
906     {
907         x = (int)a * (1 + sin(i))*cos(i);
908         y = -(int)a * (1 + sin(i))*sin(i);
909         putpixel(x, y, RED);
910     }
911     getchar();
912     getchar();
913     closegraph();
914 }
915 
916 void function10()
917 {
918     creatCoordinate();
919     int x, y, a = 200, k = 4;
920 
921     for (double i = 0; i < 4 * PI; i = i + 2 * PI / 3600)
922     {
923         x = (int)a * sin(PI* i)*cos(i);
924         y = (int)a * sin(PI* i)*sin(i);
925 
926         putpixel(x, y, RED);
927     }
928     getchar();
929     getchar();
930     closegraph();
931 }

注意ide

本人使用的是VS2017,上面的代码直接粘贴过去大几率跑不起来,须要作一点修改:函数

一、若提示graphics.h不存在,须要先安装EasyX图形库post

二、报错“Lsta、Lstr: 为声明的标识符”,须要在项目属性中将字符集从Unicode改为多字节字符集spa

三、sprintf等报错,须要在项目属性中关掉SDL检查code

转载于:https://www.cnblogs.com/lfri/p/9890029.htmlhtm