




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Harbin Institute of Technology課程設(shè)計(jì)說(shuō)明書(shū)(論文)課程名稱: C語(yǔ)言課程設(shè)計(jì) 設(shè)計(jì)題目: 音樂(lè)程序與波特圖 院 系:航天學(xué)院控制科學(xué)與工程系班 級(jí): 設(shè) 計(jì) 者: 學(xué) 號(hào): 指導(dǎo)教師: 設(shè)計(jì)時(shí)間: 哈爾濱工業(yè)大學(xué)教務(wù)處哈爾濱工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書(shū) 姓 名: 院 (系): 專 業(yè): 班 號(hào): 任務(wù)起至日期: 年月日至 年 月 日 課程設(shè)計(jì)題目: 已知技術(shù)參數(shù)和設(shè)計(jì)要求: 工作量: 工作計(jì)劃安排: 同組設(shè)計(jì)者及分工: 指導(dǎo)教師簽字_ 年 月 日 教研室主任意見(jiàn): 教研室主任簽字_ 年 月 日*注:此任務(wù)書(shū)由課程設(shè)計(jì)指導(dǎo)教師填寫(xiě)。題目一1.1 題目詳細(xì)描述:播放音樂(lè)程
2、序,實(shí)現(xiàn)了自選音樂(lè)曲目和直接使用鍵盤(pán)彈奏,而且可以在曲目播放結(jié)束后循環(huán)選擇樂(lè)曲。開(kāi)始1.2 程序設(shè)計(jì)思路及流程圖:繪制文本背景并功能說(shuō)明打印用戶選擇曲目,或者選擇自己利 用鍵盤(pán)彈奏。選擇歌曲彈奏放歌是否繼續(xù) 是 結(jié)束1.3 程序清單及注釋:#include <stdio.h>#include <dos.h>#include <stdlib.h>#include <time.h>#include <bios.h>#include <conio.h>#define N1 16#define N2 8#define N4 4#d
3、efine N8 2#define N16 1#define END 0void playmusic(int n,int *c);void typemusic();enum NOTESC10=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=197
4、6,S=10;typedef enum NOTES SONG;SONG song1=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;SONG song2=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,
5、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;int main() int m,n,c=1; char b='y' while(b='y') printf("Hello,what do you want to do by this progra
6、m?n"); printf("1.Listen to music.-Press 1n"); printf("2.Play music by yourself.-Press 2n"); scanf("%d",&m); while(m!=1&&m!=2&&m!=3) /*選擇方式*/ printf("You typed wrong!Do not push me around.:(n"); scanf("%d",&m); if(m=1) pri
7、ntf("I have two musics,choose one!(Press 1/2)n"); scanf("%d",&n); while(n!=1&&n!=2) printf("You typed wrong!Do not push me around.:(n"); scanf("%d",&n); playmusic(n,&c); else if(m=2) typemusic(); getchar(); printf("Do you want to conti
8、nue?(y/n)n"); scanf("%c",&b); return 0;void playmusic(int n,int *c) int note=0,fre,dur,control; char d; clock_t goal; if(n=1) while(song1note!=END) fre=*c*song1note; dur=song1note+1; if(kbhit() break; if(fre) /*若頻率值fre非0*/ outportb(0x43,0xb6); /*初始化2號(hào)定時(shí)器 */ fre=(unsigned)(1193180L
9、/fre); /*計(jì)算計(jì)數(shù)初值 */ outportb(0x42,(char)fre); /*先寫(xiě)計(jì)數(shù)初值的低8位*/ outportb(0x42,(char)(fre>>8); /*再寫(xiě)計(jì)數(shù)初值的高8位*/ control=inportb(0x61); /*讀0x61的狀態(tài)*/ outportb(0x61,control|0x03); /*將第0位,第1位置1,使喇叭發(fā)聲*/ goal=(clock_t)dur+clock( ); while(goal>clock( ); if(dur) outportb(0x61,control); note+=2; else while
10、(song2note!=END) fre=*c*song2note; dur=song2note+1; if(kbhit() break; if(fre) /*若頻率值fre非0*/ outportb(0x43,0xb6); /*初始化2號(hào)定時(shí)器 */ fre=(unsigned)(1193180L/fre); /*計(jì)算計(jì)數(shù)初值 */ outportb(0x42,(char)fre); /*先寫(xiě)計(jì)數(shù)初值的低8位*/ outportb(0x42,(char)(fre>>8); /*再寫(xiě)計(jì)數(shù)初值的高8位*/ control=inportb(0x61); /*讀0x61的狀態(tài)*/ out
11、portb(0x61,control|0x03); /*將第0位,第1位置1,使喇叭發(fā)聲*/ goal=(clock_t)dur+clock( ); while(goal>clock( ); if(dur) outportb(0x61,control); note+=2; getchar(); printf("Do you want to raise/lower the frequency? Press r/lnIf you do not want press nn"); scanf("%c",&d); if(d='r')
12、*c*=2; else if(d='l') *c*=0.5; else if(d='n') *c=*c;void typemusic() char ch; clock_t goal; int fre=0,control,dur=2; printf("Play your own music!n(You can play on the keyboard by pressing Z-M,A-J,Q-U,1-7)n"); printf("If you are bored press /n"); do ch=getch(); if(
13、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&
14、#39;: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; ca
15、se '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
16、;break; default:printf("You typed wrong!Do not push me around.:(n"); if(fre) /*若頻率值fre非0*/ outportb(0x43,0xb6); /*初始化2號(hào)定時(shí)器 */ fre=(unsigned)(1193180L/fre); /*計(jì)算計(jì)數(shù)初值 */ outportb(0x42,(char)fre); /*先寫(xiě)計(jì)數(shù)初值的低8位*/ outportb(0x42,(char)(fre>>8); /*再寫(xiě)計(jì)數(shù)初值的高8位*/ control=inportb(0x61); /*讀0x61
17、的狀態(tài)*/ outportb(0x61,control|0x03); /*將第0位,第1位置1,使喇叭發(fā)聲*/ goal=(clock_t)dur+clock( ); /* clock()是計(jì)時(shí)函數(shù),而與其相關(guān)的數(shù)據(jù)類(lèi)型是clock_t,返回當(dāng)前程序占用的CPU時(shí)間,用clock()返回的值除于CLOCK_PER_SEC常量可以得到當(dāng)前程序的運(yùn)行時(shí)間,單位是秒 */ while(goal>clock( ); if(dur) outportb(0x61,control); while (ch!='/');1.4 程序運(yùn)行結(jié)果及自評(píng):1.5 程序調(diào)試中遇到過(guò)的問(wèn)題及解決辦法在
18、編輯彈奏的程序時(shí),沒(méi)有弄明白延時(shí)函數(shù),無(wú)法讓按鍵發(fā)聲,后來(lái)明白了延時(shí)函數(shù)的原理,把時(shí)長(zhǎng)設(shè)成4,就可以了,還有就是按/時(shí)直接退出,后來(lái)把if放到前面,就解決了。題目二2.1 題目詳細(xì)描述: 開(kāi)始2.2 程序設(shè)計(jì)思路及流程圖:選擇所繪制曲線圖形下繪制背景及坐標(biāo) 輸出圖形下標(biāo)注每隔一定時(shí)間畫(huà)兩點(diǎn)間的坐標(biāo)計(jì)算各點(diǎn)坐標(biāo)值判斷是否退出循環(huán)2.3 程序清單及注釋:#include <graphics.h>#include <stdio.h>#include <math.h>#include <dos.h>float data1(float k,float m)
19、;float data2(float k,float m);void drawpic1();void drawpic2();void drawpic3();void h1(float z,float x1,int m);void h2(float z,float x1,int m);int main() int a; char c='y' while(c='y') /*重復(fù)選擇*/ printf("G(jw)=1/(1-w2*T2+2jwTn"); printf("Choose the Bode Diagram:n");
20、printf("1.Magnitude(dB)n"); printf("2.Phase(deg)n"); printf("3.Bothn"); scanf("%d",&a); /*選擇畫(huà)圖*/ while(a!=1&&a!=2&&a!=3) /*試錯(cuò)*/ printf("Do not push me around.:("); scanf("%d",&a); if(a=1) drawpic1(); /*畫(huà)第一個(gè)*/ else if
21、(a=2) drawpic2(); /*畫(huà)第二個(gè)*/ else drawpic3(); /*畫(huà)兩個(gè)*/ getch(); closegraph(); clrscr(); getchar(); printf("Do you want to continue?(y/n)n"); scanf("%c%*c",&c); return 0;float data1(float k,float m) /*計(jì)算第一個(gè)函數(shù)*/ float s,w; s=sqrt(1/(1-k*k)*(1-k*k)+4*m*m*k*k); w=20*log10(s); return
22、 w;float data2(float k,float m) /*第二個(gè)*/ float s,w,a; s=-atan(2*m*k/(1-k*k); w=s*(180/3.1415926); if(w>0) w=w-180; w*=0.8; return w;void drawpic1() int driver=DETECT,mode,x00,x11,y00,y11,m,y01,y02,y03; float x1,x2,xstep,ystep,k; char stt10,str="0.1-blue 0.3-green 0.5-indigo 0.7-red 0.9-violet
23、" double value; 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
24、=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+)/*優(yōu)化坐標(biāo)系,標(biāo)注刻度*/ line(x00+log10(k+1)*(x11-x00)/4,y00,x00+log10(k+1)*(x11-x
25、00)/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
26、(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)*
27、(x11-x00)/4,y01,(x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y01-3); setcolor(1); /*畫(huà)圖*/ 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);void drawpic2() int driver=DE
28、TECT,mode,x00,x11,y00,y11,m,y01,y02,y03; float x1,x2,xstep,ystep,k; char stt10,str="0.1-blue 0.3-green 0.5-indigo 0.7-red 0.9-violet" double value; initgraph(&driver,&mode," "); setbkcolor(9);setcolor(63);x00=100,y00=60,x11=x00+512,y11=y00+150; setlinestyle(0,1,1);rectang
29、le(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
30、,y00=60,x11=x00+512,y01=y00+150; for(k=0;k<=9;k+)/*優(yōu)化坐標(biāo)系,標(biāo)注刻度*/ 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
31、); 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(x1
32、1-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); /*畫(huà)圖*/ setlinestyle(0,1,3); h2(0.1,x1,m); setcolor(2); h2(0.3,x1,m); setcolor(3); h2(0.5,x1,m); se
33、tcolor(4); h2(0.7,x1,m); setcolor(5); h2(0.9,x1,m); setcolor(63); outtextxy(x00-70,y00-30,str);void drawpic3() int driver=DETECT,mode,x00,x11,y00,y11,m,y01,y02,y03; float x1,x2,xstep,ystep,k; char stt10,str="0.1-blue 0.3-green 0.5-indigo 0.7-red 0.9-violet" double value; initgraph(&dri
34、ver,&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(x
35、00+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+)/*優(yōu)化坐標(biāo)系,標(biāo)注刻度*/ 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,y
36、01,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
37、+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)*(x
38、11-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); x00=100,y00=y11+70,x11=x00+512,y11=y00+150; setlinestyle(0,1,1);rectangle(x00,y00,x11,y11);m=y00;x1=x00; xstep=(
39、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; y02=y01+
40、70,y03=y02+150; for(k=0;k<=9;k+)/*優(yōu)化坐標(biāo)系,標(biāo)注刻度*/ line(x00+log10(k+1)*(x11-x00)/4,y02,x00+log10(k+1)*(x11-x00)/4,y02+3); line(x00+log10(k+1)*(x11-x00)/4,y03,x00+log10(k+1)*(x11-x00)/4,y03-3); line(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y02,(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y02+3); line(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y03,(x11-x00)/4+x00+log10(k+1)*(x11-x00)/4,y03-3); line(x11-x00)/4*
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)豐禾10號(hào)玉米種數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年商務(wù)禮儀師考試中難點(diǎn)與易錯(cuò)題分析試題及答案
- 機(jī)械工程師資格考試知識(shí)梳理試題及答案
- 2024年酒店經(jīng)營(yíng)管理師考試常見(jiàn)問(wèn)題解析試題及答案
- 智能交通系統(tǒng)實(shí)施的政策建議試題及答案
- 2024年交通運(yùn)輸智能化考試試題及答案
- 交通事故分析與預(yù)防試題及答案
- 2024年焊接工程師資格考試目標(biāo)設(shè)定方法試題及答案
- 2025年中國(guó)名優(yōu)茶多功能機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 實(shí)操演練CAD工程師試題及答案
- 北京市《配電室安全管理規(guī)范》(DB11T 527-2021)地方標(biāo)準(zhǔn)
- 特應(yīng)性皮炎治療藥物應(yīng)用管理專家共識(shí)2024版解讀
- 支氣管肺炎護(hù)理查房
- 上海市存志中學(xué)2024-2025學(xué)年中考一模英語(yǔ)試題含答案
- MTT 1114-2011 煤礦供電監(jiān)控系統(tǒng)通.用技術(shù)條件
- 貴州省遵義市2019年中考數(shù)學(xué)試卷【含答案】
- 飛機(jī)管路基礎(chǔ)知識(shí)課件講解
- 合肥安徽合肥經(jīng)開(kāi)區(qū)擇優(yōu)招錄社區(qū)工作者20人筆試歷年典型考題及考點(diǎn)附答案解析
- JTS-T-272-1-2014沿海港口建設(shè)工程投資估算指標(biāo)
- 中醫(yī)醫(yī)療技術(shù)手冊(cè)2013普及版
- 藥物合成反應(yīng)-9合成設(shè)計(jì)原理
評(píng)論
0/150
提交評(píng)論