一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。
二、填空题(本大题共4小题)
1. 单片机是一种特殊的超大规模集成电路,具有数据处理能力,可实现复杂的软件功能,因为单片机内部含有______。
微处理器
或者:CPU(Central Processing Unit)
或者:MP(Micro Processing)
2. 字符a的ASCⅡ码是十进制的97,执行了语句char c='c';printf("%d,%d",c,c+2);后将输出______。
3. 代数式

的c语言的表达式为______。
4. 对于单向值传递,函数调用时把实参传递给形参,形参的值发生改变,而其对应的实参值______。
三、改错题(本大题共4小题)每小题只有一处错误或不妥。请指出,并将其改正。
1. #include<stdio.h>
main()
{int num;
scanf("%d",&num);
if(num%2=1)
printf("这是一个奇数\n”);
else
printf("这是一个偶数\n");
}
错误:______
改正:______
错误:if(num%2=1)
改正:if(num%2= =1)
2. 本程序对

进行计算,直至

的值小于10
-6止。
#include<stdio.h>
main()
{int i=0,num;
float sum=0:
do{++i;
num=1.0/i;
sum+=num;
}while(num>0.000001);
printf("sum=%f\n",sum);
}
错误:______
改正:______
错误:int i=0,num;
改正:int i=0;float num;或者float i=0,num;
3. #include<stdio.h>
#include
main()
{int i,a[10];
char b[10];
for(i=0;i<10;++i)
scanf("%d",a+i);
b="10 number":
printf("%s\n",b);
for(i=0;i<10;++i)
printf("%d";a[i]);
printf("\n");
}
错误:______
改正:______
错误:b="10 number";
改正:strcpy(b,"10 number");或者逐个赋值:
b[0]='1'; b[1]='0'; b[2]=' '; b[3]='n'; b[4]='u';
b[5]='m'; b[6]='b'; b[7]='e'; b[8]='r'; b[9]='\0':
4. #include <stdio.h>
struct date
{int year=2010;
int month=1;
int day=1;
}datel;
main()
{struct date date2;
date2.year=2010;
date2.month=8:
date2.day=5;
printf("日期1:%d-%d-%d\n",date1.year,date1.month,date1.day);
printf("日期2:%d-%d-%d\n",date2.year,date2.month,date2.day);
}
错误:______
改正:______
错误:int year=2010;int month=1;int day=1;
改正:int year;int month;int day;
四、程序阅读题(本大题共4小题)请阅读下列程序,写出程序运行结果。
1. #include<stdio.h>
main()
{int a=2008,b=1864,e=1950,t;
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf("%d %d %d\n",a,b,c);
}
程序运行结果为:
2. #include<stdio.h>
main()
{int i,x;
i=0;
do
{scanf("%d",&x);
i++:
}while(x%3!=0 ‖x%5!=0);
printf("输入数据的个数i=%d\n",x);
}
程序运行时,输入数据为:1 2 3 4……直到程序结束。
程序运行结果为:
3. #include<stdio.h>
int f(t)
int t;
{int x;
if(t<=1)x=1;
else x=t*f(t-1);
return x;
}
main()
{int t,x;
t=4;
x=f(t);
printf("t=%d",t);
printf("x=%d\n",x);
}
程序运行结果为:
4. #include<stdio.h>
main()
{char a[30]="Bejjing";
char b[30]="Shanghai";
char*pa=a,*pb=b;
while(*pa!=0)
pa++;
while(* pb!=0)
{*pa=*pb;pa++;pb++;)
*pa=0;
printf("%s\n",a);
}
程序运行结果为:
五、程序设计题根据题意编写成完整的程序。
1. 利用随机函数rand()生成10个整型随机数,输出它们之中的最大值和最小值;如果把最大值和最小值之和的一半称为中间值,输出所有大于中间值的数。
#include "stdio.h"
#include "stdlib.h"
main()
{int max,min,i,a[10];
float aver;
for(i=0;i<10;i++)
a[i]=rand();
max=min=a[0];
for(i=1;i<10;i++)
{if(max<a[I])max=a[i];
if(min>a[i])min=a[i];
}
printf("最大值为:%d\n",max);
printf("最小值为:%d\n",min);
aver=(max+min)/2.0;
printf("大于中间值的数为:");
for(i=0;i<10;i++)
if(a[i]>aver)printf("%d",a[i]);
六、填空题-单片机原理与接口技术(本大题共8小题)
1. MCS-51单片机把堆栈开辟在______中,其数据进出的最大特点是______。
2. MCS-51单片机中规定1个机器周期包含______个时钟周期,所以晶体振荡频率为12MHZ时,其机器周期为______μs(微秒)。
3. 在ROM 6547H单元起存放指令SJMP D9H,则执行完此指令(两字节)后,程序转向地址______H。
4. 已知(A)=4EH,(R1)=63H,执行指令XCH A,R1后,(A)=______H,(R1)=______H。
5. 一条机器指令由______和______两部分组成。
6. 执行下列三条指令后,(A)=______H (B)=______H。
MOV A,#31H
MOV B,#04H
MUI AB
7. CPU响应中断,开始执行中断服务程序前,堆栈栈顶的内容是本次中断的______。
8. 8031单片机串行口的中断服务程序入口地址是______H。
七、改错题-单片机原理与接口技术(本大题共2小题)每小题只有一处错误或不妥,请指出。并将其改正。
1. 下列子程序欲将累加器A中的一个两位BCD码数转换为二进制数,仍存于A中。
TB:MOV 40H,A
SWAP A
ANL A,#0FH:
MOV B,#10
MUL AB
ANL 40H,#0FH
ORL A,40H
RET
错误:______
改正:______
错误:ORL A,40H
改正:ADD A,40H
2. 下列是中断初始化程序段,要求8031单片机允许T0、T1、INT1和串行口中断,其中T0是最高中断级。
MOV IP,#0000 0001 B
MOV IE,#1001 1110 B
错误:______
改正:______
错误:MOV IP,#0000 0001 B
改正:MOV IP,#0000 0010 B
八、程序阅读题-单片机原理与接口技术(本大题共2小题)请阅读下列程序,写出程序运行结果。
1. 8031单片机时钟频率为12MHz,运行以下程序后,P1.0口将产生矩形波的周期为______mS,高电平时间为______mS。
ORG 0000H
LJMP BEG
ORG 001BH
DJNZ R7,TRET
CPL P1,0
MOV R7,#5
JB P1,0.TRET
MOV R7,#10
TRET:RETI
BEG:MOV TFMOD,#20H
MOV TH1,#56 ;T1 0.2mS 中断时间常数
MOV TL1,#56
MOV R7,#10
CLR P1.0
SETB TR1
MOV IE,#8H
SJMP $
2. 已知:(30H)=83H,(31H)=0ABH,(32H)=16H,(33H)=89H,(34H)=19H,执行以下子程序后:
MOV R0,#30H
MOV R7,#0
MOV R6,#0
MOV R2,#4
LOOP:MOV A,@R0
ADD A,R6
MOV R6,A
JNC CONT
INC R7
CONT:INC R0
DJNZ R2,LOOP
RET
结果为=(R7)=______H,(R6)=______H,(R2)=______H,(RO)=______H。
九、程序设计题-单片机原理与接口技术(本大题共1小题)根据题意及已提供的语句。编写成完整的程序。
1. 在片外RAM 4000H单元开始存放16个单字节数,将其中非零的数传送到片内RAM 20H开始的单元,并将其个数存于寄存器R6中。请接着以下程序,补全缺少的部分。
MOV R6,#OOH
MOV R7,#16
MOV R0,#20H
MOV DPTR,#4000H
SJMP $
LOOP:MOVX A,@DPTR
JZ NEXT
MOV @R0,A
INC R0
INC R6
NEXT:INC DPTR
DJNZ R7,LOOP