哈工大C语言课程设计.docx

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

哈工大C语言课程设计.docx

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

哈工大C语言课程设计.docx

哈工大C语言课程设计

HarbinInstituteofTechnology

课程设计说明书(论文)

课程名称:

C语言课程设计

设计题目:

音乐程序与波特图

院系:

航天学院控制科学与工程系

班级:

设计者:

学号:

指导教师:

设计时间:

哈尔滨工业大学教务处

哈尔滨工业大学课程设计任务书

姓名:

院(系):

专业:

班号:

任务起至日期:

年月日至年月日

课程设计题目:

已知技术参数和设计要求:

工作量:

工作计划安排:

同组设计者及分工:

指导教师签字___________________

年月日

教研室主任意见:

教研室主任签字___________________

年月日

*注:

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

题目一

1.1题目详细描述:

播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。

1.2

程序设计思路及流程图:

 

1.3程序清单及注释:

#include

#include

#include

#include

#include

#include

#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=='y')

{

printf("Hello,whatdoyouwanttodobythisprogram?

\n");

printf("1.Listentomusic.-------Press1\n");

printf("2.Playmusicbyyourself.-------Press2\n");

scanf("%d",&m);

while(m!

=1&&m!

=2&&m!

=3)/*选择方式*/

{

printf("Youtypedwrong!

Donotpushmearound.:

(\n");

scanf("%d",&m);

}

if(m==1)

{

printf("Ihavetwomusics,chooseone!

(Press1/2)\n");

scanf("%d",&n);

while(n!

=1&&n!

=2)

{

printf("Youtypedwrong!

Donotpushmearound.:

(\n");

scanf("%d",&n);

}

playmusic(n,&c);

}

elseif(m==2)

{

typemusic();

}

getchar();

printf("Doyouwanttocontinue?

(y/n)\n");

scanf("%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]!

=END)

{

fre=*c*song2[note];

dur=song2[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;

}

}

getchar();

printf("Doyouwanttoraise/lowerthefrequency?

Pressr/l\nIfyoudonotwantpressn\n");

scanf("%c",&d);

if(d=='r')

*c*=2;

elseif(d=='l')

*c*=0.5;

elseif(d=='n')

*c=*c;

}

voidtypemusic()

{

charch;

clock_tgoal;

intfre=0,control,dur=2;

printf("Playyourownmusic!

\n(YoucanplayonthekeyboardbypressingZ-M,A-J,Q-U,1-7)\n");

printf("Ifyouareboredpress/\n");

do

{

ch=getch();

if(ch=='/');

else

{

switch(ch)

{

case'z':

fre=C10;break;

case'x':

fre=D10;break;

case'c':

fre=E10;break;

case'v':

fre=F10;break;

case'b':

fre=G10;break;

case'n':

fre=A10;break;

case'm':

fre=B10;break;

case'a':

fre=C0;break;

case's':

fre=D0;break;

case'd':

fre=E0;break;

case'f':

fre=F0;break;

case'g':

fre=G0;break;

case'h':

fre=A0;break;

case'j':

fre=B0;break;

case'q':

fre=C1;break;

case'w':

fre=D1;break;

case'e':

fre=E1;break;

case'r':

fre=F1;break;

case't':

fre=G1;break;

case'y':

fre=A1;break;

case'u':

fre=B1;break;

case'1':

fre=C2;break;

case'2':

fre=D2;break;

case'3':

fre=E2;break;

case'4':

fre=F2;break;

case'5':

fre=G2;break;

case'6':

fre=A2;break;

case'7':

fre=B2;break;

default:

printf("Youtypedwrong!

Donotpushmearound.:

(\n");

}

}

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();/*clock()是计时函数,而与其相关的数据类型是clock_t,返回当前程序占用的CPU时间,用clock()返回的值除于CLOCK_PER_SEC常量可以得到当前程序的运行时间,单位是秒*/

while(goal>clock());

if(dur)

outportb(0x61,control);

}while(ch!

='/');

}

1.4程序运行结果及自评:

1.5程序调试中遇到过的问题及解决办法

在编辑弹奏的程序时,没有弄明白延时函数,无法让按键发声,后来明白了延时函数的原理,把时长设成4,就可以了,还有就是按/时直接退出,后来把if放到前面,就解决了。

 

题目二

2.1题目详细描述:

2.2

程序设计思路及流程图:

 

2.3程序清单及注释:

#include

#include

#include

#include

floatdata1(floatk,floatm);

floatdata2(floatk,floatm);

voiddrawpic1();

voiddrawpic2();

voiddrawpic3();

voidh1(floatz,floatx1,intm);

voidh2(floatz,floatx1,intm);

intmain()

{

inta;

charc='y';

while(c=='y')/*重复选择*/

{

printf("G(jw)=1/(1-w^2*T^2+2ζjwT\n");

printf("ChoosetheBodeDiagram:

\n");

printf("1.Magnitude(dB)\n");

printf("2.Phase(deg)\n");

printf("3.Both\n");

scanf("%d",&a);/*选择画图*/

while(a!

=1&&a!

=2&&a!

=3)/*试错*/

{

printf("Donotpushmearound.:

(");

scanf("%d",&a);

}

if(a==1)

drawpic1();/*画第一个*/

elseif(a==2)

drawpic2();/*画第二个*/

else

{

drawpic3();/*画两个*/

}

getch();

closegraph();

clrscr();

getchar();

printf("Doyouwanttocontinue?

(y/n)\n");

scanf("%c%*c",&c);

}

return0;

}

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;

returnw;

}

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

}

for(k=0;k<=3;k++)/*纵轴*/

{

value=50-50*k;

gcvt(value,3,stt);

outtextxy(x00-35,y00+ystep*k,stt);

}

x00=100,y00=60,x11=x00+512,y01=y00+150;

for(k=0;k<=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);

setcolor(63);

outtextxy(x00-70,y00-30,str);

}

voiddrawpic2()

{

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;

x1=x00;

xstep=(x11-x00)/512;

ystep=(y11-y00)/4;

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

}

for(k=0;k<=4;k++)/*纵轴*/

{

value=-50*k;

gcvt(value,3,stt);

outtextxy(x00-35,y00+ystep*k,stt);

}

x00=100,y00=60,x11=x00+512,y01=y00+150;

for(k=0;k<=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);

h2(0.1,x1,m);

setcolor

(2);

h2(0.3,x1,m);

setcolor(3);

h2(0.5,x1,m);

setcolor(4);

h2(0.7,x1,m);

setcolor(5);

h2(0.9,x1,m);

setcolor(63);

outtextxy(x00-70,y00-30,str);

}

voiddrawpic3()

{

intd

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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