汇编语言程序设计教程(第3版 卜艳萍)参考答案
C语言程序设计(第三版)的习题集库答案.doc
C 语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f ”__,&r);scanf(”%d ”,__&h _);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb );}2、输入一个华氏温度,要求输出摄氏温度。
公式为 c=5(F-32)/9输出要求有文字说明,取位2小数。
#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。
#include <stdio.h>main(){int x,y;printf("输入x :");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x,y);} else if (____x<10_______){ /* 1≤x -10 */_____y=2*x-1_______;printf("x=%3d, y=2*x-1=%d\n",x,y);} else{ /* x≥10 */y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。
程序设计技术(3版)习题参考答案
《程序设计技术》(第三版)习题参考答案习题1一、单项选择题DADDD B CCD(注:第7小题无正确选项,正确答案为-12)二、填空题①主② main③ x=x*(x+b)④普通、格式、分隔和转义⑤指定输出数据格式⑥ void main()⑦ "how are you! "三、阅读程序题1. 9,11,9,102. 2,-1,-13. aa bb cc abc4. 2,25. 575 767.5864000,-789.12402367.5864000, -7.89e+00267,86, -789.12,67.5864000, -789.124023, 67.5864000, -789.1240236.758640e+001, -7.89e+002A,65,101,411234567,4553207,12d68765535,177777,ffff,65535COMPUTER, COM.6. a + c = 102a + c = ff + m = 17.950000a + m = 17.650000c + f = 102.300000double = 1746.150019四、程序设计题//xt010401.cpp#include <stdio.h>#define PI 3.1415926void main(){ double r,h;printf("请输入半径r和高h:");scanf("%lf,%lf",&r,&h);printf("圆半径: %lf\n",2*PI*r);printf("圆面积:%lf\n",PI*r*r);printf("圆球表面积:%lf\n",4*PI*r*r);printf("圆球体积:%lf\n",4.0/3*PI*r*r);printf("圆柱体积:%lf\n",PI*r*r*h);}//xt010402.cpp#include <stdio.h>void main(){ int c;printf("Input a character:");c=getchar();printf("%c\t%d\n",c,c);}//xt010403.cpp#include <stdio.h>void main(){ int x,y,h=30,f=90;x=(4*h-f)/2;y=(f-2*h)/2;printf("鸡:%d, 兔:%d\n",x,y);}//xt010404.cpp#include <stdio.h>#include <math.h>void main(){ double a,b,c,s,area;printf("请输入三角形的三条边长(注意三条边长应能够构成三角形):");scanf("%lf,%lf,%lf",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面积是: %lf\n",area);}//xt010405.cpp#include <stdio.h>void main(){ double f,c;printf("请输入华氏温度:");scanf("%lf",&f);c=5.0/9.0*(f-32);printf("与华氏温度%.2lf对应的摄氏温度是:%.2lf\n",f,c);}//xt010406.cpp#include <stdio.h>void main(){ char c1,c2,c3,c4,c5;printf("请输入需加密的字符串(5个字符):");c1=getchar();c2=getchar();c3=getchar();c4=getchar();c5=getchar();printf("加密后的字符串是:");putchar(c1+5);putchar(c2+5);putchar(c3+5);putchar(c4+5);putchar(c5+5);printf("\n");}习题2一、单项选择题CBADC CCAAC二、填空题① a+b==0&&a*b!=0②逻辑与③逻辑或④ continue⑤ (c= getchar ())!='\n'⑥ %c三、阅读程序题答案:答案:该程序所完成功能的函数关系为:()⎪⎩⎪⎨⎧>-----=-----<-----=)0(1)0()0(1xxxxsign答案:答案:答案:答案:四、程序设计题/* xt020401.cpp */#include <stdio.h>void main(){ int num;printf("**** Input num: ****\n");scanf("%d",&num);if(num%3==0&&num%5==0&&num%7==0)printf("** YES ! **\n");elseprintf("** NO ! **\n");}/* xt020402.cpp */#include <stdio.h>void main(){ int h=0;float x,y,x0=2,y0=2,d1,d2,d3,d4;printf("*** input: x,y ***\n");scanf("%f,%f",&x,&y);d1=(x-x0)*(x-x0)+(y-y0)*(y-y0); /*点(x,y)到各中心点的距离*/ d2=(x-x0)*(x-x0)+(y+y0)*(y+y0);d3=(x+x0)*(x+x0)+(y-y0)*(y-y0);d4=(x+x0)*(x+x0)+(y+y0)*(y+y0);if(d1<=1||d2<=1||d3<=1||d4<=1)h=15;printf("x=%f, y=%f\n",x,y);printf("h=%d\n",h);}/* xt020403.cpp */#include <stdio.h>void main(){ int i,j,k,n;for(n=100;n<=999;n++){i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf("%d\n",n);}}/* xt020404.cpp */#include <stdio.h>#include <math.h>#define EPS 1.0e-6void main(){float e=1,t;long int j=1,n=1;do{ j=j*n;t=1.0/j;e=e+t;n++;}while ( fabs(t) >= EPS );printf("e=%f\n",e);}/* xt020405.cpp */#include <stdio.h>void main(){ int num=1;do{ if((num+3)%5==0&&(num-3)%6==0)break;num+=1;}while(1);printf("num=%d\n",num);}/* xt020406.cpp */#include <stdio.h>void main(){ int num;for(num=1;num<=99;num++)if(num*num%10==num||num*num%100==num)printf("%4d,%5d",num,num*num); printf("\n");}/* xt020407.cpp */#include <stdio.h>void main(){ int n,k=1;float s=0;for(n=1;n<=10000;n++){ s=s+1.0/(2.0*n-1)*k;k=-k;}printf("PI=%f\n",4*s);}/* xt020408.cpp */#include <stdio.h>void main(){ int n10,n5,n2,n1;for(n10=1;n10<=9;n10++)for(n5=1;n5<=17;n5++)for(n2=1;n2<=37;n2++){ n1=40-n10-n5-n2;if(n1>=1&&n10*10+n5*5+n2*2+n1==100)printf("n10=%d,n5=%d,n2=%d,n1=%d\n",n10,n5,n2,n1);}}/* xt020409.cpp */#include <stdio.h>void main(){ float sn=100,hn=sn/2;int n=2;while(n<=10){ sn+=2*hn;hn=hn/2;n++;}printf("%f,%f\n",sn,hn);}/* xt020410.cpp */#include <stdio.h>void main(){ int day,x1,x2=1;for(day=9;day>0;day--){ x1=(x2+1)*2;x2=x1;}printf("Total=%d\n",x1);}习题3单项选择题BBCAC DDABB填空题① 9② 0③ 10④ x⑤一致⑥ n/2⑦ sum+a⑧ sum/n三、阅读程序题1. 2 4 62. s=303. 5 9 45 8 424. lanuge5. 8 1 63 5 74 9 26. max=10,row=2,colum=1四、程序设计题//xt030401.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void main(void){int num[10], a;;srand((unsigned)time(NULL));printf("请输入一个2位数,试试您是否能中奖:");scanf("%d",&a);for(int i=0;i<10;i++){ num[i] = (rand()+10)%100;if(a == num[i])printf("猜中一个数 %d 下标是 %d",a,i);}}printf("-------------------------\n");for( i=0; i<10; i++)printf("%d\t ",num[i]);}//xt030402.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void main(void){ int a[5]={23,45,60,67,88},x,i,j,yes=0;for(i=0;i<5;i++)printf("%d,",a[i]);printf("\nwhich number do you want to delete?\n"); scanf("%d",&x);for(i=0;i<5;i++)if(a[i]==x){ yes=1;for(j=i;j<5;j++) a[j]=a[j+1];}if(yes==1) for(i=0;i<4;i++) printf("%d,",a[i]);else printf("The number you want doesn't exist"); }//xt030403.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define SIZE 1000void main(){int x,a[SIZE],size,sum=0;srand((unsigned)time(NULL));while((size=rand()%1000)>200);printf("\nRandomiz list size(<1000):%d",size);printf("\nAuto make a %d size of list:\n",size); for(x=0;x<size;x++){ a[x]=rand()%1000 ;printf("%d\t",a[x]);sum+=arr[x];}printf("\nThe sum of array elements is %d", sum); }//xt030404.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define SIZE 100void main(){int x,a[SIZE],max=0,min=1000,b1,b2;srand((unsigned)time(NULL));printf("\nAuto make a %d size of list:\n",size);for(x=0;x<SIZE;x++){ a[x]=rand()%1000 ;printf("%d\t",a[x]);}for(x=0;x<SIZE;x++){if(a[x]>max) max=a[x],b1=x;if(a[x]<min) min=a[x],b2=x;}printf("\nThe array elements max= %d in %d \n min=%d in %d\n",max,b1,min,b2); }//xt030405.cpp#include <stdio.h>#define SIZE 100#define KIND 5void main(){int x,y,len,total[KIND+1];int a[]={1,1,1,1,2,2,2,3,5,5,5,5,1,1,3,3,3,3,3,2,2,2,5,5,5};len=sizeof(a)/sizeof(a[0]);for(x=0;x<KIND+1;x++){ total[x]=0 ;}for(y=1;y<KIND+1;y++){for(x=0;x<len;x++){if (a[x]==y) total[y]++;}}printf("\nThe list kinded:\n");for(x=0;x<len;x++) printf(" %d ",a[x]);printf("\nThe total result: ");for(x=1;x<KIND+1;x++) printf(" %d-%d, ",x,total[x]);}//xt030406.cpp#define N 26#include <stdio.h>int main(void){ static int a[N+1],b[N+1];int i,j,s,m,p;scanf("%d%d",&s,&m);for (i=1;i<=N;i++) a[i]=i;i=s-1;j=0;p=0;while (p<N){ i++;bh:if (i>N) i-=N;if (a[i]==0) {i++;goto bh;}j++;if (j%m==0){ p++;b[p]=a[i];a[i]=0;j=0; }}for (i=1;i<=N;i++) printf("%3d",b[i]);printf("\n");}//xt030407.cpp#include <stdio.h>void main(){int i,j,s=0,ave,v[3];static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };for(i=0;i<3;i++){ for(j=0;j<5;j++){s=s+a[j][i];v[i]=s/5;s=0;}ave=(v[0]+v[1]+v[2])/3;printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);printf("total ave:%d\n",avel);}//xt030408.cpp#include <stdio.h>void main(){int i,j,a[10][10], b[]={1,2,3,4,5,6,7,8,9,10};for(i=0;i<10;i++) a[0][i]=b[i];for(i=1;i<10;i++)for(j=0;j<10;j++)if(i>j) a[i][j]=a[j][i];else a[i][j]=a[i-1][j-1];for(i=0;i<10;i++){ for(j=0;j<10;j++)printf("%d\t",a[i][j]);printf("\n");}}//xt030409.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define SIZE 5000#define N 7void main(){int x,y,a[N]={0,0,0,0,0,0,0},s;srand((unsigned)time(NULL));x=0;while(x<SIZE){ s=rand()%6+1;if(s>0&&s<7){ a[s]++;x++;}}printf("\nRandomiz 1-6 list \n");for(x=1;x<N;x++){s=a[x]*0.07;for(y=0;y<s;y++)printf("%d",x);printf("\t%d\t%2.1f%%\n",a[x],(float)a[x]*100/SIZE);}}//xt030410.cpp#include <stdio.h>#define N 20int main(){int x,s,tag;char a[N];printf("Please input numbers and it's length less then %d:",N-1); s=1;while(s<N){ scanf("%c",&a[s]);if(a[s]==10)break;s++;}printf("\nThe numbers is :\n");for(x=1;x<s;x++){printf("%c",a[x]);}tag=0;for(x=1;x<s/2;x++){if(a[x]!=a[s-x]){ tag=1;break;}}if(tag==0)printf("\nThe number is palindrome!"); else printf("\nThe number isn't palindrome!"); }习题4一、单项选择题ABACA BCBDD二、填空题①主② main函数③ main函数④个数⑤类型⑥顺序⑦函数类型⑧ float(float x,int n)⑨ f(x,n)⑩ x*f(x,n-1)三、阅读程序题1. x=5,y=252. y=170.03. s1=3.14,s2=5.144. 50025. 5,36. 3.00,1.00,0.25四、程序设计题//xt040401.cpp#include <stdio.h>void main( ){ void dis(int n);int n;scanf("%d",&n);dis(n);}void dis(int n){ int k0,k,sum,i;k0=1;do{ k=k0;sum=0;for(i=1;i<=n;i++){ sum=sum+k;k=k+2;}if(sum==n*n*n)break;elsek0=k0+2;}while(1);for(i=1;i<=n;i++){ printf("%5d",k0);k0=k0+2;}}//xt040402.cpp#include <stdio.h>void main( ){ float h(int n,float x);int n;float x;scanf("%d,%f",&n,&x);printf("h(%d,%f)=%f",n,x,h(n,x));}float h(int n,float x){ if(n==0)return 1;else if(n==1)return(2*x);elsereturn(2*x*h(n-1,x)-2*(n-1)*h(n-2,x)); }//xt040403.cpp#include <stdio.h>void main(){ int f(int n);int i;for(i=2;i<=1000;i++)if(f(i))printf("%6d",i);}int f(int n){ if(n==n*n%10||n==n*n%100||n==n*n%1000)return 1;elsereturn 0;}//xt040404.cpp#include <stdio.h>void main( ){ long fun(int a,int n);int k,n;scanf("%d,%d",&k,&n);printf("%ld\n",fun(k,n));}long fun(int a, int n){ int j;long s=0,t=0;for(j=1;j<=n;j++){ t=t*10+a;s=s+t;}return s;}//xt040405.cpp#include <math.h>#include <stdio.h>void main(){ int num,middle1,middle2;int detect(int d);printf("Please input a positive even number(>=6):");scanf("%d",&num);for(middle1=2;middle1<=num/2;middle1+=1)if(detect(middle1)){ middle2=num-middle1;if(detect(middle2)){ printf("%d=%d+%d\n",num,middle1,middle2);break;}}}int detect(int d){ int i;for(i=2;i<=sqrt(d*1.0);i++) if(d%i==0)return(0);return 1;}//xt040406.cpp#include <stdio.h>void main(){ float f(float x,int n);float x,an;int n;scanf("%f,%d",&x,&n);an=f(x,n);printf("an=%f\n",an);}float f(float x,int n){ if(n==0)return 1;elsereturn x/n*f(x,n-1);}//xt040407.cpp#include <stdio.h>void main(){ float f(float x,int n);float x,fn;int n;scanf("%f,%d",&x,&n);fn=f(x,n);printf("an=%f\n",fn);}float f(float x,int n){ if(n==0)return 1;else if(n>0)return x*f(x,n-1);elsereturn f(x,n+1)/x;}//xt040408.cpp#include <stdio.h>void main( ){ void f(int n);int n;scanf("%d",&n);while(n<=0)scanf("%d",&n);f(n);}void f(int n){ if(n/10==0)putchar(n%10+'0');else{ putchar(n%10+'0');f(n/10);}}//xt040409.cpp#include <stdio.h>void main( ){ void f(int n);int n;scanf("%d",&n);while(n<=0)scanf("%d",&n);f(n);}void f(int n){ if(n/10)f(n/10);putchar(n%10+'0');}//xt040410.cpp#include <stdio.h>void main(){ int f(int n);int n;for(n=2;n<=1000;n++)if(f(n))printf("%d is a 完数\n",n); }int f(int n){ int i,s=0;for(i=1;i<n;i++)if(n%i==0)s=s+i;if(s==n)return 1;elsereturn 0;}习题5一、单项选择题AACCA DDACB二、填空题①“char *func1()”定义一个返回字符指针值的函数,“char(*func2)()”定义一个指向函数的指针②一个返回值为单精度类型指针的函数名;③ (*p)(a,b,c)④ findmin⑤ (*f)(x,y,z);三、阅读程序题1.1202.5,4,33.44.155.1126.49111131315//xt050401.cpp#include "stdio.h"void main(){ void f(int,int,int);int a,b,c;void (*p)(int,int,int);scanf("%d%d%d",&a,&b,&c);p=f;(*p)(a,b,c);}void f(int x,int y,int z){ int t;if(x<y)t=x,x=y,y=t;if(y<z)t=z,z=y,y=t;if(x<y)t=x,x=y,y=t;printf("%5d%5d%5d\n",x,y,z);}//xt050402.cpp#include <stdio.h>int max(int a,int b){ if(a>b)return a;elsereturn b;}void main(){ int max(int a,int b);int(*pmax)(int,int);int x,y,z;pmax=max;printf("input two numbers:\n");scanf("%d%d",&x,&y);z=(*pmax)(x,y);printf("maxmum=%d",z);}//xt050403.cpp#include "stdio.h"void gcd(int x,int y){ int temp;while(y!=0){ temp=x%y;x=y;y=temp;}printf("The greatest common divisor is:%d\n",x); }void lcm(int x,int y){ int temp,m,n;m=x;n=y;while(x!=0){ temp=y%x;y=x;x=temp;}printf("The lowest common multiple is:%d\n",m*n/y); }void main(){ int a,b;void (*p)(int,int);printf("Please input a and b:");scanf("%d%d",&a,&b);if(a>b)p=gcd;elsep=lcm;(*p)(a,b);}//xt050404.cpp#include "stdio.h"void main(){ int x,y;int sum(int,int),diff(int,int),product(int,int);void mma(int x,int y,int s(int,int));printf("Please input x,y:\n");scanf("%d%d",&x,&y);printf("The sum of x and y is:");mma(x,y,sum);printf("The difference of xa nd y is:");mma(x,y,diff);printf("The product of x and y is:");mma(x,y,product);}int sum(int x,int y){return x+y;}int diff(int x,int y){ return x-y;}int product(int x,int y){return x*y;}void mma(int a,int b,int s(int,int)){ int w;w=s(a,b);printf("%d\n",w);}//xt050405.cpp#include <stdio.h>double func1(int x),func2(int y);void main(){ double (*fptr)(int); /*定义指向函数的指针变量fptr*/ int n;printf("input a number:");scanf("%d",&n);if(n>1){ if(n%2==0)fptr=func1;/*n为偶数,指针变量ptr指向函数func1()*/ elsefptr=func2; /*n为奇数,指针变量ptr指向函数func2()*/ printf("value=%9.4f\n",(*fptr)(n));}elseprintf("error!\n");}double func1(int x){ int k;double value;value=1.0;for(k=2;k<=x;k=k+2)value=value+1/(double)k;return value;}double func2(int y){ int k;double value;value=1.0;for(k=3;k<=y;k=k+2)value=value+1/(double)k;return value;}//xt050406.cpp#include "stdio.h"#include "math.h"void main(){ int n,yinzi(int),(*f)(int);f=yinzi;printf("input a number n:");scanf("%d",&n);if((*f)(n)==2)printf("\n%d is a prime number.",n);elseprintf("\n%d is not a prime number.",n);}int yinzi(int x){ int i,k=0,q=(int)sqrt(x);for(i=1;i<=q;i++)if(x%i==0){ k+=2;printf("%5d%5d",i,x/i);}return k;}//xt050407.cpp#include <stdio.h>#include <math.h>double f1(double x){return x*x*log(x);}double f2(double x){return x*sin(x);}double f3(double x){return x/exp(x);}double collect(double (*p)(double x),double a,double b,double n) { int i;double h,area;h=(b-a)/n;area=((*p)(a)+(*p)(b))/2.0;for(i=1;i<n;i++)area+=(*p)(a+i*h);return(area*h);}void main(){ double y1,y2,y3;y1=collect(f1,1.0,2.0,1000);y2=collect(f2,0.0,3.0,500);y3=collect(f3,0.0,1.0,10000);printf("y1=%6.2f y2=%6.2f y3=%6.2f\n",y1,y2,y3);}//xt050408.cpp#include "stdio.h"#include "math.h"int root(double *x,int m,double eps,double (*f)(double)) { double x0;do{ x0=*x;*x=(*f)(x0);m=m-1;}while((m!=0)&&(fabs(*x-x0)>=eps));if(m==0) return (0);return (1);}double f1(double x){return(1.0+atan(x));}double f2(double x){return(0.5*cos(x));}double f3(double x){return((6.0+3*x-x*x)/4);/* x=(6+3*x-x*x)/4*/}void main(){ double x,(*p)(double);x=1.0;p=f1;if(root(&x,50,0.00001,p))printf("x1=%f\n",x);p=f2;if(root(&x,50,0.00001,p))printf("x1=%f\n",x);p=f3;if(root(&x,50,0.00001,p))printf("x1=%f\n",x);}//xt050409.cpp#include "stdio.h"int * f(int p[],int q[],int m){ int i;for(i=0;i<m;i++)q[i]=p[i]*p[i];return q;}void main(){ int a[6]={1,2,3,4,5,6},i,*k;int b[6];k=f(a,b,6);for(i=0;i<6;i++)printf("%5d",k[i]);}//xt050410.cpp#include <stdio.h>#include <stdlib.h>void main(){ int wanshu(int x);int *ptr;ptr=(int *)malloc(sizeof(int));if(ptr==NULL){ printf("Failed to create a new object.");exit(0);}scanf("%d",ptr);if(wanshu(*ptr))printf("%d is a 完数:",*ptr);elseprintf("%d is not a 完数:",*ptr);free(ptr);}int wanshu(int x){ int i=1,sum=0;while(i<x){ if(x%i==0)sum+=i;i++;}if(sum==x)return 1;elsereturn 0;}习题6一、单项选择题BDACD CACAD二、填空题①是其值可以是二级地址(指针)②是其值可以是多级地址址(指针)③沿着数组所占据的存储区域向前和向后移动多个或者是一个数组元素④可以在程序的运行过程中根据需要创建的数组⑤int *v, int *key⑥a, &key⑦add-a⑧&n三、阅读程序题1.112.26893. 3 5 7 9 114. 1 4 7 0 85.13 12 0 0 03 3 3 3 36 8 11 3 38 9 3 3 33 3 3 3 36. 1 1 1 1 114 13 1 1 11 1 1 1 14 6 9 1 16 7 1 1 1四、程序设计题//xt060401.cpp#include <stdio.h>void main(){ int yh[11],row,col,i;*(yh+1)=1;for(i=0;i<40-2;i++)printf(" ");printf("%4d\n",*(yh+1));for(row=2;row<=10;row++){ *(yh+row)=1; /*每行的最后一个元素值为1*/ for(col=row-1;col>=2;col--) /*生成一行*/*(yh+col)=*(yh+col)+*(yh+col-1);for(i=0;i<40-2*row;i++) /*输出合适的空格*/printf(" ");for(col=1;col<=row;col++) /*输出一行*/printf("%4d",*(yh+col));printf("\n");}}//xt060402.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void main(){ int a[10][5],b[10],i,j;srand(time(NULL));for(i=0;i<10;i++)for(j=0;j<5;j++)*(a[i]+j)=rand()%100;for(i=0;i<10;i++){ *(b+i)=a[i][0];for(j=0;j<5;j++)if(*(b+i)<*(*(a+i)+j))*(b+i)=*(*(a+i)+j);}for(i=0;i<10;i++){ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\t%4d\n",b[i]);}}//xt060403.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>int delmem(int *v,int n,int del);void main(){ int *a,i,n,del;srand(time(NULL));printf("请输入处理的数组长度: ");scanf("%d",&n);a=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)*(a+i)=rand()%100;printf("删除操作前的数据如下所示: \n");for(i=0;i<n;i++)printf("%4d",*(a+i));printf("\n请输入欲删除的元素值: ");scanf("%d",&del);n=delmem(a,n,del);printf("删除操作后的数据如下所示: \n");for(i=0;i<n;i++)printf("%4d",*(a+i));printf("\n");}int delmem(int *v,int n,int del){ int i,j;for(i=0;i<n;i++)if(*(v+i)==del){ for(j=i;j<n-2;j++)*(v+j)=*(v+j+1);n--,i--;}return n;}//xt060404.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 15void main(){ int score[N][4]={0},i,j,x;srand(time(NULL));for(i=0;i<N;i++)for(j=0;j<3;j++){ x=rand()%100;if(x<50)j--;elsescore[i][j]=x;}for(i=0;i<N;i++)for(j=0;j<3;j++)*(*(score+i)+3)+=*(*(score+i)+j);printf("score1\tsocre2\tsocre3\tsum\n");for(i=0;i<N;i++){ for(j=0;j<4;j++)printf("%d\t",*(*(score+i)+j));printf("\n");}}//xt060405.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 15void main(){ int score[N][4]={0},i,j,x;int t[4];srand(time(NULL));for(i=0;i<N;i++) //生成模拟成绩数据for(j=0;j<3;j++){ x=rand()%100;if(x<50)j--;elsescore[i][j]=x;}for(i=0;i<N;i++) //统计每个学生的总分for(j=0;j<3;j++)*(*(score+i)+3)+=*(*(score+i)+j);for(i=0;i<N-1;i++){ x=i;for(j=i+1;j<N;j++)if(score[j][3]>score[x][3])x=j;if(x!=i)for(j=0;j<4;j++){ *(t+j)=*(*(score+x)+j);*(*(score+x)+j)=*(*(score+i)+j);*(*(score+i)+j)=*(t+j);}}printf("score1\tsocre2\tsocre3\tsum\n");for(i=0;i<N;i++){ for(j=0;j<4;j++)printf("%d\t",*(*(score+i)+j));printf("\n");}}//xt060406.cpp#include <stdio.h>#include <stdlib.h>void main(){ int *ArrayCat(int *s,int slen,int *t,int tlen);int a[]={1,3,5,7,9},b[]={2,4,6,8,10},*p=NULL,i;p=ArrayCat(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int));for(i=0;i<(sizeof(a)+sizeof(b))/sizeof(int);i++)printf("%4d",p[i]);printf("\n");}int *ArrayCat(int *s,int slen,int *t,int tlen) { int *st,i;st=(int *)malloc(sizeof(int)*(slen+tlen));for(i=0;i<slen;i++)st[i]=*(s+i);for(;i<slen+tlen;i++)st[i]=*(t+i-slen);return st;}//xt060407.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void main(){ void reverse(int *v,int n);int *a,n,i;srand(time(NULL));printf("请输入数组的长度:");scanf("%d",&n);a=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)a[i]=rand()%100;for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");reverse(a,n);for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}void reverse(int *v,int n){ int i,j,t;for(i=0,j=n-1;i<j;i++,j--)t=*(v+i),*(v+i)=*(v+j),*(v+j)=t;}//xt060408.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>int *ArrayCopy(int *source,int n);void main(){ int *a,*b=NULL,n,i;srand(time(NULL));printf("请输入被拷贝的数组长度:");scanf("%d",&n);a=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)*(a+i)=rand()%100;b=ArrayCopy(a,n);for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}int *ArrayCopy(int *source,int n){ int i,*target;target=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)target[i]=source[i];return target;}//xt060409.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void sort(int v[],int n);void reverse(int v[],int n);void main(){ int *data,i,n;srand(time(NULL));printf("请输入需要处理的数据个数:");scanf("%d",&n);data=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)*(data+i)=rand()%100;printf("排序前的数据如下所示:\n");for(i=0;i<n;i++)printf("%4d",data[i]);sort(data,n);reverse(data,n);printf("\n排序后的数据如下所示: \n");for(i=0;i<n;i++)printf("%4d",data[i]);printf("\n");}void sort(int v[],int n){ int i,j,k,temp;for (i=0; i<n; i++){ k=i;for(j=i+1;j<n;j++)if(v[j]<v[k])k=j;if(k!=i)temp=v[i],v[i]=v[k],v[k]=temp;}}void reverse(int v[],int n){ int i,j;for(i=0,j=n-1;i<j;i++,j--)v[i]=v[i]+v[j],v[j]=v[i]-v[j],v[i]=v[i]-v[j]; }//xt060410.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>void sort(int v[],int n);void reverse(int v[],int n);void main(){ int m,n,i,j,**row;srand(time(NULL));printf("请输入二维数组的行数:");scanf("%d",&m);printf("请输入二维数组的列数:");scanf("%d",&n);row=(int **)malloc(sizeof(int*)*m);for(i=0;i<m;i++)row[i]=(int *)malloc(sizeof(int)*n);for(i=0;i<m;i++)for(j=0;j<n;j++)row[i][j]=rand()%100;for(i=0;i<m;i++)if(i%2==0)sort(row[i],n);else{ sort(row[i],n);reverse(row[i],n);}for(i=0;i<m;i++){ for(j=0;j<n;j++)printf("%4d",row[i][j]);printf("\n");}}void sort(int v[],int n){ int i,j,k,temp;for (i=0; i<n; i++){ k=i;for(j=i+1;j<n;j++)if(v[j]<v[k])k=j;if(k!=i)temp=v[i],v[i]=v[k],v[k]=temp;}}void reverse(int v[],int n){ int i,j;for(i=0,j=n-1;i<j;i++,j--)v[i]=v[i]+v[j],v[j]=v[i]-v[j],v[i]=v[i]-v[j]; }习题7一、单项选择题AABCB C BDD二、填空题① \0'②字符串③字符④ 11⑤ 12⑥字符型⑦连续⑧ j=i⑨ continue⑩ i++三、阅读程序题1. Hello WexloWexloexloWorld2. 123 abcd xyabcdxyzyz3. egnnegnahc4. DBCDegc5. 1234566. SWI*CH#*Wa四、程序设计题。
IBM-PC汇编语言程序设计第三章习题详解答案
IBM-PC汇编语言程序设计第三章习题详解答案IBM-PC汇编语言程序设计第三章习题详解答案第三章答案1-20=================================1.已知(BX)=637DH,(SI)=2A9BH,位移量D=7237H,确定在以下各种寻址方式下的有效地址是什么(1)立即寻址没有(2)直接寻址 7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址 637DH(5)使用BX的寄存器相对寻址 0D5F0H(6)基址变址寻址 8E18H(7)相对基址变址 004FH2.试根据下列要求,写出相应的汇编指令.(1)ADD DX,BX(2)ADD AL,[BX][SI](3)ADD [BX][0B2H], CX(4)MOV AX,2A59HADD [0524H] ,AX(5)ADD AL ,0B5H3.写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式。
(1)寄存器间接寻址MOV BX,OFFSET [BLOCK][0AH] 或 LEA BX,BLOCK+0AHMOV DX ,[BX] MOV DX ,[BX](2)寄存器相对寻址MOV SI,OAH 或 LEA BX,BLOCKMOV DX,[BLOCK][SI] MOV DX,[BX+0AH](3)基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,[BX][SI]4.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H ,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202) =B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容.(1)MOV AX,1200H 1200H(2)MOV AX,BX 0100H(3)MOV AX,[1200] 4C2AH 注意,是字单元!(4)MOV AX,[BX] 3412H 注意,是字单元!(5)MOV 1100[BX] 4C2AH(6)MOV AX,[BX][SI] 7856H(7)MOV AX,1100[BX][SI] 65B7H5.给定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH,(224A0)=0600H(1)段内直接寻址 7CD9H(2)使用BX及寄存器间接寻址方式的段内间接寻址 1200H(3)使用BX及寄存器相对寻址方式的段内间接寻址 6319H6.设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H单元的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来.MOV BX,2000HLES DI ,[BX]MOV AX, ES:DI7.在0024单元内有一条二字节指令JMP SHORT OBJ,如其中位移量为(1)27H,(2)6BH,(3)0C6H,试问转向地址OBJ的值分别为多少?(1)064DH (2)0691H (3)05E0H8.假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(B P)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?(1)MOV AX,0ABH 立即数寻址无物理地址(2)MOV AX,BX 寄存器寻址无物理地址(3)MOV AX,[100] 直接寻址 20100H(4)MOV AX,VAL 直接寻址 20050H(5) MOV AX,[BX] 寄存器间接寻址 20100H(6)MOV AX,ES:[BX] 直接寻址 21100H(7)MOV AX,[BP] 寄存器间接寻址 20010H(8)MOV AX,[SI] 寄存器间接寻址 200A0H(9)MOV AX,[BX+10] 寄存器相对寻址 20110H(10)MOV AX,VAL[BX] 寄存器相对寻址 20150H(11)MOV AX,[BX][SI] 基址变址寻址 201A0H(12)MOV AX,VAL[BX][SI] 相对基相变址寻址 201F0H9.在ARRAY数组中存储了七个字数据,紧接着是名为ZERO的字单元表示如下:ARRAY DW 23,36,2,100,32000,54,0ZERO DW ?(1)如果BX包含数组ARRAY的初始地址,请编写将数据0传送给ZERO单元。
汇编语言程序设计教案及习题答案
汇编语言程序设计教案及习题答案教案章节:一、汇编语言简介1. 汇编语言的概念2. 汇编语言的特点3. 汇编语言的应用领域二、汇编语言的基本语法1. 数据类型及表示2. 指令格式及分类3. 寄存器使用规则三、汇编语言程序设计步骤1. 分析需求,确定程序功能2. 选择合适的汇编语言及开发环境3. 编写汇编代码,调试程序4. 优化程序性能四、常用汇编指令及功能1. 数据传输指令2. 算术运算指令3. 逻辑运算指令4. 控制流指令5. 字符串操作指令6. 中断指令五、汇编语言与C语言的接口编程1. extern声明汇编函数2. 调用汇编函数的方法3. 汇编函数与C函数的数据交换4. 实例分析:汇编语言实现字符串排序习题答案:一、汇编语言简介1. 汇编语言是一种低级编程语言,用于编写计算机程序。
(正确)2. 汇编语言可以直接操作计算机硬件资源。
(正确)3. 汇编语言程序可读性差,不易维护。
(正确)二、汇编语言的基本语法1. 数据类型及表示a. 字节:8位(正确)b. 字:16位(正确)c. 双字:32位(正确)d. 四字:64位(正确)2. 指令格式及分类a. 操作码(正确)b. 操作数(正确)c. 寄存器(正确)d. 标志位(正确)3. 寄存器使用规则a. 通用寄存器:AX, BX, CX, DX(正确)b. 段寄存器:CS, DS, ES, SS(正确)c. 指令指针:IP(正确)d. 状态寄存器:FLAGS(正确)三、汇编语言程序设计步骤1. 分析需求,确定程序功能(正确)2. 选择合适的汇编语言及开发环境(正确)3. 编写汇编代码,调试程序(正确)4. 优化程序性能(正确)四、常用汇编指令及功能1. 数据传输指令a. MOV:数据传送(正确)b. PUSH:压栈(正确)c. POP:出栈(正确)d. XCHG:交换数据(正确)2. 算术运算指令a. ADD:加法(正确)b. SUB:减法(正确)c. MUL:无符号乘法(正确)d. IMUL:有符号乘法(正确)3. 逻辑运算指令a. AND:逻辑与(正确)b. OR:逻辑或(正确)c. XOR:逻辑异或(正确)d. NOT:逻辑非(正确)4. 控制流指令a. JMP:无条件跳转(正确)b. JE:相等跳转(正确)c. JNE:不相等跳转(正确)5. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)6. 中断指令a. INT:软件中断(正确)b. INTO:中断向量表(正确)五、汇编语言与C语言的接口编程1. extern声明汇编函数(正确)2. 调用汇编函数的方法(正确)3. 汇编函数与C函数的数据交换(正确)4. 实例分析:汇编语言实现字符串排序(正确)汇编语言程序设计教案及习题答案教案章节:六、汇编语言的输入与输出1. 输入输出指令2. 字符串操作指令3. 实例分析:编写一个简单的输入输出程序七、汇编语言的杂项指令1. 杂项指令的概念2. 常用杂项指令及其功能3. 实例分析:杂项指令的应用八、汇编语言的子程序调用1. 子程序调用的概念2. 子程序的定义与调用3. 子程序的返回4. 实例分析:子程序在汇编语言中的应用九、汇编语言的程序举例1. 实例一:计算两个数的和2. 实例二:字符串的复制3. 实例三:数制的转换4. 实例四:文件的读写十、汇编语言程序的调试与优化1. 调试工具的使用2. 调试方法与技巧3. 程序优化的概念4. 程序优化的方法与技巧习题答案:六、汇编语言的输入与输出1. 输入输出指令a. IN:输入指令(正确)b. OUT:输出指令(正确)c. INPUT:输入函数(正确)d. PRINT:输出函数(正确)2. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)3. 实例分析:编写一个简单的输入输出程序(正确)七、汇编语言的杂项指令1. 杂项指令的概念(正确)2. 常用杂项指令及其功能a. NOP:无操作(正确)b. HLT:停止CPU运行(正确)c. CMC:翻转标志位(正确)d. ARPL:寄存器之间交换(正确)3. 实例分析:杂项指令的应用(正确)八、汇编语言的子程序调用1. 子程序调用的概念(正确)2. 子程序的定义与调用a. 定义子程序(正确)b. 调用子程序(正确)3. 子程序的返回(正确)4. 实例分析:子程序在汇编语言中的应用(正确)九、汇编语言的程序举例1. 实例一:计算两个数的和(正确)2. 实例二:字符串的复制(正确)3. 实例三:数制的转换(正确)4. 实例四:文件的读写(正确)十、汇编语言程序的调试与优化1. 调试工具的使用(正确)2. 调试方法与技巧(正确)3. 程序优化的概念(正确)4. 程序优化的方法与技巧(正确)汇编语言程序设计教案及习题答案教案章节:十一、汇编语言与操作系统1. 操作系统的概念2. 汇编语言在操作系统中的应用3. 实例分析:汇编语言编写简单的操作系统十二、汇编语言与设备驱动程序1. 设备驱动程序的概念2. 汇编语言在设备驱动程序开发中的应用3. 实例分析:汇编语言编写简单的设备驱动程序十三、汇编语言与嵌入式系统1. 嵌入式系统的概念2. 汇编语言在嵌入式系统中的应用3. 实例分析:汇编语言编写简单的嵌入式系统十四、汇编语言与汇编器的使用1. 汇编器的概念2. 汇编器的使用方法3. 实例分析:使用汇编器编写和调试汇编程序十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势2. 汇编语言在未来的应用领域3. 汇编语言学习的方法与建议习题答案:十一、汇编语言与操作系统1. 操作系统的概念(正确)2. 汇编语言在操作系统中的应用(正确)3. 实例分析:汇编语言编写简单的操作系统(正确)十二、汇编语言与设备驱动程序1. 设备驱动程序的概念(正确)2. 汇编语言在设备驱动程序开发中的应用(正确)3. 实例分析:汇编语言编写简单的设备驱动程序(正确)十三、汇编语言与嵌入式系统1. 嵌入式系统的概念(正确)2. 汇编语言在嵌入式系统中的应用(正确)3. 实例分析:汇编语言编写简单的嵌入式系统(正确)十四、汇编语言与汇编器的使用1. 汇编器的概念(正确)2. 汇编器的使用方法(正确)3. 实例分析:使用汇编器编写和调试汇编程序(正确)十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势(正确)2. 汇编语言在未来的应用领域(正确)3. 汇编语言学习的方法与建议(正确)重点和难点解析本文主要介绍了汇编语言程序设计的基础知识和应用领域,通过详细的章节安排,从汇编语言的基本概念、语法规则、程序设计步骤、常用指令及其功能、输入输出操作、杂项指令、子程序调用、程序举例、调试与优化等方面进行了深入讲解。
汇编语言 考试程序参考答案
1、分支程序设计(1)设变量单元A、B、C存放有3个数,若三个数都不为0,则求三个数的和,存放在D 中;若有一个为0,则将其余两个也清零。
data segmentA DB 5B DB 2C DB 0D DB ?data endsstack segmentdb 100 dup(?)stack ends推荐下IT学长的淘宝店530213code segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ax,stackmov ss,axcmp A,0jz DEcmp B,0jz DEcmp C,0jz DEmov cl,Aadd cl,Badd cl,Cmov D,cljmp stopDE:mov A,0mov B,0mov C,0stop:mov ah,4CHint 21hcode ends推荐下IT学长的淘宝店530213end start(2)已知一个班的成绩放在偏移地址为DATAB开始的顺序单元中(这里为了方便我只写20个单元数据),统计大于或等于90分、80~89分、70~79分、60~69分、小于60分的人数,相应的放在DATA90、DATA80、DA TA70、DA TA60、DATAU数据单元中data SEGMENTARRAY DB 80,72,45,64,77,68,91,85,73,79 DB 63,65,78,94,32,88,61,70,64,81 DA TA90 DB 0DA TA80 DB 0DA TA70 DB 0DA TA60 DB 0DA TAU DB 0data ends推荐下IT学长的淘宝店530213stack segmentdb 100 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ax,stackmov ss,axlea bx,ARRAYmov cx,20LOP:mov al,[bx]cmp al,90jb L80inc DATA90jmp LL80:cmp al,80jb L70inc DATA80jmp LL70:cmp al,70jb L60inc DATA70jmp LL60:cmp al,60jb LNinc DATA60jmp LLN:inc DATAUloop LOPcode endsend start推荐下IT学长的淘宝店5302132、子程序设计求N的阶乘;当结果超过255时,乘法请使用字和字相乘,而本程序只是实现字节和字节相乘,所以如果结果大于255,请相应调整乘法指令data segmentN db 5 ;存放N的值RES dw ? ;存放N阶乘的结果data endsstack segmentdb 100 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ax,stackmov ss,axmov si,offset RES ;将存放结果的地址赋给simov ah,0mov al,N ;将N的值赋给axcall FAC ;调用子程序FAC求N阶乘mov [si],ax ;将N阶乘的最后结果放到RES,查看vars中的RES值验证结果mov AH,4CHint 21H推荐下IT学长的淘宝店530213FAC PROCcmp ax,0jnz I1 ;结果不是0,递归mov ax,1 ;递归终止条件,令0!=1jmp stop ;跳出递归I1:push axcall FAC ;I1是递归,每次条件弱化I2:pop cxmul cl ;I2是递归返回后的处理stop:retFAC ENDPcode endsend start3、循环程序设计(从小到大冒泡排序)data segmentARRAY DW 20H,46H,5DH,13H,78H,3FH COUNT EQU $-ARRAYN EQU COUNT/2data ends推荐下IT学长的淘宝店530213code segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov cx,N-1lop1:mov di,cxmov bx,0mov dl,0lop2:mov ax,ARRAY[BX]cmp ax,ARRAY[BX+2]jle lop3xchg ax,ARRAY[BX+2]mov ARRAY[BX],axmov dl,01hlop3:add bx,2loop lop2mov cx,didec cxjz stopand dl,dljnz lop1stop:mov ah,4chint 21hcode endsend start4、输入输出(1)输出‘Hello World’data segmentHW db 'Hello World!','$'data endsstack segmentdb 100 dup(?)stack ends推荐下IT学长的淘宝店530213code segmentassume cs:code,ds:data,ss:stack start:mov ax,datamov ds,axmov ax,stackmov ss,axmov dx,offset HWmov ah,09hint 21hmov ah,4chint 21hcode endsend start(2)回文data segmentHW db 'Hello World!','$'N EQU $-HW-1data endsstack segmentdb 100 dup(?)stack ends推荐下IT学长的淘宝店530213code segmentassume cs:code,ds:data,ss:stack start:mov ax,datamov ds,axmov ax,stackmov ss,axmov bx,0mov di,N-1mov cx,Nshr cx,1lop:mov al,HW[bx]xchg al,HW[di]mov HW[bx],alinc bxdec diloop lopmov dx,offset HWmov ah,09hint 21hmov ah,4chint 21hcode endsend start5、试编写一个汇编语言程序求出首地址ARRAY的字节数组中最小的偶数,并把它存放在AX寄存器中。
(完整版)VB程序设计教程(第3版)课后实验完整答案
A.1Private Sub Command1_Click()Label3 = Text1End SubA.2Private Sub Form_Load()Timer1.Interval = 0End SubPrivate Sub Command1_Click() '自动Timer1.Interval = 200End SubPrivate Sub Command2_Click() '手动Timer1.Interval = 0Call MyMoveEnd SubPrivate Sub Timer1_Timer()Call MyMoveEnd SubSub MyMove()Label1.Move Label1.Left - 50If Label1.Left < 0 Then Label1.Left = Form1.Width End SubA.3Private Sub Form_Click()Text1 = Val(Text1) + 1End SubPrivate Sub Form_Load()Text1 = 0End SubA.4Private Sub Form_Click()Caption = "单击窗体,改变图片"Picture = LoadPicture(App.Path + "\n_015.bmp")Print "欢迎使用VB"End SubPrivate Sub Form_DblClick()ClsCaption = "双击窗体,卸去图片"Picture = LoadPicture("") 'End SubPrivate Sub Form_Load()Caption = "装入窗体"Picture = LoadPicture(App.Path + "\n_016.bmp")Print "装入图"End SubPrivate Sub Form_Resize() ' 该事件的作用窗体始终与图一样大'Caption = "窗体大小不变"'Form1.Width = 260 * 16 ' 260 是Tongji-2.bmp 图的宽度,象素单位'Form1.Height = 260 * 16 + 200 ' 260 是图的高度,象素单位,200 是窗体的标题栏高度End SubA.5Sub Command1_Click()Text1.FontName = "隶书"Text1.FontSize = 25End SubSub Command2_Click()Text2.Text = Text1.SelTextText2.FontName = Text1.FontNameText2.FontSize = Text1.FontSizeEnd SubB.1Private Sub Command1_Click()Text2 = Format(5 / 9 * (Val(Text1) - 32), "0.00")End SubPrivate Sub Command2_Click()Text1 = Format(9 / 5 * Val(Text2) + 32, "0.00")End Sub或Private Sub Command1_Click()Dim f!, c! ' 声明两个变量f = Val(Text1)c = 5 / 9 * (f - 32)Text2 = Format(c, "0.00") ' 保留两位小数End SubPrivate Sub Command2_Click()Dim ff!, cc! ' 声明两个变量cc = Val(Text2)ff = 9 / 5 * cc + 32Text1 = Format(ff, "0.00") ' 保留两位小数End SubB.2Label2 = Format(Val(Text1) * Val(Text1) * 3.14, "0.00") End SubPrivate Sub Command2_Click()Label3 = Format(Val(Text1) * 3.14 * 2, "0.00")End SubPrivate Sub Text1_LostFocus()If Not IsNumeric(Text1.Text) ThenMsgBox "输入有非数字字符,请重新输入", , "警告"Text1.Text = ""Text1.SetFocusEnd IfEnd Sub或Private Sub Command1_Click()Label2 = Format(Val(Text1) * Val(Text1) * 3.14, "0.00") End SubPrivate Sub Command2_Click()Label3 = Format(Val(Text1) * 3.14 * 2, "0.00")End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenIf Not IsNumeric(Text1.Text) ThenText1.Text = ""End IfEnd IfEnd SubB.3Private Sub Command1_Click()n = Int(Log(2) / Log(1.008) + 1)Label1 = n & "年后人数超过26 亿"End SubB.4Private Sub Command1_Click()Dim x, dx, cdx = Text1.Textdx = UCase(x)cd = Len(x)Print "大写字母为:"; dxPrint "字符串长度为:"; cdEnd SubB.5Text1 = Int(Rnd * 900 + 100)End SubPrivate Sub Command2_Click()Dim x%, x1%, x2%, x3%x = Val(Text1)x1 = x Mod 10 ' 分离出的个位数x2 = (x Mod 100) \ 10 ' 分离出的十位数x3 = x \ 100 ' 分离出的百位数Label1 = x1 * 100 + x2 * 10 + x3End SubB.6Private Sub Form_Click()Label1 = Left(Text1, 11)Label2 = Mid(Text1, 12, 6)Label3 = Right(Text1, 5)End SubB.7Private Sub Command1_Click()PrintFor i = 1 To 5Print Tab(15 - i * 2); String(2 * i - 1, "★"); Spc(18 - 4 * (i - 1)); String(2 * i - 1, "★")Next iEnd SubPrivate Sub Command2_Click()ClsEnd Sub进一步要求:Private Sub Command1_Click()PrintFor i = 1 To 5Print Tab(15 - i * 2); String(2 * i - 1, "★"); String(10 - (2 * i - 1), "☆"); String(2 * i - 1, "★") Next iEnd SubPrivate Sub Command2_Click()ClsEnd SubB.8Private Sub Form_Click()x = Val(InputBox("输入一正实数", "计算", 0))pf = Format(x * x, "0.000")pfg = Format(Sqr(x), "0.000")lf = Format(x * x * x, "0.000")lfg = Format(x ^ (1 / 3), "0.000")Print "平方为:"; pf; Space(5); "平方根为:"; pfg; Space(5); "立方为:"; lf; Space(5); "立方根为:"; lfgEnd SubC.1Private Sub Form_Click()Dim x!, y!x = Val(InputBox("输入x 的值"))If x < 1000 Theny = xElseIf x < 2000 Theny = 0.9 * xElseIf x < 3000 Theny = 0.8 * xElsey = 0.7 * xEnd IfPrint yEnd SubC.2Private Sub Form_Click()Dim x!, y!x = Val(InputBox("输入上网时间"))If x < 10 Theny = 30ElseIf x < 50 Theny = 30 + 2.5 * (x - 10)Elsey = 30 + 2.5 * 40 + 2 * (x - 50)End IfIf y > 150 Theny = 150End IfPrint yEnd SubC.3Private Sub Command1_Click()Dim x!, y!, z!x = InputBox("input x")y = InputBox("input y")z = InputBox("input z")Print " x y z"Print " 排序前"; x; " "; y; " "; z Ifx < y Then t = x: x = y: y = tIf x < z Then t = x: x = z: z = tIf y < z Then t = y: y = z: z = tPrint " 排序后" & x & " " & y & " " & z End SubPrivate Sub Command2_Click()Dim x!, y!, z!x = InputBox("input x")y = InputBox("input y")z = InputBox("input z")Print " x y z"Print " 排序前"; x; " "; y; " "; z Ifx < y Then t = x: x = y: y = tIf y < z Thent = y: y = z: z = tIf x < y Thent = x: x = y: y = tEnd IfEnd IfPrint " 排序后" & x & " " & y & " " & z End SubC.4Dim a(3) As IntegerPrivate Sub Command1_Click()Picture1.ClsFor i = 0 To 2a(i) = Int(Rnd * 100 + 200)Picture1.Print a(i)Next iEnd SubPrivate Sub Command2_Click()Picture2.ClsDim z As IntegerFor i = 0 To 1If a(i) > a(i + 1) Thenz = a(i + 1)a(i + 1) = a(i)a(i) = zEnd IfNext iPicture2.Print a(0)Picture2.Print a(1)Picture2.Print a(2)End SubC.5Private Sub Text2_LostFocus()Dim m%, n%, y%m = Val(Text1)n = Val(Text2)If n Mod 2 <> 0 ThenMsgBox ("脚数必定为偶数")Text2 = ""Text2.SetFocusElsey = n / 2 - mIf y < 0 ThenMsgBox ("脚数必须≥2 倍的头数,请重新输入")Text2 = ""Text2.SetFocusElsex = n / 2 - mLabel2 = yLabel3 = m - yEnd IfEnd IfEnd SubC.6Private Sub Command1_Click()Dim a!, b!, c!, x1!, x2!, de!a = Text1b = Text2c = Text3de = b * b - 4 * a * ct = 2 * aIf de = 0 ThenText4 = Format(-b / t, "0.00")Text5 = Format(-b / t, "0.00")ElseIf de > 0 ThenText4 = Format((-b + Sqr(de)) / t, "0.00")Text5 = Format((-b - Sqr(de)) / t, "0.00")ElseText4 = Format(-b / t, "0.00") & "+" & Format(Sqr(Abs(de)) / t, "0.00") & "i" Text5 = Format(-b / t, "0.00") & "-" & Format(Sqr(Abs(de)) / t, "0.00") & "i" End IfEnd SubPrivate Sub Command2_Click()Text1 = ""Text2 = ""Text3 = ""Text4 = ""Text5 = ""End SubC.7Private Sub Text3_LostFocus()Select Case Trim(Text3)Case "+"Text4 = Val(Text1) + Val(Text2)Case "-"Text4 = Val(Text1) - Val(Text2)Case "*"Text4 = Val(Text1) * Val(Text2)Case "/"If Val(Text2) = 0 ThenMsgBox "分母为零,重新输入"Text2 = ""Text2.SetFocusElseText4 = Val(Text1) / Val(Text2)End IfEnd SelectEnd SubC.8Private Sub Text1_LostFocus()Select Case Trim(Text1)Case 1Text2 = "Monday"Case 2Text2 = "Tuesday"Case 3Text2 = "Wednesday"Case 4Text2 = "Thursday"Case 5Text2 = "Friday"Case 6Text2 = "Saturday"Case 7Text2 = "Sunday"Case Is > 7, Is < 1MsgBox "数字为1~7,重新输入"Text1 = ""Text1.SetFocusEnd SelectEnd Sub或者Private Sub Text1_LostFocus()If Text1 > 7 Or Text1 < 1 ThenMsgBox "数字为1~7,重新输入"Text1 = ""Text1.SetFocusElseText2 = Choose(Text1, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")End IfEnd SubD.1Private Sub Form_Click()For i = 1 To 9Print Tab(10 - i); String(2 * i - 1, Trim(Str(i)))Next iEnd SubD.2Private Sub Form_Click()For i = 1 To 10 Step 1Print Tab(i); String((20 - 2 * i), Chr(64 + i))Next iEnd SubD.3Private Sub Command1_Click()Dim s!, t!, i&s = 1t = 1For i = 1 To 100000t = t + is = s + 1 / tIf 1 / t < 0.00001 Then Exit ForNext iPrint "For 结构"; s, i; "项"End SubD.4Private Sub Command1_Click()Dim n&, pi#, i&n = InputBox("输入n 值")pi = 2For i = 1 To npi = pi * (2 * i) / (2 * i - 1) * (2 * i) / (2 * i + 1) Next iPrint "当n=" & n & "时,pi="; piEnd SubD.5Private Sub Form_Click()Dim s!, t!, i!, a%, n%a = Int(Rnd * 9 + 1)n = Int(Rnd * 6 + 5)t = 0: s = 0Print "a="; a, "n="; nFor i = 1 To nt = t * 10 + as = s + tPrint t;Next iPrintPrint "s="; sEnd SubD.6Private Sub Command1_Click()Dim s As Integers = 0For i = 1 To 9For j = 0 To 9For k = 0 To 9s = i * 100 + j * 10 + kIf s = i ^ 3 + j ^ 3 + k ^ 3 ThenPrint sEnd IfNext kNext jNext iEnd SubPrivate Sub Command3_Click()formd6.Hidemain.ShowEnd SubD.7Private Sub Command1_Click()Dim a!, x0!, x1!a = 27x0 = 2i = 0Doi = i + 1x1 = 2 * x0 / 3 + a / (3 * x0 * x0)If Abs(x1 - x0) < 0.00001 Then Exit Dox0 = x1LoopPrint x1, iEnd SubD.8Private Sub Command1_Click()s = 0x0 = 0.01For i = 1 To 30s = s + x0x0 = x0 * 2Next iPrint sEnd SubD.9Private Sub Command4_Click()Picture1.ClsPicture1.Print "x 课安排在"; "y 课安排在"; "z 课安排在"Picture1.Print ""For z = 5 To 6For x = 1 To z - 2For Y = x + 1 To z - 1X1 = Choose(Weekday(x), "周一", "周二", "周三", "周四", "周五", "周六", "周日")Y1 = Choose(Weekday(Y), "周一", "周二", "周三", "周四", "周五", "周六", "周日") z1 = Choose(Weekday(z), "周一", "周二", "周三", "周四", "周五", "周六", "周日") Picture1.Print " "; X1; " "; Y1; " "; z1Next YNext xNext zEnd SubE.1Private Sub Form_Click()Dim a(1 To 10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 71 + 30)Print a(i); " ";Next iMax = a(1)Min = a(1)Avg = a(1)For i = 2 To 10If a(i) > Max Then Max = a(i)If a(i) < Min Then Min = a(i)Avg = Avg + a(i)Next iAvg = Avg / 10PrintPrint "Max="; Max; " Min="; Min; " Avg="; AvgEnd SubE.2Private Sub Form_Click()Dim aa = Array(56, 78, 98, 88, 76, 78)For i = 0 To 5Print String(a(i) \ 5, "◆"); a(i)PrintNext iEnd SubE.3Dim a%(19)Private Sub Command1_Click()Picture1.ClsFor i = 0 To 19a(i) = Int(Rnd * 101)Picture1.Print a(i); " ";If (i + 1) Mod 4 = 0 Then Picture1.PrintNext iEnd SubPrivate Sub Command2_Click()Picture2.ClsDim s(5 To 9)For i = 0 To 19k = a(i) \ 10Select Case kCase 0 To 5s(5) = s(5) + 1Case 9 To 10 '90~100 分的人数s(9) = s(9) + 1Case 6 To 8 ' 存放其他三个分数段的下标有规律,根据K 获得s(k) = s(k) + 1End SelectNext iFor i = 5 To 9If s(i) <> 0 Then Picture2.Print "s("; i; ")的人数有"; Format(s(i), "0"); "个" Next iEnd SubE.4Private Sub Command1_Click()Picture1.ClsDim d%(1 To 10)For i3 = 1 To 10Randomized(i3) = Int(Rnd * 91 + 10)Next i3For i = 1 To 10For j = 1 To 10 - iIf d(j) < d(j + 1) Thent = d(j): d(j) = d(j + 1): d(j + 1) = tEnd IfNext jNext iFor i = 1 To 10: Picture1.Print d(i);If i Mod 5 = 0 Then Picture1.PrintNext iEnd SubE.5Dim a%(3, 3), b%(3, 3)Private Sub Form_Load()For i = 0 To 3For j = 0 To 3a(i, j) = Int(Rnd * 36 + 35)b(i, j) = Int(Rnd * 41 + 100)Next jNext iEnd SubPrivate Sub Command1_Click()Picture1.ClsFor i = 0 To 3For j = 0 To iPicture1.Print a(i, j); " ";Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()Picture2.ClsFor i = 0 To 3For j = i To 3Picture2.Print Tab(j * 6); b(i, j);Next jPicture2.PrintNext iEnd SubPrivate Sub Command3_Click()Picture3.Clssa = 0For i = 0 To 3sa = sa + a(i, i)Next isb = 0For i = 0 To 3sb = sb + b(i, 3 - i)Next iPicture3.Print "A 数组主对角线元素和为:"; sa Picture3.Print "B 数组副对角线元素和为:"; sb End SubE.6Private Sub Form_Click()n = InputBox("输入n 值")ReDim a6%(n + 1, n + 1)a6(0, 0) = 1: a6(1, 1) = 1: a6(1, 0) = 1For i = 2 To n + 1For j = 2 To ia6(i, j) = a6(i - 1, j - 1) + a6(i - 1, j) Picture1.Print a6(i, j); "";Next jPicture1.PrintNextEnd SubE.7Private Sub Form_Load()List1.ClearList1.AddItem "大学计算机基础"List1.AddItem "C/C++程序设计"List1.AddItem "VB 程序设计"List1.AddItem "Web 程序设计"List1.AddItem "多媒体技术与应用"List1.AddItem "数据库技术与应用"List1.AddItem "网络技术与应用"List1.AddItem "硬件技术基础"List1.AddItem "软件技术技术基础"End SubPrivate Sub List1_Click()If List2.ListCount >= 5 ThenMsgBox ("超过5 门课程,不能再选")Exit SubElseList2.AddItem List1.TextList1.RemoveItem List1.ListIndexEnd IfEnd SubE.8Sub Combo1_KeyPress(KeyAscii As Integer) Select Case KeyAsciiCase 48 To 57, 13Case ElseKeyAscii = 0End SelectIf KeyAscii = 13 ThenCombo1.AddItem Combo1.TextCombo1.Text = ""End IfEnd SubPrivate Sub Command1_Click()Dim min%, max%min = Val(Combo1.List(0))max = Val(Combo1.List(0))imin = 0imax = 0For i = 1 To Combo1.ListCount - 1If Val(Combo1.List(i)) > max Thenimax = imax = Combo1.List(i)ElseIf Val(Combo1.List(i)) < min Thenimin = imin = Combo1.List(i)End IfNext it = Combo1.List(0)Combo1.List(0) = Combo1.List(imin)Combo1.List(imin) = tt = Combo1.List(Combo1.ListCount - 1)Combo1.List(Combo1.ListCount - 1) = Combo1.List(imax) Combo1.List(imax) = tEnd SubE.9Private Sub Form_Click()For i = 0 To Screen.FontCount - 1If Asc(Left(Screen.Fonts(i), 1)) < 0 ThenPicture1.Print Screen.Fonts(i)Picture2.FontName = Screen.Fonts(i)Picture2.Print "商丘师范学院"End IfNext iEnd SubE.10Private Type clerknumber As String * 3name As String * 5salary As IntegerEnd TypeDim a(0 To 4) As clerk, n%Private Sub Command1_Click()If n >= 5 ThenMsgBox ("输入人数超过数组声明的个数")ElseWith a(n).number = Text1.name = Text2.salary = Text3Picture1.Print a(n).number, a(n).name, a(n).salary PrintEnd Withn = n + 1Text1 = ""Text2 = ""Text3 = ""End IfEnd SubPrivate Sub Command2_Click()Dim t As clerk, i%, j%For i = 0 To n - 1For j = i To n - 1If a(i).salary < a(j + 1).salary Thent = a(i): a(i) = a(j + 1): a(j + 1) = tEnd IfNext jNext iPicture1.ClsPicture1.Print "工号姓名工资" For i = 0 To n - 1Picture1.Print a(i).number, a(i).name, a(i).salaryPrintNext iEnd SubF.1Private Sub Form_Click()Dim a(1 To 10), amin, i%For i = 1 To 10a(i) = -Int(Rnd * 101 + 300)Print a(i);Next iCall s(a(), amin)PrintPrint "min="; aminEnd SubSub s(b(), min)Dim i%min = b(LBound(b))For i = LBound(b) + 1 To UBound(b)If b(i) < min Then min = b(i)Next iEnd SubF.2Private Sub Command1_Click()Dim mm%, nn%mm = Val(Text1)nn = Val(Text2)Picture1.Print mm; Tab(6); nn; Tab(12); gcd(mm, nn) End SubFunction gcd%(ByVal m%, ByVal n%)If m < n Then t = m: m = n: n = tr = m Mod nDo While (r <> 0)m = n: n = r: r = m Mod nLoopgcd = nEnd FunctionF.3Dim x!Private Sub Command1_Click()Print "调用标准函数Sin 的结果"; Sin(x)End SubPrivate Sub Command2_Click()Print "调用自定义函数MySin 的结果"; MySin(x) End SubFunction MySin(x!) As DoubleDim i%, t!, s!t = xs = ti = 1Do While Abs(t) > 0.00001t = -1 * t * x * x / ((i + 1) * (i + 2))s = s + ti = i + 2LoopMySin = sEnd FunctionPrivate Sub Command3_Click()x = InputBox("输入要计算正弦函数的角度值x") x = x * 3.14 / 180End SubF.4Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 ThenIf Not IsNumeric(Text1) ThenMsgBox "输入非数字串,重新输入"Text1.Text = ""Text1.SetFocusElseIf IsH(Text1) ThenPicture1.Print Text1; " ★"ElsePicture1.Print Text1End IfText1 = ""End IfEnd IfEnd SubFunction IsH(ss As String) As BooleanDim i%, Ls%IsH = Truess = Trim(ss)Ls = Len(ss)For i = 1 To Ls \ 2If Mid(ss, i, 1) <> Mid(ss, Ls + 1 - i, 1) ThenIsH = FalseExit FunctionEnd IfNext iEnd FunctionF.5Function prime(ByVal m As Integer) As Booleanprime = TrueDim i%For i = 2 To m - 1If (m Mod i) = 0 Then prime = False: Exit Function '注意冒号和exit 的范围Next iEnd FunctionPrivate Sub Command1_Click()n = 0For i = 6 To 100 Step 2For j = 3 To i \ 2If prime(j) ThenIf prime(i - j) ThenList1.AddItem i & " =" & j & " +" & i - jn = n + 1End IfEnd IfNext jNext iPicture1.Print " 6 和100 之间共有"; n; "对素数和"End SubF.6Dim a%()Private Sub Form_Click()Print "1000 以内的完数为:"For i = 1 To 1000If IsWs(i) ThenPrint i; "=1";For j = 1 To UBound(a)Print "+"; a(j);Next jPrintEnd IfNext iEnd SubFunction IsWs(m) As BooleanDim s%s = 0For i = 1 To m \ 2If m Mod i = 0 ThenReDim Preserve a(j)a(j) = ij = j + 1s = s + iEnd IfNext iIf m = s Then IsWs = TrueEnd FunctionF.7Private Sub DeleStr(s1 As String, ByVal s2 As String)Dim i%ls2 = Len(s2)i = InStr(s1, s2)Do While i > 0s1 = Left(s1, i - 1) + Mid(s1, i + ls2) ' 在s1 中去除s2 子串i = InStr(s1, s2)LoopEnd SubPrivate Sub Command1_Click() ' 调用DeleStr 子过程Dim ss1 As Stringss1 = Text1Call DeleStr(ss1, Text2)Text3 = ss1End SubPrivate Sub Command2_Click()End SubF.8Private Sub Command1_Click()Dim maxw$maxlen Text1 & " ", maxwText2 = maxwEnd SubSub maxlen(s$, maxw$)Dimword$ maxw = ""Do While s <> ""i = InStr(s, " ")word = Left(s, i - 1)If Len(word) > Len(maxw) Then maxw = words = Mid(s, i + 1)LoopEnd SubG.1Private Sub Command1_Click()List1.ClearList1.AddItem Combo1If Option1 Then List1.AddItem "Pentium II"If Option2 Then List1.AddItem "Pentium I"If Option3 Then List1.AddItem "Celeron"List1.AddItem Text1If Check1 Then List1.AddItem "声卡"If Check2 Then List1.AddItem "Modem"If Check3 Then List1.AddItem "网络适配器"End SubPrivate Sub Text1_LostFocus()st = UCase(Trim(Text1))le = Len(st)If Not IsNumeric(Left(st, le - 2)) Or Right(st, 2) <> "MB" Then MsgBox "有不合法字符!"Text1 = ""Text1.SetFocusEnd IfEnd SubG.2Private Sub Check1_Click()Picture1.Font.Bold = Not Picture1.Font.BoldEnd SubPrivate Sub Check2_Click()Picture1.Font.Italic = Not Picture1.Font.BoldEnd SubPrivate Sub Command1_Click()Picture1.ClsIf Option1 ThenPicture1.Print Sin(Val(Text1))ElseIf Option2 ThenPicture1.Print Exp(Val(Text1))ElseIf Option3 ThenPicture1.Print Sqr(Val(Text1))End IfEnd SubPrivate Sub return_Click(Index As Integer)Form6.ShowUnload Form2End SubG.3Private Sub HScroll1_Change()Text1 = VScroll1.ValueText2 = HScroll1.ValueText3 = HScroll2.ValueText4 = Format(Val(Text1) * (Text3 / 100) * (Text2 / 12), "0.00") Text5 = Format(Val(Text4) + Val(Text1), "0.00")End SubPrivate Sub HScroll2_Change()Text1 = VScroll1.ValueText2 = HScroll1.ValueText3 = HScroll2.ValueText4 = Format(Val(Text1) * (Text3 / 100) * (Text2 / 12), "0.00") Text5 = Format(Val(Text4) + Val(Text1), "0.00")End SubPrivate Sub VScroll1_Change()Text1 = VScroll1.ValueText2 = HScroll1.ValueText3 = HScroll2.ValueText4 = Format(Val(Text1) * (Text3 / 100) * (Text2 / 12), "0.00") Text5 = Format(Val(Text4) + Val(Text1), "0.00")End SubG.4Dim t As SinglePrivate Sub Command1_Click()t = InputBox("输入倒计时分钟数")t = t * 60ProgressBar1.Min = 0ProgressBar1.Max = tProgressBar1.Value = tEnd SubPrivate Sub Command2_Click()Timer1.Interval = 1000ProgressBar1.Visible = TrueEnd SubPrivate Sub Timer1_Timer()Dim m%, s%t = t - 1ProgressBar1.Value = tm = t \ 60s = t Mod 60Label1 = m & "分" & s & "秒"If t = 0 ThenMsgBox " 时间到!"Timer1.Interval = 0ProgressBar1.Visible = FalseEnd IfEnd SubG.5Private Sub Command1_Click()CommonDialog1.ShowColorLabel1.ForeColor = CommonDialog1.ColorEnd SubPrivate Sub Command2_Click()CommonDialog1.ShowOpeni = Shell("C:\WINDOWS\NOTEPAD.exe " + CommonDialog1.FileName, vbNormalFocus) End SubG.6rivate Sub bold_Click()Text1.FontBold = Not Text1.FontBoldbold.Checked = Not bold.CheckedEnd SubPrivate Sub del_Click()Text1 = ""End SubPrivate Sub end_Click()EndEnd SubPrivate Sub font12_Click()Text1.FontSize = 12End SubPrivate Sub font16_Click()Text1.FontSize = 16End SubPrivate Sub Form_Load()bold.Checked = Falseitalic.Checked = FalseEnd SubPrivate Sub italic_Click()Text1.FontItalic = Not Text1.FontItalicitalic.Checked = Not italic.CheckedEnd SubPrivate Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu menu2End SubG.7Private Sub Command1_Click()CommonDialog1.ShowColorLabel1.ForeColor = CommonDialog1.ColorEnd SubPrivate Sub Command2_Click()CommonDialog1.ShowOpeni = Shell("C:\WINDOWS\NOTEPAD.exe " + CommonDialog1.FileName, vbNormalFocus) End SubPrivate Sub return_Click(Index As Integer)Form6.ShowUnload Form5End SubG.8G.9Private Sub 结束_Click()EndEnd SubPrivate Sub 删除最大值_Click()max = List1.List(0)For i = 1 To List1.ListCount - 1If max < List1.List(i) Then max = List1.List(i): j = i Next iList1.RemoveItem jEnd SubPrivate Sub 删除最小值_Click()min = List1.List(0)For i = 1 To List1.ListCount - 1If min > List1.List(i) Then min = List1.List(i): j = i Next iList1.RemoveItem jEnd SubPrivate Sub 随机产生_Click()RandomizeFor i = 0 To 9List1.List(i) = Int(Rnd * 30 + 70)Next iEnd SubPrivate Sub 添加数据_Click()List1.AddItem Int(Rnd * 30 + 70)End SubPrivate Sub 统计_Click()Dim max%, min%, ave!, m%, n%max = List1.List(0)min = List1.List(0)ave = List1.List(0)m = 0n = 0For i = 1 To List1.ListCount - 1If max < List1.List(i) Then max = List1.List(i): m = i If min > List1.List(i) Then min = List1.List(i): n = i ave = ave + List1.List(i)Next iForm2.Text1 = List1.List(n)Form2.Text2 = List1.List(m)Form2.Text3 = Format(ave / List1.ListCount, "0.00") Form2.ShowEnd SubG.10Private Sub experimentG2_Click()Form2.ShowEnd SubPrivate Sub experimentG3_Click()Form3.ShowEnd SubPrivate Sub experimentG4_Click()Form4.ShowEnd SubPrivate Sub experimentG5_Click()Form5.ShowEnd SubPrivate Sub font_12_Click()Text1.FontSize = 12End SubPrivate Sub font_16_Click()Text1.FontSize = 16End SubPrivate Sub rnd10_Click()RandomizeFor i = 0 To 9List1.List(i) = Int(Rnd * 30 + 70)Next iEnd SubPrivate Sub stat_Click()Dim max%, min%, ave!, m%, n%max = List1.List(0)min = List1.List(0)ave = List1.List(0)m = 0n = 0For i = 1 To List1.ListCount - 1If max < List1.List(i) Then max = List1.List(i): m = i If min > List1.List(i) Then min = List1.List(i): n = i ave = ave + List1.List(i)Next istat2.Text1 = List1.List(n)stat2.Text2 = List1.List(m)stat2.Text3 = Format(ave / List1.ListCount, "0.00")stat2.ShowEnd SubPrivate Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu caidan2, vbPopupMenuCenterAlignEnd SubPrivate Sub xie_Click()Text1.Font.Italic = Not Text1.Font.BoldEnd SubH.1Private Sub Command1_Click()Open "c:\score" For Output As #1Print #1, "051023", "王海涛", 66Print #1, "052498", "周文英", 88Print #1, "050992", "陈建东", 77Open "c:\score1" For Output As #2Write #2, "051023", "王海涛", 66Write #2, "052498", "周文英", 88Write #2, "050992", "陈建东", 77Closei1 = Shell("NOTEPAD.exe" + " c:\score", vbNormalNoFocus)i2 = Shell("NOTEPAD.exe" + " c:\score1", vbNormalNoFocus)End SubPrivate Sub Command2_Click()Dim no As String, name As String, s As IntegerOpen "c:\score" For Input As #1Do While Not EOF(1)Line Input #1, linedataList1.AddItem linedataLoopOpen "c:\score1" For Input As #2Do While Not EOF(2)Input #2, no, name, sList2.AddItem no & name & sLoopCloseEnd SubH.2Private Sub Command1_Click()Dim fib%(0 To 9), i%Open "c:\fb.dat" For Output As #1For i = 0 To 9If i = 0 Or i = 1 Thenfib(i) = iElsefib(i) = fib(i - 1) + fib(i - 2)End IfPrint #1, """Fib(" & i & ")""," & fib(i)Next iClose #1i = Shell("NOTEPAD.exe" + " c:\fb.dat", vbNormalNoFocus) End SubPrivate Sub Command2_Click()Dim st$, n%, sum%Open "c:\fb.dat" For Input As #1Do While Not EOF(1)Input #1, st, nsum = sum + nList1.AddItem st & "=" & nLoopClose #1List1.AddItem " 合计:" & sumList1.AddItem "平均:" & sum / 10End SubH.3H.4Private Type studtypeno As String * 4name As String * 6mark As SingleEnd TypeDim student As studtype, stud(1 To 5) As studtype, t As studtypePrivate Sub Command1_Click()Open "d:\score.dat" For Random As #1 Len = Len(student) With student.no = "0001".name = "星期一"。
汇编语言程序设计习题答案
第一章. 习题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=7FFFH1.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=2551.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=46601.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=2178931.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(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=11.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么(1) D8 (2) FF答:(1) D8H表示的带符号数为 -40,D8H表示的无符号数为216;(2) FFH表示的带符号数为 -1, FFH表示的无符号数为255。
c程序设计第三版习题参考解答(全)
c程序设计第三版习题参考解答(全) C程序设计第三版习题参考解答本文为《C程序设计第三版习题参考解答》的全文内容。
为了更好地适应题目要求,文章将按照解答问题的方式进行分段,每个问题对应一个小节。
以下是各个问题的解答:第一章:C概述和程序设计基本原则1. 什么是计算机程序?计算机程序是一系列指令的集合,用于告诉计算机执行特定的任务。
它由一系列语句组成,每条语句都包含了计算机可以理解和执行的命令。
2. C语言的起源和发展历程是什么?C语言是由贝尔实验室的Dennis Ritchie于20世纪70年代初开发的一种通用高级编程语言。
C语言基于早期的B语言进行了扩展和改进,成为了应用广泛且高效的编程语言。
3. 编译和解释有什么区别?编译是将源代码一次性转换为机器语言的过程。
它将整个源代码文件编译成可执行文件,然后可以直接在计算机上运行。
解释是逐行解析源代码并立即执行的过程。
解释器逐行读取源代码并将其转换为机器代码,然后立即执行转换后的代码。
4. C程序的一般结构是什么样的?C程序的一般结构包括预处理指令、函数声明、全局变量声明、main函数以及其他函数的定义。
预处理指令用于包含头文件、定义宏等。
函数声明用于声明函数的名称和参数。
全局变量声明用于声明全局变量。
main函数是C程序的入口点,也是程序执行的起始位置。
第二章:C基本语法和数据类型1. C中的注释有哪些类型?在C中,注释分为单行注释和多行注释。
单行注释以"//"开头,多行注释以/*开头,以*/结尾。
2. 什么是变量?变量是在程序中用来存储数据的存储区域。
每个变量都有一个名称和一个数据类型,可以通过变量名来引用它所存储的数据。
3. C语言中的常量有哪些类型?C语言中的常量分为整型常量、实型常量、字符常量和字符串常量。
整型常量表示整数值,实型常量表示实数值,字符常量表示单个字符,字符串常量表示一串字符。
4. C语言中的运算符有哪些类型?C语言中的运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符、自增自减运算符等。
汇编语言程序设计教程(第3版 卜艳萍)参考答案
汇编语言程序设计教程(第3版卜艳萍)参考答案汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1. 计算机系统分哪几个层次?简述计算机系统的硬件结构。
1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2. 简述用汇编语言进行程序设计的必要性。
1) 程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2) 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3) 大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4) 没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5) 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3. 汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1) 为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。
2) 汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3) 汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4) 字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
汇编语言程序设计》教案及答案第
《汇编语言程序设计》教案及答案第一章一、教学目标1. 了解汇编语言的背景和基本概念。
2. 掌握汇编语言的语法和常用指令。
3. 学会编写简单的汇编语言程序。
二、教学内容1. 汇编语言的概述1.1 汇编语言的背景1.2 汇编语言的特点1.3 汇编语言的发展历程2. 汇编语言的基本概念2.1 汇编语言的组成2.2 汇编语言与机器语言的关系2.3 汇编语言的指令格式3. 汇编语言的语法3.1 数据类型和寄存器3.2 指令的分类和格式3.3 汇编语言的伪指令4. 常用汇编指令4.1 数据传输指令4.2 算术运算指令4.3 逻辑运算指令4.4 控制流指令4.5 字符串操作指令5. 编写简单的汇编语言程序5.1 程序的格式和结构5.2 程序的编写和调试三、教学方法1. 讲授法:讲解汇编语言的基本概念、语法和指令。
2. 示例法:通过示例程序讲解汇编语言的编程方法和技巧。
3. 实践法:让学生动手编写汇编语言程序,巩固所学知识。
四、教学环境1. 教室:配备多媒体教学设备,便于展示PPT和示例程序。
2. 计算机:学生每人一台计算机,安装有汇编语言编程环境。
五、教学评价1. 课堂提问:检查学生对汇编语言基本概念的理解。
2. 课后作业:检查学生对汇编语言指令的掌握程度。
3. 编程实践:评估学生编写汇编语言程序的能力。
《汇编语言程序设计》教案及答案第二章一、教学目标1. 掌握汇编语言的汇编过程。
2. 学会使用汇编语言进行内存管理和堆栈操作。
3. 了解汇编语言与C语言的接口编程。
二、教学内容1. 汇编语言的汇编过程1.1 汇编程序的作用1.2 汇编程序的格式1.3 汇编过程中的符号表和地址表2. 内存管理和堆栈操作2.1 内存空间的分配与释放2.2 堆栈的概念和操作2.3 堆栈指针的调整3. 汇编语言与C语言的接口编程3.1 外部函数的声明和调用3.2 数据传递的方式3.3 接口编程的注意事项三、教学方法1. 讲授法:讲解汇编语言的汇编过程、内存管理和堆栈操作。
C语言程序设计习题答案(第三版)
C语言程序设计(第三版)习题答案习题一一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)高级语言P2(5)汇编程序P3 (6)编译程序P4 (7)算法P5 (8)结构化程序设计方法P10二、简答题1. 设计程序时应遵循哪些基本原则?P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法具有哪些特点?答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种?答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。
4. 结构化程序设计方法的三种基本结构是什么?答:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S流程图最大的区别是什么?答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图或N-S流程图表示求解以下问题的算法。
1. 从键盘输入10个整数,求出其中的最小数并输出。
2. 求1+2+3+…+100的值。
3. 求10~50的所有素数之和。
4. 求下列分段函数的值。
四、请参照本章例题,编写一个简单的C 程序,输出以下三行信息。
**************************Yangtze University**************************#include <stdio.h>void main(){printf("**************************\n");printf(" Yangtze University\n");printf("**************************\n");}4X-1 (X ≤1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5)习题二一、选择题1~10: B C D C D D B C A A11~20: D A C D B D B A C D二、填空题1.字母 L 或字母 l2. %c(或字符) 、 %d(或整数)3.在程序运行过程中,其值可以在一定的范围内变化的量4.'\0'5.小数形式、指数形式6.关键字、预定义标识符、用户标识符7.字母、数字、下划线、数字8. 189. 2 、 1 、 3010.双精度实数或double11.赋值、逗号、 20 、 20 、 20 、 412. 4 、 4习题三一、选择题1~10: B C C B C C C D C C注:第4题答案D为: 10 22↙33↙二、填空题1. printf 、 scanf2. h3."%5d"4.'\0'5. e 、 E6. 67. s 、 c8. *9. - 、 +10. i三、编程题1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出。
c语言程序设计(第3版)的习题答案
c语⾔程序设计(第3版)的习题答案1.5请参照本章例题,编写⼀个C程序,输出以下信息:************Very Goodj!************解:main(){printf(" ************ \n");printf("\n");printf(" Very Good! \n");printf("\n");printf(" ************\n");}1.6编写⼀个程序,输⼊a b c三个值,输出其中最⼤者。
解:main(){int a,b,c,max;printf("请输⼊三个数a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if(maxmax=b;if(maxmax=c;printf("最⼤数为:%d",max);}第三章3.3 请将下⾯各数⽤⼋进制数和⼗六进制数表⽰:(1)10 (2)32 (3)75 (4)-617(5)-111 (6)2483 (7)-28654 (8)21003解:⼗⼋⼗六(10)=(12)=(a)(32)=(40)=20(75)=(113)=4b(-617)=(176627)=fd97-111=177621=ff912483=4663=963-28654=110022=901221003=51013=520b3.5字符常量与字符串常量有什么区别?解:字符常量是⼀个字符,⽤单引号括起来。
字符串常量是由0个或若⼲个字符⽽成,⽤双引号把它们括起来,存储时⾃动在字符串最后加⼀个结束符号'\0'. 3.6写出以下程序的运⾏结果:#includevoid main(){char c1='a',c2='b',c3='c',c4='\101',c5='\116';printf("a%c b%c\tc%c\tabc\n",c1,c2,c3);printf("\t\b%c %c\n",c4,c5);解:程序的运⾏结果为:aabb cc abcA N3.7将"China"译成密码.密码规律:⽤原来的字母后⾯第4个字母代替原来的字母, 例如,字母"A"后⾯第4个字母是"E",⽤"E"代替"A".因此,"China"应译为"Glmre".请编⼀程序,⽤赋初值的议程使c1,c2,c3,c4,c5分别变成'G','1','m','r','e',并输出.main(){char c1="C",c2="h",c3="i",c4='n',c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);}3.8例3.6能否改成如下:#includevoid main(){int c1,c2;(原为char c1,c2)c1=97;c2=98;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}解:可以.因为在可输出的字符范围内,⽤整型和字符型作⽤相同.3.9求下⾯算术表达式的值.(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)(2)(float)(a+b)/2+(int)x%(int)y=3.5(设a=2,b=3,x=3.5,y=2.5)3.10写出下⾯程序的运⾏结果:#includevoid main(){int i,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d\n",i,j,m,n);}解:结果: 9,11,9,10第4章4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'.想得到以下的输出格式和结果,请写出程序要求输出的结果如下:a= 3 b= 4 c= 5x=1.200000,y=2.400000,z=-3.600000x+y= 3.60 y+z=-1.20 z+x=-2.40u= 51274 n= 128765c1='a' or 97(ASCII)c2='B' or 98(ASCII)解:main(){int a,b,c;long int u,n;float x,y,z;char c1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51274;n=128765;c1='a';c2='b';printf("\n");printf("a=%2d b=%2d c=%2d\n",a,b,c);printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z);printf("x+y=%5.2f y=z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);printf("u=%6ld n=%9ld\n",u,n);printf("c1='%c' or %d(ASCII)\n",c1,c2);printf("c2='%c' or %d(ASCII)\n",c2,c2);}4.5请写出下⾯程序的输出结果.结果:575 767.856400,-789.12396267.856400 ,-789.12396267.86,-789.12,67.856400,-789.123962,67.856400,-789.1239626.785640e+001,-7.89e+002A,65,101,411234567,4553207,d68765535,17777,ffff,-1COMPUTER, COM4.6⽤下⾯的scanf函数输⼊数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',问在键盘上如何输⼊?main(){int a,b;float x,y;char c1,c2;scanf("a=%d b=%d,&a,&b);scanf(" x=%f y=%e",&x,&y);scanf(" c1=%c c2=%c",&c1,&c2);}解:可按如下⽅式在键盘上输⼊:a=3 b=7x=8.5 y=71.82c1=A c2=a说明:在边疆使⽤⼀个或多个scnaf函数时,第⼀个输⼊⾏末尾输⼊的"回车"被第⼆个scanf函数吸收,因此在第⼆\三个scanf函数的双引号后设⼀个空格以抵消上⾏⼊的"回车".如果没有这个空格,按上⾯输⼊数据会出错,读者⽬前对此只留有⼀初步概念即可,以后再进⼀步深⼊理解.4.7⽤下⾯的scanf函数输⼊数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75,z=57.8,请问在键盘上如何输⼊数据?scanf("%5d%5d%c%c%f%f%*f %f",&a,&b,&c1,&c2,&y,&z);解:main(){int a,b;float x,y,z;char c1,c2;scanf("%5d%5d%c%c%f%f",&a,&b,&c1,&c2,&x,&y,&z);}运⾏时输⼊:10 20Aa1.5 -3.75 +1.5,67.8注解:按%5d格式的要求输⼊a与b时,要先键⼊三个空格,⽽后再打⼊10与20。
《汇编语言程序设计》习题解答及课程实验、设计辅导
实验一汇编程序的汇编及运行1.实验目的(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看LST文件;(3)生成OBJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验涉及知识汇编程序从编写到执行的过程编程→.ASM→编译→.OBJ→连接→.EXE→加载→内存中的程序→执行1)编写源程序用EDIT或记事本输入各段,并存储成源程序(保存在MASM目录下),扩展名为ASM。
2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM 文件名(连同扩展名);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。
Source listling[nul.lst]:输入:文件主名,生成lst文件,也可以不生成,直接按回车键。
Lst文件用于查看编译为目标文件的过程中产生的中间结果。
Cross-reference [nul.crf]:按回车键。
(4)如果系统没有提示出错,那么编译过程就完成了。
如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤(5)输入:link 文件主名(不要输扩展名,也可以输入扩展名.obj)run file [.exe]:按回车键。
List file [nul.map]:按回车键。
Libraries [.lib]:按回车键。
(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。
如果出现‘no strack segment’的错误警告,不用理会。
3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。
程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。
3.实验内容1)将下面的数据段输入,取名1.ASM,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1.计算机系统分哪几个层次?简述计算机系统的硬件结构。
1)数字逻辑层2) 微体系结构层3) 指令系统层4) 操作系统层5) 汇编语言层6) 高级语言层7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2.简述用汇编语言进行程序设计的必要性。
1)程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3)大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4)没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3.汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。
2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
4.计算机的字长是怎么定义的,试举例说明。
计算机能同时处理二进制信息的位宽定义为计算机的字长。
如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。
5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。
二进制用B,如10101010B八进制用Q,如437Q。
十进制用D或不用,如54D,或54。
十六进制用H,如27A8H6.汇编语言中的基本数据类型有哪些?简述定点数和浮点数的区别。
基本数据类型:数值型数据和非数值型数据。
非数值数据如字符、字符串、逻辑值等。
7.列出数字0~9、大写字母A~Z及小写字母a~z的ASCII码值。
30H~39H 41H~5AH 61H~7AH8.当字长为八位时,写出下列各数的原码、补码和反码(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH10.完成下列二进制数的加减运算。
(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。
(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。
(1)3+5 =80011+0101=1000 不用进行十进制调整(2)4+7 =110100+0111=1011 此码不是BCD码,需要进行十进制调整1011+0110=10001=0001,0001(3)6+5 =110110+0101=1011 此码不是BCD码,需要进行十进制调整1011+0110=10001=0001,0001(4)8+8 =161000+1000=10000 此码不是BCD码,需要进行十进制调整10000+0110=10110=0001,0110第2章微型计算机体系结构思考与练习1.简述Intel微处理器的发展历程。
以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium系列。
2.IA-32 CPU通常由哪些单元组成,简述这些单元的作用。
IA-32 CPU由总线接口单元、指令预取单元、指令译码单元、执行单元、分段部件和分页部件六个功能部分组成。
总线接口单元BIU负责在CPU内部各部件与存储器、输入/输出接口之间传送数据或指令。
指令预取单元由预取器和预取队列组成。
当BIU不执行取操作数或偏移地址的操作时,如果预取队列有空单元或发生控制转移,预取器便通过分页部件向BIU发出指令预取请求。
指令译码单元直接从指令预取单元的预取队列中读出预取的指令字节并译码,将指令直接转换为内部编码,并存放到已译码指令队列中。
执行单元的任务是将已译码指令队列中的内部编码变成按时间顺序排列的一系列控制信息,并发向处理器内部有关的部件,以便完成一条指令的执行。
分段部件的任务是把逻辑地址转换为线性地址并进行保护检查。
分页部件由地址加法器、页高速缓存寄存器及控制和属性检验用PLA组成。
在操作系统控制下,如果分页操作处于允许状态,便执行从线性地址到物理地址的转换,同时还需要检验标准存储器访问与页属性是否一致,并保留一个最近所访问的页的列表。
如果分页操作3.8088微处理器中有哪些寄存器?说明它们的功能及分组情况,进一步分析IA-32 CPU寄存器组。
IA-32 CPU寄存器组包括以下几类。
①IA-32 CPU中的基本体系结构寄存器:②系统级寄存器:IA-32 CPU中的系统级寄存器包括内存管理寄存器和控制寄存器。
内存管理寄存器GDTR、IDTR、LDTR和TR用于指示保护模式下系统中特殊段的地址信息,也称为系统地址寄存器。
IA-32 CPU中有四个32位的控制寄存器CR0、CR1、CR2和CR3。
③调试与测试寄存器:IA-32 CPU中设置了8个32位的调试寄存器,命名为DR0~DR7,它们为程序调试提供了硬件支持。
IA-32 CPU中设置了2个32位的测试寄存器,命名为TR6和TR7。
4.8086的标志寄存器FLAG中,有哪些标志位?它们的名称和功能是什么?IA-32 CPU的标志寄存器增加了哪些标志位,其功能是什么?CF——进位标志(Carry Flag)。
若CF=1,表示算术运算时产生进位或借位,否则CF=0。
移位指令会影响CF。
PF——奇偶标志(Parity Flag)。
若PF=1,表示操作结果中“1”的个数为偶数,否则PF=0。
这个标志位主要用于检查数据传送过程中的错误。
AF——辅助进位标志(Auxiliary Carry Flag)。
若AF=1表示字节运算产生低半字节向高半字节的进位或借位,否则AF=0。
辅助进位也称半进位标志,主要用于BCD码运算的十进制调整。
ZF——全零标志(Zero Flag)。
若ZF=1,表示操作结果全为零,否则ZF=0。
SF——符号标志(Sign Flag)。
若SF=1,表示符号数运算后的结果为负数,否则SF=0。
OF——溢出标志(Overflow Flag)。
若OF=1,表示当进行算术运算时,结果超过了最大范围,否则OF=0。
IF——中断允许标志(Interrupt Enable Flag)。
若IF=1,则CPU可以响应外部可屏蔽中断请求;若IF=0,则CPU不允许响应中断请求。
IF的状态可由中断指令设置。
DF——方向标志(Direction Flag)。
若DF=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则DF=0。
DF位可由指令控制。
TF——单步标志(Trace Flag)。
又称跟踪标志。
该标志位在调试程序时可直接控制CPU 的工作状态。
当TF=1时为单步操作,CPU每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若TF=0,则CPU继续执行程序。
IA-32 CPU的标志寄存器增加的标志位:IOPL——特权标志。
NT——任务嵌套标志。
RF——恢复标志。
VM——虚拟方式标志。
AC——对准检查标志。
VIF——虚拟中断标志。
VIP——虚拟中断暂挂标志。
ID——标识标志。
5.什么叫8086/8088存储器的段的基地址?什么叫段内偏移地址?什么叫物理地址?以上地址各为多少位?每个段在物理存储器中有一个段的起始地址,称为段基地址,它的低四位二进制码必须是0000,即段基地址是能被16整除的地址。
而偏移量是表示段内某一存储单元相对于段起始地址的空间位置,即段内偏移地址,也称有效地址EA。
对于1M字节的物理存储空间,每个存储单元都有一个20位的物理地址。
物理地址是指存储单元的实际编码地址,对存储器的读写操作是需用物理地址进行按址存取。
6.什么是段选择器?什么是段描述符?什么是描述符表?它们之间有什么关系?在保护模式下,段寄存器中存放的不是段基地址本身,而是一个16位的段选择器。
段选择器索引说明段信息的段描述符,段描述符存放有段基地址信息。
段描述符的长度为8字节,每一个段都有一个对应的描述符。
根据描述符所描述的对象不同,描述符可以分为三类:存储段描述符、系统段描述符、门描述符(控制描述符)。
在描述符中定义了段的基地址,界限和访问类型等段属性。
为了便于组织管理,IA-32 CPU把段描述符组织成线性表,称为描述符表。
IA-32 CPU 有三种类型的描述符表:全局描述符表GDT,局部描述符表LDT和中断描述符表IDT。
三者的关系:根据段寄存器中保存的段选择器查找相应的描述符表中的对应描述符,根据描述符的内容得出段基地址,将段基地址与偏移地址相加,即得到线性地址。
7.已知物理地址为FFFE0H,且段内偏移量为0880H,放在BX中,若对应的段基址值放在DS中,问:DS=?DS=FF76H8.段地址和偏移地址用十六进制数表示如下,请分别计算它们的物理地址。
3040:0102 物理地址为:30502HA000:001E 物理地址为:A001EH1200:0E08 物理地址为:12E08H60E0:002A 物理地址为:60E2AH9.一台微型计算机,数据线有8根,地址线有16根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?试用十六进制数表示该机的地址范围。
216 = 64KB,0000H~FFFFH第3章微型计算机的指令系统思考与练习1.寻址方式?8086/8088系统中关于存储器操作数的寻址方式有哪几类?80386及后继处理器支持的新增的存储器寻址方式有哪几种?指令中关于如何求出存放操作数有效地址的方法称为操作数的寻址方式。