哈工大C语言课程设计
- 格式:doc
- 大小:388.00 KB
- 文档页数:23
毕业设计c语言课程设计一、课程目标知识目标:1. 理解C语言在毕业设计中的应用场景,掌握C语言的基本语法和编程技巧。
2. 学会使用C语言进行数据结构的设计与实现,如链表、树、图等。
3. 掌握C语言在嵌入式系统、算法竞赛等领域的实际应用。
技能目标:1. 能够运用C语言编写具有实际意义的程序,解决实际问题。
2. 能够分析并优化C语言程序的运行效率,提高编程质量。
3. 培养良好的编程习惯,编写规范、易读、高质量的C语言代码。
情感态度价值观目标:1. 培养学生积极主动探索新知识的精神,提高学生的自主学习能力。
2. 增强学生的团队协作意识,培养良好的沟通与协作能力。
3. 使学生认识到C语言在计算机科学领域的重要地位,激发学生对编程的兴趣。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为毕业设计前的预备课程,旨在帮助学生掌握C语言编程技能,为毕业设计奠定基础。
2. 学生特点:学生已具备一定的计算机基础,了解编程基本概念,但实际编程能力较弱,需要加强实践操作。
3. 教学要求:注重理论与实践相结合,强调实际编程能力的培养,以项目驱动教学,提高学生的实践操作能力。
1. 独立完成C语言基础语法的学习,并能运用所学知识编写简单程序。
2. 掌握常见数据结构在C语言中的实现与应用,能够解决实际问题。
3. 编写具有一定规模的C语言项目,具备初步的软件设计能力。
4. 养成良好的编程习惯,具备团队协作能力和沟通能力。
二、教学内容1. C语言基础语法:变量定义、数据类型、运算符、表达式、控制语句(顺序、选择、循环)、函数、数组、指针。
2. 常见数据结构:链表、栈、队列、树(二叉树、查找树)、图(邻接矩阵、邻接表)。
3. 编程技巧与优化:算法复杂度分析、递归与迭代、内存管理、程序调试与优化。
4. C语言项目实践:学生信息管理系统、简易计算器、文件压缩与解压缩、小型游戏等。
5. 教学内容安排与进度:- 第一周:C语言概述、基础语法、数据类型与运算符。
C语言测控系统程序设计数据采集与处理实验报告学生姓名:xx 学号:xxxxx实验的目的:1.掌握定时器/计数器8254的工作原理与编程。
2.熟悉中断控制器8259A的工作原理与使用方法。
3.掌握硬件中断程序设计的原理与编程方法。
4.掌握数/模、模/数转换器的使用与数据采集的方法。
5.掌握建立磁盘数据文件的方法。
6.掌握绘制曲线的方法。
7.学习频谱分析的方法。
实验用设备:1.具有ISA总线插槽和USB接口的PC系列微型计算机,操作系统使用DOS或Windows98。
2.超低频信号发生器。
3.超低频示波器。
4.HY1232模入/模出接口板。
实验设备连接如图所示。
超低频信号发生器产生正弦信号,信号的频率在1.0Hz左右,振幅为6~7V。
实验要求:(1)每12ms中断一次,每中断一次从A/D的0通道采集一个数据,放入整型数组,并从D/A通道输出相同的(如果不可能相同,则输出最接近的)电压。
256次之后恢复系统原有功能,显示数组中的内容,并显示对应的电压值。
示波器上显示的波形应是一个削波的正弦信号。
(2)将存放到整型数组中的数据,用二进制文件的形式建立磁盘数据文件。
然后读出磁盘数据文件中的数据,在CRT上显示。
注意对比是否与采集时的数据相同。
(3)将采集的数据绘制成曲线。
(4)实时在线整流,D/A输出的电压U DA>0V 。
(选作)(5)实时在线整流,D/A输出的电压U DA<0V 。
(选作)(6)将采集的数据进行FFT变换,画出幅频特性。
(选作)设计和计算:程序框图:程序清单和注释:#include <dos.h>#include <stdio.h>#include <math.h>#include <graphics.h>#define SIZE 400int i=0;int data1[SIZE],data2[SIZE];float v[SIZE];void interrupt ad(void);int change(int x);void wdisk(int *pw,int n);void main(void){int j;FILE *fp;int driver=DETECT,mode,x00,x11,y00,y11,m; int data2[256],x1,x2,xstep,ystep,k;char stt[10];double value;disable();outportb(0x43,0x36);outportb(0x40,0x9d);outportb(0x40,0x2e);/*10ms*/setvect(0x08,ad);enable();while(i<256){;}for (j=0;j<256;j++){printf ("%5d",data2[j]);printf ("%.5f\n",v[j]);}fp=fopen("f1.dat","wb");if((fp=fopen("f1.dat","r"))==NULL){printf("Can not open this file.\n");exit();}wdisk(data2,256);fclose(fp);initgraph(&driver,&mode," ");x00=100,y00=210,x11=x00+512,y11=y00+128;rectangle(x00,y00,x11,y11);m=(y00+y11)/2;line(x00,m,x11,m);xstep=(x11-x00)/16;ystep=(y11-y00)/8;for(k=0;k<=16;k++){line(x00+xstep*k,y11,x00+xstep*k,y11+5); value=xstep*k/2;gcvt(value,3,stt);outtextxy(x00+xstep*k-8,y11+8,stt);}for(k=0;k<=8;k++){line(x00-5,y00+ystep*k,x00,y00+ystep*k); value=5-1.25*k;gcvt(value,3,stt);outtextxy(x00-45,y00+ystep*k,stt);}for(k=0;k<=16;k++){line(x00+xstep*k,y11,x00+xstep*k,y11+5);value=xstep*k/2;gcvt(value,3,stt);outtextxy(x00+xstep*k-8,y11+8,stt);}for(k=0;k<=8;k++)line(x00-5,y00+ystep*k,x00,y00+ystep*k);x1=x00;setcolor(5);for(k=0;k<254;k++){x2=x1+2;line(x1,m-12.8*v[k],x2,m-12.8*v[k+1]); x1=x2;}getch();closegraph();printf("That's all\n\t...");getch();}void interrupt ad(void){outportb(0x280,0x00);do;while(!(inportb(0x285)&0x80));data1[i]=inportb(0x281)|((inportb(0x282)&0x0f)<<8); data2[i]=!data1[i]+1;v[i]=0.00244*(data1[i]-2047);outportb(0x283,(data1[i]&0x00ff));outportb(0x284,((data1[i]>>8)&0x0f));i++;outportb(0x20,0x20);}void wdisk(int *pw,int n){FILE *fp;if((fp=fopen("f1.dat","wb"))==NULL){ printf("Can not open the file !\n");exit();}fwrite(pw,sizeof(int),n,fp);fclose(fp);printf("\n Data write to f1.dat.");}调试中出现的错误及分析:。
哈工大威海c语言实验报告
哈工大威海C语言实验报告
在哈工大威海的C语言实验中,学生们通过实验课程深入了解了C语言的基本
概念和编程技巧。
本次实验报告将介绍实验的内容、过程和结果,以及学生们
的收获和体会。
实验内容主要包括C语言的基本语法、数据类型、运算符、控制语句、函数和
数组等内容。
学生们在实验课上通过实际编程操作,掌握了C语言的基本编程
技巧和方法,深入理解了C语言的特点和应用。
在实验过程中,学生们通过编写简单的程序,如求解两个数的和、差、积、商等,加深了对C语言基本语法和运算符的理解;通过编写控制语句和循环语句,如if语句、switch语句、while循环、for循环等,加深了对程序流程控制的理解;通过编写函数和数组,加深了对模块化编程和数据结构的理解。
实验结果表明,学生们在实验课上取得了较好的成绩,通过实际操作和编程练习,加深了对C语言的理解和掌握,提高了编程能力和解决问题的能力。
通过本次实验,学生们不仅学到了C语言的基本知识和技能,还培养了团队合
作精神和创新意识,提高了解决问题的能力和实际操作的能力。
实验课程的设
计和实施,为学生们提供了一个良好的学习平台,促进了他们的综合素质和能
力的提高。
总之,哈工大威海C语言实验报告是一次成功的实验课程,学生们通过实际操
作和编程练习,深入理解了C语言的基本概念和编程技巧,取得了较好的成绩,提高了编程能力和解决问题的能力。
这将为他们今后的学习和工作打下坚实的
基础。
实验1简单C 程序设计2、将下列由程序流程图描述的算法,转换为C 源代码并填写到图1-3b 框中,然后输入计算机并运行后并分析其运行结果(本小题2分)。
图1-3a 程序流程图图1-3bC 源程序3、项目编程(本小题12分)(1)请向计算机输入a,b,c 三个值,经过程序处理后,要求输出其中最大的一个。
/*C 语言源代码*/main(){}项目要求:①画出程序流程图;②根据流程图编写程序图1-4a 程序流程图图1-4b C 源程序(2)请向计算机输入a,b,c 三个值,经过程序处理后,要求按值从小到大输出。
项目要求:①画出程序流程图;②根据流程图编写程序/*输出最大值*/main(){}项目提示:①可采用if结构;②a,b,c由scanf函数输入程序流程图/*将a,b,c三个值由小到大输出*/main(){}1-5a程序流程图图1-5b C源程序(3)编程实现打印下列由字母组成的树形。
说明:本项目编程的知识点是让学生对双重循环语句结构的理解,清楚双重循环的特点(即当外循环变量中的值变化一次时,则内循环变量中的值要变化若干次)。
提示:可用外循环变量代表行数;内循环变量代表需打印字符的个数。
难点:①字符个数是按奇数变化递增②左右边界字符打印的位置图1-6a字母A-G组成的树形/*打印图形*/main(){}图1-6b C源程序(4)设计报选体育科目统计程序设某学校在新生入学时,需报选体育选修科目。
体育科目包括:篮球、排球、体操、兵乓球和网球。
请为某班级(30人)统计报选各体育科目人数。
项目要求:①画出程序流程图;②根据流程图编写源程序项目提示:可采用switch与for结构程序流程图C语言源代码main(){}图1-7a程序流程图图1-7b C 源程序实验2数组与排序五、项目编程(本题12分,每小题4分)1、将下列一组数读入到a 数组中,然后从a数组中找出其中最大的元素并与第一个数互换;然后从a数组中找出最小的元素并与最后一个数互换,而其余元素的位置不变。
中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案6.1 下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。
目前程序存在错误,请将其修改正确。
并按照下面给出的运行示例检查程序。
#include#includeint main(){char score[100];int flag = 0, i, s;char grade;printf("Please input score:\n");while (1){flag=0;scanf("%s", score);for (i = 0; i < strlen(score); i++){if (score[i] >= '0' && score[i] <= '9'){continue;}else{flag = 1;}}s = atoi(score);if (s < 0 || s > 100 || flag == 1) {printf("Input error!\n");printf("Please input score:\n"); continue;}else{break;}}s = atoi(score);if (s >= 90)grade = 'A';}else if (s >= 80){grade = 'B';}else if (s >= 70){grade = 'C';}else if (s >= 60){grade = 'D';}{grade = 'E';}printf("grade: %c\n", grade);return 0;}6.2 编程计算a+aa+aaa+…+aa…a(n个a)的值(4分)题目内容:编程计算a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。
哈尔滨工业大学英才学院2012本科《C语言程序设计课程设计》报告项目题目:哈弗曼编码问题班级:1236007项目组编号:班第组项目组成员:姓名学号尹航6123310701赵增阳6123310704指导教师:赵玲玲开始日期:2013年5月28日完成日期:2013年6月20日哈工大软件学院2008级本科《综合课程设计》报告目录2012级本科《C语言程序设计课程设计》评价表 (1)哈尔滨工业大学课程设计任务书 (2)第1部分项目开发计划 (4)第2部分系统分析 (5)第3部分系统设计 ............................................................. 错误!未定义书签。
第4部分系统实现及测试 .. (8)第5部分项目总结 (9)参考文献 (14)附录 (14)哈工大软件学院2008级本科《综合课程设计》报告2012级本科《C语言程序设计课程设计》评价表- 1 -哈工大软件学院2008级本科《综合课程设计》报告哈尔滨工业大学课程设计任务书- 2 -哈工大软件学院2008级本科《综合课程设计》报告- 3 -哈工大软件学院2008级本科《综合课程设计》报告第1部分项目开发计划1.1 项目要完成的工作(1)根据用户给出的文件(book.txt),将其中的数据压缩为哈弗曼编码表示数据文件。
本项目要完成实现此功能程序的制作。
(2)生成字符与哈夫曼编码的对照表,以及用哈夫曼编码表示数据的文件1.2 项目分工表1-2-1 项目分工1.3项目计划安排表1-3-1 项目计划安排- 4 -哈工大软件学院2008级本科《综合课程设计》报告第2部分系统分析2.1 系统需要的功能与性能2.1.1 系统需要的功能(1)可以根据用户给出的文件生成对应的哈夫曼码(2)根据生成的哈夫曼码压缩用户给出的文件(3)将生成的哈夫曼码和压缩后的文件分别打印到文件2.1.2 系统需要的性能(1)快速生成所需的哈夫曼码;(2)根据生成的哈夫曼码快速无误的压缩指定文件2.2 系统重点、难点·哈夫曼树构建:(1)对哈夫曼树的理解(2)确定父代和它的两个儿代结点关系与位置的确定(3)找到合适的变量储存哈夫曼树(4)根据给定的文章构建哈夫曼树·文件输出:(1)确定每个字符对应的哈弗曼编码每一位的值:由子代节点块与其父代的关系(leftchild or rightchild)来确定子代层到父代层的路径应取0(leftchild)还是1(rightchild)。
文本文件的读写
应会
能够将单个字符、字符串进行文件读写
进行文件复制等程序的编写
难点文件的写入读出
1.专业英语词汇
英文词汇中文名
file 文件
buffer 缓冲区
教学方法
引导进行,对每一步的完成检查实现情况,引导学生学会使用帮助信息,培养学习
能力
教学过程
1.提问同学们自己了解的文件的概念、使用文件的经历
2.引入C语言中的文件
3.对文件进行操作
将一个字符写入文件,查看文件内容(文件操作四部曲)
查看文件内容:1、直接在文本编辑器中打开文档
2、使用type命令。
在函数中使用结构体变量作函数参数
难点结构体变量作函数参数
教学方法
项目拓展结合实例教学法
教学过程
1.提问与复习
学习过几种数据类型?分别是那些?分别如何操作(定义、初始化、引用、输入输
出)?
2.考虑一个学生的信息,(考虑家长通知书上的成绩单问题)
定义一个学生的信息,姓名(char name[10]),两门课的成绩(int math,english),
求该同学的平均分数,从键盘输入,并且输出结果(不使用结构的情形)
3.将第二步的数据定义为结构体类型(student)变量stu,进行同样的操作,
从键盘输入,并且输出。
(结构体变量的定义、成员引用、输入输出)
4.用指向结构体变量的指针变量处理第二步。
定义指向结构体变量的指针p,
从键盘输入,并且输出。
(用两种方法表示:(*p).成员名,p->成员名)(通过指向结构体变量的指针引用结构成员)
5.用结构体变量a1作实参,编写函数struct student input(struct student
s)完成从键盘输入数据的功能,在main函数中输出
6.用结构体变量作函数参数,编写函数void output(struct student s)完
成数据输出。
哈工大c课程设计一、教学目标本课程的教学目标是让学生掌握哈工大c课程的核心知识,包括(具体知识点),能够运用(具体技能),并培养(情感态度和价值观)。
这些目标具有可衡量性,以便学生和教师了解课程的预期成果。
二、教学内容根据课程目标,教学内容主要包括(具体知识点),教材选用哈工大c课程教材,并按照教材章节进行教学安排。
三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
这些方法将有助于学生更好地理解和掌握课程内容。
四、教学资源我们将选择和准备适当的教学资源,包括教材、参考书、多媒体资料和实验设备等。
这些资源将支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
我们将根据教材和课程内容,设计相应的评估题目,确保评估结果能够真实反映学生的掌握情况。
六、教学安排教学安排规定了教学进度、教学时间和教学地点等。
教学安排应合理、紧凑,确保在有限的时间内完成教学任务。
同时,教学安排还应考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等。
七、差异化教学根据学生的不同学习风格、兴趣和能力水平,我们将设计差异化的教学活动和评估方式,以满足不同学生的学习需求。
通过差异化教学,我们将更好地激发学生的学习潜能,提高教学效果。
八、教学反思和调整在实施课程过程中,我们将定期进行教学反思和评估,根据学生的学习情况和反馈信息,及时调整教学内容和方法,以提高教学效果。
教学反思和调整将帮助我们更好地适应学生的学习需求,提升教学质量。
九、教学创新为了提高教学的吸引力和互动性,我们将尝试新的教学方法和技术。
结合现代科技手段,如在线平台、虚拟实验室等,我们将激发学生的学习热情,提升教学效果。
十、跨学科整合考虑不同学科之间的关联性和整合性,我们将促进跨学科知识的交叉应用和学科素养的综合发展。
H a r b i n I n s t i t u t e o f T e c h n o l o g y课程设计说明书(论文)课程名称: C语言课程设计设计题目:音乐程序与波特图院系:航天学院控制科学与工程系班级:设计者:学号:指导教师:设计时间:哈尔滨工业大学教务处哈尔滨工业大学课程设计任务书姓名:院(系):专业:班号:任务起至日期:年月日至年月日课程设计题目:已知技术参数和设计要求:工作量:工作计划安排:同组设计者及分工:指导教师签字___________________年月日教研室主任意见:教研室主任签字___________________年月日*注:此任务书由课程设计指导教师填写。
题目一1.1 题目详细描述:播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。
1.2 程序设计思路及流程图:是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 #define N8 2 #define N16 1 #define END 0void 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;开始 绘制文本背景并功能说明打用户选择曲目,或者选择自己利 用键盘弹奏。
H a r b i n I n s t i t u t e o f T e c h n o l o g y课程设计说明书(论文)课程名称:C语言课程设计设计题目:音乐程序与波特图院系:航天学院控制科学与工程系班级:设计者:学号:指导教师:设计时间:哈尔滨工业大学教务处哈尔滨工业大学课程设计任务书题目一1.1题目详细描述:播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。
1.2程序设计思路及流程图: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#define N8 2#define N16 1#define END 0void 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("Hello,what do you want to do by this program?\n");printf("1.Listen to music.-------Press 1\n");printf("2.Play music by yourself.-------Press 2\n");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){printf("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 continue?(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(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("Do you want to raise/lower the frequency? Press r/l\nIf you do not want press n\n");scanf("%c",&d);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("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(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("You typed wrong!Do not push me around.:(\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放到前面,就解决了。