资源描述
C语言程序设计
一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目规定的,请将对的选项前的字母填在题后的括号内。错选、多选或未选均无分。
1. 若有代数式:,则不对的的C语言表达式为 【 C 】
A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c D. a*e/c/b*3
2. 通常使用后缀表白数的各种进制,以下叙述不对的的是 【 D 】
A. 后缀B:二进制 B. 后缀H:十六进制
C. 后缀D:十进制 D. 后缀A:八进制
3. 设float x,由键盘输入:12.45, 能对的读入数据的输入语句是 【A 】
A.scanf("%5f",&x) B. scanf("%5d",&x)
C.scanf("%f",x); D. scanf("%s",&x)
4. 完毕C源程序编辑后,到生成执行文献,C语言解决系统必须执行的环节依次为: 【 B 】
A. 连接、编译 B. 编译、连接 C. 连接、运营 D. 运营
5. 以下关于运算符优先级的描述中,对的的是 【 A 】
A.!(逻辑非)>算术运算>关系运算>&&(逻辑与)>‖(逻辑或)>赋值运算
B. &&(逻辑与)>算术运算>关系运算>‖(逻辑或)>赋值运算
C. 关系运算>算术运算>&&(逻辑与)>‖(逻辑或)>赋值运算
D. 赋值运算>算术运算>关系运算>&&(逻辑与)>‖(逻辑或)
6. 下面函数调用语句具有实参的个数为 【 B 】
func((exp1,exp2),(exp3,exp4,exp5));
A. 1 B. 2 C. 4 D. 5
4. 和十进制数255相等的二进制数是 【 D 】
A. 1101110 B.11111110 C. 10000000 D.11111111
D.11111111
7. 一个C程序的执行是从 【 A 】
A. 本程序的main函数开始,到main函数结束
B. 本程序文献的第一个函数开始,到本程序文献的最后一个函数结束
C. 本程序的main函数开始,到本程序文献的最后一个函数结束
D. 本程序文献的第一个函数开始,到本程序main函数结束
8. 已知字母A的ASCII码为十进制的65,则下面程序的输出是 【 A 】
main()
{ char ch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);
}
A. 67,D B. B,C C. C,D D.不拟定的值
9. C语言规定,函数返回值的类型是由 【 D 】
A. return语句中的表达式类型所决定 B. 调用该函数时的主调函数类型所决定
C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定
10.16位二进制所表达的无符号整数,其相应的十进制数范围是 【 D 】
A.0~65536 B.1~65536 C.1~65535 D.0~65535
11. 下列说法中对的的是 【C 】
A.在执行C程序时不是从main()函数开始
B.C程序书写格式限制严格,一行内必须写一个语句
C.C程序书写格式比较自由,一个语句可以分写在多行上
D.C程序书写格式严格,规定一行内必须写一个语句,并要有行号
12. 若有定义int a[lO];,则对a数组元素的对的引用是 【C 】
A.a[lO] B.a(10)
C.a[10—10] D.a[10.0]
13. 下面函数调用语句具有实参的个数为 【B 】
func(a+b,(x,y), exp((exp1,exp2),(exp3,exp4,exp5)));
A. 7 B. 3 C. 4 D. 5
14. 下列叙述中对的的是 【 A】
A.指令由操作数和操作码两部分组成 B.常用参数xxMB表达计算机的速度
C.计算机的一个字长总是等于两个字节 D.计算机语言是完毕某一任务的指令集
15.在计算机系统中,可执行程序是 【C】
A.源代码 B.汇编语言代码
C.机器语言代码 D.ASCIl码
16. 下列说法中错误的是 【 C 】
A. 程序的执行总是从主函数开始。 B. 主函数可以调用任何非主函数的其它函数
C. 程序可以从任何非主函数开始执行 D. 任何非主函数可以调用其它任何非主函数
二、填空题:请在每小题的空格中填上对的答案。错填、不填均无分。
1. 微解决器是微型计算机的核心芯片,是将计算机中的运算器和控制器集成在一个很小的硅片上制成的集成电路,通常用英文字母简写为 CPU 。
2. 程序三种最基本的结构是顺序结构、 选择结构 、 循环结构 。
3. 在C语言中,一个函数一般由两个部分组成,他们是 函数名 和 函数体 。
4. 设int x=3,y=5; 则执行printf(“%d\n”,x&&y);后输出 1 。
5. 以下程序是求100以内能被5和被7同时整除的所有数之和。
main()
{ int i=0,s=0;
while(i<100)
if( i%5= =0&&i%7= =0 )
s=s+i++;
printf("s=%d\n",s);
}
6. 已知x=5,y=6,执表达式x>2‖y<5的值为 1 。
7.若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是____3___。
8.设int x=7,y=3,则表达式x%y+x/y的值是_____3___。
9. 十进制数—127用8位二进制数补码表达时,应为____81H ____H。
10. 任何一个数组的数组元素具有相同的名字和 数据类型 。
三、改错题:每小题只有一个错误或不妥,请指出,并将其改正。
1. 下面程序的功能是求数组中最大元素的下标。
main( )
{ int s[100],i,k;
for(i=0;i<100;i++)
scanf("%d",s[i]);
for(i=0,k=0;i<100;i++)
if(s[i]>s[k]) k=i;
printf("k=%d\n",k);
}
错误: scanf("%d",s[i])
改正: scanf("%d",&s[i])
2. 下面程序的功能是计算30个数的平均值。
void main( )
{ int n=30,i=1,t;
float sum=0;
while(i<30)
{ scanf("%d",&t);
sum=sum+t;
i++;
}
aver=sum/n;
printf("aver=%5.1f\n",aver);
}
错误: while(i<30)
改正: while(i<=30)
3.下面add函数的功能是求两个参数的和,并将和值返回调用函数。
void add(float a,float b)
{
float c;
c=a+b;
return c;
}
错误: void add(float a,float b)
改正: float add(float a,float b)
4.下面的程序是要打印出1到10的十个整数值。
main( )
{ int n=1;
while(n<10)
{
printf(“%d”,n);
n++;
}
}
错误: while(n<10)
改正: while(n<=10)
5. 下面程序的功能是计算圆的面积。
main( )
{ float r;
float s;
printf("Enter a value of radius:\n");
scanf("%f",&r);
s=3.14*r*r;
printf("The area of circle is %d \n",s);
}
错误: printf("s=%d \n",s)
改正: printf("s=%f \n",s)
6. 程序功能:输入的学生成绩假如不在0~100之间,则显示犯错信息。
main( )
{ int s;
scanf("%d",&s);
if(0<=s<=100)
printf("Input score is=%d \n",s);
else
printf("Input score is wrong! ");
}
错误: if(0<=s<=100)
改正: if(s >=0&&s <=100)
7. 以下程序是计算s=1*2*3*4*5的值
main( )
{ int k,s=1;
for(k=1;k<5;k++)
s=s*k;
printf(“s=%d\n”,s);
}
错误: for(k=1;k<5;k++)
改正: for(k=1;k<6;k++)或for(k=1;k<=5;k++)
四、程序阅读题:请阅读下列程序,写出程序运营结果。
1. main()
{ int numl,num2,x;
scanf("%d%d",&numl,&num2);
if(numl>num2)
x=numl;numl=num2;num2=x;
printf("%d,%d\n",num1,num2);
)
程序运营时输入:51,32
程序运营结果为: 32,51
2. main()
{ int a,b,c;
printf ("请输入3个整数:");
scanf ("%d,%d,%d",&a,&b,&c);
if(a<b)
if(b<c) printf("max=%d\n",c);
else printf("max=%d\n",b);
else if(a<c) printf("max=%d\n",c);
else printf("max=%d\n",a);
}
程序运营时输入的3个数为: 31,62,49
程序运营结果为: max=62
3. main()
{ int x,i;
for(i=1;i<=5;i++)
{ scanf("%d ",&x);
if(x%2= =0) printf("x=%d\n",x);
}
}
程序运营时输入的5个数为:13 14 15 16 17
程序运营结果为: x=14
x=16
4. #include<stdio.h>
void main( )
{
int i,j,m,n;
i=3;
j=5;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
程序运营结果为: 4,6,4,5
5. #include<stdio.h>
void main( )
{ int x=1,total=0,y;
while(x<=10)
{
y=x*x;
printf(“%d”,y);
total+=y;
x ++;
}
printf(“\n total is %d\n”,total);
}
程序运营结果为: 1 4 9 16 25 36 49 64 81 100
total is 385
6. #include<stdio.h>
void main( )
{ int a[5],s,i;
for(i=0,s=0;i<5;i++)
{
scanf(“%d”,&a[i]);
s=s+a[i]
}
s=s/5;
for(i=0,s=0;i<5;i++)
if(a[i]>s)
printf(“%6d”,a[i]);
}
程序运营时输入的5个数为: 55 60 65 70 75
程序运营结果为: 70 75
7. main()
{ int x,y;
x=y=1;
y=++x;
printf("x=%d,y=%d\n",x,y);
}
程序运营结果为: 2, 2
8. main()
{ int x=10;
while(x>7)
{x--
printf("%d, ",x);
}
}
程序运营结果是: 9 8 7
9. main()
{ int x,y;
x=y=1;
y=++x;
printf("x=%d,y=%d\n",x,y);
}
程序运营结果为: 2,2
10. main()
{ int x=11;
while(x>8)
{x--
printf("%d, ",x);
}
}
程序运营结果是: 10.,9,8
五、程序设计题:根据题意,将下列程序补充完整。
1. 给一个百分制成绩,规定输出等级A、B、C、D、E。90分以上为A,80~90分为B,70~79分为C,60~69分为D,60分以下为E。
main()
{ float score;
char grade;
printf ("请输入学生成绩:");
scanf ("%f",&score);
while( ① )
{ printf ("\n输入有误,请重新输入:");
scanf ( ② );
}
switch((int)( ③ ))
{ case 10:
case 9: grade='A';break;
case 8: grade='B';break;
case 7: grade='C';break;
case 6: grade='D';break;
④ ;
}
printf("成绩是%5.1f,相应的等级是%c\n",score,grade);
}
答:①score>100||score<0 ②"%f",&score
③score/10 ④default: grade='E'
单片机原理与接口技术
一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目规定的,请将对的选项前的字母填在题后的括号内。错选、多选或未选均无分。
1. 8031单片机外部中断0请求信号输入的引脚是 【 B】
A. RXD B. C. D.
2. 对程序存储区数据传送,应采用助记符为 【 C 】
A. MOV B. MOVX C. MOVC D. PUSH
3. 8031单片机所用的电源是 【 C】
A. ±15V B. +15V C. +5V D. ±5V
4. 十进制数215转换成二进制数表达,是 【 A 】
A. 11010111B B. 10001101B C. 11011111B D. 11110101B
5. 16位二进制所表达的无符号整数,其相应的十进制数范围是 【 D 】
A.0~65536 B.1~65536
C.1~65535 D.0~65535
6. 8031单片机内有_________定期器/计数器。 【 B】
A. 2个13位 B. 2个16位
C. 1个13位,1个8位 D. 2个8位
7. 8031单片机外接ROM时,使用 引脚来选通74LS373芯片。 【A】
A. ALE B. C. D.
8. PC中存放的是 【 A 】
A.下一条要执行的指令的地址 B.当前正在执行的指令
C.当前正在执行指令的地址 D.下一条要执行的指令
9. 某半导体存储器有8根数据线,13根地址线,则它的存储容量是 【A】
A.8K×8位 B.16K×8位
C.32K×8位 D.64K×8位
10. 单片机上电或按手动复位键,都可复位,使PC和大多数特殊功能寄存器(SFR)的初值为零。但有一个SFR为07H,它是 【 B 】
A.ACC B.SP
C.B D.PSW
11. 8031单片机访问片外存储器时,其地址总线由并行口提供,分别为 【 B 】
A.P0口——低8位地址,Pl 口——高8位地址
B.P0口——低8位地址,P2口——高8位地址
C.P0口——高8位地址,P1口——低8位地址
D.P0口——高8位地址,P2口——低8位地址
12. 执行长调用指令LCALL addrl6,它的操作是 【 C 】
A.将断点地址进栈保存(保护断点)
B.将子程序地址送PC(构成目的地址)
C.保护断点和构成目的地址
D.保护断点、保护现场(即所用到的寄存器内容入堆栈)及构成目的地址
13. 2764是容量为8KB的EPROM,该芯片的地址线为 根。 【 D 】
A. 8 B. 12 C. 10 D. 13
14. 下列指令中属于直接寻址方式的指令是 【 A】
A. MOV 68H, A B. MOV A, #68H
C. MOV A,R5 D. MOV A, @R1
15. 当串行口向单片机的CPU发出中断请求时,若CPU允许并接受中断请求时,程序计数器PC的内容将被自动修改为 【C 】
A.0003H B.000B C.0013H D.001BH E.0023H
16. 主频为12MHz的单片机的机器周期为 【C 】
A. 1/12µs B. 0.5µs C.1µs D.2µs
17. MCS-51单片机选用的晶体振荡频率范围,一般在 【C 】
A.4KHz~12KHz B.10KHz~100KHZ
C.4MHz~12MHz D.4MHz~100MHZ
18. 已知累加器(A)=87H,进位标志(CY)=0,执行RRC A指令后,(A)和(CY)的内容分别为 【 D 】
A. 0EH,l B. 0FH,0
C. C3H,0 D. 43H,1
19. 外部中断0的入口地址是 【A】
A.0003H B.000BH C.0013H D.0023H
20. 总线是微解决器、内存储器和I/O接口之间互相互换信息的公共通路。总线中的控制总线作用是 的信息通路。 【D】
A.解决器向内存储器传送命令信号 B.解决器向I/0接口传送命令信号
C.外界向解决器传送状态信号 D.上述三种信号
21. MCS-51单片机P0口的第二功能是作分时复用口,可作为 【B】
A.高8位地址总线/数据总线分时复用
B.低8位地址总线/数据总线分时复用
C.高8位地址总线/低8位地址总线分时复用
D.控制信号线/数据总线分时复用
二、填空题:请在每小题的空格中填上对的答案。错填、不填均无分。
1. 87H是用8位二进制原码表达的十六进制数,其相应的十进制数是 -7 。
2. 8031.单片机有 P1 个并行输入/输出口,其中______5___口可以直接应用于I/O口。
3. MCS-51单片机系列有 5 个中断源,可分为 2 个优先级。
4. MOV A,@Ri 属于 寄存器间接寻址 寻址方式,MOV A, 41H 属于 直接寻址 寻址方式。
5. LED数码显示有 动态 显示 和 静态 显示两种显示形式。
6. 8031单片机使用和来读写片外 RAM 的内容。
7. 堆栈内数据的存取遵守 先进后出或后进先出 的原则。
8. 若某存储芯片地址线为12根,那么它的存储容量为 4kB 。
9. 执行下列指令组后,累加器(A)=_CCH____________,进位标志(CY)=_____0____。
SETB C
MOV A, #25H
ADDC A, #0A6H
10. 在计算机中,一般用 字长 来区分是8位机、16位机还是32位计算机。
11. 执行下列指令组后,累加器(A)= 0F9H 。它与Rl中内容的关系是: 是(R1)的补码 。
MOV R1,#87H
MOV A,R1
CPL A
INC A
SETB ACC.7
12. MCS-51单片机系列有5个中断源,在同一个优先级的情况下, INT0(外部中断0) 优先权最高, 串行中断 优先权最低。
13. 在 MCS-51单片机中,如采用6MHZ晶振,一个机器周期为 2μs 。
14. 8031.单片机内部数据RAM中的位寻址区的地址范围是 20H~2FH 。
15. 执行下列指令组后,(A)= 63H ,标志位(OV)=_____1____。
MOV A,#0B4H
ADD A,#00H
SUBB A,#51H
16. 在 MCS-51单片机中,如采用6MHZ晶振,一个机器周期为 0.5μs 。
三、改错题:每小题只有一个错误或不妥,请指出,并将其改正。
1. 下列指令组要完毕,当(A)≤80H时,转去执行2800H开始的程序,当(A)>80H时,执行3700H开始的程序。请找犯错误,并改正之。
CJNE A, #80H, NEXT
TEN: LJMP 2800H
NEXT: JNC TEN
LJMP 3700H
错误: JNC TEN
改正: JC TEN
2. 下面程序是用查表法将存放在R0寄存器的BCD码转换为ASCII码。
MAIN: MOV A,R0
MOV DPTR,#TAB
MOVX A,@A+DPTR
MOV R0,A
RET
TAB : DB 30H,31H,32H,33H,34H
DB 35H,36H,37H,38H,39H
错误: OVX A,@A+DPTR
改正: MOVC A,@A+DPTR
3. MCS-51单片机读内部ROM时使用的是“MOV”指令,读外部RAM时使用的是“MOVX”指令。
错误: 内部ROM
改正:内部RAM
4. 采用下面指令将外部RAM2023H单元中的数据送入A。
MOV DPTR,2023H
MOVX A,@DPTR
错误:MOV A,2023H
改正:MOV A,#2023H
四、程序阅读题:请阅读下列程序,写出程序运营结果。
1. 执行下列程序段后,(A)= 8AH ,(CY)= 1 。
CLR C
MOV A,#C5H
RLC A
2. 下面的指令执行后,(R1)= 48H ,(A)= OAAH 。
MOV R1,#48H
MOV 48H,#51
CJNE @R1,51H,00H
JNC NEXT1
MOV A, #0FFH
SJMP NEXT2
NEXT1:MOV A, #0AAH
NEXT2:SJMP NEXT2
3. 已知(2023H)=3FH,(2023H)=06H,(2023H)=5BH,(2023H)=4FH,片内RAM中(20H)=01H,下面的指令执行后,(30H)= 0A4H 。
MOV A,20H
INC A
MOV DPTR,#2023H
MOVC A,@A+DPTR
CPL A
MOV 30H,A
4. 已知(40H)=11H,(41H)=22H,(R0)=40H,(R1)=41H试问,下面的指令执行后,
(A)=11H , (40H)=11H , (41H)=11H , (42H)=11H
MOV A,@R0
MOV @R1,A
MOV 42H,@R1
五、程序设计题:根据题意,将下列程序补充完整。
1. 将以表格形式存放在从TABLE开始的内部单元中的8个单字节正数求平均值。
MOV R0,#TABLE
MOV R2,#8
MOV A,#0
LOOP1: ① A,@R0 ;求和
② R0
DJNZ ③
MOV B,#8
④ ;求平均值
RET
答:① ADD ;② INC ;
③ R2, LOOP1 ;④ DIV AB ;
;
2. 编程将片内RAM30H单元开始的15个字节数据传送到片外RAM3000H开始的单元中去。
STRAT:MOV R0,#30H
MOV R7,#0FH
MOV DPTR,#3000H
LOOP: ①
②
③
④
DJNZ R7,LOOP
RET
答:① MOV A,@R; ;② MOVX @DPTR,A ;
③ INC R0 ;④ INC DPTR ;
42. 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。
START: ① ;数据块首地址送R0
MOV R7,#09H ;比较次数送R7
MOV A,@R0 ;取数送A
LOOP:
展开阅读全文