一、单项选择题在每小题列出的四个备选项中只有一个选项是符合题目要求的。
二、填空题(本大题共4小题)请在每小题的空格中填上正确答案。
2. 已知x=5,y=6,表达式x>2‖y<5的值是______。
3. 以下程序是求100以内能被5和被7同时整除的所有数之和。
main()
{
int i=0,s=0;
while(i<100)
if(______)
s=s+i++;
printf("s=%d\n",s);
}
三、改错题(本大题共4小题)每小题只有一处错误或不妥。请指出,并将其改正。
1. main()
{
int x,y;
scanf("%d",x);
y=x*x;
printf("y=%d\n",y);
}
错误:______
改正:______
错误:scanf("%d",x);
改正:将其修改为scanf("%d",&x);
2. 以下程序功能是输入一个学生的成绩,如果输入的成绩不在0~100之间,则显示出错信息。
main()
{
int s;
scanf("%d",&s);
if(100>=s>=0)
printf("输入的成绩是%d\n",s);
else
printf("输入成绩出错");
}
错误:______
改正:______
错误:if(100>=s>=0)
改正:将其修改为if(s>=0&&s<=100)
3. #include"stdio.h"
main()
{char a[10],*pa;
scanf("%s",pa);
printf("%s\n",pa);
}
错误:______
改正:______
错误:scanf("%s",pa);
改正:char a[10],*pa=a;或修改后面两句:scanf("%s",a);printf("%s",a);
4. #include"stdio.h"
struct date
{int year=2000;
int month;
int day;
};
main()
{struct date d;
d.month=1;
d.day=31;
printf("%d-%d-%d",d.year,d.month,d.day);
}
错误:______
改正:______
错误:int year=2000;
改正:inr year;
四、程序阅读题(本大题共4小题)请阅读下列程序。写出程序运行结果。
1. 写出程序运行结果
main()
{
int i,j;
for(i=0;i<5;i++)
{
for(j=5;j-i>0;j--)
printf("*");
printf("\n");
}
}
运行结果为: ______
2. #include"string.h"
#include”stdio.h”
main()
{
char str1[50],str2[50],str3[50];
gets(str1);
gets(str2);
if(strcmp(str1,str2)<0)
{
strcpy(str3,str1);
strcpy(str1,str2);
strcpy(str2,str3);
}
puts(str1);
puts(str2);
}
运行程序时输入的字符串为:"ABCD"和"abcd"
程序运行结果为:______
3. #include
int f=1;
int fac(int n)
{f=f*n;
return f;
}
main()
{int i;
for(i=1;i<=4,i++)
{printf("%d!=%d\n",i,fac(i));}
}
程序运行结果为: ______
4. #include"stdio.h"
char
*fun(s,c)
char
*s,c;
{char
*p=NULL;
while(
*s!='\0')
{if(
*s==c)
{P=s;break;}
++s;
}
return p;
}
main()
{char s[100]="I am a teacher.",c='t',p;
P=fun(s,c);
if(p!=NULL)
{printf("%s\n%s\n",s,p);}
}
程序运行结果为: ______
五、程序设计题1. 请编写符合如下要求的函数:
(1)对于任意输入的整数,计算并输出该整数的位数(例如,12345是5位数);
(2)输出该数的倒序数(例如,123415的倒序数是54321)
#include<stdio.h>
main()
{void fun(int);
int hum:
scanf("%d",&num);
fun(num);
}
/*fun函数定义如下:*/
void fun(hum)
int num;
{int num_residue=Bum,count=0;
printf("\nreverse order:");
do{printf("%d",num_residue%10);//num_residue%10:逐位倒序输出
num-residue=num_residue/10;
++conut; //统计位数
}while(hum_residue!=0);
printf("\nbits:%d\n",count);
}
六、填空题-单片机原理与接口技术(本大题共8小题)请在每小题的空格中填上正确答案。
1. MCS-51单片机把______、______、并行口、串行口和定时器/计数器等集成在一个芯片上。
2. 可用作寄存器间接寻址的问址寄存器有______和______。
3. 执行下列指令组后,累加器的内容(A)=______H。寄存器的内容
(R
1)=______H。
MOV A,#38H
ADD A,#45H
MOV R
1,A
DA A
4. 已知片内RAM(34H)=44H,(35H)=55H,(36H)=66H,寄存器(R
1)=35H,执行下列指令组后,寄存器(R
1)=______H,((R
1))=______H。
DEC R
1 INC @R
1
5. 如选择2组的工作寄存器,要求用位操作指令完成。
指令如下:______,______。
程序状态字PSW寄存器(地址DOH)各位内容如下:

6. 8031单片机时钟频率为12MHz时,定时器最长定时时间为______mS。
7. 若8031单片机IE=9CH,1P=07H,则CPU能响应的优先权最高的中断源是______。
中断允许控制寄存器IE各位内容如下:
中断优先级寄存器IP各位内容如下:

8. 32K字节的RAM 6264地址线的根数为______根。
七、改错题-单片机原理与接口技术(本大题共2小题。)每小题只有一处错误或不妥,请指出,并将其改正。
1. 下列程序欲完成重复执行LOOP开始的程序100次。
MOV R1,#64H
LOOP:
DEC R1
DJNZ R1,LOOP
错误:______
改正:_______
2. 下列程序是8031单片机时钟频率为12MHz,TO方式2,100μS定时的初始化程序。
MOV TMOD,#02H
MOV TH0,#100
MOV TL0,THO
SETB TR0
MOV IE,#82H
TCON寄存器各位内容如下:
TMOD寄存器各位内容如下:
IE寄存器各位内容如前所示。
错误:______
改正:______
错误:MOV THO,#100
正确:MOV THO,#156
八、程序阅读题-单片机原理与接口技术(本大题共2小题)请阅读下列程序,写出程序运行结果。
1. 已知8031单片机时钟频率为12MHz,则执行子程序:
MOV R7,#199 ;1个机器周期
NOP ;1个机器周期
LOOP:NOP ;1个机器周期
NOP ;1个机器周期
DJNZ R7,LOOP ;2个机器周期
RET ;2个机器周期
所需的时间为______μS(精确到1μS);
子程序返回后,R7=______。
2. 若8031单片机时钟频率为6MHz,在P1.0口接一个LED发光二极管,P1.0为低电平时点亮,运行以下程序后LED亮暗的周期为______秒,点亮的时间为______秒。
ORG 0000H
LJMP BEG
ORG 001BH
DJNZ R7,RRT
MOV R7,#200
CPL P1.0
RRT:RETI
BEG:MOV TMOD,#20H
MOV TH1,#6
MOV TL1,#6
SETB TR1
MOV IE,#88H
SJMP $
提示:TMOD、TCON和IE寄存器各位内容如前所示。
九、程序设计题-单片机原理与接口技术1. 在DATA1为首址的片外RAM中存放一组单字节数据,以ODH为结束符。欲统计该数组长度(不包括结束符),存入R
7中,并将原数据区域清零,保留结束符。试补全下列程序。
MOV R
7,#00H
MOV DPTR,#DATA1
LOOP:MOVX A,@DPTR
