微型计算机原理与接口技术自考题-30
(总分:100.00,做题时间:90分钟)
一、{{B}}单项选择题{{/B}}(总题数:16,分数:16.00)
1.单片机8031的ALE引脚是______
A.输出高电平
B.输出矩形脉冲,频率为fosc的1/6
C.输出低电平
D.输出矩形脉冲,频率为fose的1/2

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:
2.执行以下循环语句后,正确的结果是{{U}} {{/U}}
i=0:
while(i++<5);
A.i=0
B.i=4
C.i=5
D.i=6


(分数:1.00)
 A.
 B.
 C.
 D. 
解析:
3.MCS-51的程序计数器PC为16位计数器,因此其寻址范围是______
A.8K
B.16K
C.32K
D.64K

(分数:1.00)单片机printf函数
 A.
 B.
 C.
 D. 
解析:[解析] 216/1024=64K。
4.要对可编程接口芯片进行读写操作的必要条件是{{U}} {{/U}},只有满足该条件后,才能使该接口芯片进入电路工作状态,实现数据的输入/输出。
(分数:1.00)
 A. 
 B.
 C.
 D.
解析:
5.以下说法不正确的是{{U}} {{/U}}
A.C语言具有一些汇编语言的功能
B.C语言是面向对象的程序设计语言
C.C语言具有多种存储类型
D.C语言具有预处理功能

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:[解析] C语句是结构化程序设计语言。
6.8051系列单片机内部有很强的中断功能,它共有中断源{{U}} {{/U}}
A.3个
B.4个
C.5个
D.6个


(分数:1.00)
 A.
 B.
 C. 
 D.
解析:
7.在存储器译码电路中,对应于多个存储地址可以选中同一个存储字的片选控制方法有{{U}} {{/U}}
A.全译码法和部分译码法
B.全译码法和线选法
C.部分译码法和线选法
D.全译码法、部分译码法和线选法

(分数:1.00)
 A.
 B.
 C. 
 D.
解析:[解析] 在部分译码电路和线选电路中,存储芯片的一个存储字有多个地址对应,也就是多个存储地址可以选中同一个存储字,而全译码电路中任意单元都有唯一的确定的地址。
8.若int a[10];则对数组正确引用的是{{U}} {{/U}}
A.a[10-10]
B.a[10]
C.a[2*5]
D.a[9-10]

(分数:1.00)
 A. 
 B.
 C.
 D.
解析:[解析] 注意a[10]数组最大下标是9。
9.8255A芯片的地址线A1,A0分别接8086的A2,A1,8086芯片的A0参与8255A的片选译码,接到74LS138的。该接口芯片初始化指令为OUT 8EH,AL,则8255A的PA口地址为{{U}} {{/U}}
A.8BH
B.88H
C.89H
D.8AH

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:
10.以下说法正确的是{{U}} {{/U}}
A.计算机能直接执行C的源程序
B.后缀是EXE的文件是二进制文件
C.后缀是OBJ和EXE的文件是可执行文件
D.后缀是OBJ的文件是二进制文件

(分数:1.00)
 A.
 B.
 C.
 D. 
解析:[解析] 后缀是EXE的文件不是纯二进制文件。
11.下面不是三态锁存器的是{{U}} {{/U}}
A.74LS244
B.74LS373
C.74LS377
D.74LS273

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:
12.ADC0809芯片的转换结束信号和输出允许信号分别为{{U}} {{/U}}
A.START,ALE
B.EOC,OE
C.START,EOC
D.START,OE

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:[解析] ADC0809的EOC是转换结束信号,高电平有效,当A/D转换完毕EOC的高电平可用作中断请求信号。当输出允许OE=“1”时,打开三态输出门输出数字量。
13.8255 PA口工作在方式2、PB口工作在方式1时,其C端口{{U}} {{/U}}
A.作2个4位端口
B.部分引脚作联络信号,部分引脚作I/O
C.全部引脚作联络信号
D.作8位I/O端口

(分数:1.00)
 A.
 B.
 C. 
 D.
解析:
14.汇编程序在汇编过程中扫描的次数是{{U}} {{/U}}
A.1
B.3
C.2
D.4

(分数:1.00)
 A.
 B.
 C. 
 D.
解析:[解析] 第一次检查错误,第二次汇编。
15.MCS-51单片机在正常运行程序时RST引脚是{{U}} {{/U}}
A.高电平
B.低电平
C.脉冲输入
D.高阻态

(分数:1.00)
 A.
 B. 
 C.
 D.
解析:
16.下列指令能使R0低4位不变,高4位置F的是{{U}} {{/U}}
A.ANL R0,#0F0H
B.ORL R0,#0F0H
C.ORL 0,#0FH
D.ORL 00H,#0F0H

(分数:1.00)
 A.
 B.
 C.
 D. 
解析:
二、{{B}}填空题{{/B}}(总题数:4,分数:8.00)
17.若a=7.5,b=2,c=3.6;表达式a>b&&c>a||a<b&&!c>b的值是 1。
(分数:2.00)
填空项1:__________________ (正确答案:0)
解析:[解析] 注意运算次序是:!→关系→逻辑与→逻辑或。
18.表达式7+8>2&&25%5的结果是 1。
(分数:2.00)
填空项1:__________________ (正确答案:0)
解析:[解析] 先算术、比较最后逻辑。25%5=0,所以表达式为0。
19.求出2/1,3/2,5/3,8/5,13/8,21/13……这个数列的前20项之和。请填空。 main() {int n,t,number=20; floata=2,b=1,s=0; for(n=1;n<=number;n++) { s=______; t=a;a=a+b;b=t; } printf("sum is%9.6f/n",s); }
(分数:2.00)
填空项1:__________________ (正确答案:s+a/b)
解析:[解析] 分数求和的表达式。
20.int m=5,y=2;则执行表达式y+=y-=m*=y后的y值是 1。
(分数:2.00)
填空项1:__________________ (正确答案:-16)
解析:[解析] 先乘除后加减。
三、{{B}}改错题{{/B}}(总题数:4,分数:8.00)
21.main() { int a[3]={0,1,2}; int i; scarf("%d",&a); for(i=1;i<3;i++)a[0]=a[0]+a[i]; printf("a [0]=%d/n",a[0]); } 错误:______ 改正:______
(分数:2.00)
填空项1:__________________ (正确答案:错误:scanf("%d",&a); 改正:将其修改为scanf("%d",&a[0]);)
解析:[解析] scanf函数格式错误,a是数组名,不是数组元素
22.下面程序是求1+2+3……+100的和。 main() {int sum,k; sum=0;k=1; while(k<=100) sum=sum+k;k++; printf("sum=%d/n",sum);} 错误:______ 改正:______
(分数:2.00)
填空项1:__________________ (正确答案:错误:sum=sum+k;k++; 改正:将其修改为{sum=sum+k;k++;})
解析:[解析] 循环体是复合语句
23.main() {int a[10],i; for(i=1;i<=10;i++) Scanf("%d",a[i]); for(i=10;i>=0;i- -) printf("%d",a[i]); } 错误:______ 改正:______
(分数:2.00)
填空项1:__________________ (正确答案:错误:scanf("%d",a[i]); 改正:将其修改为scanf("%d",&a[i]);)
解析:[解析] scanf函数的格式不对。
24.#include"stdio.h" main() {int a,b; scanf("%d,%d"a,b); printf("%d/t%d/n",a,b); } 错误:______ 改正:______
(分数:2.00)
填空项1:__________________ (正确答案:错误:scanf("%d,%d"a,b); 改正:将其修改为scanf("%d,%d"&a,&b);)
解析:[解析] a,b不是地址,scanf函数格式不对。
四、{{B}}程序阅读题{{/B}}(总题数:4,分数:16.00)
25.#include<stdio.h> struct mine{int qa,qb,qc;}; main() {struct mine s[2]={{1,2,3},{4,5,6}}; int answer; answer=s[0].qa%s[1].qb; printf("%d/n",answer); } 程序运行结果是:______
(分数:4.00)
填空项1:__________________ (正确答案:5)
解析:[解析] 该程序是将结构体数组s[0].qa=1和s[1].qb=5相乘并输出结果。
26.#include<stdio.h> main() {int n,sum=0; scanf("%d",&n); do{sum=sum+(n%10)*(n%10); n=n/10;}while(n); printf("sum=%d",sum); } 程序运行时,从键盘输入2345<回车>,运行结果是:______
(分数:4.00)
填空项1:__________________ (正确答案:54)
解析:[解析] n=2345,n%10=5,sum=25 n=n/10,n%10=4,sum=25+16 n=n/10,n%10=3,sum=25+16+9 n=n/10,n%10=2,sum=25+16+9+4=54 n=2时结束循环。