哈工大C语言课程设计

合集下载

哈工大c语言教学6-循环控制结构PPT课件

哈工大c语言教学6-循环控制结构PPT课件
32/63
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语言课件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语言的特点和应用。

在实验过程中,学生们通过编写简单的程序,如求解两个数的和、差、积、商等,加深了对C语言基本语法和运算符的理解;通过编写控制语句和循环语句,如if语句、switch语句、while循环、for循环等,加深了对程序流程控制的理解;通过编写函数和数组,加深了对模块化编程和数据结构的理解。

实验结果表明,学生们在实验课上取得了较好的成绩,通过实际操作和编程练习,加深了对C语言的理解和掌握,提高了编程能力和解决问题的能力。

通过本次实验,学生们不仅学到了C语言的基本知识和技能,还培养了团队合

作精神和创新意识,提高了解决问题的能力和实际操作的能力。实验课程的设

计和实施,为学生们提供了一个良好的学习平台,促进了他们的综合素质和能

力的提高。

总之,哈工大威海C语言实验报告是一次成功的实验课程,学生们通过实际操

作和编程练习,深入理解了C语言的基本概念和编程技巧,取得了较好的成绩,提高了编程能力和解决问题的能力。这将为他们今后的学习和工作打下坚实的

基础。

哈工大 C语言04_Function

哈工大 C语言04_Function
realeql.c
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语言实验题

哈工大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

哈工大苏小红版_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语言实验题

哈工大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语言实验报告册答案

哈工大(威海)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语言程序设计课件

哈工大新版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语言程序设计精髓第六-十二周编程题答案

中国大学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语言程序

哈工大《飞行器设计综合实验》喷气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语言课程设计

哈工大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周编程题答案

哈工大 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语言实验

哈尔滨工业大学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语言在测试与控制中的应用 数据采集与处理实验报告

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,使喇叭发声*/ }

相关文档
最新文档