哈工大C语言课程设计
毕业设计c语言课程设计

毕业设计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语言在测试与控制中的应用 数据采集与处理实验报告

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语言课件cha

C语言的特点和应用领域
系统软件
嵌入式系统
操作系统、编译器等核心软件都是用 C语言编写的。
在嵌入式系统中,C语言被广泛应用 于开发底层驱动程序和操作系统内核。
应用软件
数据库、游戏、图形界面等应用软件 也广泛使用C语言开发。
C语言的基本语法结构
数据类型
运算符
控制结构
包括整型、浮点型、字 符型、数组类型、结构
短整型通常占用2个字节,整型 占用4个字节,长整型占用8个 字节。
浮点型数据类型
浮点型数据类型用于 存储小数,包括单精 度浮点数和双精度浮 点数。
浮点型数据类型用于 存储实数,包括正实 数、负实数和零。
单精度浮点数通常用 float表示,双精度浮 点数通常用double 表示。
字符型数据类型
01
05 指针和内存管理
指针的定义和使用
01
02
03
04
指针是变量,用于存储 内存地址。
指针变量必须先定义后 使用。
使用指针前需要先赋值。
指针可以指向同类型的 变量或数组元素。
内存管理的基本概念
01
02
03
04
内存分为堆区和栈区。
堆区用于动态内存分配,由程 序员管理。
栈区用于存储局部变量,由系 统自动管理。
内存管理涉及内存的申请、使 用和释放。
动态内存分配和释放
使用`malloc()`函数在堆区分配内存。
使用`realloc()`函数调整已分配内存 的大小。
使用`calloc()`函数在堆区分配并初始 化内存。
使用`free()`函数释放已分配的内存。
06 文件操作
文件的打开和关闭
要点一
打开文件
哈工大威海c语言实验报告

哈工大威海c语言实验报告
哈工大威海C语言实验报告
在哈工大威海的C语言实验中,学生们通过实验课程深入了解了C语言的基本
概念和编程技巧。
本次实验报告将介绍实验的内容、过程和结果,以及学生们
的收获和体会。
实验内容主要包括C语言的基本语法、数据类型、运算符、控制语句、函数和
数组等内容。
学生们在实验课上通过实际编程操作,掌握了C语言的基本编程
技巧和方法,深入理解了C语言的特点和应用。
在实验过程中,学生们通过编写简单的程序,如求解两个数的和、差、积、商等,加深了对C语言基本语法和运算符的理解;通过编写控制语句和循环语句,如if语句、switch语句、while循环、for循环等,加深了对程序流程控制的理解;通过编写函数和数组,加深了对模块化编程和数据结构的理解。
实验结果表明,学生们在实验课上取得了较好的成绩,通过实际操作和编程练习,加深了对C语言的理解和掌握,提高了编程能力和解决问题的能力。
通过本次实验,学生们不仅学到了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数组中找出最小的元素并与最后一个数互换,而其余元素的位置不变。
哈工大C语言课件(全

➢ 计算机把机器代码读入到内存(Memory),由 CPU运行这些代码,读取输入(Input),产生输 出(Output),完成程序员预定的功能
第0章 绪论
1.6 高级语言的编译运行过程
C源代码的例子
编写程序代码
--用编辑器将编写的内容保存在一个被称为源程序
代码的文件(1.c)中。
#include <stdio.h>
3. 《 c 程序设计》;潭浩强编著,清华大学出版社出版
学习方法
强化实践 良好的编程习惯
第 0 章 绪论
哈尔滨工业大学计算机学院
2010年2月
第0章 绪论
1.1 计算机与人
计算机(Computer)
计算机是用来延伸人的能力的工具,需要人来 驾驭
– AI能实现吗?(AI,Artificial Intelligence, 人工智能)
success.
第0章 绪论
1.4 C语言简介
C程序设计语言
是一种高级语言
➢ 高级语言并不是“高级”,只是相对低级语言,在一个高 的级别上进行编程
历史悠久,战勋卓著
➢ 诞生于上世纪70年代初,成熟于80年代(C89),修订与 90年代(C99)
➢ 很多重量级软件都是用C写的
上天入地,无所不能
第0章 绪论
1.2 计算机与程序设计语言
程序设计语言(1)
计算1+1程序(用机器语言编写)
第0章 绪论
1.2 计算机与程序设计语言
程序设计语言(2)
计算1+1程序(用汇编语言编写)
MOV AX, 1
ADD AX, 1
第0章 绪论
1.2 计算机与程序设计语言
中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案

中国大学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的值由键盘输入。
C语言程序设计课程设计报告——尹航、赵增阳组

哈尔滨工业大学英才学院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)。
C语言程序设计_哈工大(1):文本文件的操作

文本文件的读写
应会
能够将单个字符、字符串进行文件读写
进行文件复制等程序的编写
难点文件的写入读出
1.专业英语词汇
英文词汇中文名
file 文件
buffer 缓冲区
教学方法
引导进行,对每一步的完成检查实现情况,引导学生学会使用帮助信息,培养学习
能力
教学过程
1.提问同学们自己了解的文件的概念、使用文件的经历
2.引入C语言中的文件
3.对文件进行操作
将一个字符写入文件,查看文件内容(文件操作四部曲)
查看文件内容:1、直接在文本编辑器中打开文档
2、使用type命令。
哈工大苏小红版C语言课件cha

哈工大苏小红版C语言课 件cha
欢迎来到哈工大苏小红版C语言课件。
课程介绍
本课程将为你提供C语言的全面介绍,从基本概念到高级应用,帮助你打下扎 实的编程基础。
概述
起源
C语言由贝尔实验室的Dennis Ritchie于20世纪70年代开发。
特点
它是一门通用的高级编程语言,具有简洁、高效和可移植等特点。
3
循环结构重复执Leabharlann 一段代码,直到满足退出循环的条件。
函数及参数传递
函数 参数传递
用于封装一段可重复使用的代码块。 可以通过值传递和指针传递实现参数的传递。
数组与指针
数组
用于存储相同类型的多个元素。
指针
存储变量的内存地址,可以通过指针访问和操作变量。
文件操作
使用C语言可以读取、写入和操作文件,实现文件的输入输出和处理。
应用
C语言在嵌入式系统、操作系统和编译器设计等领域广泛应用。
基本语法及数据类型
数据类型
包括整型、浮点型、字符型和数 组等。
变量
在使用变量之前需要声明其数据 类型。
运算符
用于执行基本的算术和逻辑操作。
程序控制结构
1
顺序结构
按照代码的编写顺序依次执行语句。
2
条件结构
根据条件的真假决定执行不同的语句块。
C语言程序设计_哈工大(1):结构体变量的定义、引用、初始化

在函数中使用结构体变量作函数参数
难点结构体变量作函数参数
教学方法
项目拓展结合实例教学法
教学过程
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课程的核心知识,包括(具体知识点),能够运用(具体技能),并培养(情感态度和价值观)。
这些目标具有可衡量性,以便学生和教师了解课程的预期成果。
二、教学内容根据课程目标,教学内容主要包括(具体知识点),教材选用哈工大c课程教材,并按照教材章节进行教学安排。
三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
这些方法将有助于学生更好地理解和掌握课程内容。
四、教学资源我们将选择和准备适当的教学资源,包括教材、参考书、多媒体资料和实验设备等。
这些资源将支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
我们将根据教材和课程内容,设计相应的评估题目,确保评估结果能够真实反映学生的掌握情况。
六、教学安排教学安排规定了教学进度、教学时间和教学地点等。
教学安排应合理、紧凑,确保在有限的时间内完成教学任务。
同时,教学安排还应考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等。
七、差异化教学根据学生的不同学习风格、兴趣和能力水平,我们将设计差异化的教学活动和评估方式,以满足不同学生的学习需求。
通过差异化教学,我们将更好地激发学生的学习潜能,提高教学效果。
八、教学反思和调整在实施课程过程中,我们将定期进行教学反思和评估,根据学生的学习情况和反馈信息,及时调整教学内容和方法,以提高教学效果。
教学反思和调整将帮助我们更好地适应学生的学习需求,提升教学质量。
九、教学创新为了提高教学的吸引力和互动性,我们将尝试新的教学方法和技术。
结合现代科技手段,如在线平台、虚拟实验室等,我们将激发学生的学习热情,提升教学效果。
十、跨学科整合考虑不同学科之间的关联性和整合性,我们将促进跨学科知识的交叉应用和学科素养的综合发展。
哈工大新版C语言程序设计课件

Turbo C 2.0
Turbo C & C++ 3.0
WIN-TC
Visual C++ 6.0 (可视化的)
编程语言的开展史——人与计算 机的对话
• 两个说不同母语的人的对话方式: • 一方学另一方的语言 • 双方都学习一种第三方语言 • 人与计算机的对话方式: • 计算机学习人的语言〔自然语言理解〕 • 人学习计算机的语言 • 学习第三方语言
第一章 简单C语言设计
简单的C程序实例
/* /*
pHII一uehh个rlaalpovv简oeeC单saaela的dd:nrrCIgee程uaahmmaa序gvett实ehh! aa例att
doo*nnr/eeeaddmaayy
I I
will will
be be
skillful in a famous
• (2) 变量初始化:通过 变量赋值或通过键盘输 入给出;
• (3) 输出结果:将结果 输出到屏幕或窗口;
• (4) 在对变量初始化时, 要保证作除法运算有意 义,即保证除数不为零;
• (5) 取余运算仅对于整 数有意义。
输出结果
结束
计算过程实现及分析
#include <stdio.h>
#include <stdlib.h>
交作业和实验报告〕
Hu r u?
• 用过计算机吗? • 用来干什么? • 学过编程吗?
–哪些语言?
课程特点
• 紧密围绕在以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;开始 绘制文本背景并功能说明打用户选择曲目,或者选择自己利 用键盘弹奏。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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放到前面,就解决了。