文档库 最新最全的文档下载
当前位置:文档库 › C语言复习参考题(含答案)——胡春安

C语言复习参考题(含答案)——胡春安

C语言复习参考题(含答案)——胡春安
C语言复习参考题(含答案)——胡春安

《C语言程序设计》复习题

一.选择题

1.以下关于运算符优先顺序的描述中正确的是()。

A.关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符

B.逻辑运算符< 关系运算符< 算术运算符< 赋值运算符

C.赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符

D.算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符

2.下列选项中合法的变量名是_________

A.#define B.int C.a594_3D. abs(x)

3.以下正确的描述是()。

A.break语句的作用是结束整个循环的执行

B.在C程序中,注释说明只能位于一条语句的后面

C.在循环体内使用break语句或continue语句的作用相同

D.从多层循环嵌套中退出时, 只能使用goto语句

4.以下说法正确的是()

A.#define 和printf 都是C 语句。

B.#define 是C语句,而printf不是。

C.若程序中要调用数学函数,必须在文件开头输入#include “math.h”。

D.#define是宏命令,printf 是C 语句。

5.下面的函数定义正确的是______________

A)float fun (float x ; float y) {return x*y;}

B)float fun (float x,y) {return x*y;}

C)float fun (x,y) {int x,y;return x*y;}

D)int fun (int x, int y) {return x*y;}

6.执行下面语句后的输出为( )

int i=-1;

if (i<=0) printf(“****\n”)

else printf(“%%%%\n”)

A). **** B). %%%%

C). %%%%c D). 有语法错误,不能正确执行

7.以下程序的输出结果是( )

void main( )

{int k=17;

printf("%d, %o, %x \n ", k, k, k );

}

A). 17, 21, 11 B). 17, 17, 17

C). 17, 0x11, 021 D). 17, 21, 1

8.以下不正确的叙述是()

A)#define是宏定义命令

B)宏定义只是做简单的置换,不做正确性检查

D)#define 和printf 都不是C 语句

9.一个C语言程序是由()

A) 一个主程序和若干子程序组成 B)若干子程序组成

C) 若干过程组成D) 函数组成

10.C语言规定,在一个源程序中,main()函数的位置()。

A.必须在最开始

B.必须在最后

C.可以任意

D.必须在系统调用的库函数的后面

11.以下对二维数组a的正确说明是()。

A) int a[3][]; B) floatf a(3,4);

C) char a[1][3]; D) float a(3)(5);

12.若有说明:int a[3][2]={10};则下面正确的叙述是()

A)只有元素a[0][0]可得到初值10 。

B)此说明语句不正确:。

C)数组a中各元素都可得到初值,但其值不一定为0。

D)数组a中每个元素均可得到初值10

13.以下叙述不正确的是()。

A) 一个C源程序可由一个或多个函数组成

B) 一个C源程序必须包含一个main函数

C) C程序的基本组成单位是语句

D) 只能在循环体内和switch语句体内使用break语句

14.为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句总是与()配对。

A) 缩排位置相同的if B) 其之前最近的未配对的if

C) 之后最近的if D) 同一行上的if

15.能正确表示a和b同时为正或同时为负的逻辑表达式是( )

A)(a>=0||b>=0)&&(a<0||b<0)

B)(a>0&&b>0)||(a<0&&b<0)

C)(a+b>0)&&(a+b<=0)

D) (a-b>0)&&(a-b<=0)

16.已知x =5,ch='A',y=0,则表达式(x > = y && ch<'a'&&!y) 的值是()

A) 0 B) 语法错C) 1 D) "假"

17.下列关于单目运算符++、--的叙述中正确的是()

A) 它们的运算对象可以是任何变量和常量

B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量

C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量

D) 它们的运算对象可以是char型变量、int型变量和float型变量

18.下面的程序( )

void main()

{ int x=3;

do {

printf(“%d\n”,x-=2);

} while(!(--x));

}

C). 输出的是3和0 D). 是死循环

19.如下程序:

void main( )

{ int a=6; printf(“%d\n”,(a+=3,2*a)); }

执行后,输出结果是( )

A) 9 B) 6 C) 2 D) 18

20.若有以下说明和语句,请选出哪个是对C数组元素的正确引用( ) int c[4][5], (*cp)[5]; cp=c;

A). cp+1 B). *(cp+3) C). *(cp+1)+3 D). *(*cp+2) 21.下面程序的输出是( )

main()

{ int x=023;

printf("%d\n", --x); }

A). 17 B). 18 C). 23 D). 24

22*.执行下列程序的结果是( )

main()

{ float x=1,y; y=++x*++x; printf(“%f\n”,y); }

A). 9.000000 B). 6.000000

C). 1.000000 D). 程序有错误

23.下面程序的输出是( )

int main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3];

printf("%d\n", *(p+2) ); }

A). 6 B). 4 C). 1 D). 2

24.执行下面程序后输出的值是( )

main()

{ int a;

printf("%d\n", (a=3*5,a*4,a+5) ); }

A). 65 B). 20 C). 15 D). 10

25.下面程序的输出是( )

main()

{ int a=-1, b=4, k;

k=(a++<=0)&&(!(b--<=0));

printf("%d %d %d \n", k, a, b );

}

A). 0 0 3 B). 0 1 2 C). 1 0 3 D). 1 1 2 26.设有如下的程序段:

char str[]="Hello"; char *ptr; ptr=str;

执行完上面的程序段后,*(ptr+5)的值为( )

A). '0' B). '\0' C). 不确定的值 D). '0'的地址

27.在宏定义# define PI 3.14159中,用宏名PI代替一个( )

A).单精度数 B).双精度数C).常量 D).字符串

28.若i是整型变量,pb是基本型为整型的指针变量,则正确的赋值表达式是()

A). pb=&i B). pb=i C). *pb=&i D). *pb=*i

29.有以下程序段

int m=0,n=0; char c=’d’;

scanf("%d%c%d",&m,&c,&n);

printf("%d,%c,%d\n",m,c,n);

若从键盘上输入:6D6<回车>,则输出结果是()

A) 0,d,6 B) 6,d,6 C) 6,D,6 D) 6,D,0

30.printf()函数中用到格式符%-7s ,其中数字7表示输出的字符串占用7列。如果字符串长度小于7,则输出按方式()

A) 从左起输出该字串,右补空格

B) 按原字符长从左向右全部输出

C) 右对齐输出该字串,左补空格

D) 输出错误信息

31.以下能正确地定义整型变量a,b和c 并为其赋初值3的语句是()

A) int a=3,b=3, c= 3; B) int a,b, c= 3;

C) a= 3,b=3,c=3; D) a= b= c=3;

32.以下程序的输出结果是( )

void main( )

{int x=6,y=6,i;

for(i=2;x>4;y=++i)

printf("%d,%d ",x--,y);

}

A) 5,5 5,3 B) 6,6 2,3 C) 6,5 5,2 D) 6,6 5,3

33.以下程序的输出结果是( )

void main( )

{int w=4;

int fun(int k);

fun(w);

printf("\n");

}

fun(int k)

{if(k>0) fun(k-1);

printf("%d ",k); }

A) 4 3 2 1 B) 0 1 2 3 4

C) 1 23 4 D) 4 3 2 1 0

34.下面程序的输出是( )

main()

{ int x=023;

printf("%d\n", --x); }

A). 17 B). 18 C). 23 D). 24

35*.以下程序的输出结果是( )

main()

{ char ch[3][4]={ "123","456","78"},*p[3]; int i;

for(i=0;i<3;i++) p[i]=ch[i];

for(i=0;i<3;i++) printf("%s",p[i]);

}

A). 123456780 B). 123 456 780

C). 12345678 D). 147

36.写出下列程序的运行结果

#include

int main()

{ int i=6,y=4,z=2;

printf(“%d\n”,i/y%z);

return 0;

}

A) 3 B)2 C) 0.5 D) 1 37.定义如下变量:float i=9.0 ;int j=3 ;则i%j的值是()A.0 B.3.0C. 3 D.语法有错

38.有以下程序

void main( )

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i<7&&p[i]%2) {k=k+p[i]; i++;}

printf("%d\n",k);

}

执行后输出结果是()

A) 58 B) 56 C) 45 D) 24

39.以下程序的输出结果是( )

void main( )

{ int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p;

p=&x[1][1];

for(i=0;i<6;i+=3)

printf("%d ",p[i]);

}

A) 5 2 B) 5 1 C) 5 3 D) 9 7 40.以下程序的输出结果是( )

#include

int main()

{ int x=3,y=2,z=1;

if (x>y) x=y;

if(x>z) x=z;

printf("%d,%d,%d\n",x,y,z);

return 0;

}

41.int main( )

{int i,a[]={5,6,9,11};

for (i=0;i<4;i++)

{ if (a[i]%2==0) continue;

printf("%d ",a[i]);

}

}

执行后输出结果是( )

A) 编译出错 B 6 C) 5 9 11 D) 5 6 9 11

42.以下对数组的定义正确的是( )

A)int x(10); B)int x[5]={0,1,2,3,4,5};

C)int n=10; x[n]; D)int x[ ]= {0,1,2,3,4};

43.以下叙述中不正确的是( )

A)switch是多分支结构语句

B) continue语句的作用是使程序的执行流程跳出包含它的所有循环

C) break 语句只能用在循环体内和switch语句体内

D)在循环体内使用break语句和continue语句的作用不相同

44.如下程序:

void main( )

{ int i=1,j=2,k=3;

if((j++|| k++)&&i++)

printf("%d,%d,%d\n",i,j,k);

}

执行后输出结果是( )

A) 1,2,3 B) 2,2,4 C) 2,3,4 D) 2,3,3 45.以下叙述中,不正确的是( ) ????

A)算法应该具有有穷性、确定性以及有效性等特点

B) 算法可以用传统流程图、N-S流程图以及伪代码等形式来描述

C) 基本结构只有顺序、选择、循环3种结构

D)结构化程序设计的思想是自顶向下、逐步细化、模块化设计以及结构化编码

46.在C语言中,函数返回值的类型最终取决于( )

A) 函数定义时形参的类型 B)return语句中表达式值的类型

C) 调用函数时主函数所传递的实参类型D)函数定义时在函数首部所说明的函数类型47.以下程序的输出结果是( )

void main()

{int i;

for(i='a';i<'i';i++,i++)

printf("%c",i-32);

printf("\n");

}

48.下面的程序输出是( )

#include

int main()

{ int k=3;

while (k--);

printf("%d\n",++k);

return 0;

}

A)0 B)1 C) 3 D) -1 49.下面的程序输出是( )

int m=13;

int fun2(int x,int y)

{int m=3;

return(x*y-m);

}

main()

{int a=7,b=5;printf("%d\n",fun2(a,b)/m);}

A). 1 B). 2 C). 7 D). 10 50.下面的程序输出是( )

main()

{ int x=100,a=10,b=20,ok1=5,ok2=0;

if(a

if(b!=15)

if(!ok1)

x=1;

else

if(ok2) x=10;

printf("%d \n", x ); }

A). -1 B). 10 C). 1 D). 100 51.若有以下定义:

int a[ ]={1,2,3,4,5,6,7,8,9,10}, *p=a;

则值为3的表达式是()

A). p+=2,*(p++) B). p+=2,*++p

C). p+=3,*p++ D). p+=2, ++*p 52.下面程序的输出是( )

int aa[3][3]={ {2},{4},{6} };

void main()

{int i, *p=&aa[0][0];

for(i=0;i<2;i++)

{ if(i==0)

aa[i][i+1]= *p+1;

else

++p;

}

A). 23 B). 26 C). 33 D). 36

53.下面程序的输出是( )

void prtv(int *x)

{ printf("%d\n", ++*x ); }

void main()

{ int a=25; prtv(&a); }

A. 23

B. 24

C. 25

D. 26

54.以下程序的运行结果是( )

void main( )

{char a[10]={'1','2','3','4','5','6','7','8','9','\0'};

char *p;

int i=8;

p=a+i;

printf("%s\n",p-2);

}

A) 6 B) 789 C) '6' D) 678

55.执行以下3条语句之后,则k的值是_______

int x=4,y=7 ; x++ ;y+=2 ;k=y%x;

A)1 B) 2 C)4 D)3

56.以下程序段

for ( k = 0, m = 4; m ; m - = 2 )

for( n = 1; n< 4 ; n++) k++;

循环体语句” k ++;”执行的次数是______________

A)16 B)12 C)6 D)8

57.在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为()

A) char=int<1ong int<=float

B) char< int <1ong int=float=double

C) char

D) char=int =1ong int<=float

58.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='d'十'1'一'3';后,c2中的值为()

A)b B) 68 C) 不确定的值D) f

59.表达式18/4*sqrt(4.0)/8值的数据类型为: ()

A) int B)float C)double D)不确定

60.能正确表示"当x 的取值在[1,10]和[50,60]范围内为真,否则为假"的表达式是()。

A) (x>=1) && (x<=10) &&(x> =50) && (x<=60)

B) (x>=1) || (x<=10) || (x>=50) || (x<=50)

C) (x>=1) && (x<=10) || (x>= 50) && (x<=60)

D) (x > =1)|| (x< =10) && (x> =50) || (x<=60)

*61.以下程序的输出结果是( )

# include

main()

{ char *p1,*p2,str[50]="ABCDEFG";

strcpy(str+1,p2+1); strcpy(str+3,p1+3);

printf("%s",str);

}

A). AfghdEFG B). Abfhd C). Afghd D). Afgd

62.以下程序的输出结果是( )

main()

{int i;

for(i=1;i<6;i++)

{ if(i%2) {printf("#");continue;}

printf("*");

}

printf("\n");

}

A). #*#*# B). ##### C). ***** D). *#*#*

63.能表示10≤a≤15 的关系表达式是()

A.a>=10 or a<=15 B.a>=10||a<=15

C.a>=10&&a<=15 D.a>=10 & a<=15

64. 以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是

A.if((a>b) &&(b>c) ) k=1;B. if((a>b) ||(b>c) ) k=1

else k=0;

C. if(a<=b) k=0; D. if(a>B) k=1;

else if(b<=c) k=1; else if(b>C) k=1;

else k=0;

65.设int x[]={2,4,6,8},y,*p=&x[1];则执行语句 y=(*--p)++;后数组元素x[0]的值为( ).

A. 2

B. 3

C. 4

D. 5

66.在下面关于函数的描述中错误的是()

A.在一个源文件中,如果函数定义在先,调用在后,则不必声明该函数

B.如果一个函数在一个源文件里定义,而调用在另一个源文件中,则必须在调用之前声明该函数

C.函数的声明应使用函数原型

D.在一个源文件中,如果自定义函数调用在先,定义在后,则不必声明该函数67. 若有int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*q)[3]=a;*q=a[0];则能够

正确表示数组元素a[1][2]的表达式是()。

A.*((*q+1)[2]

B. *(*(q+5))

C. *(*(q+1)+2)

D.(*q+1)+2

68.设int x[]={1,3,5,7,9,11,13},*p=x;则不能正确引用数组元素的表达式是()

A.*(p--)

B. *(--p)

C.*(p++)

D.*(++p)

69.下列程序的运行结果是()

#include

int main()

{ int y=10;

while (y>0){

if(y%3==0)

printf("%d",--y);

y--;

}

return 0;

}

A)852 B)963 C) 741 D)789

70. 在下面的定义中,正确的是()。

A. int y=x;

B. int x=3,y=3 ;

C. int x;y;

D. Int x=y=3;

71.执行下面程序段后,a的值为()。

int a,b;

for(b=1,a=1;b<=20;b++)

{

if(a>=10) break;

if (a%2==1)

{ a+=5; continue;}

a-=3;

}

A. 2

B. 6

C. 10

D. 8

72. 执行下列程序段后,变量i的值为()。

#define MA(x,y) ((x)*(y))

int i=5;

i=MA(i,i+1)-7;

A. 30

B. 23

C. 19

D. 1

73.下列程序的运行结果是()

#include

int main()

{ int x=3;

do {

printf("%3d",x-=2);

}while(!(--x));

}

A. 死循环

B. 1 -2

C. 10

D. 1

74. 若程序中定义了以下函数

double myadd(double a,double b)

{ return (a+b) ;}

并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是

A. double myadd(double a,b) ;

B. double myadd(double,double);

C. double myadd(double b,double a) ;

D. double myadd(double x,double y);

75.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是( )

int t[3][3],*pt[3],k; for(k=0;k<3;k++) pt[k]=&t[k][0];

A. t[2][0]

B. t[2][2]

C. t[1][2]

D. t[2][1]

76.在C语言中,080是()

A.八进制数B.十进制数C.十六进制数D.非法数

77.整型变量i定义后赋初值的结果是()。

int i=2.8*6 ;

A.12 B.16 C.17 D.18

78.f or(i=0,x=0; !x&&i<=3;i++)循环的次数为()

A.4 B.5 C.1D.无限循环

79.若有如下程序段:

{ int a=2,b=-1,c=2;

if (a

if (b<0) c=0;

else c+=1;

printf(“c=%d”,c);

}

执行后输出结果是()

A.2 B.1 C.3 D.0

80.下列符号能用作C++标识符是的()。

A. xyz/2

B. 2xsale

C. x-sale

D. x_sale

81.以下非法的赋值语句是()。

A. n=(i=2,i++);

B. ++(i+1);

C.x=j>0;

D. i++ ;

82.以下不能对二维数组a 进行正确初始化的语句是( )

A.int a[2][3]={0};

C.int a[2][3]={{1,2},{3,4},{5,6}};

D.int a[ ][3]={1,2,3,4,5,6};

83.以下合法的if语句是()。

A. if(a=

B. if(a<>b) c++;

C. if(a=>b) c++;

D. if(a==b) c++;

84.字符串常量“I love china”在内存中存在需要()字节。注:每个单词之间有一个空格。

A.10 B.12C. 13 D.14

85.以下for循环的执行次数是()

for (x=0,y=0;(y=1)&&(x=2); x++)

A.执行1次B.执行2次C.执行3次D.无限次

86.用逻辑表达式表示“A,B两人至少有一人得奖的逻辑表达式”是()

A.A=1||B=1 B.A=1&&B=0 C.A=0&&B=1 D.A=1&&B=1 87.执行下列程序段后,变量K的值为()

for(k=0,m=1;m<4;m++)

{

for(n=1;n<5;n++)

if (m*n%3==0) continue;

k++;

}

A.1

B. 3

C.6

D.12

88.设int a=4,b=8;则++a*++b的结果是()

A.32 B.40 C.45 D.36

89.有如下程序

main()

{ int x=23;

do

printf(“%d”,x--);

while (!x);

}

则程序的结果是()

A. 321

B. 22

C. 死循环

D. 23

90.若变量a、i 已正确定义,且i已正确赋值,下列语句合法的是()。

A. a==1;

B. ++i;

C. a=a+==5;

D. a==int(i);

91.以下符合C语言语法的赋值表达式是( )

A.d=9+e+f=d+9

B.d=9+e, f=d+9

92.已知字母A的ASCii码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为( )

A.D

B.68

C.不确定的值

D.C

93.在C语言中,要求运算数必须是整型的运算符是( )

A./

B.++

C.!=

D.%

94.若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum值为( )

A.7

B.8

C.9

D.10

95.若有说明语句:char c='\72';则变量c( )

A.包含1个字符

B.包含2个字符

C.包含3个字符

D.说明不合法,c的值不确定

96.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( )

A.2.500000

B.2.750000

C.3.500000

D.0.000000

97.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )

A.int

B.float

C.double

D.不确定

98. 若有以下定义,则能使值为3的表达式是( ) int k=7,x=12;

A.x%=(k%=5)

B.x%=(k-k%5)

C.x%=k-k%5

D.(x%=k)-(k%=5)

99. putchar函数可以向终端输出一个( )

A.整型变量表达式值

B.实型变量值

C.字符串

D.字符或字符变量值

100. 有输入语句:scanf(“a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应是( )

A.132

B.1,3,2

C.a=1□b=3□c=2

D.a=1,b=2,c=3

101.下面程序的功能是在输入的一批正整数中求出最大者,输入0时结束,请选择填空main( )

{int a,max=0; scanf(“%d”,&a);

while(____)

{if(max

scanf(“%d”,&a);}

printf(“%d”,max);}

A.a==0

B.a C !a==1 D.!a

102.下面程序的运行结果是()

main( )

{int num=0;

while(num<=2)

{num++; printf(“%d\n”,num);}

A.1

B.12

C.123

D.1234CR>表示回车

103.若运行以下程序时,从键盘输入2473,则下面程序的运行结果是()

#include

while((c=getchar( ))!=’\n’)

switch(c-‘2’)

{case 0:

case 1:putchar(c+4);

case 2:putchar(c+4);break;

case 3:putchar(c+3);

case 4:putchar(c+2);break;}

printf(“\n”);}

A.66877 B.668966 C.66778777 D.6688766

104.对for(表达式1;; 表达式3)可理解为()

A.for(表达式1;0;表达式3)

B.for(表达式1;1;表达式3)

C.for(表达式1;表达式1;表达式3)

D.for(表达式1;表达式3;表达式3)

105.下面程序的运行结果是()

main()

{int x,i;

for(i=1; i<100;i++)

{x=i;

if(++x%2==0)

if(++x%3==0)

if(++x%7==0)

ptintf(“%d”,x);}}

A.39 81

B.42 84

C.26 68

D.28 70

106.下面程序的运行结果是()

main()

{int i,b,k=0;

for(i=1;i<=5;i++)

{b=i%2;

while(b-->=0) k++;}

printf(“%d,%d”,k,b);}

A.3,-1

B.8-1

C.3,0

D.8,-2

107.以下程序的正确运行结果是()

main()

{int a=2,i;

for(i=0;i<3;i++) printf(“%4d”,f(a));}

f(int a)

{int b=0; static int c=3;

b++; c++; return(a+b+c);}

A.7 7 7

B.7 10 13

C. 7 9 11

D.7 8 9 二.填空题

2.数组 int a[3][5];共定义了______个数组元素。15

3.C程序由函数构成,C程序总是从_______开始执行. main()

4. C语言中,用__________ 关键字来包含如stdio.h之类的头文件。 include 5.函数的返回值是通过函数中的________________语句来获得的。return

6.至少执行一次循环体的循环语句是。do—while 语句

7.对于不带返回值的函数,应当用关键字______________定义函数。void

8.多分支结构的程序,通常选用_________语句来实现。 switch

9.若char ch[]="25yi6"有以下语句,则编译后分配给数组ch的内存占用的字节数为________。6

10.下面运算符 < , ++ = 按照优先级从高到低排列顺序为__ _。++ < = , 11.若char str[8]={“tony”};int k=strlen(str);则k的值为____________。4 12.______________是声明结构体类型的关键字。struct

13.int a[3][4]={{7,5},{5,8},{0,6,9,3}};则编译后a[1][2]= __________。0

14.静态局部变量应该用关键字____________来进行声明。static

15.用数组名作为函数调用的实参,则传递给形参的是____ _。数组的首地址16.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。3 17.C语言提供三种逻辑运算符,按优先级高低它们分别是。! > && > || 18.getchar( ) 函数的功能是。从标准输入设备读取下一个字符19.写出下面表达式的值

6*4/7+8%3 _______ 5 x=5 ; y=2; (x++)+y _________ 7

8-4>=5+3 ________ 0 6>4-2 ? 4%2: 3 ____ _ __ 0

x=2,y=2; x||!y ______ 1 x=3 ; x+=x-=2 ______ _ 2

20.下面invert函数的功能是将一个字符串str的内容颠倒过来,请填空。

# include

void invert(char str[ ] )

{ int i, j, ; k

for(i=0,j=strlen(str) ; i

{ k=str[ i ]; str[ i ]=str[ j ]; } str[j]=k;

}

21.下列程序是用递归的方法计算fun(5)*10的值。其中fun(k)=fun(k-1)*k,当k=0时,fun(0)=3。请填空完成程序。

#include

int main()

{ int fun(int);

printf(”%d”,fun(5)*10) ;

return 0;

}

int fun( ) int k

{

if(k==0)

else

return fun(k-1)*k;

}

22.表达式45/2+(int)3.14159/2的值是;23

23.若有int a=10,b=9,c;则在计算表达式c=(a%11)+(b=3),c+=2后,变量c的值为__15____.

24.若有int x=1,y=1,z=1,t;则在表达式t=++x||++y&&++z后,t的值为____1____。

25. 将-10<x≤8用C语言写成相应的逻辑表达式【1】。(x>-10 && x<=8)

26. C语言中用【2】表示逻辑真值,【3】表示逻辑假值。

27.设int a=10,b=4,执行语句a%=(b%=3);后,a的值是【4】0,b的值是【5】 1 。28.表达式7>=3+4||6<4&&2<5的结果为【5】1 或真

29.’\n’表示【6】字符。换行

30. 设a的初值为3,则表达式 (int)(a+6.5)%2+(a=b=5) 的值是 6 。

31. int a[10],则数组下标的上限是。9

32.C语言规定,可执行程序的开始执行点是__main()___

33.在C语言中,一个函数一般由两个部分组成,它们是__函数头____和___函数体_。

34.若a是int 型变量,则(a=4*5,a*2,a+6)表达式的值为(26)

35.若a是int型变量,且a的初值为6,则计算表达式后a的值为()。a+=a-=a*a

36.设a=2,b=4,c=5,则c>b>a的值是___________。0

37. 设x=2.5,a=7,y=4.7,写出算术表达式的值:x+a%3*(int)(x+y)%2/4的值________2.5000000_____。

38. 设a=2,b=3,x=3.5,y=2.5,写出算术表达式的值:(float)(a+b)/2+(int)x%(int)y的值

_________3.500000____。

三.程序阅读题

1.以下程序的运行结果是________________ 1

#include

void main()

{int m=3;

if(--m<3) printf(" %d\n",--m);

else printf("%d\n",++m);

}

2.执行下面程序段后, 输出结果是 i=6 j=3 m=7

#include

int i=2;

int fun(int x)

{ int k,j=1;

i=x*2; k=i+j;

return k;

}

void main( )

printf(“i=%d j=%d m=%d\n”,i,j,m);

}

3.下面程序的输出是__ 12

void main( )

{int arr[10],i,k=0;

for(i=0;i<10;i++)

arr[i]=i;

for(i=1;i<4;i++)

k+=arr[i]+i;

printf("%d\n",k);

}

4.下面程序的输出结果是________________234567 #include

#include

#define MAX_COUNT 6

void fun() ;

void main( )

{int count;

for(count=1;count<=MAX_COUNT;count++)

fun();

}

void fun()

{static int i;

i+=2;

printf("%d",i--);

}

5.下面程序的输出是_6

void main()

{int a[ ]={2,4,6}, *ptr=&a[0];

int x=8, y, z;

for(y=0;y<3;y++)

z=(*(ptr+y)

printf(“%d\n”, z);

}

6.P95-3

7.下面程序的输出结果是_ 2 4

int t(int x,int y,int cp,int dp)

{ cp=x*x+y*y;

dp=x*x-y*y; }

void main( )

{int a=4,b=3,c=2,d=4;

printf("%d %d\n",c,d);

}

8.下面程序的正确运行结果是________str[ ]=abdef void main()

{ static char str[ ]=”abcdef”;

void abc(char str[ ] );

abc(str);

printf(“str[ ]=%s\n”, str);

}

void abc(char str[ ] )

{ int a,b;

for(a=b=0;str[a]!=’\0’;a++)

if(str[a]!=’c’)

str[b++]=str[a];

str[b]=’\0’;

}

9.下面程序的输出结果是10

int fun(int *x,int n)

{if(n==0)

return x[0];

else return x[0]+fun(x+1,n-1);

}

void main( )

{int a[]={1,2,3,4,5,6};int k=fun(a,3);

printf(“%d\n”,k);

}

10.执行下面程序段后, 输出结果是i=6,x=10

void main( )

{int i,x;

for(i=1,x=1;i<=20;i++)

{if (x>=10)

break;

if(x%2==1)

{x+=5;continue;}

x-=3;

}

printf(“i= %d, x=%d\n”, i, x);

}

#include

void main()

{ int a[6]={2,5,7,3,9,8};

int i,j,t;

printf("\n");

for (j=0;j<5;j++)

for (i=0;i<5-j;i++)

if (a[i]>a[i+1])

{ t=a[i]; a[i]=a[i+1]; a[i+1]=t;

}

for(i=0;i<6;i++)

printf("%d ",a[i]);

}

12.下列程序执行后,输出的结果是 4

# include

fun(int a)

{ int b=0; static int c=3; a=c++,b++; return(a); }

void main()

{int a=2, i, k;

for(i=0;i<2;i++) k=fun(a++);

printf “%d\n”, k);

}

13.下面程序若从键盘输入:Ref6ugcBDT8e,按回车键,最后的执行结果是n=2 m=4 #include

void main ( )

{ int m=0,n=0;

char c;

while ( (c=getchar( ) )!='\n' )

{ if (c>='A' && c<='Z' ) m++ ;

if (c>='0' && c<='9') n++;

}

printf("n=%d m=%d\n", n,m );

}

*14.下面程序的执行结果是__ 74

#include

struct student { int num;

char name[10];

int score;

};

Min",71}};

void main( )

{ struct student *p;

int k=0;

for (p=stu;p

k+= p->score;

k/=3;

printf("%d\n",k);

}

15. 写出下列程序的结果: 6

#define N 2

#define M N+1

#define NUM (M+1)*M/2

void main()

{ printf("%d",NUM);

}

16. 写出下列程序的结果: 13,3

#include

int d=1;

void fun(int p)

{ int d=5;

d+=p++;

printf("%d",d);

}

void main()

{ int a=3;

fun(a);

d+=a++;

printf("%d%d",d,a);

}

17.执行以下程序后,y 的值是()

#include

int main ( )

{

int a[ ]={2,4,6,8,10};

int y=1,x,*p;

p=&a[1];

for(x=0;x<3;x++)

y + = * (p + x);

printf("%d\n",y);

}

汇编语言基础练习题目

、填空 1. 在8086/8088的计算机中,存储单元的20位物理地址由两部分组成,即16 位的 段地址 和16位的 偏移地址,物理地址=段地址X 10H+偏移量。 2. 段的起始地址必须是某小段的首地址,它能被 10H 整除。 3. 已知01020H 字单元的内容为6A58H 请分别写出它的两个字节单元的地址和 内容: (01020H =58H, ( 01021H =6AH 4. 指令执行后,若标志寄存器的ZF=0,则表示结果不为0;若SF=0,则表示结 果的符号是正号,即结果为正数。 5. 控制器从存储器取出一条指令后,指令指针寄存器IP 的内容是 将要执行的下 一条指令开始的偏移地址。 6. 段地址和偏移地址为1000: 127B 的存储单元的物理地址是1127BH 解:由物理地址=段地址X 10H+偏移量的公式可得 物理地址=1000HX 10H+127BH=10000H+127BH=1127BH 、选择 1. 与CS 寄存器组合才能形成代码段的物理地址的寄存器是 解:16K 个字单元,即为32K 个字节单元。由于2的15次方为32K,因此至 少需要15位二进制数才能表示16K 个字单元。 3. 已知一数据段的段地址是0100H,这个段的第6个字单元的物理地址是(B ) o 解:由于一个字单元占用两个字节,第一个字单元的偏移地址为 0000H,因 此第一个字单元的物理地址为 01000H 。以后每一个字单元的地址在前一个的基 C )。 A. SP 寄存器 B. BP 寄存器 C. IP 寄存器 D. BX 寄存器 2.如果存储器分段时, 的二进制数至少是( 一个段最多允许16K 个字单元,那么表示该段内偏移地址 A )o A.15 位 位 B.16 位 C.17 位 D.18 A. 01010H B. 0100AH C.01012H D.01006H

c语言复习题答案

c语言复习题-2010 1~5 ABCDB 6~10 BADAD 11~15 DABAB 16~20 ADDDC 1. 编程计算1!+2!+3!+……+n!的值,其中n的值由用户输入。 #include main() { long term = 1,sum = 0; int i,n; scanf(“%d”,&n); for (i = 1; i <= n; i++) { term = term * i; sum = sum + term; } printf("1!+2!+...n! = %ld \n", sum); } 2. 从键盘任意输入某班20个学生的成绩,打印最高分,并统计不及格学生的人数。要求按如下函数原型进行编程,分别计算最高分和统计不及格学生的人数:int FindMax(int score[], int n); int CountFail(int score[], int n); #include int FindMax(int score[], int n); int CountFail(int score[], int n); main() { int i, score[20],max,count; for (i=0; i<20; i++) { scanf("%d",&score[i]); } max = FindMax(score, 20); printf("max = %d\n",max); count = CountFail(score, 20); printf("count = %d\n",count); } int FindMax(int score[], int n) { int max,i;

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

汇编语言试题及参考答案

汇编语言试题及参考答案 一,填空题 1.ZF标志位是标志结果是否为零的,若结果,ZF为( 1 ),否则ZF为( 0 ).当ZF为1时,SF为( 0 ) 2.标号可以有两种类型属性.它们是( )和( ) 3.8位无符号整数的表示范围为0--255,写成16进制形式为( ),8位有符号整数的表示范围为-128--+127,写成16进制形式为( ) 4.伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是( ),不得有名字的是( ),可有可无名字的是( ). 5.循环程序通常由( )( )( )和循环结果外理四部分构成 6.在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/( )于+,-;XOR,OR( )于AND,LT( )于GT 7. 宏指令定义必须由伪指令( )开始,伪指令( )结束,两者之间的语句称为( ) 8.调用程序与子程序之间的参数传递方法有四种,即堆栈法( )( )( ) 9.分别用一条语句实现下述指明的功能 (1)栈顶内容弹出送字变量AYW( ) (2)双字变量AYD存放的地址指针送ES和SI( ) (3)变量AY2类型属性送AH( ) (4)不允许中断即关中断( ) (5)将字符串'HOW ARE YOU!'存入变量AYB( ) (6)子程序返回调用程序( ) (7)地址表达式AYY[4]的偏移地址送字变量ADDR( ) (8)AX的内容加1,要求不影响CF( ) (9)BX的内容加1,要求影响所有标志位( ) (10)若操作结果为零转向短号GOON( ) 二,单选题 1.IBM PC微机中,有符号数是用( )表示的 1.原码 2.补码 3.反码 4.BCD码 2.把汇编源程序变成代码程序的过程是( ) 1.编译 2.汇编 3.编辑 4.链接

C语言基础练习题(含答案)Word版

第一章C语言基础知识 1.1 选择题 1. 以下不是C语言的特点的是()。B A、语言简洁紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件操作 D、C语言移植性好 2. 下列字符序列中,不可用作C语言标识符的是()。B A.abc123 B.no.1 C._123_ D._ok 3. 正确的C语言标识符是()。A A._buy_2 B.2_buy C.?_buy D.buy? 4. 请选出可用作C语言用户标识符的一组标识符()。B A.void B.a3_b3 C.For D.2a define _123 -abc DO WORD IF Case sizeof 5. 下列符号中,不属于转义字符的是()。B A.\\ B.\0xAA C.\t D.\0 6. 不属于C语言关键字的是()。d A.int B.break C.while D.character 7. 是C语言提供的合法关键字的是()。b A.Float B.signed C.integer D.Char 8. 以下不能定义为用户标示符的是()。b A.scanf B.Void C._3com_ D.int 9. 一个C程序是由()。 b A.一个主程序和若干子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 10. C语言程序的基本单位是()。 c A.程序行 B.语句 C.函数 D.字符 11. 下列说法中,错误的是()。 a A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号B.每个函数都有一个函数头和一个函数体,主函数也不例外 C.主函数只能调用用户函数或系统函数,用户函数可以相互调用 D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数 12. 以下说法中正确的是()。 c A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行

汇编语言考试复习试题及答案

《汇编语言》考试复习题及答案 一、单项选择题(共20小题,每小题1分,共20分)在每题列出的四个备选项中只有一个是符合要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称() A.段地址B.偏移地址 C.物理地址D.逻辑地址 2.某存储单元的物理地址是12345H,可以作为它的段地址有()A.2345H B.12345H C.12340H D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是()A.XORBX,BX B.ORBX,BX C.ANDBX,BX D.CMPBX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是()A.CX≠0且ZF=1B.CX≠0且ZF=0 C.CX≠0或ZF=1D.CX≠0或ZF=0 5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是() A.DAA校正指令的功能已自动加在AH中 B.进位值在AF中,校正后根据AF内容再加在AH中 C.进位值在CF中,校正后根据CF内容再加在AH中

D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是()A.指令XORAX,AX执行后,AX内容不变,但设置了标志位 B.指令ORDX,1000H执行后,将DX最高位置1,其余各位置0 C.指令ANDAX,OFH执行后,分离出AL低四位 D.NOTAX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是()A.STOSW B.ADDAL,CL C.NEGBX D.INCDA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是() A.ADDBH,01H B.ORBH,01H C.XORBH,01H D.TESTBH,01H 9.完成对CL寄存器的内容乘以4的正确操作是() A.ROLCL,1B.MUL4 ROLCL,1 C.SHLCL,1D.MOVCL,2 SHLCL,1SHLCL,CL 10.下面各传送指令中,正确的是() A.MOV[DI],[SI]B.MOV[DX+DI],AL C.MOVWORDPTR[BX],0100H D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法()

汇编语言练习题

一、单项选择题(共20题) 1.对于有符号的数来说,下列哪个值最大() A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是()A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.设A=0.4H,B=0.8H,C=0.4,D=0.4Q,它们之间的关系是( )。 A.C+D=B B.A+D=B C.B=D D.A>C>D 4.下列四个寄存器中,可作为十六位寄存器的是( ) A.DL B.CL C.BP D.EBX 5.8088/8086存储器分段,每个段不超过() A.64K个字 B. 32K个字节 C.1兆个字节 D.64K个字节6.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式() A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 7.连接程序把汇编语言源程序生成的目标文件(.OBJ文件)转换成( )。 A..OBJ文件B..EXE文件

C..LST文件D..CRF文件 8.在程序运行过程中,确定下一条指令的物理地址的计算表达式是( )。 A. (CS)×16+(IP) B. (DS)×16+(DI) C. (SS)×16+(SP) D.(ES)×16+(SI) 9.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 10.8086/8088系统执行传送指令MOV时() A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 11.执行下列程序后,(AL)=( )H。 DATA SEGMENT TAB DB ‘0123456789’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX, DATA MOV DS, AX MOV BX, OFFSET TAB MOV AL, 04 XLAT TAB …

汇编语言题库

汇编语言题库 一、单项选择题 1、在下列的选项中,能够组成计算机系统的是()。 A.硬件系统和软件系统 B.CPU、存储器、输入/输出设备 C.操作系统、各种语言 D.系统软件和应用软件2、汇编语言属于()。 A.用户软件 B.系统软件 C.高级语言 D.机器语言3、汇编语言源程序经汇编程序汇编后产生的文件的扩展名是()。 A.EXE B.OBJ C.ASM D.LST 4、汇编语言的什么文件经链接(LINK)后产生可执行文件? A.ASM B.EXE C.LST D.OBJ 5、中央处理器CPU是由()组成的。 A.运算器 B.控制器 C.寄存器组 D.前三者6、IBM PC机的DOS是属于()。 A.用户软件B.系统软件C.系统硬件 D.一种语言7、汇编语言源程序是()程序。 A.不可直接执行的B.可直接执行的 C.经汇编程序汇编后就可执行的D.经连接后就可直接执行的8、8086/8088 CPU的寄存器组中,8位的寄存器共有()个。 A.4B.6C.8D.109、8086/8088 CPU的寄存器组中,16位的寄存器共有()个。 A.10B.12C.13D.1410、8086/8088 CPU执行算术运算时PSW共有()个标志位会受影响。 A.4B.5C.6D.711、在程序执行过程中,IP寄存器始终保存的是()。 A.上一条指令的首地址B.本条指令的首地址。 C.下一条指令的首地址D.需计算有效地址后才能确定地址。 12、IBM PC机的存储器可分()个段。 A.4B.256C.512D.65536 13、当使用BP作编程地址时,此时使用的是()段。 A.CSB.DSC.ESD.SS

C语言1-5章复习题及参考答案

一.选择题 1、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是()。 A .-3 B.9 C.-12 D.6 2、若有定义:int a=8, b=5, c; 执行语句 c=a/b+0.4; 后,c的值为()。 A .1.4 B.1 C.2.0 D.2 3、有如下程序: void main() { int i,sum; for(i=1;i<=3;sum++) sum+=i; printf("%d\n",sum); } 该程序的执行结果是()。 A .6 B.3 C.死循环 D.0 4、下列关于表达式的描述中,错误的是()。 A . 常量和变量都是表达式。 B. 运算符类型对应表达式的类型。 C. 每一个表达式都有自己的值。 D. 表达式必须以分号结尾。 5、C语言中,合法的长整型常数是()。 A . '\t' B.” A” C.65 D.a 6、若已定义 x 和 y为double 类型,则表达式 x=1;y=(x+3)/2 的值是()。 A .1 B.2 C.2.00000 D.2.50000 7、表达式:10!=9的值是()。 A . true B. 非零值 C.0 D.1 8、以下程序的输出结果是()。 #include void main() { printf("%d\n", NULL); } A . 不确定的 B.0 C.-1 D.1 9、请选出合法的C语言赋值语句。() A . a=b=58 B.i++; C. a=58,b=58 D. k=int(a+b); 10、假设 int b=2; 表达式(b>>2)/(b>>1)的值是()。 A .0 B.2 C.4 D.8 11、关于语句printf(“hello world\n”);,下列描述中错误的是()。 A . printf()是格式化输出函数,用于输出信息。 B. printf()括号中的内容为函数的参数。 C. printf()括号中的内容会全部输出到控制台上。 D. \n表示换行操作。 12、下列选项中,哪一项不是C语言中的位运算符()。 A .& B.|| C.~ D.^ 13、以下程序的输出结果是()。 void main()

微机原理与汇编语言复习题及参考标准答案

微机原理与汇编语言复习题及参考答案 ——CSDN下载频道提供,请尊重原创 一、选择题: 1. 设AL=0A8H,CX=2,CF=1,执行RCL AL,CL指令后,AL中的值为( ) A.51H B. A3H C.47H D. 0C5H 2. 下述指令的执行结果是( ) MOV AL,0C2H AND AL,0F0H A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H 3. 完成对CL寄存器的内容乘以4的正确操作是() A.ROL CL,1B.MUL 4C.SHL CL,1 D.MOV CL,2 ROL CL,1SHLCL,1SHL CL,CL 4. 无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指( )A.ADDBH,01H B.OR BH,01H C.XORBH,01HD.TESTBH,01H 5.假设(AL)= 37H,(BL)= 95H,执行指令IMUL BL后(AX)= () A.0E903H B.2003H C.0DBBHD. 2008H 6.下面的数据传送指令中,错误的操作是() A.MOV SS:[BX+DI],1000H B. MOV DX,1000H C.MOVWORD PTR[BX],1000H D.MOV DS,2000H 7. CPU要访问的某一存储单元的实际地址称( ) A.段地址B.偏移地址C.物理地址D.逻辑地址 8.某存储单元的物理地址是12345H,可以作为它的段地址有( ) A.2345HB.12345H C.12340HD.1234H 9. 计算机能直接识别的的语言( ) A.汇编语言 B.机器语言 C.高级语言D.低级语言 10.下列指令中操作数在代码段中的是() A.MOV AL,25HB.ADD AH,BLC.INC DS:[25] D.CMP AL,BL 11.直接、间接、立即三种寻址方式指令的执行速度,由决至慢的排序为() A.直接、立即、间接 B.直接、间接、立即 C.立即、直接、间接 D.不一定 12.若栈顶的物理地址是2010011,当执行完指令CALLAX后,栈顶的物理地址是()A.2010211 B.2010111 C.200FFHD.200FEH 13.当执行完下列指令序列后,标志位CF和OF的值是() MOVAX,OC126H MOV BX,5AB7H SUB AX,BX A.0,0 B.0,1C.1,0D.1,1 14.JMP BX的目标地址偏移量是(D)。 A.SI的内容 B.SI所指向的内存字单元之内容 C.IP+SI的内容D.IP+[SI] 15.指令MOVAX,10[BX]的源操作数的寻址方式是() A.基址寻址 B.寄存器寻址MOV AX,BX C.变址寻址AX【BX+DI】(只能用BX,BP;SI和DI)D.寄存器相对寻址

汇编语言自测试试题(doc 13页)

7.下列指令执行后,一定能使CF=0的指令是()A.NOT AX B.OR AX,AX C.SUB BX,SI D.ROL AX,1 8.设(DS)= 8260H (DI)= 3500H ,指令DEC WORD PTR [DI] 操作数的物理地址是()A.11760H B.85B00H C.86100H D.以上都不时9.循环指令LOOP AGAIN 终止循环的条件是()A.(AX)=0 B.(BX)=0 C.(CX)=0 D.(DX)=0 10.对寄存器AX 中的值除以2 正确的指令序列是() A.MOV AX,-51 B.MOV AX,-51 SHR AX,1 ROR AX,1 C.MOV AX,-51 D.以上都不是 SAR AX,1 二.填空题(每空格 1 分,共15 分) 1.在8086/8088 系统中,存储器是分段组织的,存储器物理地址计算公式是⑴。 2.在程序执行过程中,指令的段地址存放在⑵寄存器中,偏移地址存放在⑶寄存器中。 3.下列六条指令语句正确的是⑷⑸二句。 A. PUSH CS B. ADD CX,[SI+DI] C. AND AX,0FH D. MOV CL,256 E. .MOV AX,[BL] F. ADD DS,AX

4.已知(DS)= 2F00H (ES)= 3F00H (SS)= 1A80H (BX)= 0800H (SI)= 0010H (DI)= 0A00H (BP)=0040H 计算下列指令源操作数的物理地 址,指出寻址方式 (1)MOV AX,[BP+6] 物理地址⑹寻址方式⑺(2)ADD AX,ES:[BX] 物理地址⑻寻址方式⑼5.。加减运算中,一字节有符号数能表达的数值范围是⑽, 运算结果超出 范围称为⑾, 此时标志位⑿。 6.乘法指令IMUL BX 一个乘数在BX 中,另一个乘数一定在⒀中,乘积在⒁中。. 7. 与LEA BX,V AR指令完全等效的指令是⒂。三.简答题(每题8 分,共24 分) 1.按题意写出合适的指令语句,每小题写一条指令(1)把DX 寄存器和CX 寄存器的内容相减,结果存入DX 寄存器中。 (2)用BX 和SI的基址变址寻址,将存储器中的一个字传送到CX 寄存器中。 (3)取数组ARRAY的起始地址到BX 寄存器中。(4)将DX 寄存器的高四位置 1 2.执行下列指令语句,把执行结果填在空格中(1)已知(AL)=0FFH, (BL)=10H,执行MUL BL

汇编题库重点复习题

1.已知X=76,则[X]补=_______。 A.76H B. 4CH C. 0B4H D. 0CCH 2.已知[X]补=80H,则X =_______。 A.80H B.0 C. 0FFH D. -80H 3.已知[X]补=80H,则[X]补/2=_______。 A.0CCH B.4CH C. 49H D. 31H 4.已知X=78,Y=-83,则[X+Y]补=_______。 A.0F5H B.0A1H C. 0FBH D. 65H 5.将124转换成十六进制的结果是_______。 A.7CH B.7DH C. 7EH D. 7BH 6.将93H看成一个压缩的BCD码,其结果是_______。 A.10010101 B.10010011 C. 10000011 D. 10000001 7.45转换成二进制数是_______。 A.10101101 B.00111101 C. 00101101 D. 10011101 8.6CH 转换成十进制数是_______。 A.118 B.108 C. 48 D. 68 9.将93H扩展为字的结果是_______。 A.FF93H B.0093H C. 1193H D. 1093H 10.56的压缩BCD码是_______。 A.38H B. 56H C. 0506H D. 3536H 11.ASCII中的47H表示字符的是_______。 A.“7” B. “G” C. “g” D. “E” 12.十进行数-1的8位二进制数补码是_______。 A.11111110 B. 11110000 C. 11111111 D. 10001111 13.下列为补码表示,其中真值最大的数是_______。 A.10001000 B. 11111111 C. 00000000 D. 00000001 14.十六进制数88H,可表示成下面几种形式,请找出错误的表示_______。 A.无符号十进制数136 B. 1带符号十进制数-120D C. 压缩BCD码十进制数88 D. 8位二进制数-8的补码 15.计算机对字符、符号采用统一的二进制编码。其编码采用的是_______。 A.BCD码 B. 二进制码 C. ASCII D. 十六进制码第二章 16.在微机中分析并控制指令执行的部件是_______。 A.寄存器 B. 数据寄存器 C. CPU D. EU 17.在计算机的CPU中执行算术逻辑运算的部件是_______。 A.ALU B. PC C. AL D. AR 18.执行指令PUSH CX后堆栈指针SP自动_______。 A.+2 B. +1 C. —2 D. —1 19.在标志寄存器中表示溢出的是_______。 A.AF B. CF C. OF D. SF 20.对汇编语言源程序进行翻译的是程序是_______。 A.连接程序 B. 汇编程序 C. 编译程序 D. 目标程序

C语言练习题(带答案)-绝对经典题目不看后悔

1单选题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成 (2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1); 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键

汇编语言习题-测验题答案

汇编语言各章习题、测试题答案 习题一 分别将下列二进制数作为无符号数和带符号数转换为十进制和十六进制数 01110111 00101111 十六进制运算 1A52H+4438H 3967H-2D81H 37H×12H 1250H×4H 将十进制数变为8位补码并做运算(结果用二进制、十六进制、十进制表示) 29+53 73-24 -66+82 -102-15 用压缩BCD码计算(结果用二进制、BCD码、十进制表示) 29+53 73-24 66+18 132+75 符号位扩展(字节扩展为字,字扩展为双字) 20A3H 94H 3456H 7FH EC00H 若机器字长为16位,其无符号数表示范围是多少带符号数表示范围是多少分别用十进制和十六进制表示。 写出下列十六进制数所能代表的数值或编码: (1)38H (2)FFH (3)5AH (4)0DH 将下列十进制数分别转换为二进制、十六进制、二进制补码、压缩BCD码和ASCII码: (1)108 (2)46 (3)-15 (4)254 写出下列算式的8位二进制运算结果,标志位CF、SF、ZF、OF分别是什么值 (1)56+63 (2)83-45 (3)-74+29 (4)-12-37 查表,指出ASCII码0DH、0AH、07H、1BH、20H、60H、50H、70H对应的控制字符。 测验一 单选题: 1.已知X=76,则[X]补= 。 A. 76H B. 4CH 2.已知[X]补=80H,则X= 。 A. 80H B. 0 C. 0FFH D. -80H 3.已知[X]补=98H,则[X]补/2= 。 A. 0CCH C. 49H D. 31H 4.已知X=78,Y=-83,则[X+Y]补= 。 A. 0F5H B. 0A1H C. 0FBH D. 65H 5.将124转换成十六进制数的结果是 A. 7CH B. 7DH C. 7EH D. 7BH 6.将93H看成一个压缩BCD码,其结果是 A. B. C. D. 7. 45转换成二进制数是 A. C. 00101101 D. 8.6CH转换成十进制数是 A. 118 B. 108 C. 48 D. 68 9.将93H扩展为字的结果是 A. FF93H B. 0093H C. 1193H D. 1093H

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

C语言考试复习试题及参考答案

中南大学现代远程教育课程考试复习试题及参考答案 C语言程序设计 一、单项选择题 若以下各题所有库函数都可以合法使用,且变量定义如下: int m=5, i=3,j=2,*p, a=8,b=0; int arr[10]={0,1,2,3,4,5,6,7,8,9},td[ ][3]={1,2,3,4,5,6}; float x=2.5,y=3.0; double z=0; long n=1; char c=’A’,ch[20]={’a’,’b’,’c’,’\0’,’d’,’\0’}; struct student { int num; char name[20]; float score; struct student *next; }st1,st2,*ps;

FILE *fp; 1.若将3和10从键盘输入给变量a、x,输入语句为 scanf(“a=%d,x=%f”,&a,&x);正确的键盘输入是(↙表回车): A a=3,x=10↙ B 3,10↙ C 3 10↙ D 3,10.0↙ 2. 以下不是死循环的语句是: A for ( ;;y+=i++); B while(a) y+=i++ ; C do{ y+=i++}while (a>0); D for (b=0;(c=getchar()!=’\n’);)b++; 3.若p=arr;正确的语句是: A *p=arr[10]; B *p=arr[2*a]; C p=arr[5]; D p[i]=arr[0]; 4.若ps=&st1;则下面描述正确的是: A ps->num与st1->num等价。 B ps.num与st1.num等价。 C ps->num与num等价。 D ps->num与st1.num等价。 5.语句printf(“%d",aj);的输出结果是:

汇编语言程序设计期末考试试卷及参考答案

【汇编语言程序设计】期末考试-试卷及参考答案

执行上述两条指令后,正确的结果是( B )。 A.(AX)=1001H; B.(AX)=0FFFH; C.(AX)=1000H; D.(AX)=0111H。 6.串指令中的目的操作数地址一定是由____A_ _提供。()A.ES:[DI] ; B.SS:[BP]; C.DS:[SI] ; D.CS:[IP]。 7.将DX的内容除以2,正确的指令是( C )。 A.DIV? 2 ; B.DIV ? DX,2 ; C.SAR? DX,1; D.SHL? DX,1。 8. 用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )。 A.目标程序; B.汇编语言源程序; C.可执行程序; D.汇编程序。 9.用一条指令仅实现将AX←BX+SI的方法是( D )。 A.XCHG AX,[BX][SI] ; B.MOV AX,[BX+SI]; C.LEA AX,BX[SI] ; D.LEA AX,[BX][SI]。 10.设SP初值为2000H,执行指令“PUSH AX”后,SP的值是( C )。 A.1FFFH; B.1998H; C.1FFEH; D.2002H。 1.A 2. C 3.A 4.D 5.B 6.A 7.C 8.B 9.D 10.C 二、指出下列指令的出错原因,并改正。(每小题2分,共12分) 1.MOV BX,DL;操作数类型不匹配,改正为:MOV BL,DL 或MOV BX,DX 2.MOV CS,AX;代码段寄存器CS不能作目的操作数,改正为MOV DS,AX 3.ADD AX,DS;段寄存器DS的内容不能作为加法指令的操作数,改正为 MOV BX,DS ADD AX,BX 4.TEST BX,[CX];不能使用CX实现寄存器间接寻址,改正为 MOV SI,CX TEST BX,[SI] 5.SUB [BX],[BP+SI];两个操作数不能同为存储器操作数,且两个操作数的数据类型不确定,改正为:MOV AX,[BX] SUB AX,[BP+SI] 或:MOV AL,[BX] SUB AL,[BP+SI] 6.SHL DX ;没有给出移位次数,改正为SHL DX,1或 SHL DX,CL 三、程序填空题(注意:每空只能填一条指令,并注释说明所填指令的作用!每空3分,共18分) 1.在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并

汇编语言期末复习题库

一、填空题 1.中央处理器包括运算器、控制器、寄存器组。 2.物理地址是指实际的20 位主存单元地址,每个存储单元对应唯一 的物理地址。 3.用二进制代码书写指令和程序的语言,称为机器语言。 4.计算机中的指令由操作码和操作数两部分组成。 5.把A和B两个寄存器的内容进行异或运算,若运算结果是0 ,那么 A、B寄存器的内容必定相同。 6.AL,BL中存放着压缩的BCD数,(AL)=18H,(BL)=47H,执行如下 两条指令ADD AL,BL 和DAA后,(AL)=65H 。 7.当指令“SUB AX,BX”执行后,CF=1,说明最高有效位有借位; 对有符号数,说明操作结果溢出。 8.FLAG状态标志寄存器中,AF为辅助进位标志,CF为进位标志, SF为符号标志,ZF为零标志,OF为溢出标志,PF为奇 偶性标志。 9.指出下列指令源操作数的寻址方式: MOV AX,ARRAY[SI] 变址寻址 MOV AX,ES:[BX] 寄存器间接寻址 MOV AX,[200H] 直接寻址 MOV AX,[BX+DI] 基址变址寻址 MOV AX,BX 寄存器寻址 MOV AX,1200H 立即数寻址

MOV AX,20[BX+SI]基址变址寻址 MOV AX,[DI+20] 变址寻址 10.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H, (20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21023H)=65H,下列指令执行后填入AX寄存器的内容: (1)MOV AX,1200H;(AX)= 1200H (2)MOV AX,BX;(AX)=0100H (3)MOV AX,[1200H];(AX)= 4C2AH (4)MOV AX,[BX];(AX)= 3412H (5)MOV AX,1100[BX];(AX)= 4C2AH (6)MOV AX,[BX][SI];(AX)= 7856H (7)MOV AX,1100[BX][SI];(AX)= 65B7H 11.已知‘A’的ASCII是41H,那么‘E’的ASCII是45H 。 12.Ends 是段定义结束伪指令,与Segment配套使用。 13.逻辑地址由段基值和偏移量组成。将逻辑地址转换为物理地址的公 式是段基值*16+偏移量。其中的段基值是由段寄存器存储。 14.一个有16个字的数据区,它的起始地址为70A0:0100H,那么该数据 区的最后一个字单元的物理地址为70B1E H。 15.DEBUG命令中,显示内存命令 D ,显示寄存器命令R,汇编命令 A ,执行命令G 。

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1.把要执行的程序与库文件连接起来形成可执行文件的系统程序是( B ) 。 A.汇编程序 B.连接程序 C.机器语言程序 D.源代码程序 2.在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 ( C )。 A..SS和SP B.DS和DI C.CS和IP D.ES和SI 3.为了使主机访问外设方便起见,外设中的每个寄存器给予一个( C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D.段地址 4.MOV AX,3064H,该指令中源操作数采用的寻址方式是( A )。 A.立即 B.直接 C.寄存器相对 D.寄存器间接 5.换码指令的助记符是( C )。 A. XCHG B. LEAS C.XLAT D. MOV 6.如果A≥B(A、B有符号数)发生转移,应选择的条件转移指令是 ( JGE )。 7.下列符号中,可用作标识符的是( C )。 A.MOV B.AX C.MSG1 D.1ABC 8.X DB 10H DUP(1,2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9.当DF=0时,执行串操作指令MOVSB,变址寄存器SI、DI的值将( C )。 A. 不变 B.减1 C.加1 D.无法确定 10.如下指令可将AX寄存器内容改变的是( A )。 A.AND AX , BX B.TEST AX , BX C.CMP AX , BX D.XCHG AX , AX 11.16位CPU支持的I/O地址范围是( D )。 A.0~0FFFFFH B.0~0FFFFH C.0~0FFFH D.0~0FFH

相关文档