哈工大C语言课程设计Word文件下载.docx

上传人:b****6 文档编号:20627140 上传时间:2023-01-24 格式:DOCX 页数:20 大小:53.88KB
下载 相关 举报
哈工大C语言课程设计Word文件下载.docx_第1页
第1页 / 共20页
哈工大C语言课程设计Word文件下载.docx_第2页
第2页 / 共20页
哈工大C语言课程设计Word文件下载.docx_第3页
第3页 / 共20页
哈工大C语言课程设计Word文件下载.docx_第4页
第4页 / 共20页
哈工大C语言课程设计Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

哈工大C语言课程设计Word文件下载.docx

《哈工大C语言课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《哈工大C语言课程设计Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

哈工大C语言课程设计Word文件下载.docx

此任务书由课程设计指导教师填写。

题目一

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()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1