资源描述
专接本计算机C语言程序设计模拟试题及答案(一)
一、单项选择题(每小题2分,共20分)
1. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是( )
A) p=2*(int*)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));
C) p=(int*)malloc(4*2); D) p=(int*)calloc(2,sizeof(int));
2. 设有int x=11; 则表达式(x++ * 1/3) 的值是( )
A) 3 B) 4 C) 11 D) 12
3. 下列程序执行后的输出结果是(小数点后只写一位)( )
#include <stdio.h>
void main()
{double d; float f; long l; int i;
i=f=l=d=20/3;
printf("%d %ld %f %f \n", i,l,f,d);
}
A) 6 6 6.0 6.0 B) 6 6 6.7 6.7
C) 6 6 6.0 6.7 D) 6 6 6.7 6.0
4. 下列变量定义中合法的是( )
A) short _a=1-.le-1 B) double b=1+5e2.5
C) long d1=0xfdaL D) float 2_and=1-e-3;
5. 设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( )
A)k++ B)k+=1 C)++k D)k+1
6. 有以下程序,其中%u表示按无符号整数输出,输出结果是( )
#include <stdio.h>
void main()
{unsigned short x=0xFFFF; /* x的初值为十六进制数*/
printf("%u\n",x);
}
A)-1 B)65535 C)32767 D)0xFFFF
7. 有以下程序,输出结果是( )
#include <stdio.h>
void main()
{int i,j;
for(i=1;i<4;i++)
{for(j=i;j<4;j++) printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=3
2*1=2 2*2=4 2*2=4 2*3=6
3*1=3 3*3=9
C) 1*1=1 D) 1*1=1
1*2=2 2*2=4 2*1=2 2*2=4
1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9
8. 在C语言中,函数返回值的类型最终取决于( )
A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型
C)调用函数时主函数所传递的实参类型 D)函数定义时形参的类型
9. 设已有定义:float x;则对指针变量p进行定义且赋初值的语句中正确的是( )
A)float *p=1024 B)int *p=(float x)
C)float p=&x D)float *P=&x;
10. 以下叙述中正确的是( )
A)break语句只能用于switch语句体中
B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环
C)break 语句只能用在循环体内和switch语句体内
D)在循环体内使用break语句和continue语句的作用相同
二、完成下列的程序填空(每空3分,共18分)
1.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include <stdio.h>
#include <string.h>
void main()
{void inverse(char str[]);
char str[100];
printf("input string:");
scanf("%s",str);
inverse(str);
printf("inverse string:%s\n",str);
}
void inverse(char str[])
{char t;
int i,j;
for (i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
{ ;
;
;
}
}
2.有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组。
#include <stdio.h>
void main()
{int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("array a:\n");
for (i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert data:");
scanf("%d",&number);
end=a[9];
if (number>end)
;
else
for (i=0;i<10;i++)
{if (a[i]>number)
{ ;
a[i]=number;
for (j=i+1;j<11;j++)
{temp2=a[j];
a[j]=temp1;
;
}
break;
}
}
}
三、写出下列程序的运行结果(每小题9分,共36分)
1. 以下程序运行后的输出结果是( )
#include <stdio.h>
void f(int *q)
{int i=0;
for( ; i<5;i++)(*q)++;
}
void main()
{int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++)printf("%d,",a[i]);
}
2. 以下程序运行后的输出结果是( )
#include <stdio.h>
f(int b[],int m,int n)
{int i,s=0;
for(i=m;i<n;i=i+2) s=s+b[i];
return s;
}
void main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
3. 以下程序的输出结果是( )
#include <stdio.h>
int f()
{static int i=0;
int s=1;
s+=i; i++;
return s;
}
void main()
{int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
4. 以下程序的输出结果是( )
#include <stdio.h>
void main()
{char ch[2][5]={ "6937", "8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]> '\0';j+=2) s=10*s+p[i][j]- '0';
printf("%d\n",s);
}
四、按要求编写下列程序(每小题13分,共26分)
o 编写程序,用函数的递归调用求x的n次方的值,其中n为正整数。
o 输入正整数m和n,如果m+n是质数,输出“Yes”,否则,输出“No”。要求定义并调用函数myfun(x)来判断x是否为质数,在下面空出的位置完成程序,不能定义新的变量,可不用已定义的某些变量。
#include<stdio.h>
#include<math.h>
void main()
{
int m,n;
}
int myfun(int x)
{
int k;
}
参考答案
一、单项选择题(每小题2分,共20分)
AAACA BBADC
二、完成下列的程序填空(每空3分,共18分)
1.
t=str[i];
str[i]=str[j-1];
str[j-1]=t;
2.
a[10]=number;
temp1=a[i];
temp1=temp2;
三、写出下列程序的运行结果(每小题9分,共36分)
1、6,2,3,4,5,
2、10
3、15
4、6385
四、按要求编写下列程序(每小题13分,共26分)
1.编写程序,用函数的递归调用求x的n次方的值,其中n为正整数。
#include <stdio.h>
float mypow(float x,int n)
{float m;
if(n==1) m=x;
else m=x*mypow(x,n-1);
return m;
}
void main()
{float x;
int n;
scanf("%f,%d",&x,&n);
printf("%f的%d次方是%f",x,n,mypow(x,n));
}
2.输入正整数m和n,如果m+n是质数,输出“Yes”,否则,输出“No”。要求定义并调用函数myfun(x)来判断x是否为质数,在下面空出的位置完成程序,不能定义新的变量,可不用已定义的某些变量。
#include<stdio.h>
#include<math.h>
void main()
{
int m,n;
scanf("%d%d",&m,&n);
if(myfun(m+n)) printf("Yes")
else printf("No");
}
int f(int x)
{int k;
for(k=2;k<x;k++)
if(x%k==0) return 0;
return 1;
}
专接本计算机C语言程序设计模拟试题及答案(二)
一、单项选择题(每小题2分,共20分)
1. 在说明语句:int *f();中,标识符f代表的是( )
A)一个用于指向整型数据的指针变量 B) 一个用于指向一维数组的行指针
C) 一个用于指向函数的指针变量 D) 一个返回值为指针型的函数名
2. 下列程序的输出结果是( )
#include <stdio.h>
void main()
{double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
}
A) 3 B) 3.2 C) 0 D) 3.07
3. 设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符'X'和'Y'。以下所示的输入形式中正确的是(注:□代表空格字符)( )
A)10□X□20□Y〈回车〉 B)10□X20□Y〈回车〉
C)10□X〈回车〉 D)10X〈回车〉
20□Y〈回车〉 20Y〈回车〉
4. 以下选项中,当x为大于1的奇数时,值为0的表达式( )
A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0
5. 以下叙述中正确的是( )
A)break语句只能用于switch语句体中
B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环
C)break 语句只能用在循环体内和switch语句体内
D)在循环体内使用break语句和continue语句的作用相同
6. 以下合法的字符型常量是( )
A)'\x13' B)'\018' C) 65 D) "\n"
7. 在C语言中,函数返回值的类型最终取决于( )
A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型
C)调用函数时主函数所传递的实参类型 D)函数定义时形参的类型
8. 设int x=1, y=1; 表达式(!x||y--)的值是( )
A) 0 B) 1 C) 2 D) -1
9. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是( )
A) p=2*(int*)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));
C) p=(int*)malloc(4*2); D) p=(int*)calloc(2,sizeof(int));
10. 以下函数的功能是( )
int fun(char *s)
{char *t=s;
while(*t++);
return(t-s);
}
A)比较两个字符的大小 B)计算s所指字符串占用内存字节的个数
C)计算s所指字符串的长度 D)将s所指字符串复制到字符串t中
二、完成下列的程序填空(每空3分,共27分)
1.输入20个数,用起泡法对这20个数升序排列。
#include <stdio.h>
void main()
{int a[20];
int i,j,t;
printf("input 20 numbers :\n");
for (i=0;i<20;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<19;j++)
for(i=0; ;i++)
if ( )
{ }
printf("the sorted numbers :\n");
for(i=0;i<20;i++)
printf("%d ",a[i]);
printf("\n");
}
2.写一个函数,输入一个十六进制数,输出相应的十进制数。
#include <stdio.h>
void main()
{char a[6];
scanf("%s",a);
printf("%d\n",htoi(a));
}
int htoi(char s[])
{int i,n;
n=0;
for (i=0;s[i]!='\0';i++)
{if (s[i]>='0'&& s[i]<='9')
n=n*16+ ;
if (s[i]>='a' && s[i]<='f')
n=n*16+ ;
if (s[i]>='A' && s[i]<='F')
n=n*16+ ;
}
return(n);
}
3.用指针的方法编写的函数,将一个的整型二维数组行列互换。
#include <stdio.h>
void main()
{void move(int *pointer);
int a[3][3],*p,i;
printf("input matrix:\n");
for (i=0;i<3;i++)
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("Now,matrix:\n");
for (i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
void move(int *pointer)
{int i,j,t;
for (i=0;i<3;i++)
for (j=i;j<3;j++)
{ ;
;
;
}
}
三、写出下列程序的运行结果(每小题8分,共24分)
1. 以下程序运行后的输出结果是( )
#include <stdio.h>
void main()
{void f(int n,int *r);
int m=7,r;
f(m,&r);
printf("%d\n",r);
}
void f(int n,int *r)
{int r1=0;
if (n%3==0) r1=n/3;
else if(n%5==0) r1=n/5;
else f(--n,&r1);
*r=r1;
}
2. 以下程序的输出结果是( )
#include <stdio.h>
f(int a)
{int b=0;
static int c=3;
b++; c++;
return(a+b+c);
}
void main()
{int a=2, i;
for(i=0;i<3;i++) printf("%d\n",f(a));
}
3. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int *x, int *y)
{printf("%d %d", *x, *y);
*x=3;
*y=4;
}
void main()
{int x=1,y=2;
fun(&y,&x);
printf("%d %d",x, y);
}
四、按要求编写下列程序(第1小题16,第2小题13分,共29分)
1.编程实现下面的函数,要求输入一个x的值,输出y值,函数如下:
-5 (x<0)
y= 0 (x=0)
5 (x>0)
2.编写一个程序,将一组数据{6,5,8,1,0,4,7,3,2,9}按从小到大的顺序排列,程序显示排序前和排序后的结果。
参考答案
一、单项选择题(每小题2分,共20分)
DCDDC AABAB
二、完成下列的程序填空(每空3分,共27分)
1.
i<19-j
(a[i]>a[i+1])
t=a[i];a[i]=a[i+1];a[i+1]=t;
2.
s[i]-'0'
s[i]-'a'+10
s[i]-'A'+10
3.
t=*(pointer+3*i+j)
*(pointer+3*i+j)=*(pointer+3*j+i)
*(pointer+3*j+i)=t
三、写出下列程序的运行结果(每小题8分,共24分)
1、2
2、7
8
9
3、2 14 3
四、按要求编写下列程序(第1小题13,第2小题16分,共29分)
1.编程实现下面的函数,要求输入一个x的值,输出y值,函数如下:
-5 (x<0)
y= 0 (x=0)
5 (x>0)
#include <stdio.h>
void main ()
{int x,y;
printf("enter x:");
scanf("%d",&x);
if(x<0)
y=-5;
else
if(x==0) y=0;
else y=5;
printf("x=%d,y=%d\n",x,y);
}
2.编写一个程序,将一组数据{6,5,8,1,0,4,7,3,2,9}按从小到大的顺序排列,程序显示排序前和排序后的结果。
#include <stdio.h>
#define N 10
Void main( )
{
int a[N]= {6,5,8,1,0,4,7,3,2,9}
int i,j,t;
printf(“The array before sorted:”);
for (i=0;i<N;i++)
printf(“%4d”,a[i]);
for (i=0;i<9;i++)
{ for (j=i+1;j<10;j++)
{ if ( a[i]>a[j])
{ t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf(“The array after sorted:”);
for (i=0;i<N;i++)
printf(“%4d”,a[i]);
}
专接本计算机微机原理与汇编语言模拟试题及答案(一)
一、单项选择题(每小题1分,共15分)
1. 8088/8086的存储器组织是将存储器划分为段,可作为段的起始地址的是( )。
A.185A2H B.00020H C.01003H D.0AB456H
2.指令POP [BX] 中,目的操作数的段寄存器是( )。
A.DS B.ES C.SS D.CS
3. CPU执行“OUT 40H,AL”指令时,下列信号为高的是( )。
4.执行1号DOS系统功能调用后,从键盘输入的字符应存放在( )。
A.AL B.BL C.CL D.DL
5. 间接寻址方式中,操作数处在( )中。
A.通用寄存器 B.内存单元
C.程序计数器 D.堆栈
6. 8086在最小模式下,分时使用AD0~AD15,所以必须外接地址锁存器,当总线上为地址信息时,通过( )信号将地址送入地址锁存器。
A.DEN B.ALE C. D.DT/ R
7. 在对汇编语言程序的处理过程中,用编辑程序产生汇编语言的源程序的扩展名是( )。
A..EXE B..OBJ C..BAT D..ASM
8. 表示过程定义结束的伪指令是( )。
A.END B.ENDP C.ENDS D.ENDM
9. 默认状态下,在寄存器间接寻址中与SS段寄存器对应的寄存器是( )。
A.BP B.BX C.SI D.DI
10. 标志寄存器中属于控制标志的是( )。
A.DF、SF、OF B.DF、IF、TF
C.OF、CF、PF D.AF、OF、SF
11. 两个组合十进制数46H、35H相加,调整指令DAA完成的是( )。
A.加00H调整 B.加60H调整
C.加06H调整 D.加66H调整
12. 在8086的I/O指令中,间接端口寄存器是( )。
A.BX B.SI C. DX D.DI
13. 浮点加减中的对阶是( )。
A.将较小的一个阶码调整到与较大的一个阶码相同
B.将较大的一个阶码调整到与较小的一个阶码相同
C.将被加数的阶码调整到与加数的阶码相同
D.将加数的阶码调整到与被加数的阶码相同
14. 保护断点就是保存( )。
A.中断类型码 B.中断服务程序入口地址
C.现场 D.当前CS 、IP的值
15. 对以下类型的中断,优先级最低的是( )。
A.指令中断 B.非屏蔽中断 C.可屏蔽中断 D.单步中断
二、填空题(每空1分,共20分)
1. 指令MOV BX,MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么有效地址为 ,物理地址为 。
2. 对于十六进制表示的数码19.8H,转换为十进制数时为 ;该数码用压缩BCD码表示时数据为 。
3. 已知X的补码为10011001,其原码是 ;真值为__________。
4.使用DOS功能调用时,子程序的功能号应放在 寄存器中。
5. 设堆栈段寄存器SS所存放的数据为2250H,堆栈指示器SP所存放的数据为0140H,如压入堆栈7个数据库字,问栈顶地址、SS和SP各为 、 、 。
6. 使CF标志置1的指令是 ;使DF标志清0的指令是 。
7. 组成16M×8位的存储器,需要1M×4位的存储芯片______片。
8.8253可编程定时/计数器按照二进制计数,其计数范围是从0到 ;按照BCD码计数,其计数范围是从0到 。
9. PC机的中断类型有 、 和不可屏蔽中断三种,不可屏蔽中断的请求信息送CPU的 引脚。
10. 8255A的控制字的最高位D7=1时,表示该控制字为 控制字。
11.CPU可访问8259的端口地址数为 。
三、简答题(每小题5分,共20分)
1. 定时器和计数器有什么相同和不同?
2. 什么是接口?硬接口和软接口的含义各是什么?
3. 在A/D 转换过程中,采样保持电路有什么作用?在什么情况下可以不使用采样保持电路 ?
4.什么是中断?常见的中断源有哪几类?CPU响应中断的条件是什么?
四、分析题(每小题5分,共15分)
1. 若STR是字符串的首地址,阅读程序段,回答问题:
LEA BX,STR
MOV CX,30
LP: CMP [BX],‘$’
JNZ NEXT
MOV [BX],‘&’
NEXT:INC BX
LOOP LP
HLT
(1)指出程序的功能 ;
(2)对程序的各个语句加上注解。
2. 阅读程序段,完成指定问题:
NUM DB‘ABCDEFGHI’
MOV AH,01H
INT 21H
AND AL,0FH
DEC AL
XOR AH,AH
MOV BX,OFFSET NUM
ADD BX,AX
MOV DL,[BX]
MOV AH,02H
INT 21H
试回答:(1)上述程序段的功能是什么?
(2)如从键盘输入字符‘5’,程序段有什么结果?
3. 请把下列程序中所缺语句补充完整,并回答问题:
TITLE EXAMPLE.ASM
DATA SEGMENT
A DW 0
B DW 0
C DW 230,20,54
__________________________
CODE SEGMENT
ASSUME ______________________________
PROG PROC FAR
START: PUSH DS
MOV AX.0
_______________
MOV AX,DATA
________________
MOV BX, OFFSET C
MOV AX, [BX]
MOV B, AX
MOV AX, 2[BX]
ADD AX, B
MOV A, AX
EXIT: ___________________
____________________
CODE ENDS
___________________
问题:(1)程序执行完后,A单元的内容是多少?
(2)写出上机运行本程序的步骤。
五、应用题(每小题10分,共30分)
1.首地址为DAT的数据区中有3个互不相等的8位无符号整数,编写一个完整的程序,将这3个数的最大者存放到MAX单元。
2. 设8253计数器0工作在方式2,CLK0为5MHz,输出OUT0为1KHz方波,二进制计数;计数器1用OUT0作计数脉冲,计数值为1000,二进制计数,计数器减到0时向CPU发出中断请求,CPU响应这一中断请求后继续写入计数值1000,开始重新计数,保持每一秒钟向CPU发出一次中断请求。试编写出对8253的初始化程序。(8253端口地址为04B0H~04B3H)
3. 在如图所示的电路中,试分析电路图,回答以下问题。
(1)74LS138的作用是什么?
(2)74LS138在什么条件下才工作?
(3)RAM的地址范围是多少?
参考答案
一、单项选择题(每小题1分,共15分)
1.B 2.C 3.A 4.A 5.B 6.B 7.D 8. B 9.A 10.B
11.C 12.C 13.A 14.D 15.D
解释:
1.段的起始地址必须从节开始,而每节是16个字节,所以段的起始地址用十六进制表示时应该末尾是0。
2.指令POP [BX] 中的目的操作数为BX指向的内存单元,而BX默认使用DS;源操作数是堆栈中的数据。
二、填空题(每空1分,共20分)
1.4500H、16500H
(计算有效地址EA=MASK的3500H+BP的1000H=4500H
物理地址=1200H*16+EA=12000H+4500H=16500H )
2.25.5、00100101.0101B
3. 11100111、-103 4. AH
5.22640H、2250H 、0132H
解:已知:DS=2250H,栈顶地址的偏移地址=0140H
栈顶地址=(2250H´10H)+ 0140H
= 22640H
压入7个数据字后:
SP = 0140H - 2´7 = 0132H
SS = 2250H
6. STC、CLD 7.32
8.65535 、9999 9. 软件中断、可屏蔽中断、NMI
10. 方式 11.2
三、简答题(每小题5分,共20分)
1.答:定时器和计数器是同一器件—--计数器,其共同的特点是都有一个计数脉冲输入端,每输入一个脉冲,计数器就进行加1或减1计数。
若计数器件的计数脉冲的频率固定,则可利用计数实现定时,这就是定时器。
若计数器件的作用仅仅是记录输入脉冲的多少,则称为计数器。
2.答接口是位于主机与外设之间的
展开阅读全文