正弦函数的图形表示.docx
- 文档编号:10271539
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:31
- 大小:180.70KB
正弦函数的图形表示.docx
《正弦函数的图形表示.docx》由会员分享,可在线阅读,更多相关《正弦函数的图形表示.docx(31页珍藏版)》请在冰点文库上搜索。
正弦函数的图形表示
课程设计
学号
班级
姓名
指导教师
2007年月日
课程设计任务书
题目:
正弦函数的图形表示
一、课程设计时间
2007年9月10日至2007年9月14日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
在图形模式下,绘制正弦函数sin(x)在x1~x2之间的图形。
注意:
此程序必须用TC2.0编写。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“输入x的区间”、“开始绘制”、、“退出”3项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
_______学生签名:
________
五、成绩:
六、教师评语:
目录
一、需求分析Ⅰ
二、程序流程图Ⅱ
三、核心技术的实现说明及相应程序段Ⅹ
四、个人总结ⅩⅣ
五、参考文献ⅩⅣ
六、源程序ⅩⅤ
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为三大模块,其中他们的功能分别是:
绘制图象(StratUp)、函数参数的设定(Settings)、退出(Quit)。
在这些函数当中,绘制图象(StratUp)又包括菜单栏的绘制,函数图形及坐标轴的绘制和函数的缩放与移动;函数参数的设定(Settings)包括函数Y=ASin(Bx)+C的参数A、B、C及X的区间MinX~MaxX.
二、程序流程图
整体框架图
Y=ASin(Bx)+C
绘制函数图象及功能模块图
(1)菜单界面
(2)函数参数设置
(3)函数区间设置
(4)欢迎屏幕
(5)函数图象
(6)函数的缩放
(7)函数的上下移动
(8)函数的左右移动
三、核心技术的实现说明及相应程序段
voidStartUp()/*图形环境启动*/
{
Initialize();
Start();
Draw();
Pause();
}
/****************************************/
voidInitialize()/*图形设备初始化*/
{
intGD=VGA;
intGM=VGAHI;
intErrorC;
clrscr();
initgraph(&GD,&GM,"");
ErrorC=graphresult();
if(ErrorC!
=0)
{
printf("GraphicsSystemERROR");
exit
(1);
}
cleardevice();
/****************************************/
voidStart()/*欢迎屏幕及视图初始化*/
{
setcolor(RED);
settextstyle(TRIPLEX_FONT,0,9);
outtextxy(120,180,"Welcome");
setcolor(YELLOW);
settextstyle(0,0,1);
outtextxy(6,470,"PressAnyKey...");
getch();
cleardevice();
setfillstyle(SOLID_FILL,7);
setlinestyle(0,0,1);
bar(0,0,639,479);
setfillstyle(SOLID_FILL,BLUE);
bar(1,1,638,12);
Title("FunctionGraphicsV0.1");
DrawRect(3,465,636,476);
DrawMenuBar();
Inform("Ready!
");
}
/****************************************/
intScreenX(doublex)/*数学座标转换为屏幕坐标*/
/*对于屏幕坐标而言,它的X轴坐标与数学坐标的正方向相同,而Y轴的坐标相反*/
{
return(316+ZOOM*x+RX*ZOOM);
}
intScreenY(doubley)
{
return(211-ZOOM*y+RY*ZOOM);
}
voidMoveUp()
{
if(RY-1>=-15)RY-=1;
Draw();
Inform("MoveUp");
}
voidMoveDown()
{if(RY+1<=15)RY+=1;
Draw();
Inform("MoveDown");
}
voidMoveLeft()
{
if(RX-1>=-15)RX-=1;
Draw();
Inform("MoveLeft");
}
voidMoveRight()
{
if(RX+1<=15)RX+=1;
Draw();
Inform("MoveRight");
}
/****************************************/
/*图形缩放*/
voidZoomIn()
{
if(ZOOM*1.5<=80)ZOOM*=1.5;
Draw();
Inform("ZoomIn");
}
voidZoomOut()
{
if(ZOOM/1.5>=1.5)ZOOM/=1.5;
Draw();
Inform("ZoomOut");
}
/*目录的选择功能实现*/
switch(getch())
case‘0’:
;break;
case‘1’:
;break;
case‘2’:
;
判断所输入的数据是否符合要求:
voidSetA()
{
do
{
printf("\nPleaseInputA(-10~10):
");
scanf("%f",&A);
if(A*A>100)printf("InputWrong(-10~10)!
TryAgain.\n");
}while(A*A>100);
}
voidSetB()
{
do
{
printf("\nPleaseInputB(-10~10):
");
scanf("%f",&B);
if(B*B>100)printf("InputWrong(-10~10)!
TryAgain.\n");
}while(B*B>100);
}
voidSetC()
{
do
{
printf("\nPleaseInputC(-10~10):
");
scanf("%f",&C);
if(C*C>100)printf("InputWrong(-10~10)!
TryAgain.\n");
}while(C*C>100);
}
/****************************************/
/*区间设置*/
voidSetMaxX()
{
do
{
printf("\nPleaseInputMaxX(-100~100):
");
scanf("%f",&MaxX);
if(MaxX*MaxX>10000||MaxX<=MinX)printf("InputWrong.(-100~100),AndMaxX>MinX!
TryAgain.\n");
}while(MaxX*MaxX>10000||MaxX<=MinX);
}
voidSetMinX()
{
do
{
printf("\nPleaseInputMinX(-100~100):
");
scanf("%f",&MinX);
if(MinX*MinX>10000||MaxX<=MinX)printf("InputWrong.(-100~100),AndMinX TryAgain.\n"); }while(MinX*MinX>10000||MaxX<=MinX); 四、个人总结 通过这次C语言的课设实践活动,使我充分的体会到自己的不足。 这让我在实践中对C语言又有了一个全新的认识。 这让我在了解到自己的不足的同时,使自己对C语言的掌握又加深了一步。 尤其是在这次实践活动中,我的课题: 绘制函数SinX的过程中了解了更多的知识,对于C语言的绘图有了一定的掌握。 使得自己可以运用程序画出简单的函数图象。 在对C语言绘制图形的过程中,让自己了解到不少东西,如数学坐标转换成屏幕坐标,菜单栏及欢迎屏幕的制作,图形的缩放及移动,图形的颜色和立体感上也有了一定的了解,并可以进行一些简单的操作等 五、参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2005 六、源程序 /*编译预处理*/ #include #include #include #include #include #include #defineESC0x1b #defineMENUstructmenu /*#############################################*/ /*菜单结构体*/ structmenu { charName[16]; intValue; void(*Function)(); }; /*#############################################*/ /*全局变量*/ intRX=0,RY=0; doubleZOOM=10; intQ=10; floatA=1,B=1,C=0; floatMaxX=32,MinX=-32; /*菜单*/ MENUMenus[3]; MENUMenus2[6]; /*#############################################*/ /*函数声明*/ voidm(); voidInitialize(); voidStart(); voidDraw(); voidDrawMenuBar(); voidZoomIn(); voidZoomOut(); voidPause(); voidTitle(char*str); voidInform(char*str); voidDrawMenu(MENU*m,int,int,int,int); voidDrawRect(int,int,int,int); voidDrawAxis(int,int,int,int); voidMoveUp(); voidMoveDown(); voidMoveLeft(); voidSetMinX(); voidSetMaxX(); voidSetA(); voidSetB(); voidSetC(); voidSetting(); intMenuInput(MENU*M,int); voidShowMenu(MENU*M,int); voidQuit(); voidMoveRight(); voidConfigure(); voidStartUp(); intScreenX(double); intScreenY(double); doubleFunction(double); /*######################################*/ /*程序开始*/ /****************************************/ main()/*主函数*/ {/*菜单资源初始化*/ strcpy(Menus[0].Name,"StartNow");Menus[0].Value=0;Menus[0].Function=&StartUp; strcpy(Menus[1].Name,"Settings");Menus[1].Value=1;Menus[1].Function=&Setting; strcpy(Menus[2].Name,"Quit");Menus[2].Value=2;Menus[2].Function=NULL; strcpy(Menus2[0].Name,"SetA");Menus2[0].Value=0;Menus2[0].Function=&SetA; strcpy(Menus2[1].Name,"SetB");Menus2[1].Value=1;Menus2[1].Function=&SetB; strcpy(Menus2[2].Name,"SetC");Menus2[2].Value=2;Menus2[2].Function=&SetC; strcpy(Menus2[3].Name,"SetMinX");Menus2[3].Value=3;Menus2[3].Function=&SetMinX; strcpy(Menus2[4].Name,"SetMaxX");Menus2[4].Value=4;Menus2[4].Function=&SetMaxX; strcpy(Menus2[5].Name,"Back");Menus2[5].Value=5;Menus2[5].Function=NULL; Configure();/*进入程序*/ } /****************************************/ voidStartUp()/*图形环境启动*/ { Initialize(); Start(); Draw(); Pause(); } /****************************************/ voidInitialize()/*图形设备初始化*/ { intGD=VGA; intGM=VGAHI; intErrorC; clrscr(); initgraph(&GD,&GM,""); ErrorC=graphresult(); if(ErrorC! =0) { printf("GraphicsSystemERROR"); exit (1); } cleardevice(); } /****************************************/ voidConfigure()/*字符环境主菜单*/ { do { clrscr(); printf("#######################################\n"); printf("##\n"); printf("#Welcome#\n"); printf("##\n"); printf("#######################################\n"); ShowMenu(Menus,3); }while(MenuInput(Menus,3)! =1); Quit(); } /****************************************/ intMenuInput(MENU*ms,intn)/*菜单输入*/ { inti,a=0; charc; do { c=getch(); for(i=0;i { if(c==('0'+ms[i].Value)) { if(ms[i].Function==NULL){a=1;break;break;} else{ms[i].Function();break;break;} } } }while(i==n); returna; } /****************************************/ voidShowMenu(MENU*ms,intn)/*显示菜单*/ { inti; for(i=0;i { printf("[%d]--%s\n",ms[i].Value,ms[i].Name); } printf("Select: "); } /****************************************/ voidStart()/*欢迎屏幕及视图初始化*/ { setcolor(RED); settextstyle(TRIPLEX_FONT,0,9); outtextxy(120,180,"Welcome"); setcolor(YELLOW); settextstyle(0,0,1); outtextxy(6,470,"PressAnyKey..."); getch(); cleardevice(); setfillstyle(SOLID_FILL,7); setlinestyle(0,0,1); bar(0,0,639,479); setfillstyle(SOLID_FILL,BLUE); bar(1,1,638,12); Title("FunctionGraphicsV0.1"); DrawRect(3,465,636,476); DrawMenuBar(); Inform("Ready! "); } /****************************************/ intScreenX(doublex)/*数学座标转换为屏幕坐标*/ { return(316+ZOOM*x+RX*ZOOM); } intScreenY(doubley) { return(211-ZOOM*y+RY*ZOOM); } /****************************************/ voidSetting()/*字符界面参数设置菜单*/ { do { clrscr(); printf("#######################################\n"); printf("##\n"); printf("#Settings#\n"); printf("#y=Asin(B*x)+C#\n"); printf("##\n"); printf("#######################################\n"); ShowMenu(Menus2,6); }while(MenuInput(Menus2,6)! =1); } /****************************************/ voidDraw()/*绘制函数图像*/ { doublex,y,y2; intMaxY,MinY; DrawRect(3,37,636,460); setviewport(4,38,635,459,1); setfillstyle(1,7); bar(0,0,640,480); /*MaxX=316/ZOOM;*/ MaxY=211/ZOOM; /*MinX=-316/ZOOM;*/ MinY=-211/ZOOM; DrawAxis(MaxX,MaxY,MinX,MinY); setcolor(RED); setlinestyle(0,0,1); for(x=MinX;x<=MaxX;x+=1.0/Q) { y=Function(x); y2=Function(x+1.0/Q); line(ScreenX(x),ScreenY(y),ScreenX(x+1.0/Q),ScreenY(y2)); } } /****************************************/ voidDrawMenuBar()/*绘制菜单条*/ { setlinestyle(0,0,1); setcolor(DARKGRAY); line(1,13,638,13); line(1,27,638,27); setcolor(WHITE); line(1,14,638,14); line(1,28,638,28); setcolor(BLACK); settextstyle(DEFAULT_FONT,0,1); } /****************************************/ /*绘制坐标轴*/ voidDrawAxis(intmaxx,intmaxy,intminx,intminy) { inti; setcolor(GREEN); line(ScreenX(minx),ScreenY(0),ScreenX(maxx),ScreenY(0)); line(ScreenX(0),ScreenY(miny),ScreenX(0),ScreenY(maxy)); for(i=minx;i<=maxx;i++) { if(i%10==0) { line(ScreenX(i),ScreenY(-1),ScreenX(i),ScreenY (1)); } } for(i=miny;i<=maxy;i++) { if(i%10==0) { line(ScreenX(-1),ScreenY(i),ScreenX (1),ScreenY(i)); } } } /****************************************/ voidInform(char*str)/*状态栏输出*/ { setviewport(4,466,635,475,1); setfillstyle(1,7); bar(0,0,640,100); setcolor(BLUE); settextstyle(DEFAULT_FONT,0,1); outtextxy(2,1,str); setviewport(0,0,639,479,1); } /****************************************/ voidPause()/*程序暂停等待用户输入*/ { intExitFlag=0; do { switch(getch()) { case72: MoveUp();break; case80: MoveDown();br
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正弦 函数 图形 表示