课程设计说明书.docx
- 文档编号:9076502
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:96.08KB
课程设计说明书.docx
《课程设计说明书.docx》由会员分享,可在线阅读,更多相关《课程设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。
课程设计说明书
HarbinInstituteofTechnology
课程设计说明书(论文)
课程名称:
C语言课程设计
设计题目:
C语言课程设计任务书23
院系:
航天学院控制科学与工程系
班级:
设计者:
学号:
指导教师:
设计时间:
哈尔滨工业大学教务处
哈尔滨工业大学课程设计任务书
姓名:
院(系):
航天学院控制科学与工程系
专业:
班号:
任务起至日期:
20年月日至20年月日
课程设计题目:
1.编写音乐程序,曲目自选。
2.二次方程s2+ks+1=0,画出-2 3.自拟一道题,展现您的特长。 已知技术参数和设计要求: 1.依赖PC机的扬声器系统,编写音乐程序,播放歌曲(曲目自选)。 2.在DOSBOX的运行环境下编写程序画出二次方程s2+ks+1=0,根在-2 3.将键盘输入的小写字符串改成大写字符串。 工作量: 第一道题根据原有程序改写,较为简单,但因为将五线谱改写成“频率,音符”的形式时比较繁琐,耗时量较大。 第二道题是图像题,需要先分析数据,分析过程不是很难,但程序编写繁琐,花费时间最多。 第三道题由自己选择,所以我选择了一道自己比较擅长的题目: 将字符串中的小写字母改成大写字母。 因而并不是很难以完成。 综上几道题可以看出,我的课程设计题目工作量适中。 工作计划安排: 第一节上机课根据指导老师所给资料中原有程序和自己手中五线谱编写曲目,完成了第一题。 第二节上机课熟悉了DOSBOX运行环境,并且会画一些简单的图形,能在DOSBOX上运行出正确结果。 第三节上机课分析了所给图像题,大致知道图形该怎么画。 第四节上机课完成了第二题的图像题。 利用课余时间完成了自选题。 同组设计者及分工: 在老师和同学的指导下,基本独立地完成。 指导教师签字___________________ 年月日 教研室主任意见: 教研室主任签字___________________ 年月日 *注: 此任务书由课程设计指导教师填写。 题目一 1.1题目详细描述: 编写音乐程序,曲目自选。 1.2程序设计思路及流程图: 设计思路: (1)确定自己选择的曲目——梁山伯与祝英台, (2)通过网络搜索到相关五线谱, (3)根据原有程序改编其中音符,即可播放自己所选的曲目。 流程图: 1.3程序清单及注释: #include #include #include #include #include #include #defineN164 #defineN232 #defineN416 #defineN88 #defineN164 #defineEND0 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 }; typedefenumNOTESSONG; SONGsong[]={/*输入频率及音符*/ B0,N4,A0,N4,B0,N4, G0,N4+N8,A0,N8,F0,N4,E0,N4, D0,N8,E0,N8,F0,N8,E0,N8,G0,N4+N8,E0,N8, D0,N8,E0,N8,G0,N8,D0,N8,E0,N8,F0,N8,E0,N8,D0,N8, C0,N2+N4,G0,N4, B10,N4,D0,N4,A10,N4,C0,N4, G10,N2+N4,A10,N8,C0,N8, G10,N1, E10,N2,G10,N4+N8,A10,N8, C0,N4+N8,D0,N8,A10,N8,C0,N8,G10,N4, G0,N4+N8,C1,N8,A0,N8,G0,N8,E0,N8,G0,N8, D0,N1, D0,N4+N8,E0,N8,B10,N4,A10,N4, G10,N4+N8,A10,N8,C0,N4,D0,N4, E10,N4,C0,N4,A10,N8,G10,N8,A10,N8,C0,N8, G10,N1, E0,N4+N8,G0,N8,B10,N4,D0,N4, A10,N8,C0,N8,G10,N2, E10,N8,G10,N4,E10,N8,G10,N8,A10,N8,B10,N8,D0,N8, A10,N2+N4,G10,N8,A10,N8, C0,N4+N8,D0,N8,G0,N4,E0,N4, D0,N4,E0,N8,D0,N8,C0,N4,A10,N8,G10,N8, E10,N2,C0,N2, A10,N8+N16,C0,N16,A10,N8,G10,N8,E10,N8,G10,N8,A10,N8,C0,N8, G0,N1,END }; main(){ intnote=0,fre,dur,control; clock_tgoal; while(song[note]! =END){ fre=song[note]; dur=song[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; } } 1.4程序运行结果及自评: 运行结果: 正确播放“梁山伯与祝英台”歌曲。 自评: 有些音高不是非常准确,但是音长比较准确,能辨别出播放曲目是“梁山伯与祝英台”。 1.5程序调试中遇到过的问题及解决办法 1.刚刚开始的频率是同一个八度,不容易听清楚歌曲是《梁祝》,感觉都是一个调,只有声音,听不出是歌曲。 后来通过查阅资料,了解曲谱的构成是原理,后来取得了较好的效果。 2.编写程序的时候忘写了#include 题目二 2.1题目详细描述: 二次方程s2+ks+1=0,画出-2 2.2程序设计思路及流程图: 设计思路: (1)通过分析k的范围,得知方程的根得分情况,实数域、虚数域均可能有根。 (2)首先选取合适的比例因子,使整个图看上去舒服。 (3)设定参数,画好图的矩形框。 (4)画出X,Y轴。 (5)画出X,Y轴的坐标。 (6)通过不同k的值画出方程根的轨迹。 流程图 2.3程序清单及注释: #include #include #include #defines0.6 #definem20 main() { longdriver=DETECT,mode,k,t,xstep,ystep; doublea[1000],b[1000],c[1000],d[1000]; charstt[10]; doublevalue; initgraph(&driver,&mode,"BGI");/*设置参数*/ rectangle(0+m,0+m,1000*s+m,400*s+m); line(0+m,200*s+m,1000*s+m,200*s+m); line(500*s+m,0+m,500*s+m,400*s+m);/*画图形的边界,即矩形框*/ xstep=(1000-0)/10*s; ystep=(400-0)/4*s; for(k=0;k<=10;k++) { line(0+m+xstep*k,200*s+m,0+m+xstep*k,200*s+m-5); value=xstep*k/60; gcvt(value-5,3,stt); outtextxy(m+xstep*k-8,200*s+m+8,stt); } for(k=0;k<=4;k++) { line(500*s+m,m+ystep*k,500*s+m+5,m+ystep*k); value=xstep*k/60; gcvt(value-2,3,stt); outtextxy(500*s+m+8,m+ystep*k-8,stt); }/*画坐标轴及其刻度*/ for(t=0;t<599;t++) { k=t-200; if(t>0&&t<400) { a[t]=-k/2+500; b[t]=200-(sqrt(40000-k*k))/2; c[t]=a[t]; d[t]=200+(sqrt(40000-k*k))/2; } else { a[t]=(-k+sqrt(k*k-40000))/2+500; b[t]=200; c[t]=(-k-sqrt(k*k-40000))/2+500; d[t]=200; } }/*根据不同k的值计算出方程的根*/ setlinestyle(0,1,3); for(t=0;t<598;t++) { setcolor (2); line(a[t]*s+m,b[t]*s+m,a[t+1]*s+m,b[t+1]*s+m); setcolor (1); line(c[t]*s+m,d[t]*s+m,c[t+1]*s+m,d[t+1]*s+m); } getch(); closegraph();/*将方程的根以曲线形式画出*/ } 2.4程序运行结果及自评: 运行结果: 自评: 在DOSBOX环境下正确画出曲线。 2.5程序调试中遇到过的问题及解决办法 (1)刚刚开始画的图比例不好,图占整个空间太小,后来通过调整,有了较好的视觉效果。 (2)第一次成图的时候轨迹和坐标轴重合,无法辨别,后来通过查阅资料知将轨迹与坐标轴设置成不同的颜色,轨迹和坐标轴得以区分,最终得出效果较好的曲线。 题目三 3.1题目详细描述: 将字符串中的小写字母转换为大写字母。 3.2程序设计思路及流程图: 设计思路: (1)找到大写字母与小写字母的联系(ASKII码相差32), (2)编写程序 (3)运行程序 流程图: 3.3程序清单及注释: #include #include #defineN200/*定义字符串最大长度*/ main() { charstr[N]; inti,len; gets(str);/*输入字符串*/ len=strlen(str);/*计算字符串长度*/ for(i=1;i<=len;i++) { str[i-1]=str[i-1]-32; printf("%c",str[i-1]);/*输出相应大写字母*/ } } 3.4程序运行结果及自评: 运行结果: (1) (2) 自评: 能基本转化大小写。 3.5程序调试中遇到过的问题及解决办法 在程序中一开始用的是scanf()输入格式,发现遇到空格的地方程序就终止了,经过调试,改为gets()输入格式。 心得体会 通过做课程设计的几个作业,我明白了一个程序的完成需要各方面的帮助与努力。 当遇到问题时,不要一味的钻牛角尖,可以查阅资料或询问老师和同学。 一个课题的拓展也很重要,只有在题目的基础上做出更多的功能,才能提升自己。 每个同学的期望功能不同,参阅同学的程序,开拓视野。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 说明书