大学生C语言课后习题全部答案详解

大学生C语言课后习题全部答案详解
大学生C语言课后习题全部答案详解

#include

main()

{

inta,b,he,cha,ji;

double shang;

a=8;

b=3;

he=a+b;

cha=a-b;

ji=a*b;

shang=(double)a/b;

printf("和=%d\n",he);

printf("差=%d\n",cha);

printf("积=%d\n",ji);

printf("商=%f\n",shang);

}

#include

main()

{

doubler,h,v,pi;

pi=3.14;

r=2.5;

h=3.5;

v=pi*r*r*h;

printf("面积=%f\n",v);

}

#include

#include

#include

main()

{

charch;

system("cls");

printf("|------------------------|\n");

printf("| 请输入编号(0-7)|\n");

printf("|------------------------|\n");

printf("| 1——创建通讯录|\n");

printf("| 2——显示通讯录|\n");

printf("| 3——查询通讯录|\n");

printf("| 4——修改通讯录|\n");

printf("| 5——添加通讯录|\n");

printf("| 6——删除通讯录|\n");

printf("| 7——排序通讯录|\n");

printf("| 0——退出|\n");

printf("|------------------------|\n");

printf("请输入选项\n");

ch=getch();

putch(ch);

}

#include

#include

main()

{

//定义

int a=0,b=0,he=0,cha=0,ji=0;

doubleshang,x;

//防止a,b 的值为0

printf("请输入非零的a\n");

scanf("%d",&a);

printf("请输入非零的b\n");

scanf("%d",&b);

//运算

he=a+b;

cha=a-b;

ji=a*b;

shang=a/b;

x=(float)a/b;

//输出

printf("result:\n");

printf("a+b=%d\n",he);

printf("a-b=%d\n",cha);

printf("a*b=%d\n",ji);

printf("a/b=%f\n",shang);

printf("(float)a/b=%f\n",x);

}#include

#include

main()

{

//定义

int a=0,b=0,he=0,cha=0,ji=0;

doubleshang,x;

//防止a,b 的值为0

do

{

printf("请输入非零的a\n");

scanf("%d",&a);

}while(a==0);

do

{

printf("请输入非零的b\n");

scanf("%d",&b);

}while(b==0);

//运算

he=a+b;

cha=a-b;

ji=a*b;

shang=a/b;

x=(float)a/b;

//输出

printf("result:\n");

printf("a+b=%d\n",he);

printf("a-b=%d\n",cha);

printf("a*b=%d\n",ji);

printf("a/b=%f\n",shang);

printf("(float)a/b=%f\n",x);

}#include

main()

{ int a=0,b=4;

printf("请输入一个不多于4位的正整数:");

scanf("%d",&a);

if(a>=0&&a<10)

b=1;

if(10<=a&&a<100)

b=2;

if(100<=a&&a<1000)

b=3;

printf("输出%d\n",b);

}#include

#include

main()

{

floata,b,c,delta;

double x1,x2;

printf("请输入a,b,c:\n");

scanf("%f%f%f",&a,&b,&c);

delta=b*b-4*a*c;

if(delta<0)

printf("方程无实数解!\n");

else

{

x1=(-b+sqrt(delta))/2*a;

x2=(-b-sqrt(delta))/2*a;

printf("x1=%f,x2=%f\n",x1,x2);

}

}#include

main()

{

intyear,flay;

printf("请输入年份:\n");

scanf("%d",&year);

if(year%400==0)

flay=1;

else if(year%4==0&&year%100!=0)

flay=1;

else flay=0;

switch(flay)

{

case 0: printf("%d为平年\n",year);break;

case 1: printf("%d为闰年\n",year);break;

}

}#include

main()

{

intyear,flay;

printf("请输入年份:\n");

scanf("%d",&year);

if(year%400==0)

flay=1;

else if(year%4==0&&year%100!=0)

flay=1;

else flay=0;

switch(flay)

{

case 0: printf("%d为平年\n",year);break;

case 1: printf("%d为闰年\n",year);break;

}

}#include

#include

main()

{

inta,b,c;

double d,x1,x2;

scanf("%d%d%d",&a,&b,&c);

d=b*b-4*a*c;

if(d<0)

printf("没有实根\n");

else

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("x1=%f,x2=%f\n",x1,x2);

}

}#include

#include

main()

{

inta,b,c;

double d,x1,x2;

scanf("%d%d%d",&a,&b,&c);

if(a==0)

printf("不合法的一元二次方程\n");

else

{

d=b*b-4*a*c;

if(d<0)

printf("没有实根\n");

else

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("x1=%f,x2=%f\n",x1,x2);

}

}

}#include

#include

main()

{

inta,b,c;

double d,x1,x2;

scanf("%d%d%d",&a,&b,&c);

if(a==0)

printf("不合法的一元二次方程\n");

else

{

d=b*b-4*a*c;

if(d<0)

printf("没有实根\n");

else

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("x1=%f,x2=%f\n",x1,x2);

}

}

}#include

#include

main()

{

inta,b,c;

double d,x1,x2;

scanf("%d%d%d",&a,&b,&c);

if(a==0)

printf("不合法的一元二次方程\n");

else

{

d=b*b-4*a*c;

if(d<0)

printf("没有实根\n");

else

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("x1=%f,x2=%f\n",x1,x2);

}

}

}#include

\

main()

{

int y;

printf("请输入年份:");

scanf("%d",&y);

if(y>0)

{

if(y%400==0)

printf("%d年是闰年\n",y);

else

if(y%100==0)

printf("%d年是闰年\n",y);

else

if(y%4==0)

printf("%d年是闰年\n",y);

else

printf("%d年不是闰年\n",y);

}

else

printf("错误\n");

}#include

\

main()

{

inty,m,d,yt,mt,dt,age;

printf("请按格式2010-12-10输入你的生日");

scanf("%d-%d-%d",&y,&m,&d);

printf("请按格式2010-12-10输入今天的日期");

scanf("%d-%d-%d",&yt,&mt,&dt);

age=yt-y;

if(mt<=m)

age--;

printf("你的年龄是:%d\n",age);

}#include

main()

{

inta,b,c;

printf("输入三角形的三个边长");

scanf("%d%d%d",&a,&b,&c);

if((a+b>c) && (b+c>a) && (a+c>b))

{if(a==b || b==c || a==c )

{if(a==b && b==c)

printf("等边三角形\n");

else

printf("等腰三角形\n");

}

else

printf("一般三角形\n");

}

else

printf("不能构成三角形\n");

}#include

main()

{

inti,n=0;

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

{

if(i%10==2 || i%100==2)

{ printf("%4d",i);

n++;

}

}

printf("\n");

printf("%d",n);

}#include

main()

{

inti,n=0;

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

{

if(i%10==2 || i%100==2)

{ printf("%4d",i);

n++;

}

}

printf("\n");

printf("%d",n);

}#include

main()

{

inti,n=0;

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

{

if(i%10==2 || i%100==2)

{ printf("%4d",i);

n++;

}

}

printf("\n");

printf("%d",n);

}#include

#include

main()

{

int n=0,s=1,i=0;

printf("input:");

scanf("%d",&n);

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

s=s*2;

printf("2^%d=%d\n",n,s);

}#include

#include

main()

{

int n=0,sum=0,i=0;

printf("input:");

scanf("%d",&n);

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

sum=sum+pow(2,i);

printf("2^1+2^2+....2^n=%d",sum); }#include

#include

main()

{

int n=0,sum=0,i=0;

printf("input:");

scanf("%d",&n);

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

sum=sum+pow(2,i);

printf("2^1+2^2+....2^n=%d",sum); }#include

main()

{

char a='\0',b='\0';

int sum=0;

printf("请输入两个数字:");

a=getchar();

b=getchar();

sum=(a-'0')+(b-'0');

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

}#include

main()

{

chara,b;

intc,d;

printf("请输入字符型数字");

scanf("%c %c",&a,&b);

c=a-'0';

d=b-'0';

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

}#include

//#define num 10

main()

{

int a1[20],b1[20],a,b,num=20,i=0;

//a1[20]是存放成绩,b1[20]存放学号,

//a是成绩查找的上限,b是成绩查找的下限

//获得数据

printf("输入学生20组成绩和学号");

for(i=0;i

{

printf("\n请输入学号:");

scanf("%d",&b1[i]);

printf("请输入分数:");

scanf("%d",&a1[i]);

}

printf("\n请输入你要查找分数段的下限:");

scanf("%d",&a);

printf("\n请输入你要查找分数段的上限:");

scanf("%d",&b);

printf("查找结果是:");

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

{

if(a1[i]>=a && a1[i]<=b)

printf("\n学号:%d 成绩:%d",b1[i],a1[i]);

}

printf("\n");

}#include

//#define num 10

main()

{

int a[10],b[10],num=10;

inti=10,j=10,t;

//获得数据

printf("输入学生10组成绩和学号");

for(i=0;i

{

printf("\n请输入学号:");

scanf("%d",&b[i]);

printf("\n请输入分数:");

scanf("%d",&a[i]);

}

//冒泡交换位置

for(i=0;i

{

for(j=0;j

{

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

t=b[j];

b[j]=b[j+1];

b[j+1]=t;

}

}

}

//循环输出

printf("前三名是:");

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

{

printf("\n第%d名学号:%d 成绩:%d",i+1,b[i],a[i]);

}

}#include

#include

main()

{

char a[100]="",b[100]="";

inti,n,j=0;

printf("INPUT:");

gets(a);

n=strlen(a);

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

{

if((a[i]>='a'&& a[i]<='z')||(a[i]>='A' && a[i]<='Z'))

{

b[j]=a[i];

j++;

}

}

printf("结果是");

puts(b);

}#include

#include

main()

{

char a[100]="",b[100]="";

inti,n,j=0;

printf("INPUT:");

gets(a);

n=strlen(a);

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

{

if((a[i]>='a'&& a[i]<='z')||(a[i]>='A' && a[i]<='Z'))

{

b[j]=a[i];

j++;

}

}

printf("结果是");

puts(b);

}#include

#include

main()

{

char a[100]="";

inti,n,j=0,k=0;

printf("INPUT:");

gets(a);

n=strlen(a);

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

{

if(a[i]=='(') j++;

if(a[i]==')') k++;

}

printf("结果是: (有%d个, )有%d个\n",j,k);

if(j!=k) printf("两者的数目不相等\n");

else printf("两者的数目相等\n");

}#include

#define M 3

#define N 5

main()

{

int a[N][M]={0},b[N][N]={0},c[M][N

]={0},i=0,j=0;

printf("input a[][]:\n");

for(i=0;i

{

for(j=0;j

{

printf("a[%d][%d]=",i+1,j+1);

scanf("%d",&a[i][j]);

}

}

printf("input b[][]:\n");

for(i=0;i

{

for(j=0;j

{

printf("b[%d][%d]=",i+1,j+1);

scanf("%d",&b[i][j]);

}

}

for(i=0;i

{

for(j=0;j

{

c[i][j]=a[i][j]+b[i][j];

}

}

printf("output c[][]:\n");

for(i=0;i

{

for(j=0;j

{

printf("%4d",c[i][j]);

}

printf("\n");

}

}#include

#include

main()

{

char a[100]="";

inti,n,j=0,k=0;

printf("INPUT:");

gets(a);

n=strlen(a);

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

{

if(a[i]=='(') j++;

if(a[i]==')') k++;

}

printf("结果是: (有%d个, )有%d个\n",j,k);

if(j!=k) printf("两者的数目不相等\n");

else printf("两者的数目相等\n");

}#include

#include

main()

{

char a[100]="",b[100]="";

inti,n,j=0;

printf("INPUT:");

gets(a);

n=strlen(a);

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

{

if((a[i]>='a'&& a[i]<='z')||(a[i]>='A' && a[i]<='Z'))

{

b[j]=a[i];

j++;

}

}

printf("结果是");

puts(b);

}#include

//#define num 10

main()

{

int a[10],b[10],num=10;

inti=10,j=10,t;

//获得数据

printf("输入学生10组成绩和学号");

for(i=0;i

{

printf("\n请输入学号:");

scanf("%d",&b[i]);

printf("\n请输入分数:");

scanf("%d",&a[i]);

}

//冒泡交换位置

for(i=0;i

{

for(j=0;j

{

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

t=b[j];

b[j]=b[j+1];

b[j+1]=t;

}

}

}

//循环输出

printf("前三名是:");

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

{

printf("\n第%d名学号:%d 成绩:%d",i+1,b[i],a[i]);

}

}#include

//#define num 10

main()

{

int a1[20],b1[20],a,b,num=20,i=0;

//a1[20]是存放成绩,b1[20]存放学号,

//a是成绩查找的上限,b是成绩查找的下限

//获得数据

printf("输入学生20组成绩和学号");

for(i=0;i

{

printf("\n请输入学号:");

scanf("%d",&b1[i]);

printf("请输入分数:");

scanf("%d",&a1[i]);

}

printf("\n请输入你要查找分数段的下限:");

scanf("%d",&a);

printf("\n请输入你要查找分数段的上限:");

scanf("%d",&b);

printf("查找结果是:");

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

{

if(a1[i]>=a && a1[i]<=b)

printf("\n学号:%d 成绩:%d",b1[i],a1[i]);

}

printf("\n");

}#include

#include

#include

main()

{

int a[5][5]={0};

inti=0,j=0;

printf("原矩阵\n");

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

{

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

{

a[i][j]=rand()%20+1;

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

}

printf("\n");

}

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

{

a[i][i]=2*a[i][i];

}

printf("变化后矩阵\n");

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

{

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

{

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

}

printf("\n");

}

}#include

#include

main()

{

char a[100]="",t="";

inti=0,j=0,n=0;

printf("input: ");

gets(a);

n=strlen(a);

//这里的排序是用冒泡排序法的

for(i=0;i<=n-1;i++)

{

for(j=0;j<=n-1;j++)

{

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

printf("\nresult:");

puts(a);

}#include

#include

main()

{

char a[100]="",b[100]="";

inti=0,j=0,n=0;

printf("input: ");

gets(a);

n=strlen(a);

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

{

if(a[i]>='a' && a[i]<='z')

{

b[j]=a[i];

j++;

}

}

printf("\nresult: ");

puts(b);

}#include

#include

#include

main()

{

char a[100]=""; //a[]用于存储字符串

inti,n,j=0,m,c[26]={0}; //m表示第几个字母,c[m]用于计数第m个字母的出现次数,printf("输入(少于100个字符):");

gets(a);

n=strlen(a);

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

{

if((a[i]>='a'&& a[i]<='z')||(a[i]>='A' && a[i]<='Z')) //保证它是英语字母

{

a[i]=tolower(a[i]); //为了方便,将字符串中的英语字母都转成小写

m=a[i]-'0'-49;

c[m]++; //计数

j++;

}

}

printf("结果是\n");

for(i=0;i<=25;i++) printf("%c出现的次数是:%d\n",i+65,c[i]);

}#include

#include

#include

main()

{

char a[100]=""; //a[]用于存储字符串

inti,n,j=0,c[26]={0}; //c[m]用于计数第m个字母的出现次数,

printf("输入(少于100个字符):");

gets(a);

n=strlen(a);

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

{

if((a[i]>='a'&& a[i]<='z') //保证它是英语字母

{

j=a[i]-97;

c[j]++;

}

if((a[i]>='A'&& a[i]<='Z')

{

j=a[i]-65;

c[j]++; //为了方便,将字符串中的英语字母都转成小写}

}

printf("结果是\n");

for(i=0;i<=25;i++) printf("%c or%c出现的次数是:%d\n",i+97,i+65,c[i]);

}#include

void f(intx,inty,inta,intb,int *m,int *n);

汇编语言课后习题答案

2.1已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4C B765H,说明下列每条指令执行完后AX寄存器的内容。 (1)mov ax,1200h (2)mov ax,bx (3)mov ax,[1200h] (4)mov ax,[bx] (5)mov ax,[bx+1100h] (6)mov ax,[bx+si] (7)mov ax,[bx][si+1100h] 〔解答〕 (1)AX=1200H (2)AX=0100H (3)AX=4C2AH;偏移地址=bx=0100h (4)AX=3412H;偏移地址=bx=0100h (5)AX=4C2AH;偏移地址=bx+1100h=1200h (6)AX=7856H;偏移地址=bx+si=0100h+0002h=0102h (7)AX=65B7H;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 〔习题2.2〕指出下列指令的错误 (1)mov cx,dl (2)mov ip,ax (3)mov es,1234h (4)mov es,ds (5)mov al,300 (6)mov[sp],ax (7)mov ax,bx+di

(8)mov20h,ah 〔解答〕 (1)两操作数类型不匹配 (2)IP指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为[SI] (7)源操作数应为[BX+DI] (8)立即数不能作目的操作数 〔习题2.5〕已知SS=2200H、SP=00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?mov ax,8057h push ax mov ax,0f79h push ax pop bx pop[bx] 〔解答〕 mov ax,8057h push ax mov ax,0f79h push ax pop bx;bx=0f79h pop[bx];DS:[0f79h]=8057h

C语言题库及答案

C语言题库及答案

姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题吧。加油! 一单项选择题 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串 选项B,C,分别用{}和’’标识字符串 选项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 6.下列C语言用户标识符中合法的是( B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是( C )。 A) %x B) a+b C) a123 D) 123 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 9.C语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。

汇编语言课后习题解答

第1章基础知识 检测点1.1(第9页) (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。 (2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。 (3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。 (4)1GB是1073741824(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。 (5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。

(1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU 最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。

C语言考试题库及答案复习整理

C 语言理论上机考试选择题部分(共200题) 1、下面程序的输出是___D______ #include void main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b 2、在下列选项中,不正确的赋值语句是__D______. A) ++t; B) n1=(n2=(n3=0)); C) k=i=j; D) a=b+c=1; 3、下面合法的C 语言字符常量是______A____. A) '\t' B) "A" C) 65 D) A 4、表达式: 10!=9的值是 ________D____. A) true B) 非零值 C) 0 D) 1 5、C 语言提供的合法的数据类型关键字是_____B____. A) Double B) short C) integer D) Char 6、字符(char)型数据在微机内存中的存储形式是__D__. A) 反码 B) 补码 C) EBCDIC 码 D) ASCII 码 7、C 语言程序的基本单位是_____C______. A) 程序行 B) 语句 C) 函数 D) 字符 8、设 int a=12,则执行完语句

a+=a-=a*a 后,a 的值是____D____ A) 552 B) 264 C) 144 D) -264 9、执行下面程序中的输出语句后,输出结果是____B__. #include void main() {int a; printf("%d\n",(a=3*5,a*4,a+5)); } A) 65 B) 20 C) 15 D) 10 10、下面程序的输出是____B______. #include void main() {int x=023; printf("%d\n",--x); } A) 17 B) 18 C) 23 D) 24 11、下面程序的输出的是_____C____. #include void main() {int x=10,y=3; printf("%d\n",y=x/y); } A) 0 B) 1 C) 3 D) 不确定的值 12、已知字母A 的ASCII 码为十进制的65,下面程序的输出是______A_____. #include void 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) 不确定的值 13、若要求在if 后一对圆括号中表示a 不等于0的关系,则能正确表示这一关系的表达式为____D__. A) a<>0 B) !a C) a=0 D) a

汇编语言 第二版 王爽 完整答案

第1章基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。 (2)1KB的存储器有1024个存储单元。存储单元的编号从0到1023。 (3)1KB的存储器可以存储1024*8个bit,1024个Byte。 (4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。(n^m的意思是n的m次幂) (5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。 第2章寄存器答案 检测点2.1 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H (2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2 (1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。 (2) 有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。

汇编语言课后习题答案___郑晓薇(整理后的)

习题一 1 无符号数: 11010011=211=D3H,01110111=119=77H, 10000011=131=83H, 00101111=47=2FH, 10101010=170=AAH 带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H, 00101111=+47=2FH,10101010= -86=AAH 2 5E8AH,0BE6H,3DEH,4940H 3 00011101+00110101=01010010=5 2H=82 01001001+11101000=00110001=3 1H=49 10111110+01010010=00010000=1 0H=16 10011010+11110001=10001011=8 BH= -117 4 00101001+01010011=01111100+0 0000110=10000010=82H=82 01110011-00100100=01001111-00000110=01001001=49H=49 01100110+00011000=01111110+0 0000110=10000100=84H=84 0000000100110010+01110101=00 00000110100111+00000110 =0000001000000111=0207H=207 5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H 6 无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码 (2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255 (3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码 (4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码 8 (1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H (2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H (3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H (4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD 码0000001001010100,ASCII码323534H 9 (1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0 (2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0 (3) -74+29=11010011B,CF=0, SF=1,ZF=0,OF=0 (4) -92-37=01111111B,CF=1, SF=0,ZF=0,OF=1 10 回车、换行、响铃、ESC键、空格键、@、P、p 习题二 9 最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节) 10 CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP 11 字节单元保存8位数,字单元保存16位数。根据源操作数的属性确定要访问的是字节单元还是字单元。 12 对于字节单元来说,偶地址和奇地址一样;对于字单元而言,最好用偶地址保存,可减少CPU的访存次数。 13 首单元的物理地址=38AE8H,末单元的物理地址 =38AE8H+7FFFH=40AE7H

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

《汇编语言与接口技术》答案习题解答(第三章)

解: mov ah,1 ;只允许输入小写字母 int 21h sub al,20h ;转换为大写字母 mov dl,al mov ah,2 int 21h ;显示 解: mov ax, bufX cmp ax, bufY jge done mov ax, bufY done: mov bufZ, ax 解:

.model small .stack .data bufX dw -7 signX db .code .startup cmp bufX,0 ;test bufX,80h jl next ;jnz next mov signX,0 jmp done next: mov signX,-1 done: .exit 0 end 解: mov dl,’2’ mov ax,bufX cmp ax,bufY je next1 dec dl next1: cmp ax,bufZ je next2 dec dl next2: mov ah,2 int 21h

编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。 ; .model small .stack .data b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数 sum db ;预留结果单元 .code .startup xor si, si ;位移量清零 xor al, al ;取第一个数 mov cx, num ;累加次数 again: add al, b_data[si] ;累加 inc si ;指向下一个数 loop again ;如未完,继续累加 mov sum, al ;完了,存结果 .exit 0 end 解: lucase proc push bx mov bx,offset string cmp al,0 je case0 cmp al,1

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

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课后四、六章的答案,大家抓紧时间复习哦! 一、选择题 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

C语言程序设计程序填空题库及答案

程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include <> main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); a= ①; b= ②; a= ③; printf("a=%d,b=%d\n",a,b); }

【】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include <> double pi(long n) { double s=; long i; for(i=1;i<=n;i++) s=s+ ①; return( ②); } 【】下面的程序的功能是求一维数组中的最小元素。 findmin(int *s,int t,int *k) { int p; for(p=0,*k=p;p

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

汇编语言课后习题答案郑晓薇后的

汇编语言课后习题答案郑 晓薇后的 Modified by JEEP on December 26th, 2020.

习题一1 2 5E8AH,0BE6H,3DEH,4940H 3 00011101+00110101=0101001 0=52H=82 4 5000020A3H,FF94H,00003456H,007FH, FFFFEC00H 6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~ +32767,8000H~7FFFH 7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII 码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码8 (2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H 9 (1) 56+63=01110111B, CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0, SF=0,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=1 10 回车、换行、响铃、ESC键、空格键、@、P、p 习题二 9 最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节) 10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP 11 字节单元保存8位数,字单元保存16位数。根据源操作数的属性确定要访问的是字节单元还是字单元。

汇编语言程序设计第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤第3章汇编语言程序格式 〔习题〕伪指令语句与硬指令语句的本质区别是什么伪指令有什么主要作用 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题〕什么是标识符,汇编程序中标识符怎样组成 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,,@)组成,不能以数字开头。 〔习题〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题〕汇编语句有哪两种,每个语句由哪4个部分组成 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或

⒋调试调试程序应用程序 〔习题〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1) mov byte ptr [bx],1000 (2) mov bx,offset myword[si] (3) cmp mybyte1,mybyte2 (4) mov al,mybyte1+mybyte2 (5) sub al,myword (6) jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题〕OPR1是一个常量,问下列语句中两个AND操作有什么区别 AND AL,OPR1 AND 0feh 〔解答〕

大学C语言考试题库及答案

精选考试类应用文档,如果您需要使用本文档,请点击下载,另外祝您生活愉快,工作顺利,万事如意! 大学C语言考试题库及答案 姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题库吧。加油! 一单项选择题库 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’ ’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串 选项B,C,分别用{}和’’标识字符串 选项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 6.下列C语言用户标识符中合法的是(B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C )。 A)%x B)a+b C)a123 D)123 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 9.C语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。

汇编语言程序设计习题答案

第一章. 习题 1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2将下列二进制数转换为十六进制数和十进制数: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其 运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0; OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H; CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH; CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H; CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的 带符号数或无符号数时,它们所表示的十进制数是什么?

汇编语言课后习题答案 王爽主编

补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s: mov ch,0 mov cl,[bx] jcxz ok ;当cx=0时,CS:IP指向OK inc bx jmp short s ok: mov dx,bx mov ax ,4c00h int 21h code ends end start 检测点9.3 补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s:mov cl,[bx] mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 书P101,执行loop s时,首先要将(cx)减1。 “loop 标号”相当于 dec cx if((cx)≠0) jmp short 标号 检测点10.1 补全程序,实现从内存1000:0000处开始执行指令。 assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, 1000h

C语言函数题库及答案

C语言函数题库及答案 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

第六部分函数 一、单项选择题 1.C语言中的函数返回值的类型是由(D)决定 A.return语句中的表达式B.调用函数的主调函数 C.调用函数时临时D.定义函数时所指定的函数类型 2.下面不正确的描述是(B)。 A.调用函数时,实参可以是表达式 B.调用函数时,实参和形参可以共用内存单元 C.调用函数时,将形参分配内存单元 D.调用函数时,实参与形参的类型必须一致 3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是 (D) A.地址传递B.值传递 C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式 4.下面的函数调用语句中含有(A)个实参 inta,b,c; intsum(intx1,intx2); …… total=sum((a,b),c); A.2B.3C.4 D.5 5.在C语言中(C) A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义和调用均不可以嵌套 C.函数的定义不可以嵌套,但是函数的调用可以嵌套 D.函数的定义和调用均可以嵌套 6.关于C语言中的return语句正确的是(C) A.只能在主函数中出现 B.在每个函数中都必须出现 C.可以在一个函数中出现多次 D.只能在除主函数之外的函数中出现 7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是(D) (floatx[],intn) (float*x,intn) (floatx[10],intn) (floatx,intn) 8.在C语言中,函数的数据类型是指(A) A.函数返回值的数据类型 B.函数形参的数据类型 C.调用该函数时的实参的数据类型 D.任意指定的数据类型 9.已知如下定义的函数: fun1(a) {printf("\n%d",a); } 则该函数的数据类型是(C)

IBM-PC汇编语言程序设计课后习题答案

第五章 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗 JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗 JA STOP SUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可 MOV DL, AL ;显示一个字符的DOS调用 MOV AH, 2 INT 21H JMP BEGIN STOP: RET 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗 JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗

DEC AL ;得到前导字符 MOV DL, AL ;准备显示三个字符 MOV CX, 3 DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用 INT 21H INC DL LOOP DISPLAY STOP: RET 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。 答:程序段如下: DSEG SEGMENT STORE DB 4 DUP () DSEG ENDS ┇ BEGIN: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX AND DX, 0FH ;取AX的低四位 MOV [BX], DL ;低四位存入STORE中 INC BX SHR AX, CL ;右移四次

相关文档
最新文档