当前位置:文档之家› 单片机应用技术c语言_课后习题答案

单片机应用技术c语言_课后习题答案

单片机应用技术c语言_课后习题答案
单片机应用技术c语言_课后习题答案

习题1答案

1.1 单项选择题

(1) A (2)C (3)A (4) A (5)A

(6) A (7)C (8)C (9) D (10)C

1.2 填空题

(1)硬件系统、软件系统

(2)时钟、复位

(3)XTAL1、XTAL2、RST、EA

(4)片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器

(5)时钟电路

(6)程序存储器

(7)工作寄存器组、位寻址区、用户RAM区

(8)1us、2us

(9)上电复位电路、按键复位电路

(10)2、高

下面分小题

1.3

答:

单片微型计算机是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU (Central Processing Unit)、随机存取存储器RAM(Random Access Memory)、只读存储器ROM(Read-only Memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时器/计数器等都制作在一块集成芯片上,构成一个完整的微型计算机,可以实现微型计算机的基本功能。

单片机应用系统是以单片机为核心,配以输入、输出、显示、控制等外围电路和软件,能实现一种或多种功能的实用系统。

单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础,软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。

1.4

答:

1.5

答:片内

寄存器常用于存放操作数及中间结果等;内部RAM的20H~2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作;在内部RAM低128单元中,通用寄存器占去了32个单元,位寻址区占去了16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。

片内RAM高128单元安排有21个特殊功能寄存器,其他空闲单元用户不能使用。

1.6

答:有21个可寻址的特殊功能寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的特殊功能寄存器,即程序计数器PC,它不占据RAM单元,在物理上是独立的。

在可寻址的21个特殊功能寄存器中,有11个寄存器不仅可以字节寻址,也可以进行位寻址。

1.7

答:

程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则由软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。PSW的各位定义下表所示。

PSW位定义

·

放算术运算的进位标志,在进行加或减运算时,如果操作结果最高位有进位或借位,则CY 由硬件置“1”,否则被清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。

·AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4位向高4位进位或借位,AC由硬件置“1”,否则被清“0”。在BCD码调整中也要用到AC位状态。

·F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用来控制程序的转向。

·RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关系如下表所示。

这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1 RS0=00。

·OV(PSW.2):溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128 ~+127),即产生了溢出,因此运算结果是错误的;OV=0表示运算正确,即无溢出产生。

在乘法运算中,OV=1表示乘积超过255,即乘积分别在B与A中;否则,OV=0,表示乘积只在A中。

在除法运算中,OV=1表示除数为0,除法不能进行;否则,OV=0,除数不为0,除法可正常进行。

·F1(PSW.1):保留未使用。

·P(PSW.0):奇偶标志位。P标志位表明累加器A中内容的奇偶性,如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中内容的指令均会影响P标志位。

此标志位对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。

1.8

答:

0003H~002AH这40个单元被均匀地分为5段,作为5个中断源的中断地址区。其中:0003H~000AH 外部中断0中断地址区

000BH~0012H 定时器/计数器0中断地址区

0013H~001AH 外部中断1中断地址区

001BH~0022H 定时器/计数器1中断地址区

0023H~002AH 串行中断地址区

中断响应后,按中断种类,自动转到各中断区的首地址去执行程序。因此在中断地址区中理应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。

1.9

答:

当需要扩展存储器时,低8位地址A7~A0和8位数据D7~D0由P0口分时传送,高8位地址A15~A8由P2口传送。

因此,只有在没有扩展片外存储器的系统中,P0口和P2口的每一位才可作为双向I/O 端口使用。

1.10

答:

单片机晶振电路

一般地,电容C1和C2取30pF左右,晶体的振荡频率范围是1.2MHz~12 MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就越快。MCS-51在通常应用情况下,使用振荡频率为的6MHz或12MHz的晶振,如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.059MHz的晶振。

1.11

答:

规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。

当振荡脉冲频率为12 MHz时, 一个机器周期为1μs;当振荡脉冲频率为6 MHz时,一个机器周期为2 μs。

1.12

答:

(a)上电复位电路(b)按键复位电路

单片机常见的复位电路

图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。

图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。

习题2答案

2.1 单项选择题

(1)C (2)A (3)B (4)A (5)D

2.2

答:

单片机开发过程所用的设备与软件称为单片机开发系统或开发工具。

单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、编程器等。连接方法如下图所示。

单片机开发系统连接方法示意图

2.3

答:单片机应用系统的开发过程如下:

设计电路图→制作电路板→程序设计→硬软件联调→程序下载→产品测试

2.4

答:

1.在线仿真功能

在线仿真器(In Circuit Emulator,简称ICE)是由一系列硬件构成的设备,它能仿真用户系统中的单片机,并能模拟用户系统的ROM、RAM和I/O口。因此,在线仿真状态下,用户系统的运行环境和脱机运行的环境完全“逼真”。

2.调试功能

1)运行控制功能

开发系统应能使用户有效地控制目标程序的运行,以便检查程序运行的结果,对存在的硬件故障和软件错误进行定位。

2)单片机状态查看修改功能

当CPU停止执行程序运行后,开发系统允许用户方便地读出或修改目标系统资源的状态,以便检查程序运行的结果、设置断点条件以及设置程序的初始参数。任务2中图2.13给出了在Medwin调试环境下查看单片机内部资源的菜单。

3.程序编译功能

1) 程序设计语言

单片机程序设计语言包括机器语言、汇编语言和高级语言。

机器语言是单片机唯一能够识别的语言。

汇编语言具有使用灵活、实时性好的特点。目前,在实际项目开发中较少使用汇编语言。

高级语言通用性好,且具有较好的可读性和可移植性,是目前单片机编程语言的主流。

2) 程序编译

单片机开发系统能够提供源程序的编辑、编译和下载功能以及工程管理功能。

4.程序固化功能

编程器是完成这种任务的专用设备,它也是单片机开发系统的重要组成部分。

习题3 答案

3.1 单项选择题

(1)A (2) A (3) C (4)C (5)A

(6)B (7)D (8)D (9)A (10)A

(11)B (12)C (13)D (14)D (15)C

3.2 填空题

(1)P3口

(2)字节,位

(3)主函数main()

(4)sbit FLAG=P3^1;

(5)sfr

(6)顺序结构、选择结构和循环结构

(7)表达式加上分号“;”

(8)if,switch

(9)do-while,while

(10)无限次

(11)10000

(12)unsigned char

(13)变量在MCS-51硬件系统中所使用的存储区域

(14)'\0'

(15)程序存储器ROM中

3.3 上机操作题

(1)

//xiti3_3_1.c——第三章习题3.3上机操作题(1)

#include

void delay(unsigned char i); //延时函数声明

void main() //主函数

{

while(1){

P1=0x55; //按状态1的方式点亮8个LED

delay(200); //延时

P1=0xaa; //按状态2的方式点亮8个LED

delay(200); //延时

}

}

void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c

(2)

//xiti3_3_2.c——第三章习题3.3上机操作题(2)

#include //包含头文件REG51.H

void delay(unsigned char i); //延时函数声明

void main() //主函数

{

unsigned char i,l,r;

while(1){

l=0x10; // 高4位灯的位置初值为00010000B

r=0x08; // 低4位灯的位置初值为00001000B

for(i=0;i<4;i++){

P1=~(l|r); // 循环点亮灯

l<<=1; // 高4位灯的位置移动

r>>=1; // 低4位灯的位置移动

delay(200); //延时

}

}

}

void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c

(3)

//xiti3_3_3.c——第三章习题3.3上机操作题(3)

#include //包含头文件REG51.H

void delay(unsigned char i); //延时函数声明

void main() //主函数

{

unsigned char i;

unsigned char display[]={0x89, 0xff,0x86, 0xff,0xc7, 0xff,0xc7, 0xff,0xc0, 0xff};

while(1){

for(i=0;i<10;i++){

P1=display[i]; //显示字送P1口

delay(200); //延时

}

}

}

void delay(unsigned char i) //延时函数参见任务1程序ex1_1.c

习题4 答案

4.1 单项选择题

(1)B (2)A (3)C (4)A (5)A

(6)B (7)A (8)A (9)D (10)A

(11)C (12)C (13)A (14)D

4.2 填空题

(1)①定时器T0 ②定时器T1 ③定时器方式寄存器TMOD ④定时器控制寄存器TCON

(2)GATE=0

(3)TMOD=0x05

(4)选择定时器T0/T1的工作方式

(5)控制定时器的启动、停止,标志定时器的溢出和中断情况。

(6)定时控制寄存器TCON 、串行口控制寄存器SCON 、中断允许寄存器IE 、中断优先权寄存器IP

(7)外部中断0、定时器0、外部中断1、定时器1、串行口 (8)电平触发方式

(9)硬件自动清除、软件清除、硬件配合软件共同清除 (10)0 4. 3 答:

当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,如果单片机系统采用12M 晶振,则计数周期为:s 112

/110121T 6μ=??=

,这是最短的定时周期,适

当选择定时器的初值可获取各种定时时间。

当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数,检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。

当需要准确计算时间时往往采用定时器的定时方式,而当要对一些外部事件计数时则采用定时器的计数方式。

4. 4 答:

软件定时是通过编写一段延时程序来实现定时,这段延时程序不完成任何操作,只是通过一些空操作浪费掉一段时间。这样的软件定时往往浪费CPU 的工作效率,并且定时不够准确,前面三章的各个任务中均采用了这种方法。

硬件定时是通过单片机的定时器来实现时间的计算,用户只需要对定时器的工作方式、初始值赋予合适的数值,启动定时器后,定时器将自动按照机器周期定时。这种由定时器实现的定时方式,定时时间准确、CPU 的工作效率高。

4.5 答:

MCS-51系列单片机的定时/计数器是增1计数器。

对于增1计数器,计数初值应等于最大计数值减去所需要的计数值。 而减1计数器,计数初值就等于所需要的计数值。

例如:假设需要计数50000次。对于增1计数器的单片机,若采用方式1的定时器,最大计数值为65536,则初值应为:65536-50000=15536。

而对于减1计数器,则计数初值将为50000。 4.6 答:

在定时/计数器工作于方式1下,最大计数值为65536。

若晶振频率为6MHz ,则一个机器周期为2μS,所以最短定时时间为2μS (计数初值为65535),最长定时时间为2μS ×65536=131072μS (计数初值为0)

4.7 答:

定时/计数器的4种工作方式由方式寄存器TMOD 中的M1、M0来进行选择,具体如下:

4.8

答:

中断是通过硬件来改变CPU的运行方向。计算机在执行程序的过程中,当出现CPU以外的某种情况,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。

调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的;而何时调用中断服务程序事先却无法确定,因为“中断”的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。

中断的特点:分时操作、实时处理、故障处理

4.9

答:

MCS-51系列单片机有5个中断源,分别是外部中断0、定时器0、外部中断1、定时器1、串行口。它们的优先级别通过寄存器IP实现。

4.10

答:

外部中断有低电平触发和下降沿触发两种方式。通过定时器控制寄存器TCON中的IT0、IT1来选择和设定。

IT1为1

INT中断触发方式控制位,当IT1 = 0,外部中断1控制为电平触发方式。当IT1 = 1,外部中断1控制为下降沿触发方式。

4.11

答:

常用的中断函数定义语法如下:

void 函数名()interrupt n

其中n为中断类型号,C51编译器允许0~31个中断,n取值范围0~31。

习题5答案

5.1 单项选择题

(1) C (2) A (3) C (4) B (5) B

(6) D (7) B (8) C (9) A

5.2

(1) led[k]

(2) delay()

5.3

答:

不能,因为共阴极和共阳极数码管com段接的电平不一样,点亮段码所需的电平也不同。应该将共阴极数码管的com端接至GND上,P1口和8个段之间接上非门。

5.4

答:

LED静态显示时各位数码管相对独立,公共端恒定接地(共阴极)或正电源(共阳极),每个数码管的8个字段分别与一个8位I/O口地址相连,适合于2个及其以下的数码管显示。动态显示时各位数码管的段选线相应并联在一起,由一个8位的I/O口控制,各位的段选线由另外的I/O口控制。

5.5

答:

每次只能点亮一行。其采用的为动态显示,具体原理为:从第一行开始点亮,每行点亮之间延时1ms,第八行结束后再从第一行开始循环显示。利用人体的视觉驻留现象,所以看到的是一个稳定的图形,好像8行同时点亮。

5.6

答:

可以采用硬件和软件两种方式,硬件上可在键输出端加RS触发器或单稳态触发器构成去抖电路,软件上可以在检测到有按键按下时,执行一个10ms左右的延时程序,然后确认该键是否仍保持闭合状态的电平。

5.7

答:

独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O 口线,适合于八键以下使用;矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口,适合于八个键以上使用。

习题6答案

6.1 单项选择题

(1) D (2)C (3)A (4) A (5)B (6) D

6.2 填空题

(1)分辨率和建立时间

(2)ILE、CS、1

WR、

WR、2

(3)模拟,数字;数字,模拟

6.3

答:

DAC0832与8051单片机接口时,主要有如下控制信号:ILE、/CS、/WR1、/WR2 、/XFER,作用分别是:

(1)CS:转入寄存器片选信号,低电平有效。

(2)ILE:输入寄存器的数据锁存允许信号,高电平有效。

(3)1

WR:输入寄存器的数据写信号,低电平有效。

(4)2

WR:DAC寄存器写信号,并启动转换。低电平有效。

(5)XFER:数据向DAC寄存器传送控制信号,传送后即启动转换,低电平有效。

ADC0809与8051单片机接口时,控制信号主要有:ALE、START、EOC、OE。作用分别是:(1)ALE:地址锁存允许信号在ALE上升沿,ADDA、ADDB、ADDC地址状态被送入地址锁存器中。

(2)START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿

时,开始进行A/D转换;在A/D转换期间,START应保持低电平。

(3)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。

(4)EOC——转换结束状态信号。启动转换后,系统自动设置EOC=0,转换完成后,EOC=1。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。

6.4

答:

所谓单缓冲方式就是使0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,或者两个输入寄存器同时受相同的信号控制的方式。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出的情况,就可采用单缓冲方式。

所谓双缓冲方式,就是把DAC0832的两个锁存器都接成受控锁存方式。

6.5

答:

判断A/D转换是否结束一般可采用3种方式,即EOC信号和单片机相连可有3种方式:

①延时方式:EOC悬空,启动转换后,延时100μs后读入转换结果。

②查询方式:EOC接单片机端口线,查得EOC变高,读入转换结果,作为查询信号。

③中断方式:ROC经非门接单片机的中断请求端,转换结束作为中断请求信号向单片

机提出中断申请,在中断服务中读入转换结果。

其中延时方式和查询方式均占用单片机CPU,即在这段时间,CPU只能做延时或查询的工作,而采用中断方式时,CPU可先执行主程序,一旦产生中断,才去处理数据接收的工作,使得CPU利用率较前面两种要高。

6.6

答:

(1)周期为25ms的锯齿波发生器C语言源程序如下:

#include

#include

#define DA0832 XBYTE[0x7fff]

#define uchar unsigned char

#define uint unsigned int

uchar i;

void delay_100us()

{ TH1=0xff; // 置定时器初值0xff9c,即65436,定时0.1ms

TL1=0x9c;

TR1=1; // 启动定时器1

while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零

}

void main(void)

{ TMOD=0x10; // 置定时器1为方式1

while(1)

{ for(i=0;i<=255;i++) //形成锯齿波输出值,最大255

{ DA0832=i; //D/A转换输出

delay_100us();

}

}

}

(2)周期为50ms的三角波C语言源程序如下:

#include

#include

#define DA0832 XBYTE[0x7fff]

#define uchar unsigned char

#define uint unsigned int

uchar i,j;

void delay_100us()

{ TH1=0xff; //置定时器初值0xff9c,即65436,定时0.1ms

TL1=0x9c;

TR1=1; // 启动定时器1

while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零

}

void main(void)

{ TMOD=0x10; // 置定时器1为方式1

while(1)

{ for(i=0;i<=255;i++) //形成三角波输出值,最大255

{ DA0832=i; //D/A转换输出

delay_100us();

}

for(j=255;j>=0;j--)//形成三角波输出值,最大255

{ DA0832=j; //D/A转换输出

delay_100us();

}

}

}

(3)周期为50ms的方波C语言源程序如下:

#include

#include

#define DA0832 XBYTE[0x7fff]

#define uchar unsigned char

#define uint unsigned int

uchar i,j;

void delay_25ms()

{ TH1=0x9e; // 置定时器初值

TL1=0x58;

TR1=1; // 启动定时器1

while(!TF1); // 查询计数是否溢出,即定时25ms时间到,TF1=1 TF1=0; // 25ms时间到,将定时器溢出标志位TF清零

}

void main(void)

{ TMOD=0x10; // 置定时器1为方式1

while(1)

{ DA0832=255; //形成方波输出值,最大255 ,D/A转换输出

delay_25ms();

DA0832=0; //D/A转换输出

delay_25ms();

}

}

6.7

答:

在选定转换通道后,ADC0809工作的主要有以下几个步骤:

1.启动A/D转换,给START引脚一个下降沿;

2.ALE信号与START信号一般连接在一起,这样使得在ALE信号的前沿写入地址信号,紧接着在其后沿就启动转换;

3.查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束;

4.允许读数,将OE引脚设置为1状态。

5.读取A/D转换结果,从ADC0809的外部地址读取其转换结果。

习题7答案

7.1 单项选择题

(1) A (2)B (3)D (4) C (5)B

(6) C (7)B (8)C (9) C (10)A

(11) C (12)D (13)A

7.2

答:

在异步通信中,数据是不连续传送的,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据是低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。

异步通信的字符帧格式分为无空闲位帧格式和有空闲位帧格式。

7.3

答:

T1的溢出率取决于单片机定时器T1的计数速率和定时器的预置值。当定时器T1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。

7.4

答:

参考程序如下:

#include

#define uchar unsigned char

code uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; uchar send[]={0x04,0x03,0x02,0x01,0x08,0x07,0x06,0x05};

int i,t;

//延时函数,当t取值12000时,若晶振fosc=12MHz,大约延时1s

void delay(t)

{for(i=0;i

{;}

}

main()

{

unsigned char i,j,k,m;

SCON=0x00; //串行口工作方式

while(1)

{ for(i=0;i<6;i++)

{SBUF=(tab[send[i]]); // 发送第i个数据

while(TI==0); // 等待发送是否完成

TI=0; // TI清0

}

delay(12000) ;

for(m=6;m<12;m++)

{SBUF=(tab[send[m]]); // 发送第i个数据

while(TI==0); // 等待发送是否完成

TI=0; // TI清0

}

delay(12000) ;

}

}

7.5

答:

参考程序如下:

甲机发送

发送子程序参考如下:

#include

#include

#include

#include

#include

#define uchar unsigned char

uchar FREQ; /*定时器计数变量*/

void main(void)

{

// 以下是设置中断和定时器

EA=1; PT0=1;

ET0=1;

TCON=0x08;

TMOD=0x21;

// 定时器0为产生10ms的中断,定时器1为9600bit/s 的波特率发生器TH0=-10000/256;

TL0=-10000%256;

TL1=0xfd;

TH1=0xfd;

SCON=0xd8; //串行口方式3发送

PCON=0x00;

TR1=1; // 开定时器

TR0=1;

TI=1;

while(1){}

}

// 定时器0的中断服务程序,向串口发送“A”数据

void intsvr1(void) interrupt 1

{

// 重新装入定时器0的初值;

TH0=-10000/256;

TL0=-10000%256;

FREQ=FREQ+1; // 定时器T0的低四位赋值

if (FREQ==100) // 1秒判断

{

FREQ=0;

printf("A"); // 发送字符

}

}

乙机接收子程序参考如下:

#include

#define uchar unsigned char

void main(void)

{ uchar astring;

//在11.059MHz晶振下,设置串行口波特率为9600bit/s,用串行口方式3接收TMOD=0x20;

TH1=0xfd; TL1=0xfd;

TR1=1;

SCON=0xdb;

PCON=0x00;

while(1)

{

while(RI==0);

RI=0;

astring=SBUF;

lcd_display(); //液晶显示参考前面章节程序

}

}

7.6

答:

参考程序如下:

#include

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3;

bit read_flag= 0 ;

//串行口初始化函数:init_serialcomm

//函数功能:串行口初始化,设置波特率为4800bit/s,允许串口中断

//形式参数:无

//返回值:无

void init_serialcomm( void )

{

SCON = 0x50 ; //SCON: 串行口方式1,允许接收

TMOD |= 0x20 ; //设置定时器1为方式2定时

PCON |= 0x80 ; //SMOD=1;

TH1 = 0xf4 ; // 波特率4800bit/s, fosc=11.0592MHz

TL1 = 0xf4 ;

IE = 0x90 ; //开串口中断

TR1 = 1 ; // 启动定时器1

}

//发送字符函数:send_char_com

//函数功能:向串口发送一个字符

//形式参数:存放字符的变量ch, unsigned char类型

//返回值:无

void send_char_com( unsigned char ch)

{

SBUF=ch;

while (TI== 0 );

TI= 0 ;

}

//发送字符串函数:send_string_com

//函数功能:向串口发送一个字符串,strlen为该字符串长度

//形式参数:字符串变量*str, unsigned char 类型; 字符串长度strlen, unsigned int //类型

//返回值:无

void send_string_com( unsigned char *str, unsigned int strlen)

{

unsigned int k= 0 ;

do

{

send_char_com(*(str + k));

k++;

} while (k < strlen);

}

//串口接收中断函数

void serial () interrupt 4 using 3

{

if (RI)

{

unsigned char ch;

RI = 0 ;

ch=SBUF;

if (ch> 127 )

{

count3= 0 ;

inbuf1[count3]=ch;

checksum= ch- 128 ;

}

else

{

count3++;

inbuf1[count3]=ch;

checksum ^= ch;

if ( (count3==(INBUF_LEN- 1 )) && (!checksum) ) //最后一个字节是否为前几个字节

//后7位的异或校验和{

read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,

//就置位取数标志

}

}

}

}

void main() //主函数

{

init_serialcomm();//初始化串口

while ( 1 )

{

if (read_flag) //如果取数标志已置位,就将读到的数从串口发出

{

read_flag= 0 ; //取数标志清0

send_string_com(inbuf1,INBUF_LEN);

}

}

}

习题8 答案

8.1单项选择题,在A、B、C、D四个答案中只有一个正确答案。

(1)B (2)D (3)C (4)D (5)A (6)A (7) B 8.2填空题

(1)PSEN

(2)双向数据线,P0口

(3)数据总线,地址总线

(4)74LS165,74LS164

(5)外接上拉电阻,由于AT24C01的SDA和SCL为开漏输出

(6)512

8.3

答:

因为MCS-51系列单片机分别对程序存储器和数据存储器访问提供了不同的控制信号,对程序存储器的读操作和取指操作由信号PSEN控制,而对数据存储器的读写操作由控制信号WR和RD控制,而且,对二者的操作指令也不相同,因此不会发生冲突。

8.4

答:

如果要在EPROM中定义表格,应在变量声明时使用code标志符,例如:

unsigned char code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90}; //将0~9的共阳极数码管字符码表定义到程序存储器中。

在程序存储器中定义表格后,可以通过变量赋值实现从EPROM中读出所定义的表格数据。下面的程序段实现在程序存储器中查表、并将0~9显示字符码逐一送到P1口的操作: unsigned char i;

for (i=0;i<=9;i++)

{

P1=tab[i]; //从程序存储器中取显示字符码送P1口

delay();

}

8.5

答:

参考程序如下:

#include "reg51.h"

unsigned char da[]={0xF9,0x80};

void delay (unsigned int i); //延时函数声明

main()

{

unsigned char i;

P1=0xff; //P1.0置1,允许串行移位

SCON=0x00; //设串行口方式0

while(1){

for (i=0;i<2;i++)

{ SBUF=da[i]; //送显示

TI=0;

while(!TI); //等待发送完毕

delay(2000);

}

}

}

void delay (unsigned int i)

{

}

谢谢阅读

《C语言程序设计》课后习题答案

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.1什么是算法16 2.2简单的算法举例17 2.3算法的特性21 2.4怎样表示一个算法22 2.4.1用自然语言表示算法22 2.4.2用流程图表示算法22 2.4.3三种基本结构和改进的流程图26 2.4.4用N S流程图表示算法28 2.4.5用伪代码表示算法31 2.4.6用计算机语言表示算法32 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67

C语言课后习题答案(最终)

第0章习题 1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数: (1)128 (2)511 (3)1024 (4)65535 (5)1048575 答: (1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400 (4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF 2. 将下列二进制数转化为十进制数和十六进制数: (1)1100110101B (2)101101.1011B 答: (1)821、335 (2)45.6875、2D.B 3. 写出下列数的原码、反码、补码:15、-20、-27/32 答: (1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.0010100 4. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少? 答: 0~65535、-128~127、-32768~32767 5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。 答: 结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。 6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么? 答:

最新c语言课后习题答案汇总

c语言课后习题答案

第二章习题 2.什么叫做结构化算法?为什么要提倡结构化算法? 答:结构化算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。 跟结构化算法比较起来,非结构化算法有以下缺点: 流程不受限制的随意转来转去,使流程图豪无规律使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。 4. 第三章习题 1.#include #include void main() { unsigned int n;

float p,p1,r=0.09; scanf("%u",&n); p=pow(1+r,n); p1=(p-1)*100; printf("%5.2f%%\n",p1); } 运行结果:输入,回车,见结果: 2.#include #include int main() { int bj=1000; float r1,r2,r3,r5,r0,lx1,lx2,lx3,lx4,lx5; r1=0.0414; r2=0.0468; r3=0.0540; r5=0.0585; r0=0.0072; lx1=bj*r5; lx2=bj*(1+r2)*r3; lx3=bj*(1+r3)*r2; lx4=bj*pow(1+r1,5); lx5=bj*r0*5; printf("lx1=%f lx2=%f lx3=%f lx4=%f lx=5%f\n",lx1,lx2,lx3,lx4,lx5); return 0; } 运行结果: 3.#include #include int main() { long d,p; d=300000; p=6000; double m,r=0.01; m=log(p/(p-d*r))/log(1+r); printf("%4.2f",m); return 0;

C语言课后习题答案(完整版)-第四版-_谭浩强

C语言课后习题答案-第四版- 谭浩强(1-7) 第一章 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } #include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } #include #include int main()

{float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和 return 0; } #include #include int main() {double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和

C语言课后习题答案第八章

作业八:函数程序设计答案 (一)选择题(30分) 1.以下正确的函数定义形式是A__。 A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y); 2.以下正确的函数形式是D__。 A)double fun(int x,int y) { z=x+y; return z; } B)fun(int x,y) { int z; return z; } C)fun(x,y) { int x,y; double z; z=x+y; return z; } D)double fun(int x,int y) { double z; z=x+y; return z; }(重要) 3.以下正确的说法是A__。 在C语言中A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 4.若调用一个函数,且此函数中没有return语句,则正确的说法是D__。 该函数A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值(重要) 5.以下不正确的说法是B__。 C语言规定A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是B__。 A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 7.以下程序有语法性错误,有关错误原因的正确说法是C__。 main() { int G=5,k; void Prt_char(); ……

C语言课后作业答案

3-5-1正确 大写字母转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } else ch=ch; printf("%c\n",ch); } 3-5-2大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); ch=ch; { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } printf("%c\n",ch); } 3-5-3大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='a'&&ch<='z') ch=ch-32; else if(ch>='A'&&ch<='Z') ch=ch+32; else ch=ch; printf("%c\n",ch); } 3-6-1正确分段函数

#include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else { if(1 void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x>=10) y=3*x-8; else if(x>1) y=2*x+1; else y=x; printf("x=%d,y=%d\n",x,y); } 3 -6 -3正确 #include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else if(1=10) y=3*x-8; printf("x=%d,y=%d\n",x,y); } 计算器正确 #include void main() {

C语言课后答案

习题一 一、简答题 1.顺序结构、选择(分支)结构和循环结构。 2. (1)

(2)

3.编辑、编译、连接和运行 二、填空题 1. Ctrl+F9;Alt+F5;F2。 2. main(主) 3. main(主) 4. 任意 5. /* */ 不 6. ; 7.。 程序: include studio.h main{} /* this program prints the number of weeks in a year. /* ( int s s:=52; print(There are s weeks in a year"); 正确的为: #include main() /* this program prints the number of weeks in a year. */ { int s; s=52; printf("There are s weeks in a year"); }

习题二 一、选择题 1、C 2、B,D,F,G 3、C 4、A 5、C 6、B 二、填空题 1、声明;使用。 2、整型、浮点型(实型)、字符型。 3、hat_1,cat1,all, Dollar, piece_f, SIN, _ , FALSE. 4、'A'(字符),005(整型),3e0(整型),'\\'(字符),'\05'(字符), 1.2e+5(整型),0xf12(整型)。 5、(1)6+(4+5)*(4+5)/(2+3) (2)sin(a+b)*ain(a+b)/ (4*2)/(3*2)+2 三、读程题 1.若x为float型,其原值为5,a=2,b=4.7。写出下列表达式运算后x的值。 (1)x=(int)(b-a)%3*a/4-a (2)x=(x=b+1)+(int)(b)%10/2.0 (3)x+=x (4)x-=x (5)x*=x+x (6)x/=x+x (7)x+=x-=x*=x (8)x%=x (9)x=3*4,5*6 答案:(1)-1,(2)7.7,(3)10,(4)0,(5)50,(6)0.5,(7)0,(8)非法,(9)12。 2.写出下面程序的运行结果。 #include void main() { int a=2; printf("abcdefghijk\n"); printf("lmnop/n"); printf("I am a /n beginner of C !"); printf("I am a \n beginner of C !"); printf("%d + %d = %d",a,a,a); } 答案: abcdefghijk

C语言课后练习及答案

作业A: 一、单项选择题 1、如果要把常量327存入变量a中,a不能定义的类型是哪一个?() A)int B)char C)long D)float 2、若x 为unsigned int 型变量,则执行下列语句后x值为() x = 65535; printf(“%d\n”,x); A)65535 B)1 C)无定值D)-1 3、有以下程序 main() {int a=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a

C语言课后答案最新版本

第3章 三、编程题 1. 编写程序,输入一个非负数,输出以此数为半径的圆周长以及面积。 #include "stdio.h" #define PI 3.1415 void main() { float r,area,circumference; scanf("%f",&r); area=PI*r*r; circumference=2*r*PI; printf("area=%6.2f\ncircumference=%6.2f\n",area,circumference); } 2. 编写程序,输出下面结果,注意,双引号也要输出: “I'm a student!” #include void main() { printf("\"I\'m a student!\"\n"); } 3. 编写程序,输入一个小写字母,将其转换为大写字母输出。例如输入b ,则输出B 。提示:小写字母和 对应的大写字母的ASCII 码值相差32。 void main() { char ch; ch=getchar(); ch-=32; putchar(ch); //printf("%c",ch); } 4. 编写程序,输入一个华氏温度f ,输出其相应的摄氏温度c 。华氏温度和摄氏温度的转换公式为: )32f (95c -= #include void main() { float f,c; scanf(“%f ”,&f); c=5.0*(f-32)/9; printf(“华氏温度%5.2f 转换为摄氏温度为:%5.2f\n ”,f,c);

第4章 三、编程题 1.输入一个整数,判断这个整数是奇数还是偶数(提示:整数的奇偶性可以利用取余运算符%判定)。#include void main() { int a; scanf("%d",&a); if(a%2) printf("奇数\n"); else printf("偶数\n"); } 2.编写程序,输入一个24小时制的时间,转换为12小时制时间后进行输出。以13点15分为例,输入:13:15,则输出:下午1:15。 #include void main() { int hour,minute; scanf("%d:%d",&hour,&minute); if (hour>12) hour=hour-12; printf("%d:%d\n",hour,minute); } 3.输入年号,判断它是否是闰年(如果年号能被400整除,或能被4整除,而不能被100整除,则是闰年,否则不是)。 void main() { int year; scanf("%d",&year); if (year%400==0||(year%4==0&&year%100==0)) printf("%d是闰年\n",year); else printf("%d不是闰年\n",year); }

C语言课后习题答案

第1章C语言概述 一、选择题 答案: 1.A 2.B 3.C 4.C 5.D 6.B 7.D 8.B 二、填空题 答案: 1.函数2.目标3.编译程序4.分号 第2章数据类型、运算符和表达式 一、选择题 答案: 1.B 2.D 3.D 4.B 5.D 6.C 7.C 8.B 9.A 10.D 11.B 12.B 13.D 14.D 15.A 16.C 17.B 18.D 19.A 20.C 二、填空题 答案: 1.2 2.6,4,2 3.18 4.5 5.double或双精度 6.30 7.4,2 8.4 第3章顺序结构 一、选择题 答案: 1.C 2.C 3.C 4.A 5.A 6.A 7.D 8.D 9.C 10.D 二、填空题 答案: 1.scanf printf 2.顺序、选择、循环3.1 4.3 5.9,10 6.10,20 7.213 8.空格、Tab键、回车键 第4章选择结构 一、选择题 答案: 1.B 2.D 3.D 4.B 5.B 6.C 7.C 8.B 9.B 二、程序改错题 1.输入两个实数,在fun()函数中按数值由小到大输出它们。(保留2位小数)

答案: =======(答案1)======= float t; =======(答案2)======= if(a>b) =======(答案3)======= printf("%5.2f, %5.2f\n",a,b); 2.编写一个程序计算某年某月有几天。(注意要区分闰年) 答案: =======(答案1)======= switch(mm) =======(答案2)======= break; =======(答案3)======= default : 三、程序填空题 1.功能:输出a、b、c三个变量中的最小值。 答案: =======(答案1)======= &c =======(答案2)======= c:t1 四、程序设计题 1.功能:对任意输入的x,用下式计算并输出y 的值。说明:因为关于函数调用的知识在第7章讲解,所以在现阶段本程序的设计可以改用一个主函数来完成。 答案: int m; if(n<10) m=5; else if(n==10) m=0; else m=-5; return m; 或 int m; if(n>=10) if(n>10) m=-5; else m=0; else m=5; return m; 第5章循环结构 一、选择题

《C语言程序设计》课后习题参考答案

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案 ――武汉大学出版社 习题1参考答案 一、选择题 1. A 2. D 二、填空题 1.BASIC、FORTRAN、AL_GOL60和COBOL 2. 8 3.关键字 4. 编辑、编译、链接和运行 三、简答题 1.答: (1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。 (2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。 (3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。 (4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。 (5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。 (6)C语言与汇编语言相比,可移植性好。 (7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。 2.答:运行一个C语言程序,一般需要经过如下几个步骤:①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。 3.答: (1)操作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 什么是计算机程序1 什么是计算机语言1 语言的发展及其特点3 最简单的C语言程序5 最简单的C语言程序举例6 语言程序的结构10 运行C程序的步骤与方法12 程序设计的任务14 1-5 #include <> int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include <> int main() {int a,b,c,max; printf("please input a,b,c:\n");

scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

数据类型42 整型数据44 字符型数据47 浮点型数据49 怎样确定常量的类型51 运算符和表达式52 语句57 语句的作用和分类57 最基本的语句——赋值语句59 数据的输入输出65 输入输出举例65 有关数据输入输出的概念67 用printf函数输出数据68 用scanf函数输入数据75 字符数据的输入输出78 习题82 3-1 #include <> #include <> int main() {float p,r,n; r=; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0;

C语言课后习题标准答案

C语言课后习题标准答案 第1章C语言概述 一、简答题 1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。 2.顺序结构,分支结构,循环结构 3.所谓算法就是为解决一个问题而采取的方法和步骤。 算法的特性:有穷性、确定性、输入、输出、可行性。 表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示; (4)用伪代码表示;(5)用计算机语言表示。 二、算法 1.瓶子A里盛有醋 瓶子B里盛有酱油 那一个空瓶C 将A中的醋倒入C 将B中的酱油倒入A

将C中的醋倒入B 2.输入一个数放在a中max=a 以下步骤重复9次: 输入一个数放在a中 如果a>max,max=b 打印max的值 3.如果??a<b temp=a ?a=b ??b=temp 如果c>a ?temp1=a ??temp2=b a=c ?b=temp1 ?c=temp2 否则 ?如果?c>b ?temp=b ?b=c ?c=temp

打印a,b,c的值 4.i=1 sum=0 以下程序循环100遍: sum=sum+i ?i=i+1 打印sum的值 5.如果(n除以3的余数为0并且n除以5的余数为0)n能够同时被3和5整除 否则 ?n不能够同时被3和5整除 6.i=101 以下语句循环50遍: ?j=2 ?flag=1 ?当j<(i除以2的整数部分)时循环以下语句: ??如果i除以j的余数为零 ???flag=0 ???退出该循环 如果flag=1 ???打印i的值 ?i=i+1

C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1-8参考答案 习题1参考答案 一、简答题 1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么? 答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。 运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数据运算包括算术运算和逻辑运算。 控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。 存储器是计算机中具有记忆能力的部件,用来存放程序和数据。 输入设备是用来输入程序和数据的部件。 输出设备正好与输入设备相反,是用来输出结果的部件。 2、简述计算机的工作原理。 答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。整个过程由控制器进行控制。 3、计算机软件系统分为哪几类? 答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。 系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。 应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。 答:软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太严格的情况下,认为程序就是软件。硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。从这个意义上说,软件是用户与机器的接口。 二、填空题 1、算术逻辑 2、键盘鼠标 3、控制器运算器 4、10 2 5、0 0x 6、原码反码补码 7、00010111 11101001 8、127 -128 三、选择题 1、C 2、A 3、B 4、A 5、B 6、B 7、D 8、A 9、A 10、B 11、A 12、B 习题2参考答案 一、简答题 1、C语言有哪些特点? 答:(1)简洁紧凑、灵活方便;(2)运算符丰富;(3)数据结构丰富;(4)C语言是结构

C语言课后习题答案

第四章 练习题: 1.求2~1000中的守形数(若某数的平方,其低位与该数本身相同,则称该数为守形数。 例如25,25的平方=625,625的低位25与原数相同,则25称为守形数。 #i nclude void mai n() { int i=2, n,c; c=0; printf(”守形数有:"); while(i<1001) { n=i*i; if(n %10==i) { prin tf("%5d",i); c++; } else if(n %100==i) { prin tf("%5d",i); c++; } else if(n %1000==i) { prin tf("%5d",i); } else (n %1000!=i &&n %100!=i&&n %10!=i); { i++; } } } 3.求Sn=a+aa+aaa+…+aa…a之值,其中a代表1~9中的一个数字。例如:a代表2,则求2+22+222+2222+22222 (此时n=5), a 和n 由#in clude void mai n() { int a,b, n,i=1,sum=0; sea nf("%d%d",&a,&n); 2.输入两个正数m和n,求其最大公约数和最小公倍数。 #in clude void mai n() { int m,n,r,s,numl,num2; printf(" 两个正整 数:"); scan f("%d%d",&m,&n); nu m仁m,num2=n; while( nu m2!=0) { r=nu ml% nu m2; nu m仁nu m2; nu m2=r; s=m* n/nu ml; } printf("最大公因子是:%d",numl); printf(" 最小公倍数是:%d",s); } 4.从键盘输入一个正整数n,计算该数的各位 数之和并输出。例如,输入数是52446,则 计算:5+2+4+6=17并输出。 #in clude void mai n() { int a,n, sum=0; scan f("%d",&a); while(a!=0) { n=a%10; sum+=n; a=a/10; } printf(" 各位数之和为:%d",sum); }

C语言程序设计课后答案

2.2 #include main() { float x=2.5,y=2.5,z=2.5; printf("x=%f\n",x); printf("y=%f\n",y); printf("z=%f\n",z); } 3.1(1) #include main() { int a=12,b=3; float x=18.5,y=4.6; printf("%d\n",(float)(a*b)/2); printf("%d\n",(int)x%(int)y); } 3.2 #include main() { int x,b0,b1,b2,s; printf("Inputx:"); scanf("%d",&x); b2=x/100; b1=(x-b2*100)/10; b0=x%10; s=b0*100+b1*10+b2; printf("s=%d\n",s); } 3.3 #include #include main() { float rate=0.0225; float n,capital,deposit; printf("Input n,capital:"); scanf("%f,%f",&n,&capital); deposit=capital*pow(1+rate,n); printf("deposit=%f\n",deposit); } 3.4 #include #include main() { float a,b,c;

double x,y; printf("Inputa,b,c:"); scanf("%f,%f,%f",&a,&b,&c); x=(-b+sqrt(b*b-4*a*c))/(2*a); y=(-b-sqrt(b*b-4*a*c))/(2*a); printf("x=%f,y=%f\n",x,y); } 4.1(1) #include main() { char c1='a',c2='b',c3='c'; printf("a%cb%cc%c\n",c1,c2,c3); } 4.1(2) #include main() { int a=12,b=15; printf("a=%d%%,b=%d%%\n",a,b); } 4.1(3) #include main() { int a,b; scanf("%2d%*2s%2d",&a,&b); printf("%d,%d\n",a,b); } 4.2 #include main() { long a,b; float x,y; scanf("%d,%d\n",&a,&b); scanf("%f,%f\n",&x,&y); printf("a=%d,b=%d\n",a,b); printf("x=%f,b=%f\n",x,y); } 5.1 #include main() { float a; printf("Innputa:"); scanf("%f",&a); if(a>=0) {

数据结构(c语言版)课后习题答案完整版

第1章绪论 5.选择题:CCBDCA 6.试分析下面各程序段的时间复杂度。 (1)O(1) (2)O(m*n) (3)O(n2) (4)O(log3n) (5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2) (6)O(n) 第2章线性表 1.选择题 babadbcabdcddac 2.算法设计题 (6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。 ElemType Max (LinkList L ){ if(L->next==NULL) return NULL; pmax=L->next; //假定第一个结点中数据具有最大值 p=L->next->next; while(p != NULL ){//如果下一个结点存在 if(p->data > pmax->data) pmax=p; p=p->next; } return pmax->data; (7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。 void inverse(LinkList &L) { // 逆置带头结点的单链表 L p=L->next; L->next=NULL; while ( p) { q=p->next; // q指向*p的后继 p->next=L->next; L->next=p; // *p插入在头结点之后 p = q; }

} (10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。 [题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。 void Delete(ElemType A[ ],int n) ∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。 {i=1;j=n;∥设置数组低、高端指针(下标)。 while(i

相关主题
文本预览
相关文档 最新文档