哈工大C语言课程设计
更新时间:2023-12-17 01:21:01 阅读量: 教育文库 文档下载
Harbin Institute of Technology
课程设计说明书(论文)
课程名称: C语言课程设计 设计题目: 音乐程序与波特图 院 系:航天学院控制科学与工程系班 级: 设 计 者: 学 号: 指导教师: 设计时间:
哈尔滨工业大学教务处
哈尔滨工业大学课程设计任务书 姓 名: 院 (系): 专 业: 班 号: 任务起至日期: 年月日至 年 月 日 课程设计题目: 已知技术参数和设计要求: 工作量: 工作计划安排: 同组设计者及分工: 指导教师签字___________________ 年 月 日 教研室主任意见: 教研室主任签字___________________ 年 月 日 *注:此任务书由课程设计指导教师填写。哈尔滨工业大学课程设计说明书(论文)
题目一
1.1 题目详细描述:
播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。
1.2 程序设计思路及流程图:
是
1.3 程序清单及注释:
#include
void playmusic(int n,int *c); void typemusic(); enum NOTES{
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 };
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,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(\ printf(\ printf(\ scanf(\
while(m!=1&&m!=2&&m!=3) /*选择方式*/ {
printf(\ scanf(\ } if(m==1) {
printf(\ scanf(\ while(n!=1&&n!=2) {
printf(\ scanf(\ }
playmusic(n,&c); }
else if(m==2) {
typemusic(); } getchar();
printf(\ scanf(\
哈尔滨工业大学课程设计说明书(论文)
} return 0; }
void playmusic(int n,int *c) {
int note=0,fre,dur,control; char d; clock_t goal; 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(\ scanf(\ if(d=='r') *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(\ printf(\ 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(\ } }
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
float data1(float k,float m); 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') /*重复选择*/
{
printf(\w^2*T^2+2ζjwT\\n\ printf(\ printf(\ printf(\ printf(\
scanf(\ /*选择画图*/ while(a!=1&&a!=2&&a!=3) /*试错*/ {
printf(\ scanf(\ }
if(a==1)
drawpic1(); /*画第一个*/ else if(a==2)
drawpic2(); /*画第二个*/ else {
drawpic3(); /*画两个*/ }
哈尔滨工业大学课程设计说明书(论文)
getch();
closegraph(); clrscr(); getchar();
printf(\ scanf(\ }
return 0; }
float data1(float k,float m) /*计算第一个函数*/ {
float s,w;
s=sqrt((1/((1-k*k)*(1-k*k)+4*m*m*k*k))); w=20*log10(s); return w; }
float data2(float k,float m) /*第二个*/
{
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 stt[10],str[]=\ 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=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);
哈尔滨工业大学课程设计说明书(论文)
}
void drawpic2() {
int driver=DETECT,mode,x00,x11,y00,y11,m,y01,y02,y03; float x1,x2,xstep,ystep,k;
char stt[10],str[]=\ 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; 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); }
void drawpic3() {
int driver=DETECT,mode,x00,x11,y00,y11,m,y01,y02,y03; float x1,x2,xstep,ystep,k;
char stt[10],str[]=\ 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=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);
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=(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+70,y03=y02+150; for(k=0;k<=9;k++) /*优化坐标系,标注刻度*/
{
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*2+x00+log10(k+1)*(x11-x00)/4,y02,(x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y02+3);
line((x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y03,(x11-x00)/4*2+x00+log10(k+1)*(x11-x00)/4,y03-3);
line((x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y02,(x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y02+3);
line((x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y03,(x11-x00)/4*3+x00+log10(k+1)*(x11-x00)/4,y03-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); }
void h1(float z,float x1,int m) {
float k,l,x2;
for(k=0.01,l=-2;l<=2;k=k*pow(10,0.1),l=l+0.1)/*曲线绘制*/ {
x2=x1+12.8;
line(x1,m-data1(k,z),x2,m-data1(k*pow(10,0.1),z)); x1=x2; } }
void h2(float z,float x1,int m) {
float k,l,x2;
for(k=0.01,l=-2;l<=2;k=k*pow(10,0.1),l=l+0.1)/*曲线绘制*/ {
x2=x1+12.8;
line(x1,m-data2(k,z),x2,m-data2(k*pow(10,0.1),z)); x1=x2; } }
2.4 程序运行结果及自评:
哈尔滨工业大学课程设计说明书(论文)
哈尔滨工业大学课程设计说明书(论文)
哈尔滨工业大学课程设计说明书(论文)
2.5 程序调试中遇到过的问题及解决办法
开始不知道这个函数怎么做,后来询问了学长告诉我了函数变换,会画了函数,测试的时候出现了后一个函数图像不对的现象,后来通过坐标变换变换出了应得的图像。
心得体会
这次编程,我感到了做义工程序员的艰辛,也明白了调试的重要性,因为一个参数的使用错误很可能导致整个程序的运行失败,而这正需要程序的调试才能改正这些错误。而且,如果想获得合适的输出结果(文字位置、坐标范围等),就必须要经过多次的调试。
此外,我还体会到,程序是为用户服务的,美观的程序不仅让自己有更大的成就感,而且让别人感觉更舒服。因而用户的操作感受非常重要,所以一个程序的输出要尽量美观,用户操作尽量简单,并且要尽量避免一次性程序,为程序加上循环,这样才能更好地增强程序的可移植性和可重复性。
哈尔滨工业大学课程设计说明书(论文)
注:
1. 正文可用小5号字,行间距采用最小值0磅。
2. 设计思路中要说明程序所实现的特色功能及实现方案。 3. 程序运行结果可以使用手机拍照
正在阅读:
哈工大C语言课程设计12-17
安全评价师二级综合评审07-17
心理卫生评定量表概论04-12
新疆生产建设兵团党委办公厅、新疆生产建设兵团印发《兵团关于推04-19
教师面试技巧之教师教学技能篇:教学设计04-20
2017校花排行榜,清纯萌妹子欣赏02-10
加工合同 2021正规加工合同范本04-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 哈工大
- 语言
- 课程
- 设计
- 美术加试复习题
- 湖北省荆门市2013年中考真题文综试题(Word版,含答案) - 图文
- 中水回用应用于中药制造企业的可行性分析
- 钢结构油漆面积是按照钢材实际展开面积计算
- 2015海南省预防医学总结最新考试题库
- 加宽型轮椅项目可行性研究报告(目录) - 图文
- 合肥教育信息网:合肥十中招聘16人
- 洛经发局2011年工作总结(1)
- 小学语文阅读教学中存在的问题及解决对策
- 大学生学业倦怠问题研究计划书
- 小儿感冒发烧咳嗽对策
- 数列求和及综合应用
- 财政金融作业2
- 自考金融法
- ArcEngine - 开发接口集
- 浅析如何提高新时期中学体育课的教学效果
- 网络题库
- 2013年普通高等学校招生全国统一考试(四川卷)(理科 试题卷与答案)
- 暖通设计常用估算指标汇总表
- 高考历史试题-2018年高考历史试题分类汇编 - 世界资本主义经济政策的调整 最新