以十六进制表示的二进制补码怎么转换成十进制数?如把“FE”转换成-2

xiangdie 2004-02-05 04:25:23

问题如上,请各位帮忙写个算法。
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
1.1 用降幂法和除法将下列十进制转换为二进制十六进制: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2 将下列二进制转换为十六进制十进制: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3 将下列十六进制转换为二进制十进制: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4 完成下列十六进制的运算,并转换为十进制进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5 下列各均为十进制,请用8位二进制补码计算下列各题,并用十六进制表示其运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6 下列各十六进制表示的8位二进制,请说明当它们分别被看作是用补码表示的带符号或无符号时,它们所表示十进制是什么? (1) D8 (2) FF
.1 用降幂法和除法将下列十进制转换为二进制十六进制: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2 将下列二进制转换为十六进制十进制: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3 将下列十六进制转换为二进制十进制: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4 完成下列十六进制的运算,并转换为十进制进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5 下列各均为十进制,请用8位二进制补码计算下列各题,并用十六进制表示其运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6 下列各十六进制表示的8位二进制,请说明当它们分
《IBM—PC汇编语言程序设计》习题参考答案 第 一 章. 习 题 1.1 用降幂法和除法将下列十进制转换为二进制十六进制: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2 将下列二进制转换为十六进制十进制: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3 将下列十六进制转换为二进制十进制: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4 完成下列十六进制的运算,并转换为十进制进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5 下列各均为十进制,请用8位二进制补码计算下列各题,并用十六进制表示其运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6 下列各十六进制表示的8位二进制,请说明当它们分别被看作是用补码表示的带符号或无符号时,它们所表示十进制是什么? (1) D8 (2) FF 答:(1) D8H表示的带符号为 -40,D8H表示的无符号为216; (2) FFH表示的带符号为 -1, FFH表示的无符号为255。 1.7 下列各均为用十六进制表示的8位二进制,请说明当它们分别被看作是用补码表示或字符的ASCII码时,它们所表示十进制及字符是什么? (1) 4F (2) 2B (3) 73 (4) 59 答:(1) 4FH表示十进制为 79,4FH表示的字符为O; (2) 2BH表示十进制为 43,2BH表示的字符为 +; (3) 73H表示十进制为115,73H表示的字符为s; (4) 59H表示十进制为89,59H表示的字符为Y。 1.8 请写出下列字符串的ASCII码值。 For example, This is a number 3692. 答:46H 6FH 72H 20H 65H 78H 61H 6DH 70H 6CH 65H 2CH 0AH 0DH 54H 68H 69H 73H 20H 69H 73H 20H 61H 20H 6EH 75H 6DH 62H 65H 72H 20H 33H 36H 39H 32H 2EH 0AH 0DH 第 二 章. 习 题 2.1 在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。试问可直接由指令指定的I/O端口。 答:可直接由指令指定的I/O端口为256个。 2.2 有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。 答:存储器里的存放情况如右上图所示。 2.3 在IBM PC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。 答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。 2.4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢? 答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是3017AH。 2.5 如果在一个程序开始执行以前(CS)=0A7F0H,(如16进制的最高位为字母,则应在其前加一个0) (IP)=2B40H,试问该程序的第一个字的物理地址是多少? 答:该程序的第一个字的物理地址是0AAA40H。 2.6 在实模式下,存储器中每一段最多可有10000H个字节。如果用调试程序DEBUG的r命令在终端上显示出当前各寄存器的内容如下,请画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。 C>debug -r AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC 答:此时存储器分段的示意图如右图所示。OF、SF、ZF、CF的值都为0。 2.7 下列操作可使用那些寄存器? (1) 加法和减法 据寄存器等 (2) 循环计 CX (3) 乘法和除法 AX、DX,乘和除用其他寄存器或存储器 (4) 保存段地址 段寄存器 (5) 表示运算结果为0 ZF=1 (6) 将要执行的指令地址 CS:IP (7) 将要从堆栈取出据的地址 SS:SP
《C语言程序设计》 实验指导书 山东水利职业学院 目 录 实验一 C语言程序初步 2 实验二 据类型、运算符和表达式 3 实验四 循环结构(1) 6 实验五 循环结构(2) 9 实验六 函(1) 12 实验七 函(2) 14 实验八 组(1) 16 实验九 组(2) 19 实验十 指 针 (1) 22 实验十一 指针(二) 24 实验十二 有关文件的程序设计 27 实验十三 结构体和共用体 30 实验十四 位运算 32 实验十五 综合应用举例 33 实验一 C语言程序初步 [实验目的和要求] 1、 熟悉C语言运行环境。 2、 掌握C语言程序的书写格式和C语言程序的结构。 3、 掌握C语言上机步骤,了解运行一个C程序的方法。 4、 本实验可在学习完教材第一章后进行。 [实验内容和步骤] 1、输入一个简单的C语言程序:输入矩形的两条边,求矩形的面积。 [分析与讨论] 1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。 2、总结C程序的结构和书写规则。 实验二 据类型、运算符和表达式 [实验目的] 1.熟练表达式的表示方法 2.了解表达式的运行结果 3.了解C语言中据类型的意义 [实验内容和步骤] 1. 用printf函来输入表达式运行结果 2. 程序试图计算由键盘输入的任意两个整的平均值: [问题讨论] 1.“=”和“==”有什么区别? 2.“&”和“&&”、“|”和“||”有什么区别? 3. 如何正确地选用据类型? 实验三 选择结构 [实验目的] 1、了解条件与程序流程的关系 2、了解用不同的据使程序的流程覆盖不同的语句、分支和路径。 [实验内容和步骤] 1、题目 有如下程序段: {…… if (a>1&&b= =0) x=x/a; if(a==2||x>1) x=x+1; } 为了更容易明白程序的逻辑结构,要求用流程图来加以描述。 要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。 [分析讨论] (1) 用哪一组据就可使程序中的每个处理语句都执行一次?为了找出程序中各条处理语句中的错误,应该使用什么样的据对程序进行测试?请上机验证自己的结论。 (2) 用哪两组据就可以使程序段中的每个分支都运行一次?这种情形与上面的讨论有何不同?如果为了找出程序中积压分支中的错误,应该使用什么样的据对程序进行测试?请上机验证自己的结论。 (3)用哪两组据就可以把判定框中的每个条件运算都进行一次?如果为了测试出判定条件中的错误,应使用哪些据对程序进行测试?请上机验证自己的结论。 (4)用哪四组据才可以把各种条件的组合都检测一遍? 如果为了测试各种条件的组合的情形,应该使用什么样的测试据?请上机验证自己的结论。 (5)用哪四组据才可以把起始到终止的各条路径都覆盖一次?如果为了测试出程序在不同路径下的错误,应该使用什么样的测试据?请上机验证自己的结论。 实验四 循环结构(1) [目的和要求] 1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次。 2、了解条件型循环结构的基本测试方法。 [实验内容与步骤] 1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。 main() {double e=1.0,x=1.0,y,detax; int i=1; printf(“\n please input enter a error:”); scanf(“%lf”,&detax); y=1/x; while(y>=detax) { x=x*I; y=1/x; e=e+y; ++i; } printf(“%12.10lf”,e); } [分析讨论] (1)、阅读上面的程序,写出程序所依据的计算公式。 (2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? (3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y数型循环结构的次 2、 了解对计型循环结构进行测试的基本方法 3、 了解在嵌套循环结构中,提高程序效率的方法 4、 本实验应在学习了教材第3.3.4进行 [实验内容与步骤] 实验题目:下面是一个循环结构 的C程序。 main() { int i ,j; long sum=0; for(i=1,i<=20,i++) for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2) printf(“sum is :%d\n”,sum); } [ 分析讨论] (1) 将上述程序中的和分别做什么样修改,能使程序按如下要求运行: .不循环; .外循环1次,不进入内循环; .外循环,内循环各1次; .外循环1次,内循环2次; .外循环 2次, 内循环1次; .外循环19次,内循环3次; .外循环20次,内循环2次; .外循环21次,内循环3次。 (2) 试修改程序,以便能知道控制表达式 i=1;j<=20;i++ 和 j=1;j<3;j+= 各执行了多少次? (3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观 察对换后的外循环与内循环控制表达式执行的总次有无变化? (4)将(3)中程序写为 main() { int i,j,k; long sum=0; for (j=1.j<=3.j++) { k=j+2; for(i=1;i<=20;i++) sum=sum+(i+1)*(i+1)**k; } printf(“sum is :%d\n”,sum); } 观察程序的执行结果有无变化? (5)将(3)中程序改写为 main() { int I,j,m,n; long sum=0; for(j=1;j<=3;j++) { m=j+2; for(I=1;j<=20;I++) { n=I+1; sum=sum+m*m*k; } } printf(“sum is :%d\n”,sum); } 观察程序的执行结果有无变化? (1) 实验六 函(1) [实验目的] 1.理解和掌握多模块的程序设计与调试的方法。 2.掌握函的定义和调用的方法。 3.学会使用递归方法进行程序设计。 [实验内容和步骤] 1. 编写一个函,判断一个是不是素。在主函中输入一个整,输出是否是素的信息。 实验步骤与要求: (1) 编写一个函prime(n),返回给定整n是否为素。 (2) 编写一个主函,输入一个整,调用(1)中的函,判断此整是否为素,并输出结果。 (3) 对于属于多函程序,可以采用每个函分别进行编辑、编译的方法,然后再连接、运行。如果编译有错时,可分别修改,这样便于调试。实验2和实验3也可以使用这样的调试方法。 2. 用梯形法求函的定积分。 实验步骤与要求: (1) 编制一个函sab(a,b,n),其功能是求函f(x)在[a,b]上的定积分,其中n为区间[a,b]的等分。要求该函在一个独立的文件中。 (2) 编制一个主函以及计算被积函值的函f(x),在主函中调用(1)中的函计算并输出下列积分值。要求主函与函f(x)在同一个文件中。 (3) 编制另一个主函以及计算被积函值的函f(x),在主函中调用(1)中的函计算并输出下列积分值。要求主函与函f(x)在同一个文件中。 说明: 用梯形法求定积分,梯形公式为 s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n 3. 用递归方法编写程序,求n阶勒让德多项式的值,递归公式为 1 (n=0) pn(x)=x (n=1) ((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n>1) , [ 分析讨论] 1. 小结函的定义及调用方法。 2. 小结函中形参和实参的结合规则。 实验七 函(2) [目的与要求] 1、 掌握C语言函定义及调用的规则。 2、 理解参传递的过程。 [ 实验内容与步骤] 1、 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。 main() { int,y; printf(“%d\n”,sum(x+y)); int sum(a,b) { int a,b; return(a+b); } } 2、 编写并调试一个求(n为整)的递归函,希望能在程序运行过程中动态地显示递归函被调用的轨迹。 [分析讨论] 1、 针对以上实验内容写出相应的参传递过程并分析结果。 2、 讨论参的传递的几种形式。 实验八 组(1) [实验目的] 掌握有关组和字符串的程序设计方法。 [实验内容和步骤] 1 已知一组据如下: 6,3,42,23,35,71,98,67,56,38 编写程序,把它们按从小到大的次序排列起来。 程序如下: /*EX3-1*/ # include # define N 10 main() { int a[N]={6, 3, 42, 23, 35, 71, 98, 67, 56, 38}; int i, j, t; printf(“The array before sorted:”); for(i=0; ia[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } } for(i=0; i数组时下标的用法和注意事项. 2.什么情况下出现下标越界.  实验九 组(2) [目的和要求] 1、掌握组定义的规则。 2、掌握C语言组的基本用法。 [实验内容与步骤] 1、编写程序,测试下列组的定义方式是否正确 (1) main() { int n; scanf(“%d”,&n); int a[n]; …… } (2) main() { const int n=10; int a[n]; } (3) #include #define M 10 main() { int a[M]; } (4) main() { int a[2+2*4]; } (5) #include #define M 2 #define N 8 main() { int a[M+N]; } 通过这一实验,可以说明什么问题? 2、运行下面的C程序,根据运行结果,可以说明什么? main( ) { int num[5]={1,2,3,4,5}; inti i; for(i=0;i<=5;i++) printf(“%d”,num[i]); } 3、操作符&用以求一个变量的地址,这在函scanf中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维组各元素的地址,并由此说明二维组中各元素是按什么顺序存诸的。 4、为一个起泡排序程序设计测试用例,并测试之。 [分析讨论] 通过实验,分析定义与引用组的区别。 实验十 指 针 (1) [目的和要求] 1. 熟悉指针的正确用法。 [实验内容和步骤] 1、指出下面程序错误的原因。 main( ) { int x=10,y=5,*px,*py; px=py; px=&x; py=&y; printf(“*px=%d,*py=%d,*px,*py); } 2.下面的程序能获得上述运行结果吗? main() { char *S=”COMPUTER”; char c; printf(“which style you want to \n”); printf(“capital (c) or uncapital(u);”); c=getchar(); if(c=’c’) put(s); else { s=”computer”; puts(s); } } 分析出错原因。 3.设计一个C程序,用以测试下列各表达式的运算。 (1) y=*px++ (2) y=*++py (3) y=(*py)++ (4) y=--*ppx++ [分析讨论] 组与指针的联系。 实验十一 指针(二) [目的和要求] 1、了解指针参的特殊性。 2、掌握函、指针、组的用法。 [实验内容与步骤] 1、想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的? swap(int *p1,int *p2) { int *p; p=p1;p1=p2;p2=p; } main() { int a,b; scanf(“%d,%d”,&a,&b); pt1=&a;pt2=&b; if(a%d\n”,i+1,execute(a,b,function[i])); } execute(int x,int y,int *fun()) { return(*fun)(x,y);} fun1(int x, int y) { return(x+y);} fun2(int x,int y) { return(x-y);} fun3(int x,int y) { return(x*y);} fun4(int x,int y) { return(x/y);} [分析讨论] 指针、组、函的联系。 实验十二 有关文件的程序设计 [实验目的] 1. 掌握文件建立的方法。 2. 掌握包含文件操作的程序设计和调试方法。 [实验内容和步骤 ] 1 建立一个磁盘文件,其内容是0~90°之间每隔5°的正弦值。 程序如下: //EX8-1 #include #include #include #define PI 3.14159 main() { float S[19]; int i, a; ofstream out(“fsin.bny”); if(!out) { cout<<”Cannot open file.”<数的功能,具体使用方法. 实验十三 结构体和共用体 [目的和要求] 1、掌握结构体类型方法以及结构体变量的定义和引用。 2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。 3、掌握运算符”.”和”->”的应用。 4、共用体的概念和应用。 [实验内容和步骤] 1、编写程序:有4名学生,每个学生的据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。 2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出据。5个职工号为101,103,105,107,109。 3、在上题基础上,新增加一个职工的据,按职工号的顺序插入链表,新插入的职工号为106。写一函insert来插入新结点。 4、在上面的基础上,写一函delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表. 5、你有无办法测试构造链表时,内存空间的动态分配情形? [分析讨论] 怎样引用结构体变量成员? 实验十四 位运算 [目的和要求] 1. 掌握位运算的概念和方法。 2. 掌握位运算(&,|,^,~)的使用方法。 3. 掌握有关位运算的用法。 [实验内容和步骤] 1. 按习题8.2的要求,编一个程序,将一个整的高字节和低字节分别输出(用位运算方法)。上机运行。 2. 按习题8.6的要求,编一个程序,使一个整的低4位翻转。上机运行,用十六进制输入和输出。 3. 按习题8.10的要求,将一个整i的各位循环左移4位,设i的值为十六进制fe13。 4. 按习题8.13的要求,设计一个函,当给定一个整后,能得到该补码(应考虑该整是正或负)。 [分析讨论] 位运算时应注意什么问题? 实验十五 综合应用举例 [目的与要求] 1、熟悉C语言的端口及硬件控制的方法与原理。 2、了解用C语言实现发声程序所要访问的端口。 [实验内容和步骤] 1、调试课本中例10.8程序,注意调出不同的效果。 2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱? 乐谱实例: 6000 h5 1 h3 2 h2 0.5 h3 0.5 h1 4 h2 1 m7 2 m6 0.5 h1 0.5 m5 4 m3 2 m5 1.5 m6 0.5 h1 1.5 h2 0.5 m6 0.5 h1 0.5 m5 1 h5 1.5 h1 0.5 h6 0.5 h5 0.5 h3 0.5 h5 0.5 h2 4 h2 1.5 h3 0.5 m7 1 m6 1 m5 1.5 m6 0.5 h1 1 h2 1 m3 1 h1 1 m6 0 m5 0.5 m6 0.5 h1 0.5 m5 4 h3 1.5 h5 0.5 m7 1 h2 1 m6 0.5 h1 0.5 m5 3 m3 0. m5 0.5 m3 0.5 m5 0.5 m5 0.5 m6 0.5 m7 0.5 h2 0.5 m6 3 m5 0.5 m6 0.5 h1 1.5 h2 0.5 h5 1 h3 1 h2 1 h3 0.5 h2 0.5 h1 1 m6 0.5 m5 0.5 m3 2 h1 2 m6 0.5 h1 0.5 m6 0.5 m5 0.5 m3 0.5 m5 0.5 m6 0.5 h1 0.5 m5 3 h3 0.5 h5 0.5 h2 0.5 h3 0.5 h2 0.5 h1 0.5 m7 1 m6 1 h5 4## void play_music(char *filename) /*filename为音乐文件名格式见上*/ { FILE *fp; int rate; char sound_high[3]; float sound_long; register int i=0,j; int sign=0; float str[1000][2]; if ((fp=fopen(filename,"r"))==NULL) { printf("Open file music.doc Errors!\n"); exit(1); } fscanf(fp,"%d",&rate); while(!feof(fp)&&!sign) { fscanf(fp,"%s%f",&sound_high,&sound_long); str[i][1]=rate*sound_long; switch(sound_high[0]) { case 'h': switch(sound_high[1]) { case '1': str[i++][0]=1046.5; break; case '2': str[i++][0]=1174.7; break; case '3': str[i++][0]=1318.5; break; case '4': str[i++][0]=1396.9; break; case '5': str[i++][0]=1568; break; case '6': str[i++][0]=1760; break; case '7': str[i++][0]=1975.5; break; default: printf("\n Error Music.doc\n"); break; } break; case 'm': switch(sound_high[1]) { case '1': str[i++][0]=523.3; break; case '2': str[i++][0]=587.3; break; case '3': str[i++][0]=659.3; break; case '4': str[i++][0]=698.5; break; case '5': str[i++][0]=784.0; break; case '6': str[i++][0]=880; break; case '7': str[i++][0]=987.8; break; default: printf("\n Error music.doc.\n"); break; } break; case 'l': switch(sound_high[1]) { case '1': str[i++][0]=262; break; case '2': str[i++][0]=296; break; case '3': str[i++][0]=329.6; break; case '4': str[i++][0]=349.2; break; case '5': str[i++][0]=392; break; case '6': str[i++][0]=440; break; case '7': str[i++][0]=493.9; break; default: printf("\n Error music.doc.\n"); break; } break; case '*': switch(sound_high[1]) { case '1': str[i++][0]=131; break; case '2': str[i++][0]=147; break; case '3': str[i++][0]=165; break; case '4': str[i++][0]=176; break; case '5': str[i++][0]=196; break; case '6': str[i++][0]=220; break; case '7': str[i++][0]=247; break; default: printf("\n Error music.doc\n"); break; } break; case '#': if (sound_high[1]=='#') sign=1; break; case 'x': if (sound_high[1]=='0') str[i++][0]=20; break; default:printf("\n ERRor music.doc\n"); exit(1); } } for(j=0;j<=i-1;j++) { sound(str[j][0]); delay(str[j][1]); } nosound(); } [分析讨论] 1.c语言怎样对据库进行管理? 2.分析程序设计过程中怎样对基础知识进行灵活运用。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧