C语言课程设计振动波的合成原理.docx
《C语言课程设计振动波的合成原理.docx》由会员分享,可在线阅读,更多相关《C语言课程设计振动波的合成原理.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言课程设计振动波的合成原理.docx](https://file1.bdocx.com/fileroot1/2023-1/27/0226bad2-7855-47f9-99a5-042dd86fa496/0226bad2-7855-47f9-99a5-042dd86fa4961.gif)
C语言课程设计振动波的合成原理
C语言课程设计••振动波的合成原理
课程设计报告
振动合成原理的模拟
同组人员
年级专业2009级电子信息工程
指导教师
完成日期2°1°年6月27日
C语言课程设计-振动波的合成原理
物理与电子信息学院课程设计评定意见
主要内容包括:
设计报告内容的完整性和完成情况、报告格式的规范性、通过课程设计取得的收获等。
指
导
教
师评语
C语言课程设计-振动波的合成原理
成绩:
签名:
年月日
设计过程:
1)选题
2)分析设计
3)编程调试
4)撰写实验报告
程序设计模板与流程:
模板:
#include“stdio.h"
#include,4std1ib»h,r
ui()
#includectgraphics。
h”
#inc1ude"conio.h"
tial()1
#inc1ude"std1ib.h"
#inc1udeath.h”
input()]
井ineludeh”
voidInItian();
流程:
主函数调用we1comeg
图形初始化[ini
输入两图形的参数[user
合成处理图形[synth
esize()]
voiduserinputQ;
voidsynthesize。
;voidwelcomegui();intmainQ
{
}
1.问题描述:
在程序中,要输入振动参数,实现动态效果及合成图像的显示。
2.基本要求:
此程序用来实现简谐振动的合成,在程序中,要输入两个分简谐振动的振幅,频率和初位相,还要实现动态效果。
其中,动态效果的实现是此程序的重点。
在程序中,必须用到一些绘图函数。
3.系统分析和数据:
此程序主要是实现简谐振动的合成,其中,开始利用主函数调用一个函数,对操作进行选择;然后绘出三坐标轴,使图形出现的方位确定;接着,输入两分振动的参数;最后合成三图形。
四。
程序的说明:
此程序是为了实现简谐振动的合成。
在程序中,开始利用主函数调
C语言课程设计-振动波的合成原理
用welcomegui();函数,对要进行的操作进行选择。
然后对图形坐标及图形显示在屏幕上的位置进行定位,其中运用了sprintf();和outtextxy();函数,接着输入Y1和Y2的参数,并再次调用函数,对操作进行选择,最后,合成处理函数,同步显示来年各个分振动和一个合振动。
5.O主要函数的说明:
sprintf();:
格式化输岀函数或图形,sprIntf()给出的第一个参数string,然后再调用outtextxy()将申里的字符显示在屏幕上通常在绘图方式下输出数字,可调用sprintf()将所输出的格式送到第一个参数,然后显示输出。
ou11extxv();:
在指定位置显示一字符串。
voidouttextxy(intx3Inty3char*te
xtstiiiig)
set1inestyle();:
设置当前画线宽度和类型.
setf1DstyleQ;:
设置填充模式和颜色
bar();:
画一个两维条形图。
voidbar(Intleft,inttop,intrightjnt
bottom)
delayf);:
将程序的执行暂停一段时间〔毫秒)。
1ineto();:
直线的绘制。
cleardevice(>;:
清屏。
moveto();:
将CP移到(x,y)0
源程序代码与调试
用前在TC目录下输入以下两个命令aBGIOBJEGAVGAa和
TLIBLIBGRA.PHICS.LIE+EGAVG/U
代码如下:
#include"stdio.h"
#inelude"stdlib.h”
#Includengraphics.\\
#iDelude"conio.hp
#include"stdlib。
hr
幷include"math・h"
ffinc1ude”time。
h”
#defineGAIN10/*増益
voidinitial(void);
/伙图形初始化*/
voiduserinput〔void):
/*输入处理函数*/
voidsynthesize(void);
合成处理过程*/
voidweIcomegui(void);
/*开始页面*/
floatal=1,wl=hf1=0;
/*两振动的参数*/
floata2=1,w2=Uf2=0;
intmain(void)
{
we1comeguj():
return0;
}
voldinitial(void)
{
chars[50];
setbkcolor(BLACK);设置背景色为黑色*/
$etlinestyle(SOLID_LINE,0,THICK_WIDTH>;/氓设置
直线的风格,粗线玄/
cleardev1ce():
/吠清屏*/
/*画最外围的边框玄/
line<10,10,629,10);
1ine(629,10,629,469):
line(6299469,10,469〉:
line(10,469,10,10);
/*图形区功画区初始化刃
line(40,30,450,30):
1ine(450,30,450,400);
1ine(450,400,40,400);
1in已〈40,400,40,30);
$Printf(s,"SYNTHESIZEDBELOW:
;/*三个坐标轴的说明
outtextxy(70,40?
s);
sprintffs,,FTHEXI;”):
outtextxy(70,160,s);
sprintf〔s,"THEX2:
");
□uttextxy(70,280,s)•
/吹函数XI信息区初始化*/
1ine(470,30,609,30);
line(609,30,609,130);
line(609,130,470,130);
line(470,130,470,30);
settextsty1e(DEFAULT_F0NT,HORIZ_DIR,1);
sprintf(s,"Dynamic");
outtextxy(480,40,s);
sprintf(s711Information7?
)-
outtextxy(480,50?
s);
$printf
");
outtextxy(480,60,s);
sprintf(s,pAl=%・2f.V/1=%o2frFa1,wl);outtextxy(480,70,s);
sprintf(s,"f1=%.2f",fl〉;
outtextxy(480,80?
s);
函数X2信息区域初始化*/
line(470,180,609,180);
1ine(609,180,609,280〉;
line(609,280,470,280>;
line<470,280,470,180>;
sprint.f(s・卩Dynamic");
outtextxyC480,190,s);
sprintf(s?
pInformation");
outtextxy(480,200,s);
sprintf(s,rofX2:
v):
outtextxy(480,210
$printf(&,”A2=%.2f,腔啤.2『”,a2,w2):
outtextxy(480,220,s);
sprintf〈$,"f2=<2f”,f2);
outtextxy〈480,230,s);
合成图形信恳区初始化*/
line<470,300,609,300):
1ine(609,300,609,400〉;
1ine(609,400,470,400);
line(470,400,470,300);
sprintf
outtextxy(480,310,s);
sprintf®”Information*):
outtextxy(480,320,s);
sprintf(s,"ofSX:
n)-
outtextxy〈480,330,s)-
设置直
setIinestyle(S0LID_LINE?
0,N0RMJVIDTH>;接风格为细线*/
合成函数的坐标轴灯
line(60,90,430,90):
line〈6D,40,60,140);
line(425,85,430,90);/*画坐标箭头*/
1ine(430,90,425,25).
Iine(55,45,60,40);
line(60,40,65,45〉;
sprintf〈5,"SX"〉;/*坐标名称吹/
outte^txy〈43,55,s)-
sprintf〈s,”t”〉;
outt.extxy(425,105,s):
sprintf(s,"0"〉;/*坐标原点、*/
outxy(50,90,$);
/*X1的坐标轴权
line(60,210,430,210);
1ine(60,160,60,260):
line〔425,205,43D,210);画坐标箭头*/
1ine(430,210,425,215);
1ine(55,165,60,160);
line(60,160,65,165〉;
sprintf($,wXI,r);坐标名称
outtextxy(43,175,s);
sprintf(s,"t"〉:
outtesprintf
outtextxy(50210,s):
/*X2的坐标轴*丿
1ine(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(SgrX2"):
坐标名称吹/
outtexy(43,295,s);
sprintf(s,"t");
outtextxy(425,345,s)-
sprintf(s,'■0;/*坐标原点吠/
outtextxy(50.330,s);
void
userinput(void)
/*输入X]的参数*丿
pr1ntf〈”XI=A1*COS(W1*t十fl〉”〉:
printfPlea$einputtheparametersforX1")
printfAl=”);
seanf(l,%f",&al):
prjntf(W1=O:
seanfC%fr,&wl);
printff1=");
seanf(lt%r,&fl);
rsforX2V):
comeGUI"〉-
/來输入X2的参数去/
printfCX2=A2*COS(W2*t+f2)”〉;
printfprintf〔”A2=”〉;
scanf〔"%f”,&a2〉;
printf(”W2=”);
scanf(ft%f",&w2〉;
printf<"f2二"〉;
scant%f”9&f2);
printf〔”PressanykeytofetumtotheWegetch<)./木等待任意键*/
v?
elcomegui<);
oidsynthesize(void)合成处理函数权
Inti=0;
floaty1,y2:
floatsy;chars[40];intgdriver,gmode;
gdriver=DETECT;
registerbgjdriver(EGAVGA_driver);
initgraph(&gdriver,&gmo己e,r'*);/*注意
此处的第三个参数吠/
initial();/太初始化图形古/
setfi11style(SOLIDFlLL,BLACK〉;
sprintf(s,pPressanykeytobegin!
");
outtextxy(5D,420,s):
wl=wl/10•
w2=w2/10;
y1-al*cos(vz1*i+fl)•
y2=a2*cos(v/2*i+f2):
yL=yl法GAIN;
y2=y2*GAIN;
sy=yi+y2;
getch():
/*任意键开始*/
/*开始画线*/
while(i<360)
{
/古画XI的线吠/
moveto(60+i-1,y1+210);
y1二GAINal*cos(wl*i+fl);
lineto(60+1,71+210):
/*X1的动态信息显伙/
bar(480,90,600,110);
sprintF($,”XI=-%f”,y1/GAIN);
outtexLxy(480,90?
s);
sprintf(s,"tl=%d",i);
outtextxy(480<100,$):
/*BX2的线*/
moveto(60+i—1,y2+330);
y2=GAIN*a2*cos(w2*i+f2);
lineto(60+i,y2+330>;
/*X2的动态信息显示*/
bar(480,240,600,260);
sprintf(s,”%2=—汀2/GAIN);
outtextxy(4B0?
240,s);
sprintf(s,,Ft2=%d「,i):
outtextxy<480,250,s):
/*画合成曲线水/
moveto(60+i-l,sy+90);
sy=yl+y2;
1Ineto(60+i,sy+90);
/次合成曲线动态信恳显示椰
bar<480,340,600,360):
sprintf(s,”SX=—%,yl/GAIN+y2/GAIIC:
outte^txy(480,340,s);
sprintf(s,"=%d",i);
outtex.txy(480,350,s);
delay(2000):
Q为看洁过程.中间有延迟*/
}
bar(50.410,250,440);/*此句将前的任意键开始的说明擦除*/
spriritf〈s?
"F匚e5sanykeyto匚eturritothewelcomeGUI!
");
outtextxy(50,420,$);
getch0;J*任意键返回开始的页面权
closegraph();
welcomegui()-
}
yoidwelcomegui(void)
{
intsei;
systemCcls"〉;调用DOS命令清屏咲/
prlntf(“We1cmetousethisprograme^^v);
printf(11Pleaseselect-p)-
printfC0.Input”);
printfpc1ntfC2.Exjt,r):
scanf(,”%d",&sel〉;
switch(sei)
{
case0:
userinput〈);break;
case1:
synthesize();break;
case2:
exit(0);
default-printf("ERRORINPUT!
Pleaseinputagain:
”〉;
getch();
welcomegui();
}
}
g#include(graphicSoh>
#include^#inc1ude
#include(math.h)
main0的{
intgraphdrv=VGA;
intgraplirnode=VGAHI;
int尸150,t=0,x-200,u=20?
n=1000,y,r=4,i;
f1oat.w=0.05if=0.8;ainitgraph(&graphdrv&
graphmode,tc\\bgi")for(t=0;t<=1D0;t++)
{△『or
cos(W*t+f)+250;
c1eardvice();
line1iiie(x+10*i,u,心10*i+10,u—10)
lineU,X,y);
1ine◎circ1e〈x,y,r—1);
circle(xy.r一2);
circle(xy,r)於}
while(!
kbhit<))-
c1osegraph<):
.调试:
一|口|x[
一.输入数据界面:
cTG:
\IVM0C2\lllEXf
Welcmetousethispi*og>»ane
•2・
405A405
-O运行界面:
六。
小结及收获和体会:
这次课程设计,是对一学期来C语言学习成果的检验,但由于学的知识有限,不能只靠书本知识来实现简谐振动的合成,因此,需要借阅资料和网络资源.在编程与调试过程中,遇到过很多不懂的知识,有时难免不知所措,才知道,书到用时方恨少。
明白,对知识的学习,应该认真钻研,平时多浏览学习编程方面的书•这次调试虽然以顺利通过,但其中很多知识都是参考资料,然后才弄懂的。
这次课程设计中,学到了很多,不仅在编程方面,了解了很多函数,也感觉到编程是一件很有意义的事,以后,一定要多钻研这方面的书,可以自己单独的编出一些程序.
九、参考书目
[1]谭浩强,C程序设计教程,清华大学出版社,2007年
[2]赵永哲,李雄飞,戴秀英编著,《C语言程序设计》,科学岀
版社,2003年谭浩强编著,《C程序设计》,清华大学出版社,1991年
[3」GaryJ。
Bronson,AFirstBo0kofANSIC(FourthEdi11on\PublishingHouseofElectronicsIndustry,2006.
[4]AlKe11ey,IraPohl,ABookonC:
Program
ininginC(FourthEdition),ChinaMachinePress,2004。
[5]BrianW>Kemighan.DennisM・Ritchie,TheCProgrammingLanguage,ChinaMachinePress?
2006.