当前位置:首页 > 单片机C51编程 - 习题答案 - - - Copy
值 直接赋予枚举变量。
二、选择题
1.struct关键字可以用于定义(多选)( AB )。
A.结构 B.位域 C.枚举 D.联合
2.位域中的一个位段可以存储在( A )。
A.一个字节 B.多个字节 C.相邻两个字节 D.以上都可以
3.联合变量、枚举变量和位域变量的声明方法为(多选)( ABCD )。
A.先定义后声明 B.定义同时声明 C.直接声明 D.以上都可以
4.在枚举类型内部,每个枚举元素后的结束符为( A )。
A., B.; C.// D.\\\\
三、简答题
1.简述结构和联合的区别。 答:从数据存储角度来说,结构和联合变量的区别主要在于联合变量的成员占用同一个内存空间,而结构变量中的成员分别独占自己的内存空间,互相不干扰。
2.简述位域与结构的区别。
答:位域是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位来表示。而结构就是用户定义的,不同数据类型的一个集合体。
3.简述类型声明与宏定义的区别。
答:宏定义的功能与类型声明typedef的功能有点类似,也可以重定义名称。两者的区别是,宏定义是由预处理完成的,而类型声明typedef则是在编译时完成的。在使用中,类型声明typedef更为灵活方便些。
四、编程题
编写一个联合内部嵌套结构的程序。
01 #include
int n; struct {
char first; char second;
//声明结构变量 //声明联合变量num //主函数
//定义结构
//头文件 //定义联合
}st;
10 }num;
11 void main() 12 {
13 14 15 16 17 18 }
num.n=0x6465; //赋值
printf(\ num.st.first='F'; num.st.second='E';
printf(\
//输出 //赋值
//输出
10.9 习题
一、填空题
1.无返回值的函数使用 void 来声明。
2.跳转语句goto,只能在 本函数内部 使用,而不能 从一个函数跳进其他函数内部执行 。
3.在C51语言中,除了 main 函数外,各个函数都是平行的。
4.函数的调用方式包括 赋值调用 、 引用调用 、 递归调用 和 嵌套调用 。
5.形参变量只有在 被调用时 才分配内存单元,在 调用 结束后,将立即释放内存单元。
6.函数的返回值只能通过 return 语句返回给主调函数。
二、选择题
1.使用指针作为函数参数,在函数执行后,实参变量( A )。
A.变了 B.不变 C.有可能变 D.有可能不变
2.toascii(245)的结果为( A )。
A.u B.245 C.U D.127
3.整型变量的循环左移函数为( A )。
A._irol_ B._lrol_ C._iror_ D._cror_
4.下面程序运行结果为( A )。
01 #include
06 float x=2.0; 07 float y=4.0 ; 08 SCON=0x50;
//串口模式1,允许接收 //初始化T1为定时功能,模式2 //设置SMOD=1
//波特率4800bit/s,初值
//声明并初始化变量
//主函数
//头文件
09 TMOD|=0x20; 10 PCON|=0x80; 11 TL1=0xF4; 12 TH1=0xF4;
13 IE|=0x90; 14 TR1=1;
//中断 //启动定时器
//调用pow函数
15 printf(\ 16 }
A.2.000000^4.000000=16.000000 C.2^4=16 三、简答题
B.2 ^4.000000=16.000000 D.2.000000^4.000000=16
1.简述函数的赋值调用和引用调用的区别。
答:赋值调用(call by value)是C51语言中最常用的参数传递方式这种方式中,函数的形参是数值变量,函数调用时把参数的值复制到函数的形式参数中。按照前面介绍的实参和形参的规则可知,赋值调用不会影响主调函数中的实参变量的数值。
引用调用(call by reference)是另外一种比较常用的函数调用方式。这种方式中,函数的形参是指针,函数调用时是把参数的地址复制给形式参数。在函数中,这个地址用来访问调用中所使用的实际参数。引用调用将会影响主调函数中的变量的数值。
2.简述函数的作用域。
答:函数的作用域是函数的使用范围。在C51语言中,一个函数对于整个工程都是“可见”的,即使两个函数在不同的文件中,也不必附加任何说明语句而被另一函数调用。也就是说,函数调用是全程的。
3.简述函数形参与实参的区别。
答:函数的参数按照使用的地方及功能的不同,可以分为形参和实参两种。函数的参数用于主调函数与被调函数间进行的数据交换,主调函数把实参的值传送给被调函数的形参,从而实现主调函数向被调函数的数据传送。函数的形参和实参在使用时需要注意如下几点。
? 形参变量只有在被调用时才分配内存单元,在调用结束后,将立即释放内存单元。
因此形参只有在函数内部有效,函数调用结束并返回主调函数后,则不能再使用该形参变量。
? 实参可以是常量、变量、表达式等,无论实参是何种类型的量,在进行函数调用时,
它们都必须先赋予确定的值,以便把这些值传送给形参。实参出现在主调函数中,进入被调函数后,实参变量将不再能使用。
? 在C51语言中,实参和形参都可以采用多种数据类型。
? 实参的类型和个数应该与形参的定义类型和个数完全相同,否则会因类型不匹配而
导致错误。
? 形参和实参在顺序上应保持严格一致,否则同样会因类型不匹配而导致错误。 ? 在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
? 在函数调用时,数据传送是单向的从实参传送给形参,而不能把形参的值反向地传
送给实参。
四、编程题
编写一个单片机硬件加法的程序,从计算机串口输入两个整型数据,在单片机中相加,然后向计算机返回计算结果。
#include
//头文件
#include
void main(void) {
int a; int b; long c;
SCON=0x50;
//主函数
//串口模式1,允许接收 //初始化T1为定时功能,模式2 //设置SMOD=1
//波特率4800bit/s,初值 //中断 //启动定时器
TMOD|=0x20; PCON|=0x80; TL1=0xF4; TH1=0xF4; IE|=0x90;
TR1=1;
printf (\
scanf (\ //输入整型数据 c=a+b;
printf (\ }
11.8 习题
一、填空题
1.对于宏定义,如果被替换的字符串比较长,为了便于程序的阅读,可以分为 多行 来书写。此时,需要在该行末尾用 反斜杠“\\” 来续行。
2.多分支的条件编译指令包括 #if 、 #elif 和 #endif 。 3.#error指令主要用于程序调试中,其一般形式为 #error “message” 。
4.宏名判断指令用于判断宏名是否被定义,包括 #ifdef 指令与 #ifndef 指令。
5.在文件包含指令中,如果使用双引号来包含源文件,表示先从 源文件所在目录 搜索,如果未发现文件,再到 软件中设定的目录 搜索。
二、选择题
1.双分支条件编译指令不包括( B )。
A.#if指令 B.#error指令 C.#else指令 D.#endif命令
2.文件包含命令中,如果使用尖括号来包含源文件,表示在(A)目录中进行搜索。
A.直接到软件中设定的目录搜索 B.当前目录 C.系统盘目录 D.以上都不对
3.#line指令用于改变( A )。
A.当前行的行号 B.当前列的列号 C.函数名称 D.以上都不对
4.在下面程序运行结果为( A )。
01 #include
//头文件 //宏定义 //主函数
共分享92篇相关文档