哈工大C语言课程设计Word文件下载.docx
- 文档编号:20627140
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:20
- 大小:53.88KB
哈工大C语言课程设计Word文件下载.docx
《哈工大C语言课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《哈工大C语言课程设计Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
此任务书由课程设计指导教师填写。
题目一
1.1题目详细描述:
播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。
1.2
程序设计思路及流程图:
是
1.3程序清单及注释:
#include<
stdio.h>
dos.h>
stdlib.h>
time.h>
bios.h>
conio.h>
#defineN116
#defineN28
#defineN44
#defineN82
#defineN161
#defineEND0
voidplaymusic(intn,int*c);
voidtypemusic();
enumNOTES{
C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,
C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,
C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,
C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976,S=10
};
typedefenumNOTESSONG;
SONGsong1[]={C0,N4+N2,E0,N4,G0,N2,G0,N2,A0,N1,G0,N1,E0,N4+N2,
C0,N4,G0,N1/3,G0,N1/3,G0,N1/3,E0,N1,C0,N1,G10,N1/3,G10,N1/3,
G10,N1/3,G10,N1/3,G10,N1/3,G10,N1/3,C0,N1,END,END};
SONGsong2[]={A0,N2,B0,N2,C1,N1+N2,B0,N2,C1,N1,E1,N1,B0,N1+N1,S,N1,E0,N1,
A0,N1+N2,G0,N2,A0,N1,C1,N1,G0,N1+N1,S,N1,E0,N2,E0,N2,F0,
N1+N2,E0,N2,F0,N1,C0,N1,E0,N1+N1,S,N1,C1,N2,C1,N2,B0,N1+N2,370,
N2,F0,N1,B0,N1,B0,N1+N2,S,N1,A0,N2,B0,N2,C1,N1+N2,B0,N2,C1,N1,
E1,N1,B0,N1+N2,END,END};
intmain()
{
intm,n,c=1;
charb='
y'
;
while(b=='
)
{
printf("
Hello,whatdoyouwanttodobythisprogram?
\n"
);
1.Listentomusic.-------Press1\n"
2.Playmusicbyyourself.-------Press2\n"
scanf("
%d"
&
m);
while(m!
=1&
&
m!
=2&
=3)/*选择方式*/
Youtypedwrong!
Donotpushmearound.:
(\n"
}
if(m==1)
Ihavetwomusics,chooseone!
(Press1/2)\n"
n);
while(n!
n!
=2)
playmusic(n,&
c);
elseif(m==2)
typemusic();
getchar();
Doyouwanttocontinue?
(y/n)\n"
%c"
b);
return0;
}
voidplaymusic(intn,int*c)
intnote=0,fre,dur,control;
chard;
clock_tgoal;
if(n==1)
while(song1[note]!
=END)
fre=*c*song1[note];
dur=song1[note+1];
if(kbhit())break;
if(fre)
{/*若频率值fre非0*/
outportb(0x43,0xb6);
/*初始化2号定时器*/
fre=(unsigned)(1193180L/fre);
/*计算计数初值*/
outportb(0x42,(char)fre);
/*先写计数初值的低8位*/
outportb(0x42,(char)(fre>
>
8));
/*再写计数初值的高8位*/
control=inportb(0x61);
/*读0x61的状态*/
outportb(0x61,control|0x03);
/*将第0位,第1位置1,使喇叭发声*/
goal=(clock_t)dur+clock();
while(goal>
clock());
if(dur)
outportb(0x61,control);
note+=2;
}else
while(song2[note]!
fre=*c*song2[note];
dur=song2[note+1];
Doyouwanttoraise/lowerthefrequency?
Pressr/l\nIfyoudonotwantpressn\n"
d);
if(d=='
r'
*c*=2;
elseif(d=='
l'
*c*=0.5;
n'
*c=*c;
voidtypemusic()
charch;
intfre=0,control,dur=2;
Playyourownmusic!
\n(YoucanplayonthekeyboardbypressingZ-M,A-J,Q-U,1-7)\n"
Ifyouareboredpress/\n"
do
ch=getch();
if(ch=='
/'
else
switch(ch)
case'
z'
:
fre=C10;
break;
x'
fre=D10;
c'
fre=E10;
v'
fre=F10;
b'
fre=G10;
fre=A10;
m'
fre=B10;
a'
fre=C0;
s'
fre=D0;
d'
fre=E0;
f'
fre=F0;
g'
fre=G0;
h'
fre=A0;
j'
fre=B0;
q'
fre=C1;
w'
fre=D1;
e'
fre=E1;
fre=F1;
t'
fre=G1;
fre=A1;
u'
fre=B1;
1'
fre=C2;
2'
fre=D2;
3'
fre=E2;
4'
fre=F2;
5'
fre=G2;
6'
fre=A2;
7'
fre=B2;
default:
printf("
if(fre){/*若频率值fre非0*/
/*clock()是计时函数,而与其相关的数据类型是clock_t,返回当前程序占用的CPU时间,用clock()返回的值除于CLOCK_PER_SEC常量可以得到当前程序的运行时间,单位是秒*/
}while(ch!
='
1.4程序运行结果及自评:
1.5程序调试中遇到过的问题及解决办法
在编辑弹奏的程序时,没有弄明白延时函数,无法让按键发声,后来明白了延时函数的原理,把时长设成4,就可以了,还有就是按/时直接退出,后来把if放到前面,就解决了。
题目二
2.1
题目详细描述:
2.2程序设计思路及流程图:
2.3程序清单及注释:
graphics.h>
math.h>
floatdata1(floatk,floatm);
floatdata2(floatk,floatm);
voiddrawpic1();
voiddrawpic2();
voiddrawpic3();
voidh1(floatz,floatx1,intm);
voidh2(floatz,floatx1,intm);
inta;
charc='
while(c=='
)/*重复选择*/
G(jw)=1/(1-w^2*T^2+2ζjwT\n"
ChoosetheBodeDiagram:
1.Magnitude(dB)\n"
2.Phase(deg)\n"
3.Both\n"
a);
/*选择画图*/
while(a!
a!
=3)/*试错*/
("
if(a==1)
drawpic1();
/*画第一个*/
elseif(a==2)
drawpic2();
/*画第二个*/
drawpic3();
/*画两个*/
getch();
closegraph();
clrscr();
%c%*c"
floatdata1(floatk,floatm)/*计算第一个函数*/
floats,w;
s=sqrt((1/((1-k*k)*(1-k*k)+4*m*m*k*k)));
w=20*log10(s);
returnw;
floatdata2(floatk,floatm)/*第二个*/
floats,w,a;
s=-atan(2*m*k/(1-k*k));
w=s*(180/3.1415926);
if(w>
0)
w=w-180;
w*=0.8;
voiddrawpic1()
intdriver=DETECT,mode,x00,x11,y00,y11,m,y01,y02,y03;
floatx1,x2,xstep,ystep,k;
charstt[10],str[]="
0.1--blue0.3--green0.5--indigo0.7--red0.9--violet"
doublevalue;
initgraph(&
driver,&
mode,"
"
setbkcolor(9);
setcolor(63);
x00=100,y00=60,x11=x00+512,y11=y00+150;
setlinestyle(0,1,1);
rectangle(x00,y00,x11,y11);
/*矩形框*/
m=y00+50;
x1=x00;
xstep=(x11-x00)/512;
ystep=(y11-y00)/3;
settextstyle(0,0,1);
for(k=0;
k<
=4;
k++)/*横轴*/
value=0.01*pow(10,k);
gcvt(value,3,stt);
outtextxy(x00+xstep*128*k,y11+8,stt);
=3;
k++)/*纵轴*/
value=50-50*k;
outtextxy(x00-35,y00+ystep*k,stt);
x00=100,y00=60,x11=x00+512,y01=y00+150;
=9;
k++)/*优化坐标系,标注刻度*/
line(x00+log10(k+1)*(x11-x00)/4,y00,x00+log10(k+1)*(x11-x00)/4,y00+3);
line(x00+log10(k+1)*(x11-x00)/4,y01,x00+log10(k+1)*(x11-x00)/4,y01-3);
line((x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y00,(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y00+3);
line((x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y01,(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y01-3);
line((x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y00,(x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y00+3);
line((x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y01,(x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y01-3);
line((x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y00,(x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y00+3);
line((x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y01,(x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y01-3);
setcolor
(1);
/*画图*/
setlinestyle(0,1,3);
h1(0.1,x1,m);
setcolor
(2);
h1(0.3,x1,m);
setcolor(3);
h1(0.5,x1,m);
setcolor(4);
h1(0.7,x1,m);
setcolor(5);
h1(0.9,x1,m);
outtextxy(x00-70,y00-30,str);
voiddrawpic2()
m=y00;
ystep=(y11-y00)/4;
value=-50*k;
h2(0.1,x1,m);
h2(0.3,x1,m);
h2(0.5,x1,m);
h2(0.7,x1,m);
h2(0.9,x1,m);
voiddrawpic3()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 语言 课程设计