单片机原理与应用及C51程序设计第4章习题答案

单片机原理与应用及C51程序设计第4章习题答案
单片机原理与应用及C51程序设计第4章习题答案

第4章习题答案

4-2有哪里些数据类型是MCS-51系列单片机直接支持的?

答:见P89,基本类型:字符型,整型,长整型,浮点型,特殊功能寄存器;

构造类型:数组类型,结构体类型,共用体,枚举

指针类型

空类型

4-3 C51特有的数据结构类型有哪些?

答:特殊功能寄存器,位类型

4-4 C51的存储类型有几种?它们分别表示的存储器区域是什么?

答:见P94页:存储器类型有:data, bdata,idata,pdata,xdata

4-5 C51中bit位与sbit位有什么区别?

答:bit是定义一个一般的位变量;而使用sbit定义可位寻址字节或是特殊功能寄存器的的位,定义时必指定其位地址,其存储空间为内部RAM中的位寻址区20H-2FH(位地址为:00H~7FH),

4-6 在C51通过绝对地址来访问的存储器有几种方式?

答:使用C51运行库中预定义宏,通过指针访问,使用C51扩展关键字_at_

4-7 在C51中,中断函数与一般函数有什么不同?

答:见P112页:7点

4-8 按指定存储器类型和数据类型,写出下列变量的说明形式

答:(1)在data定义字符变量var11:char data var11

(2)在idata定义整型变量var12:char idata var12

(3)在xdata定义无符号字符数组var11[4]:unsigned char xdata var13[4]

(4) 在xdata定义一个指向无符号字符的指针px: unsigned char xdata* px

(5)定义可寻址位变量flag: bit flag;

(6)定义特殊功能寄存器变量p3: sfr p3=0xb0

(7) 定义特殊功能寄存器变量SCON:sfr SCON = 0x98

(8)定义16位特殊功能寄存器变量T0:sfr16 T0=0x8a (无法真正与实际相匹配)

4-9 设a=3,b=4,c=5,写出下列关系表达式或逻辑表达式的结果

答:(1) a+b>c && b==c (False)

(2) a||b+c&&b-c (True)

(3)!(a>b) && !c|| 1 (True)

(4)!(a+b)+c-1&&b+c/2 (True)

4-10 break与continue语句的区别是什么?

答:见P110; 使用break语句可以跳出switch和循环体,提前结束循环而接着执行循环结构下面的语句

continue语句使用在循环体结构中,用于结束本次循环,跳过该语句下面尚未执行的语句,直接进行下一否执行循环的判断。

4-11用分支结构编程实现,输入”1”时显示“A”,输入”2”时显示“B”,输入”3”时显示“C”,输入”4”时显示“D”,输入”5”时结束。

答:#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar I;

void main()

{

scanf(“%d”,&i);

swtch (i)

{

case 1: printf(“A”),break;

case 2: printf(“B”),break;

case 3: printf(“C”),break;

case 4: printf(“D”),break;

case 5: break;

default: printf(“Error!”);

}

While(1);

}

4-12 输入3无符号数据,要求按由大到小的顺序输出。解:#include

#include

#define uchar unsigned char

#define uint unsigned int

uint a,b,c;

void main()

{

uint max, min, med;

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

if (a>b && b>c)

{ max=a; med=b; min=c;}

else if (a>b && bc)

{ max=a; med=c; min=b;}

else if (a>b && b

{ max=c; med=a; min=b;}

else if (b>a && b

{ max=c; med=b; min=a;}

else if (b>a && b>c && a>c)

{ max=b; med=a; min=c;}

else

{ max=b; med=c; min=a;}

printf("%d>%d>%d\n", max, med, min);

}

4-13 用3种循环结构编写程序实现输出1-10的平方和解:#include

#include

#define uchar unsigned char

#define uint unsigned int

uint sum=0;

void main

{

uchar i,Square;

for (i=1;i<=10;i++)

{

sum = sum +i*i;

}

printf(”sum=%d,”sum);

i=1;

while (i<=10)

{

sum = sum +i*i;

i++;

}

printf(”sum=%d,”sum);

i=1;

do

{

sum = sum +i*i;

i++;

printf(”i%d^2=%d,”i,Square);

} while (i>10)

printf(”sum=%d,”sum);

}

4-14 对一个5个元素的无符号字符数组按由大到小的顺序输出解:

#include

#include

#define uchar unsigned char

#define uint unsigned int

uint i, n=5, j, m;

uint a[]={210,108,65,49,72};

void main()

{

for (i=1; i

{

for (j=0; j

{

if (a[j]

{

m=a[j];

a[j]=a[j+1];

a[j+1]=m;

}

}

}

printf("\nThe sorted integers:\n\n");

for (i=0; i

{

printf("%6d",a[i]);

}

}

4-15 用指针实现输入设备个无符号字符数据按由大到小的顺序输出。#include

#include

#define uchar unsigned char

#define uint unsigned int

uint i, n=5, j, m;

uint a[]={210,108,65,49,72};

uint *p;

void main()

{

p=a;

for (i=1;i

{

for (j=0;j

{

if (*(p+j)<*(p+j+1))

{

m=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=m;

}

}

}

printf("\nThe sorted integers:\n\n");

for (i=0; i

{

printf("%6d",a[i]);

}

}

相关主题
相关文档
最新文档