一、单项选择题在每小题列出的四个备选项中只有一个选项是符合题目要求的。
二、填空题1. intx=5,n=5;则表达式x+ =n++的值是______。
2. 若a=7.5,b=2,c=3.6;表达式a>b&&c>a||a<b&&!c>b的值是______。
0
[解析] 注意运算次序是:!→关系→逻辑与→逻辑或。
3. 下面程序的功能是,输出100以内能被3整除且个位数为6的所有整数。请填空。
main()
{int i,j;
for(i=0;i<10;i++)
{j=i*10+6:
if(______)continue;printf("%d",j);}
}
4. 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数。请填空。
main()
{intn,k=1,s=0,m;
for(n=1;n<=100;n++)
{k=1;s=0;m=n;
while(m)
{k*=m%10;S+ =m%10;
______;}
if(k>S)printf("%d",n);}
}
三、改错题每小题只有一处错误或不妥,请指出,并将其改正。
1. #include"stdio.h"
main()
{int i,s;
s=0;
for(i=0;i<=10;i++;s=s+i)
printf("%d",s);
}
错误:______
改正:______
错误:for(i=0;i<=10;i++;s=s+i)
改正:将其修改为for(i=0;i<=10;i++,s=s+i)
[解析] for循环语句格式错误
2. 学习成绩>=90分的用A表示,60-89分之间的用B表示,60分以下的用C表示。
main()
{int score;
char grade;
printf("please input a score!\n");
scanf("%d",&score);
grade=score>=90?'A':(score<90?'B':'C');
printf("%d belongs to %c",score,grade);
}
错误:______
改正:______
错误:score<90?'B':'C'
改正:将其修改为score>=60?'B':'C'
[解析] 根据题意条件语句逻辑错误
3. 求数组中最大元素和最小元素。
main()
{int m[10]={3,-30,20,6,77,2,0,-4,-7,99},
int i,max,min:
max=min=m[0];
for(i=0;i<10;i++)
{if(m[i]>max)max=m[i];
if(m[i]<min)min=m;}
printf("%d,%d",max,min);
}
错误:______
改正:______
错误:min=m;
改正:将其修改为min=m[i];
[解析] m是数组名,是地址,不是数组元素
4. 输入两个整数,调用函数stu()求两个数的立方和,返回主函数显示结果。
int stu(int a,int b)
{return a*a+b*b;}
main()
{int x,y;
scanf("%d,%d",&x,&y);
printf("%d",stu(x,y));
}
错误:______
改正:______
错误:return a*a+b*b:
改正:将其修改为retum a*a*a+b*b*b:
[解析] stu函数计算的平方值
四、程序阅读题请阅读下列程序,写出程序运行结果。
1. main()
{int a[]={1,3,5,2,7};
int b[]={5,3,9,4,6};
int c[5],i;
for(i=0;i<5;i++)
c[i]=a[i]*b[i];
for(i=0;i<5;i++)
printf("%d",c[i]);}
程序运行结果是:______
5 9 45 8 42
[解析] 该程序第一个循环式将两个数组下标相同的元素对应相乘,第二个循环是输出结果。
2. #include<stdio.h>
ss(char*s)
{char *p=s:
while(*p)p++;
return(p-s);}
main()
{char *a="abded";
int i;
i=ss(a);
printf("%d\n",i);}
程序运行结果是:______
5
[解析] 在被调函数中计算字符串的长度,在主函数中输出。
3. #include<stdio.h>
main()
{int i=0,j,c[6];
scanf("%d",&j);
do{c[i]=j%10;i++;j=j/10;
}while(j!=0);
for(--i;i>=0;i--)
{printf("%d",c[i]);
if(i>0)printf(",");}
}
程序运行时,输入整数为2345<回车>,则输出为:______
2,3,4,5
[解析] 在do-while循环中将2345的每个位取出,然后将其逆序输出。
4. #include<stdio.h>
main()
{inti,j,sum=0,m,n=4;
for(i=1;i<=n;i++)
{m=1;
for(j=1;j<=i;j++)m=m*j;
sum=sum+m;}
printf("sum=%d\n",sum);
}
程序运行结果是:______
sum=33
[解析]
外层循环:i=1,m=1时,m=m*j(j=1)=1×1=1,sum=1,
i=2,m=1时,m=m*j(j=1,2)=1×2=2,sum=3,
i=3,m=1时,m=m*j(j=1,2,3,)=2×3=6,sum=9,
i=4,m=1时,m=m*j(j=1,2,3,4)=6×4=24,sum=33
六、填空题-单片机原理与接口技术1. LED有______和______两种接法。
2. 若8255的端口A和端口B工作在方式1输入时,C口的______和______可作为基本输入/输出使用。
PC6 PC7
[解析] 因为PC0.PC1.PC2作为A口的联络信号,PC3.PC4.PC5作为B口的联络信号,剩下的PC6和PC7仍然可以进行位状态的输入输出。
3. 单片机的内部RAM区中,可以位寻址的地址范围是______,特殊功能寄存器中,可位寻址的地址是______。
4. 下列伪指令汇编后,存放25H的单元及LOOP的值分别是______=25H,LOOP=______。
ORG 0100H
TAB: DB 'ABC'
MOON: DS 03
BUF: DB 25H
LOOP EQU 2100H
(0106H) 2100H
[解析] DS含义是预留3个内存单元,所以(0106H)=25H,LOOP=2100H。
5. MCS-51有______个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器______进行选择。
6. 8031单片机有4个口,其中______口可以直接应用于I/O口。
7. MCS-51的相对转移指令最大负跳数是______字节。
8. MCS-51串行接口有4种工作方式,这可在初始化程序中用软件填写特殊功能寄存器______进行选择。
七、改错题-单片机原理与接口技术每小题只有一处错误或不妥,请指出,并将其改正。
1. 下面的程序完成5+4+3+2+1=15=0FH。
MOV R3,05H
CLR A
L00P: ADD A,R3
DJNZ @R3,LOOP
SJMP $
错误:______
改正:______
错误:MOV R3,05H
改正:MOV R3,#05H
[解析] 05H是存储单元的地址,改成立即数#05H
2. 设单片机的fosc=6MHz,下面程序是100ms延时的子程序。
DELAY: MOV R7,#64H
A0: MOV R6,#0FAH
DJNZ R6,$
DJNZ R7.DELAY
RET
错误:______
改正:______
错误:DJNZ R7,DELAY
改正:DJNZ R7,A0
[解析] DELAY是子程序的入口地址,A0是循环入口地址
八、程序阅读题-单片机原理与接口技术请阅读下列程序,写出程序运行结果。
1. 设单片机的晶振频率为fosc=6MHz,使用T1工作于工作方式0,下面程序用查询的方式在______端输出周期为______的连续等宽方波。
MOV TMOD,#00H
MOV TH1,#0FCH
MOV TL1,#03H
MOV IE,#00H
SETB TR1
LOOP: JBC TF1,LOOP1
AJMP LOOP1
LOOP1: MOV TH1,#0FCH
MOV TL1,#03H
CPL P1.0
CLR TF1
SJMP LOOP
P1.0 250μs
[解析] 前三句设定时T1方式0,输入初值。第四关中断,第五句设置T1溢出标志兼标志位。第六句测试溢出标志。八、九句重新设置T1定时初值。最后是在P1.0输出方波。
周期计算:TH1=FCH=11111100B,TL1=03H=00011B。
213-1111110000011B=8192-8067=125.125*2μs=500μs
2. 下面程序是查找在内部RAM的30H~50H单元中出现______的次数,并将查找的结果存入______单元。
MOV 51H,#00H
MOV R1,#30H
MOV R7,#21H
LOOP: CJNE @R1,#0FFH,NEXT
INC 51H
NEXT: INC R1
DJNZ R7,LOOP
SJMP $
FFH 51H
[解析] 关键语句LOOP:CJNE@R1,#0FFH,NEXT比较。MOV R7,#21H设置指针,INC 51H内容加1。
九、程序设计题-单片机原理与接口技术1. 编程序将片内30H~36H单元内容的高4位清零,保持低4位不变。
ORG 1000H
MOV R7,#07H
MOV R0,#30H
LOOP: MOV A,@R0
ANL A,#0FH
MOV @R0,A
INC R0
DJNZ R7,LOOP
SJMP $
END