C语言课程设计-简谐振动实验的模拟_第1页
C语言课程设计-简谐振动实验的模拟_第2页
C语言课程设计-简谐振动实验的模拟_第3页
C语言课程设计-简谐振动实验的模拟_第4页
C语言课程设计-简谐振动实验的模拟_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计课程设计报告题 目简谐振动实验的模拟姓 名 学 号 同组人员 学 号 年级专业09电子信息工程(2)班指导教师 完成日期2010年6月13日目 录一、问题描述二、基本要求 三、系统分析和过程四、流程图五、源程序代码六、小结及收获体会七、参考文献八、评定意见一:问题描述 本程序设计是一个将物理问题与C语言程序设计结合的程序设计问题。能够实现用用C语言编程让计算机模拟简谐振动的实验,可以改变振动函数的各参数,绘出不同振幅、频率和相位的简谐振动图形。以及完成两简谐振动的合成。二:基本要求1) 能够实现简谐振动的模拟; 2) 简谐振动的振幅、频率以及相位由键盘输入; 3) 能够实现动画效

2、果。三、系统分析和过程简谐振动的函数是y=a*cos(w*x+f),是一条余弦函数。振幅、频率和相位由键盘输入,最重要的是要使用到画图函数,并且实现动画效果。整个程序包括头文件,函数及变量声明,main主函数,开始页面函数,菜单页面函数,画图函数,输入处理函数和图形初始化函数。先用一个开始页面的函数,说明该程序的基本功能, 再进入菜单页面,从中可以选择操作(输入处理函数选项、画图选项、退出选项),到其他函数。在输入处理函数中输入振幅、频率、相位,在画图函数中进行画图,能够实现动画效果,退出选项退出运行。难点是画图函数中画线,画图框,和实现动态效果,要运用到专门的函数,要了解他们的使用方法,作用

3、,还要用到循环,要求能够在屏幕中显示出同方向传播的两列简谐波和它们的合成波,因此实现此功能必须引用图形函数,和其中很多功能的应用。在屏幕中我们要实现三列波动态的演示效果,并能够在动态图形中观察三波的关系。因此在这里我们要引用时间函数来实现此功能。本实验中我们调用了以下库函数: #include <stdio.h>#include <stdlib.h>#include <graphics.h>#include <conio.h>#include <math.h>#include <time.h>为实现功能写了以下5个函数:v

4、oid welcome(); /*开始页面*/void menu(); /*菜单页面*/ void input();/*输入处理函数*/ void initial();/*图形初始化*/void draw();/*画图及合成处理过程*/在以下的清单中对它们列出,且简要说明。四、流程图程序开始 图形模式初始化开始对程序的说明页面进入菜单页面用户输入choose判断cho的值是否是3True False 判断cho的值是1还是2 演示简谐波及其合成图Input输入函数参数 用户输入1 (合成) 2退出图形模式退出程序五:程序清单#include"stdio.h"#include

5、"stdlib.h"#include"graphics.h"#include"conio.h"#include"math.h"#include"time.h"#define GAIN 10 /*增益*/void welcome( ); /*初始界面*/void menu( ); /*选择菜单页面*/void input( ); /*输入处理函数*/void draw( ); /*画图函数*/void initial( ); /*图形初始化*/float a1,w1,f1; /*两振动的参数*/f

6、loat a2,w2,f2;int main( )welcome( );menu( );return 0;void welcome( )char s40; /*屏幕初始化*/int gdriver,gmode;gdriver=DETECT;initgraph(&gdriver,&gmode,"c:tc");cleardevice( );setbkcolor(0); /*设置背景为黑色*/setfillstyle(6,14); /*用黄色粗“”线填充*/bar(2,2,638,478);setfillstyle(1,1);bar(8,8,632,472); s

7、etviewport(40,40,600,440,1);setfillstyle(1,2);setcolor(YELLOW);rectangle(0,0,560,400);floodfill(50,50,14);rectangle(20,20,540,380);setfillstyle(1,13);floodfill(19,19,14);setcolor(15);settextstyle(4,0,6);outtextxy(135,55,"Welcome You!");setviewport(100,150,540,380,0);setcolor(14); rectangle

8、(20,20,420,230); setfillstyle(1,12);floodfill(21,100,14);setcolor(1);settextstyle(3,0,1); /*程序功能说明部分*/sprintf(s," Thanks for you to use this program!"); outtextxy(25,30,s);sprintf(s,"Instruction: ");outtextxy(25,57,s);sprintf(s,"This function of the program is that drawi&quo

9、t;);outtextxy(25,79,s);sprintf(s,"-ng two simple harmonic motion's waves ");outtextxy(25,101,s);sprintf(s,"and synthesising the two harmonic motions,");outtextxy(25,123,s);sprintf(s,"it also can draw synthesised motion's wave.It");outtextxy(25,145,s);sprintf(s,&

10、quot;can show changes of the (y) with time(t).");outtextxy(25,167,s);sprintf(s," Press any key to enter to the Menu!");outtextxy(25,193,s);getch();closegraph();menu();void menu( )int cho;system("cls"); /*调用DOS命令清屏*/printf("tttWelcome to use this programnnnn");print

11、f("tPlease choose:nn");printf("nnntt1.Input");printf("tt2.Draw");printf("tt3.Exitn");printf("nnnnttselect the number:");scanf("%d",&cho);textbackground(9); /*设置背景为淡蓝色*/textcolor(15); /*设置字体为白色*/ clrscr( );switch(cho)case 1:input( );brea

12、k;case 2:draw( );break;case 3:exit(0);default:printf("Error input! Please input again: ");getch( );menu( );void input( )/*输入Y1的参数*/printf("nnttY1=A1*COS(W1*t+f1)n");printf("ttPlease input the parameters for Y1n");printf("ttA1=");scanf("%f",&a1);p

13、rintf("ttW1=");scanf("%f",&w1);printf("ttf1=");scanf("%f",&f1); /*输入Y2的参数*/printf("nnttY2=A2*COS(W2*t+f2)n");printf("ttPlease input the parameters for Y2n");printf("ttA2=");scanf("%f",&a2);printf("ttW2=&

14、quot;);scanf("%f",&w2);printf("ttf2=");scanf("%f",&f2);printf("nttPress any key to return to the Menu");getch( ); /*等待任意键* /menu( );void initial( )char s50;setbkcolor(BLACK); /*设置背景色为黑色*/cleardevice( ); /*清屏*/*画最外围的边框及内部一些边框*/setfillstyle(1,3);bar(1,1,

15、639,479);setfillstyle(7,14);bar(4,4,636,476);setcolor(4); rectangle(11,11,629,469);setfillstyle(1,1);bar(12,12,628,468);setfillstyle(1,7);bar(26,26,454,404); /*图形区动画区初始化*/setfillstyle(1,0);bar(30,30,450,400);setcolor(15);sprintf(s,"THE Y1:"); /*三坐标轴的说明*/outtextxy(70,40,s); sprintf(s,"

16、THE Y2:");outtextxy(70,160,s);sprintf(s,"THE SYNTHESZED BELOW:"); outtextxy(70,280,s);/*函数Y1信息区初始化*/setfillstyle(1,7);bar(467,27,612,133);setfillstyle(1,12);bar(470,30,609,130);settextstyle(DEFAULT_FONT,HORIZ_DIR,1); /*设置直线的风格(实线)一点宽*/sprintf(s,"Dynamic");outtextxy(480,40,s)

17、;sprintf(s,"Information");outtextxy(480,50,s);sprintf(s,"of Y1:");outtextxy(480,60,s);sprintf(s,"A1=%.2f,W1=%.2f",a1,w1);outtextxy(480,70,s);sprintf(s,"f1=%.2f",f1);outtextxy(480,80,s); /*函数Y2信息区初始化*/setfillstyle(1,7);bar(467,147,612,253);setfillstyle(1,12);ba

18、r(470,150,609,250);settextstyle(DEFAULT_FONT,HORIZ_DIR,1); sprintf(s,"Dynamic");outtextxy(480,160,s);sprintf(s,"Information");outtextxy(480,170,s);sprintf(s,"of Y2:");outtextxy(480,180,s);sprintf(s,"A2=%.2f,W2=%.2f",a2,w2);outtextxy(480,190,s);sprintf(s,"

19、f2=%.2f",f2);outtextxy(480,200,s);/*合成函数信息区初始化*/setfillstyle(1,7);bar(467,297,612,403);setfillstyle(1,12);bar(470,300,609,400);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);sprintf(s,"Dynamic");outtextxy(480,310,s);sprintf(s,"Information");outtextxy(480,320,s);sprintf(s,"of SY

20、:");outtextxy(480,330,s);setlinestyle(SOLID_LINE,0,NORM_WIDTH); /*设置直线风格为细线*/ /*Y1的坐标轴*/setcolor(YELLOW);line(60,90,430,90);line(60,40,60,140);line(425,85,430,90); /*画坐标箭头*/line(430,90,425,95);line(55,45,60,40);line(60,40,65,45);sprintf(s,"Y1"); /*坐标名称*/outtextxy(38,45,s);sprintf(s,&q

21、uot;t");outtextxy(425,105,s);sprintf(s,"0"); /*坐标原点*/outtextxy(50,90,s); /*Y2的坐标轴*/line(60,210,430,210);line(60,160,60,260);line(425,205,430,210); /*画坐标箭头*/line(430,210,425,215);line(55,165,60,160);line(60,160,65,165);sprintf(s,"Y2"); /*坐标名称*/outtextxy(38,165,s);sprintf(s,&q

22、uot;t");outtextxy(425,225,s);sprintf(s,"0"); /*坐标原点*/outtextxy(50,210,s); /*SY的坐标轴*/ line(60,330,430,330);line(60,280,60,380);line(425,325,430,330); /*画坐标箭头*/line(430,330,425,335);line(55,285,60,280);line(60,280,65,285);sprintf(s,"SY"); /*坐标名称*/ outtextxy(38,285,s);sprintf(s

23、,"t");outtextxy(425,345,s);sprintf(s,"0"); /*坐标原点*/outtextxy(50,330,s);void draw( ) /*画图及合成处理函数*/int i=0;float y1,y2,sy;char s40; /*屏幕初始化*/int gdriver,gmode; gdriver=DETECT;initgraph(&gdriver,&gmode,"c:tc");initial( ); /*初始化图形*/setfillstyle(SOLID_FILL,BLACK);bar

24、(40,410,440,440);setcolor(14);sprintf(s," Press any key to begin!");outtextxy(40,420,s);w1=w1/10;w2=w2/10;y1=a1*cos(w1*i+f1);y2=a2*cos(w2*i+f2);y1=y1*GAIN;y2=y2*GAIN;sy=y1+y2;setcolor(2);getch( ); /*开始画线*/while(i<360) i+; /*画Y1的线*/ moveto(60+i-1,y1+90);y1=GAIN*a1*cos(w1*i+f1);lineto(60+

25、i,y1+90); /*Y1动态信息显示*/ setcolor(YELLOW); rectangle(479,89,601,121); bar(480,90,600,120); setcolor(GREEN);sprintf(s,"Y1=-%f",y1/GAIN);outtextxy(480,100,s);sprintf(s,"t1=%d",i);outtextxy(480,110,s);/*画Y2的线*/moveto(60+i-1,y2+210);y2=GAIN*a2*cos(w2*i+f2);lineto(60+i,y2+210); /*Y2动态信息

26、显示*/setcolor(YELLOW); rectangle(479,209,601,241); bar(480,210,600,240); setcolor(GREEN);sprintf(s,"Y2=-%f",y2/GAIN);outtextxy(480,220,s);sprintf(s,"t2=%d",i);outtextxy(480,230,s);/*画合成的线*/moveto(60+i-1,sy+330);sy=y1+y2;lineto(60+i,sy+330); /*合成线动态信息显示*/setcolor(YELLOW); rectangle(479,349,601,381); bar(480,350,600,380); setcolor(GREEN);sprintf(s,"SY=-%f",y1/GAIN+y2/GAIN);outtextxy(480,360,s);sprintf(s,"t3=%d",i)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论