哈工大C语言课程设计
哈工大c语言教学6-循环控制结构PPT课件
goto语句与语句标号
语句标号(Label)举例
error:
goto语句举例
goto error;
一般形式
2021/3/11
33/63
用if — goto构成循环
结构形式:
语句标号:if (表达式) { 语句/语句组
goto 语句标号; }
kk: if(a>b) { a=a-2; goto kk; }
statement;
被当作一条语句看待
} 2021/3/11
8/63
start
i ← 0, sum ← 0
false
i< 5
true
input n
sum←sum+ n
i++
output sum
2021/3/11
end
for循环语句
int i, sum, n; sum = 0; for (i = 0; i < 5; i++) {
#include <stdio.h> main() {
int i, n; for (i=1; i<=5; i++) {
printf("Please enter n:"); scanf("%d", &n); if (n < 0)
哈工大苏小红版C语言课件cha
C语言的特点和应用领域
高效
C语言是一种编译型语言,其执行 效率非常高,适合开发需要高效 运行的应用程序。
灵活
C语言提供了丰富的数据类型和运 算符,以及指针等特性,使得程 序员可以更加灵活地编写代码。
C语言的特点和应用领域
• 跨平台:C语言是一种跨平台语言,可以在不同的操作系 统和硬件平台上运行。
预处理器指令和宏定义
预处理器指令
预处理器指令是C语言中的预处理指令,它们在编译之前处理源代码。常见的预处理器指令包括 #include、#define、#if等。
宏定义
宏定义是预处理器的一种功能,它允许您定义一个宏,该宏可以在编译时替换为指定的代码或值。宏 定义可以提高代码的可读性和可维护性,并减少重复的代码。
读取文件
使用fscanf()或fgets()函数从文件中读取数据。fscanf() 用于格式化读取,fgets()用于按行读取。
写入文件
使用fprintf()或fputs()函数向文件中写入数据。fprintf() 用于格式化写入,fputs()用于按行写入。
文件的位置指针和随机访问
文件指针
在C语言中,文件指针是一个指向文件的指针变量,用 于在文件中移动和定位。使用fseek()函数可以设置文 件指针的位置,ftell()函数可以返回当前文件指针的位 置。
05 指针和内存管理
哈工大威海 编译原理实验报告
三:设计方案: (包括第四步的数据结构) 首先构造数据结构,分析栈,分析表,符号表等如下:
分析栈 struct FenXiZhan { char name[50]; char *type; int value; }FenXiZhan[1000]; 分析表() Table[31][20] {108,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,4,0,0,0}, {0,0,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,0}, {0,0,109,0,0,0,0,0,0,0,0,113,0,0,0,3,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0}, {0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {108,0,203,0,0,0,0,0,0,0,0,203,0,0,7,0,4,0,0,0}, {0,0,202,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,0}, {0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,11,25}, {0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,205,0,205,0,0,0,0,0,0,0}, {0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,15,28,25}, {0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,17,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0}, {0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,19,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,206,0,206,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,121,123,0,0,0,0,0,0,0,0,0,0,0}, {0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,22}, {0,208,0,0,0,0,208,208,208,0,0,0,0,0,0,0,0,0,0,0}, {0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,24}, {0,209,0,0,0,0,209,209,209,0,0,0,0,0,0,0,0,0,0,0}, {0,210,0,0,0,0,210,210,210,0,0,0,0,0,0,0,0,0,0,0}, {0,211,0,0,0,0,211,211,211,0,0,0,0,0,0,0,0,0,0,0}, {0,212,0,0,0,0,212,212,212,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,30,25},
哈工大威海c语言实验报告
哈工大威海c语言实验报告
哈工大威海C语言实验报告
在哈工大威海的C语言实验中,学生们通过实验课程深入了解了C语言的基本
概念和编程技巧。本次实验报告将介绍实验的内容、过程和结果,以及学生们
的收获和体会。
实验内容主要包括C语言的基本语法、数据类型、运算符、控制语句、函数和
数组等内容。学生们在实验课上通过实际编程操作,掌握了C语言的基本编程
技巧和方法,深入理解了C语言的特点和应用。
在实验过程中,学生们通过编写简单的程序,如求解两个数的和、差、积、商等,加深了对C语言基本语法和运算符的理解;通过编写控制语句和循环语句,如if语句、switch语句、while循环、for循环等,加深了对程序流程控制的理解;通过编写函数和数组,加深了对模块化编程和数据结构的理解。
实验结果表明,学生们在实验课上取得了较好的成绩,通过实际操作和编程练习,加深了对C语言的理解和掌握,提高了编程能力和解决问题的能力。
通过本次实验,学生们不仅学到了C语言的基本知识和技能,还培养了团队合
作精神和创新意识,提高了解决问题的能力和实际操作的能力。实验课程的设
计和实施,为学生们提供了一个良好的学习平台,促进了他们的综合素质和能
力的提高。
总之,哈工大威海C语言实验报告是一次成功的实验课程,学生们通过实际操
作和编程练习,深入理解了C语言的基本概念和编程技巧,取得了较好的成绩,提高了编程能力和解决问题的能力。这将为他们今后的学习和工作打下坚实的
基础。
哈工大 C语言04_Function
2011-5-13 Functions and Program Structure 10
函数调用的过程
函数的每次执行都会建立一个全新的独立的环境 – 在“栈”中为函数的每个变量(包括形式参数)分配内存 中为函数的每个变量(包括形式参数) – 把实际参数的值复制给形式参数 – 开始执行函数内的第一条语句 函数内的代码在这个独立的环境内工作 函数退出时 – 求出返回值,将其存入一个可以被调用者访问的地方(x86 求出返回值,将其存入一个可以被调用者访问的地方(
开始 生成数字 Y 猜数字 Y 是否继续? 是否继续? N 结束
2011-5-13
猜数字
开始 输入数字 猜得对吗? 猜得对吗? N 提示大小 次数==10? 次数==10? Y 结束 N
Functions and Program Structure
16
全局变量(Global Variable) 全局变量(
structuring!”— structuring!”—Dijkstra, 1968 – 模块化(Parnas, 1972) 模块化( 1972)
结构化(Structural) 结构化(Structural) 面向对象(Object-Oriented) 面向对象(Object-Oriented) 面向组件(Component-Oriented) 面向组件(Component-Oriented) 面向智能体(Agent-Oriented) 面向智能体(Agent-Oriented) ……
哈工大C语言实验题
Q308.(10分)第5章实验2:体型判断。
医务工作者经广泛的调查和统计分析,根据身高与体重因素给出了以下按“体指数”进行体型判断的方法。体指数计算公式是:
t = w /(h*h)
其中:t是体指数;w是体重,其单位为千克;h是身高,其单位为米。根据给定的体指数t计算公式,可判断你的体重属于何种类型:
当 t<18 时,为低体重;
当 18≤t<25 时,为正常体重;
当 25≤t<27 时,为超重体重;
当 t≥27 时,为肥胖。
****输入提示信息格式:"Please enter h,w:\n"
****输入数据格式要求:"%f,%f"(先读入身高,再读入体重,身高以米读入,体重以千克读入)
****输出数据格式要求:
当 t<18 时,输出:"Lower weight!\n"
当 18≤t<25 时,输出:"Standard weight!\n"
当 25≤t<27 时,输出:"Higher weight!\n"
当 t≥27 时,输出:"Too fat!\n"
#include <stdio.h>
#include <stdlib.h>
main()
{
floatt,w,h;
printf("Please enter h,w:\n"); scanf("%f,%f",&h,&w);
t = w/(h*h);
if(t<18)
printf("Lower weight!\n");
elseif(t>=18&&t<25)
printf("Standard weight!\n");
哈工大苏小红版_C语言_课件_chart5_Logic_structures
a|b 0 1 1 1
a^b 0 1 1 0
~a 1 1 0 0
位运算符和位运算表达式
位运算表达式
按位与可用于对字节中的某位清零
0101 1111
&
1111 0111
0101 0111
23/54
位运算符和位运算表达式
位运算表达式
按位或可用于对字节中的某位置1
0101 1111
|
0010 0000
0111 1111
24/54
位运算符和位运算表达式
位运算表达式
按位异或可用于对字节中的某位取反
0101 1111 0101 1111
^
0010 0000
0111 1111
^
0000 1000
0101 0111
25/54
位运算符和位运算表达式
位运算表达式
左移位可用于将内容乘2操作
a = 0000 0011b = 3
34/54Baidu Nhomakorabea
#include <stdio.h> main() { int a, b, max; printf("Input a,b:"); scanf("%d,%d", &a, &b); if (a > b) { max = a; } if (a <= b) max = b; printf("max=%d\n",max); }
哈工大C语言实验题
哈工大C语言实验题
————————————————————————————————作者:————————————————————————————————日期:
ﻩ
Q308.(10分)第5章实验2:体型判断。
医务工作者经广泛的调查和统计分析,根据身高与体重因素给出了以下按“体指数”进行体型判断的方法。体指数计算公式是:
t = w/(h*h)
其中:t是体指数;w是体重,其单位为千克;h是身高,其单位为米。根据给定的体指数t计算公式,可判断你的体重属于何种类型:
当t<18时,为低体重;
当18≤t<25 时,为正常体重;
当25≤t<27 时,为超重体重;
当t≥27 时,为肥胖。
****输入提示信息格式:"Please enter h,w:\n"
****输入数据格式要求:"%f,%f"(先读入身高,再读入体重,身高以米读入,体重以千克读入)
****输出数据格式要求:
当 t<18 时,输出:"Lower weight!\n"
当18≤t<25 时,输出:"Standard weight!\n"
当25≤t<27时,输出:"Higher weight!\n"
当t≥27 时, 输出:"Too fat!\n"
#include
#include <stdlib.h>
main()
{
float t,w,h;
printf("Please enter h,w:\n"); scanf("%f,%f",&h,&w);
t = w/(h*h);
if(t<18)
printf("Lower weight!\n");
else if(t>=18&&t<25)
哈工大(威海)c语言实验报告册答案
实验1简单判定性问题求解
一、实验学时
完成本实验需4学时。
二、实验目的
1、阅读程序题
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法;
(2)掌握不同的类型数据之间赋值的规律;
(3)掌握数据在内存中的存储方式;
(4)学会输入、输出函数的基本格式和使用方法;
(5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。
2、编程题
(1)如何运用判定性结构进行程序设计;
(2)如何运用判定性结构进行程序设计。
3、调试题
(1)熟悉C程序的编辑、编译、连接和运行的过程。
三、实验指导
为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。
1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。
2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。要注意简单判定性问题的结构选择。
3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。对于初学者来说应该建立良
好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。
四、实验内容
1、阅读程序题
(1)( )
{ /*定义字符型变量*/
c12; /*向字符变量赋以整数*/
c1=97;
c2=98;
(" \n"12); /*以字符形式输出*/
(" \n"12); /*以整数形式输出*/
}
该程序的输出结果是
思考:可否改成 c1,c2;输出结果是?相同
哈工大新版C语言程序设计课件
“prove that %d + %d = %d by using C!\n〞, nNumber1, nNumber1, 2);
用程序流程图来描述程序
起止端点 输入/输出 一般处理 预定义处理
X1 条件判断
连接点
流程线
注释框
程序流程图描述刚刚的程序
Begin 变量声明 变量初始化
输出 字符串1 输出 字符串2 输出 字符串3 输出 字符串4与变量 输出 字符串5
C语言的祖师爷 Dennis M. Ritchie
/
Ritchie漫画像
C is quirky, flawed, and an enormous success.
C诡异离奇、缺陷重重, 却获得巨大成功
Who am i?
• 姓名:徐永东 • 联系方式: •: • Email: 〔推荐使用Email方式交流答疑〕 • 课件/徐永东 用户名:test (pub),密码:123456〔提
nResult4= lOperator/rOperator;/* 计算lOperator与rOperator相除并将商存入nResult4中 */
nResult5= lOperator%rOperator;/* 算lOperator与rOperator的模并将余数存入nResult5中 */
printf(“ %d “, nResult1);
中国大学MOOC-哈工大-C语言程序设计精髓第六-十二周编程题答案
6.1 下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。
#include<stdio.h>
#include <string.h>
int 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;
break;
}
}
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)
哈工大《飞行器设计综合实验》喷气C语言程序
#include"ICETEK-C6713-A.h"
#define UART_BASE_ADDR 0x90120000
#define OFFSET 2
#define RBR *((short*)(UART_BASE_ADDR+0*OFFSET)) #define THR *((short*)(UART_BASE_ADDR+0*OFFSET)) #define IER *((short*)(UART_BASE_ADDR+1*OFFSET)) #define IIR *((short*)(UART_BASE_ADDR+2*OFFSET)) #define FCR *((short*)(UART_BASE_ADDR+2*OFFSET)) #define LCR *((short*)(UART_BASE_ADDR+3*OFFSET)) #define MCR *((short*)(UART_BASE_ADDR+4*OFFSET)) #define LSR *((short*)(UART_BASE_ADDR+5*OFFSET)) #define MSR *((short*)(UART_BASE_ADDR+6*OFFSET)) #define SCR *((short*)(UART_BASE_ADDR+7*OFFSET)) #define DLL *((short*)(UART_BASE_ADDR+0*OFFSET)) #define DLM *((short*)(UART_BASE_ADDR+1*OFFSET))
哈工大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 0
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,
哈工大 C语言程序设计精髓 MOOC慕课 6-12周编程题答案
"/*下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。
*/
#include<>
#include <>
int 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;
break;
}
}
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';
哈尔滨工业大学c语言实验
哈尔滨工业大学计算机科学与技术学院
苏小红
sxh@
主教材:
苏小红等,《C语言大学实用教程》,电子工业出版社,2004,8
苏小红等,《C语言大学实用教程(第2版)》,电子工业出版社,2007,2
实验教材:
苏小红等,《C语言大学实用教程习题与实验指导》,电子工业出版社,2004,8
苏小红等,《C语言大学实用教程学习指导》,电子工业出版社,2007,4
实验内容
问题1:要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个?
#include <stdio.h>
main()
{
char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A) 1 2 34 B) 1, 2, 34
问题2:与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?
#include <stdio.h>
main()
{
char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
练习——键盘输入与屏幕输出练习
问题3:要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?
哈工大 选修课—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变换,画出幅频特性。(选作)
设计和计算:
程序框图:
程序清单和注释:
- 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
#include
#include
#include
#include
#include
#define N1 16
#define N2 8
#define N4 4
#define N8 2
#define N16 1
#define END 0
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("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,使喇叭发声*/ }