文档库 最新最全的文档下载
当前位置:文档库 › C语言课后习题答案(1-10)(新)

C语言课后习题答案(1-10)(新)

C语言课后习题答案(1-10)(新)
C语言课后习题答案(1-10)(新)

第四章

5、#include “stdio.h”

main()

{char c;

int w,x,y,z;

w=x=y=z=0;

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

{if((c>’a’&&c<’z’)||(c>’A’&&c<’Z’))

w++;

else if (c==’’)

x++;

else if (c>’0’&&c<’9’)

y++;

else z++}

printf(“英文字母个数:%d\n”,w);

printf(“空格个数:%d\n”,x);

printf(“数字个数:%d\n”,y);

printf(“其他字母个数:%d\n”,z);}

第五章1.#include "stdio.h"

main()

{int a[11];

int i,j,t;

printf("input 10 number:\n");

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

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

printf("\n");

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

for (j=1;j<=10-i;j++)

if (a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

printf("the sorted number is:\n");

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

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

2.#include "stdio.h"

main()

{int a[11],i,b;

printf("imput 10 sorted number:\n");

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

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

printf("input an integer:\n");

scanf("%d",&b);

for (i=9;i>=0&&a[i]>b;i--)

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

a[i+1]=b;

printf("sorted numbers:\n");

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

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

5.#include "stdio.h"

main()

{int a[3][4],i,j,max,row,col;

printf("input 3*4 matrix:\n");

for (i=0;i<3;i++) /*输入3*4矩阵*/ for (j=0;j<4;j++)

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

max=a[0][0]; row=0; col=0;

for (i=0;i<3;i++) /*寻找矩阵中的最大值及其行列号*/

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

if (max

{max=a[i][j]; row=i, col=j;}

printf("\n数组中最大的数是%d,其行号是%d,列号是%d\n",max,row,col);}

6.#define N 3

#define M 4

#include "stdio.h"

main()

{int a[N][M],i,j,k,max,row,col;

printf("input %d*%d matrix: \n",N,M);

for (i=0;i

for (j=0;j

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

for (i=0;i

{max=a[i][0]; row=i; col=0;

for(j=1;j

if (max

{max=a[i][j]; col=j;}

for (k=0;k

if (a[k][col]

break;

if (k==N) /*得到鞍点*/

{printf("the point is %d,row=%d,col=%d\n",max,row,col);break;}

}

if (i==N) /*没有鞍点*/

printf("no point\n");}

8.#include "stdio.h"

main()

{int i,j,uppn,lown,dign,span,othn; /*uppn,lown,dign,span,othn分别存放英文大写字母、小写字母、数字、空格和其他字符的个数*/

char text[3][80];

uppn=lown=dign=span=othn=0;

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

{gets(text[i]);

for(j=0;j<80&&text[i][j]!='\0';j++)

{if(text[i][j]>='A'&&text[i][j]<='Z')

uppn++;

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

lown++;

else if(text[i][j]>='0'&&text[i][j]<='9')

dign++;

else if(text[i][j]==' ')

span++;

else

othn++;}

}

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

printf("%s\n",text[i]);

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

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

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

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

printf("othn=%d\n",othn);}

9.#include "stdio.h"

main()

{int i,j;

char str1[20],str2[20];

printf("input two strings:\n");

gets(str1);

gets(str2);

j=strlen(str1); /*求字符串1的长度*/

for (i=0;str2[i]!='\0';i++,j++) /*字符串合并*/

str1[j]=str2[i];

str1[j]='\0'; /*加上字符串结束标志*/

puts(str1);}

10.#include "stdio.h"

main()

{int i,n;

char str1[20],str2[20];

printf("input two strings:(no more than 20 characters)\n");

gets(str1); gets(str2);

n=strlen(str1)

printf("%d\n",str1[i]-str2[i]); }

六:1.main()

{int n;

printf("input n(n>0):\n");

scanf("%d",&n);

if (prime(n))

printf("%d is a sushu\n",n);

else printf("%d is not a sushu\n",n);}

int prime(int n)

{int flag=1,i;

for (i=2;i<=n/2&&flag==1;i++)

if (n%i==0) flag=0;

return(flag);}

2.#define N 3

convert(int array[3][3])

{ int i,j,t;

for (i=0;i

for (j=i+1;j

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;}

}

main()

{int i,j;

int a[N][N];

printf("input a:\n");

for (i=0;i

for (j=0;j

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

printf("Array a:\n");

for (i=0;i

{for (j=0;j

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

printf("\n");}

convert(a);

printf("a de zhuanzhi is:\n");

for (i=0;i

{for (j=0;j

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

printf("\n"); }

}

3. #include

#include

main()

{char str[100];

printf("input a string:\n") ;

gets(str);

inverse(str);

printf("the reversed string is:%s\n",str); } inverse(char str[])

{char t;

int i,j;

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

{ t=str[i];

str[i]=str[j];

str[j]=t; } }

4. #include

concat(char str1[],char str2[])

{ int i=0,j;

while (str1[i]!='\0')

i++;

for (j=0;str2[j]!='\0';i++,j++)

str1[i]=str2[j];

str1[i]='\0';}

main()

{char str1[100],str2[100];

gets(str1);gets(str2);

concat(str1,str2);

puts(str1);}

5. main()

{char str[80];

printf("input a string (4 ge shu zi zi fu):\n"); scanf("%s",str);

insert(str);

printf("result is:\n%s\n",str); }

insert(char str[])

{int i;

for (i=strlen(str);i>0;i--)

{ str[2*i]=str[i];

str[2*i-1]=' ';}

}

6. #include "stdio.h"

int i,ndight,nwhite,nletter,nother;

count(char str[])

{ ndight=nwhite=nletter=nother=0;

for (i=0;str[i]!='\0';i++)

if (str[i]>='0'&&str[i]<='9')

ndight++;

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

nletter++;

else if (str[i]==' ')

nwhite++;

else nother++; }

main()

{char text[80];

printf("input a string:\n");

gets(text);

count(text);

printf("ndight=%d,nletter=%d,nwhite=%d,nother=%d\n",ndight,nletter,nwhite,nother);} 7. #define N 10

#include

sort(char str[])

{int i,j;

char t;

for (i=1;i

for (j=0;j

if (str[j]>str[j+1])

{t=str[j];str[j]=str[j+1] ;str[j+1]=t;}}

main()

{char str[N];

int i ;

printf("Input 10 ge zi fu:\n");

gets(str);

sort(str);

printf("The sorted result:\n") ;

for(i=0;i

printf("%c",str[i]);}

8. #include

#include

#define N 10

void input_e(int num[],char name[N][8])

{int i;

for (i=0;i

{ printf("input gong hao:");

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

printf("input name:");

getchar();

gets(name[i]);}

for (i=0;i

printf("%5d%10s\n",num[i],name[i]);}

void sort(int num[],char name[N][8]) /*选择法排序*/

{int i,j,min,temp1;

char temp2[8];

for (i=0;i

{min=i;

for (j=i+1;j

if (num[j]

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=temp1;

strcpy(name[min],temp2);}

printf("the sorted result:\n");

for (i=0;i

printf("%5d%10s\n",num[i],name[i]);}

void search(int n,int num[],char name[N][8]) /*折半查找法*/

{int top,bott,mid,find;

find=0;

top=0;

bott=N-1;

if ((nnum[N-1]))

find=-1;

while ((find==0)&&(top<=bott))

{mid=(bott+top)/2;

if (n==num[mid])

{find=1; printf("%d name is:%s\n",n,name[mid]);}

else if (n

bott=mid-1;

else top=mid+1;}

if ((find==-1)||(find==0))

printf("%d is not found.\n",n);}

main()

{ int num[N],number,c,flag;

char name[N][8];

input_e(num,name);

sort(num,name);

for (flag=1;flag;)

{printf("please input chazhao de gonghao:"); /*输入查找的工号*/ scanf("%d",&number);

search(number,num,name);

printf("continue Y/N?"); /*是否继续查找*/

getchar();

c=getchar();

if (c=='N'||c=='n')

flag=0;}

}

9. #include "stdio.h"

#define MAX 10

main()

{ char str[MAX];

char c;

int i;

i=0;

printf("input number(16 jinzhi): "); /*输入一个十六进制的数*/ while((c=getchar())!='\n'&&i

{ str[i]=c;

i++; }

str[i]='\0';

printf("result is :%d\n",htod(str));}

int htod(char s[])

{int i,n;

n=0;

for(i=0;s[i]!='\0';i++)

{if (s[i]>='0'&&s[i]<='9')

n=n*16+s[i]-'0';

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

n=n*16+s[i]-'a'+10;

if (s[i]>='A'&&s[i]<='F')

n=n*16+s[i]-'A'+10;}

return(n);}

10. #define SW AP(a,b) t=a;a=b;b=t

main()

{ int a,b,t;

printf("input a,b:") ;

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

SW AP(a,b);

printf("result:a=%d,b=%d\n",a,b);}

11. #define SURPLUS(a,b) ((a)%(b))

main()

{int a,b;

printf("input a,b:");

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

printf("result is: %d\n",SURPLUS(a,b));}

12. main()

{int a,b,c;

printf("input a,b,c:");

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

printf("max=%d\n",max(a,b,c));}

int max(int x,int y,int z)

{int t;

t=(x>y ? x : y);

return(t>z?t:z);}

#define MAX(x,y) ((x)>(y)?(x):(y))

main()

{int a,b,c;

printf("input a,b,c:");

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

printf("max=%d\n",MAX(MAX(a,b),c));}

13. #include "stdio.h"

#define CHANGE 1

#define MAX 80

main()

{ char str[MAX];

int i;

printf("input a string:\n");

gets(str);

#if (CHANGE)

{ for (i=0;str[i]!='\0';i++)

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

else if (str[i]=='z'||str[i]=='Z')

str[i]=str[i]-25;}

#endif

printf("%s\n",str);}

七:1、main( )

{ int a[10],i,temp,*p=a;

printf("Please input array a:\n");

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

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

printf("array a:\n");

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

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

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

{ temp=p[i];

p[i]=p[10-i-1];

p[10-i-1]=temp;}

printf("\n Now array a:\n");

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

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

2、main( )

{ int a[3][3],*p,i,j;

printf("please input matrix:\n");

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

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

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

p=&a[0][0];

move(p);

printf("\n Now matrix:\n");

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

{ for(j=0;j<3;j++)

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

printf("\n");}

}

move(int *q)

{ int i,j,t;

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

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

{ t=*(q+3*i+j);

*(q+3*i+j)=*(q+3*j+i);

*(q+3*j+i)=t; }

}

3、#include

#include

#include

#include

main( )

{int binary();

void insert();

char *temp,*ptr1[6]={"BASIC","DATA","PASCAL","SQL","USE"}; int i;

ptr1[5]=malloc(20);

printf("\n");

printf("original string:\n");

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

printf("%s\n",ptr1[i]);

printf("input search string:\n");

temp=malloc(20);

gets(temp);

i=binary(ptr1,temp,5);

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

insert(ptr1,temp,5,i);

printf("output strings:\n");

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

printf("%s\n",ptr1[i]);}

int binary(char *ptr[],char *str,int n) {int hig,low,mid;

low=0;

hig=n-1;

if(strcmp(str,ptr[0])<0) return(0);

if(strcmp(str,ptr[hig])>0) return(n); while(low<=hig)

{mid=(low+hig)/2;

if(strcmp(str,ptr[mid])<0)

hig=mid-1;

else if(strcmp(str,ptr[mid])>0)

low=mid+1;

else return(mid);}

return(low);}

void insert(char *ptr[],char *str,int n,int i) {int j;

for(j=n;j>i;j--)

strcpy(ptr[j],ptr[j-1]);

strcpy(ptr[i],str);}

4、main( )

{ int i;

char *p[6],str[6][20];

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

p[i]=str[i];

printf("Input 6 strings:\n");

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

scanf("%s",p[i]);

sort(p);

printf("Now the strings:\n");

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

printf("%s\n",p[i]);}

sort(char *q[ ])

{ int i,j;

char *t;

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

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

if(strcmp(*(q+j),*(q+j+1))>0)

{ t=*(q+j);

*(q+j)=*(q+j+1);

*(q+j+1)=t;} }

5、main( )

{ int m;

char str1[20],str2[20],*p1,*p2;

printf("please input two strings:\n");

scanf("%s",str1);

scanf("%s",str2);

p1=str1;

p2=str2;

m=stringcmp(p1,p2);

printf("result is %d:\n",m);}

stringcmp(char *p1,char *p2)

{ int i=0;

while(*(p1+i)==*(p2+i))

if(*(p1+(i++))=='\0') return(0);

return((*p1+i)-*(p2+i));}

6、main( )

{ char str1[30],str2[30],str3[100];

int i=0,j=0,k=0;

printf("please input two strings:\n");

scanf("%s",str1);

scanf("%s",str2);

while(str1[i]!='\0' && str2[j]!='\0')

{ str3[k++]=str1[i++];

str3[k++]=str2[j++];}

while(str1[i]!='\0')

str3[k++]=str1[i++];

while(str2[j]!='\0')

str3[k++]=str2[j++];

str3[k]='\0';

printf("\n%s\n",str3);}

八:1、struct complex

{ float x; /*实部*/

float y; /*虚部*/}

main()

{ struct complex c1={5,3},c2={2,6};

float t1,t2;

t1=c1.x*c2.x - c1.y*c2.y;

t2=c1.x*2.y + c1.y*c2.x;

printf(“The two complexs product is:”);

printf(“%.2f%+.2f i\n”,t1,t2); }

2. struct student

{char name[10]; /*姓名*/

int number; /*学号*/

float x; /*成绩*/

float y; /*成绩*/ }

main( )

{struct student s[45];

int i;

void max();

void average();

void sort();

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

scanf(“%s%d%f%d”,s[i].name,&s[i].number,&s[i].x,&s[i].y); /*输入学生的姓名、学号、两门课程成绩*/

max(s,45);

average(s,45);

sort(s,45); }

void max(struct student *a,int n)

{ float temp;

char na[10];

int i ,num;

temp=a[0].x+a[0].y;

for (i=1;i

if(temp

{ temp=a[i].x+a[i].y;

strcmp(na,a[i].name);

num=a[i].number;}

printf(“%s,%d”,na,num);}

void average(struct student *b,int n)

{ float aver1,aver2,s1,s2;

int i ;

s1=s2=0;

for(i=0;i<45;i++) /*求每门课程的总成绩*/

{ s1+=b[i].x;

s2+=b[i].y;}

aver1=s1/45;

aver2=s2/45;

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

if(b[i].x

void sort(struct student *c,int n)

{ float t;

int i,j ;

struct student temp;

for (i=0;i

for(j=i+1;j

if(c[k].x

k=j;

if(k!=i)

{temp=c[i];

c[i]=c[k];

c[k]=temp;}

for(i=0;i

printf(“%s,%.2f\n”,c[i].n,c[i].x);}

3. typedef struct Ljian

{ int pname;

int wnum;

struct Ljian *next;}Part;/*用户自定义零件结构体类型*/ # include “stdio.h”

main( )

{ int n=1;

Part *head,*p1,*p2;

head=NULL;

p1=( Part * ) malloc (sizeof(struct Ljian)); /*创建第一个结点*/

scanf(“%d%d”,&p1->pname,&p1->wnum);

p1->next=NULL;

while(n<=10) /*将结点加入链表*/

{ if(n==1)

head=p1; /*是第一个结点,作表头*/

else

p2->next=p1; /*不是第一个结点,作表尾*/

p2=p1;

p1=( Part *) malloc(sizeof(struct Ljian)); /*开辟下一个结点*/

scanf(“%d%d”,&p1->pname,&p1->wnum);

p1->next=NULL;

n++;} }

4. #include

#include

#include

#define LEN sizeof(struct student)

typedef struct student

{ long num; /*学号*/

float score; /*成绩*/

struct student *next;

} STU; /*用户自定义学生结构体类型*/

STU *Create ( ) /*创建链表* /

{int n=0;

STU *p1,*p2,*head;

head=NULL;

p1=(STU *)malloc(LEN); /*创建第一个结点*/

scanf("%ld,%f",&p1->num,&p1->score);

p1->next=NULL;

while(p1->num!=0) /*将结点加入链表*/

{ ++n;

if(n==1) /*是第一个结点,作表头*/

head=p1;

else /*不是第一个结点,作表尾*/

p2->next=p1;

p2=p1;

p1=(STU *)malloc(LEN); /*开辟下一个结点*/

scanf("%ld,%f",&p1->num,&p1->score);

p1->next=NULL;}

free(p1); /*释放最后一个结点所占的内存*/

return (head); } /*返回链表的头指针*/

void print(STU *head) /*输出链表* /

{ STU *p;

p=head;

do

{ printf("%ld\t%5.1f\n",p->num,p->score);

p=p->next; }

while(p!=NULL);}

STU *merge(STU *p1,STU *p2) /*合并链表* /

{ STU *p,*head , *s1,*s2;

s1=p1;

s2=p2;

while(s1->next!=NULL)

s1=s1->next;/*将指针s1指向链表1的最后一个节点*/

while(s2->next!=NULL)

s2=s2->next;/*将指针s2指向链表2的最后一个节点*/

if(s1->numnum)

{ s1->next=p2;

head=p1;

}/*因为两个链表都是按学号升序排列,如果链表1的最后一个节点中的学号小于链表2的第一个节点中的学号,则直接将链表2插入到链表1的后面*/

else if(s2->numnum)

{s2->next=p1;

head=p2;

}/*如果链表2的最后一个节点中的学号小于链表1的第一个节点中的学号,则直接将链表1插入到链表2的后面*/

else

{ if(p1->numnum) /*确定两个链表的顺序* /

{ head=p=p1;p1=p1->next;}

else

{ head=p=p2;p2=p2->next;}

while(p1!=NULL && p2!=NULL)

if(p1->numnum)

{p->next=p1;

p=p1;

p1=p1->next;}

else

{ p->next=p2;

p=p2;

p2=p2->next;}

if(p1!=NULL)

p->next=p1;/*如果链表2的节点插入完,则将链表1直接插到后面*/ else

p->next=p2; /*如果链表1的节点插入完,则将链表2直接插到后面*/} return head;}

void main()

{ STU *listA,* listB,*head;

printf("Please input first link listA information:\n");

listA =Create ( );

print(listA);

printf("\nPlease input second link listB information:\n");

listB =Create ( ) ;

print(listB);

printf("\nThe merged link is:\n");

head=merge(listA, listB);

print(head);

getch( ); /*为便于观察结果,等待键入任意键*/}

九:1.#include

main()

{int num,num1=0xff00;

scanf("%d",&num);

num=num&num1;

num=num>>8;

printf("\n0x%x",num);}

2.#include

main()

{unsigned getbits(unsigned);

unsigned int a;

printf("\nInput an octobal number");

scanf("%o",&a);

printf("result:%o\n",getbits(a));}

unsigned getbits(unsigned value)

{int ij,m,n;

z=0;

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

{q=1;

for(j=1;j<=(16-i-1)/2;j++)

q=q*2;

a=value>>(16-i);

a=a<<15;

a=a>>15;

z=z+a*q;}

return z;}说明:上面是一个完整的程序,其中函数unsigned getbits(unsigned value)就是所要的函数。八进制数043526用二进制表示为:0100011101010110取其奇数位得到: 00010001用八进制表法为:021

十:1.#include

main(int argc,char *argv[])

{FILE *fp,fp1;

char ch;

int a=0,b=0,c=0,d=0;

/*a统计英文字母的个数,b统计数字的个数,C统计空格的个数,d统计其它字符的个数*/ if(argc!=3)

{printf("the number of arguments not correct!\n");

printf("Usage:program name filename\n");

exit(0);}

if((fp=fopen(argv[1], "w"))==NULL)

{printf("Can not opent this file!\n");

exit(0);}

for(;(ch=getchar())!='#';)

fputc(ch,fp);

fclose(fp);

if((fp=fopen(argv[1],"r"))==NULL)

{printf("can not open this file\n");

exit(0);}

if((fp=fopen(argv[2],"w"))==NULL)

{printf("can not open this file\n");

exit(0);}

for(;(ch=fgetc(fp))!=EOF;)

{putchar(ch);

if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) a++;

else if(ch>='0'&ch<='9') b++;

else if(ch==' ') c++;

else d++;

printf("\nLetters are:%3d,Numbers are:%3d,Blanks are:%3d,Others are:%3d",a,b,c,d);

fprintf(fp1,"Letters are:%3d,Numbers are:%3d,Blanks are:%3d,Others are:%3d",a,b,c,d);

fclose(fp1);

fclse(fp);}

2.#include

#include

#include

main()

{ FILE *fp;

int i,j;

char s1[10][10],s2[100],s[10];

/*s1数组存放10个字符串,s2数组存放连接后的字符串,s存放一个字符串的字符*/

for(i=0;i<10;i++) /*从标准输入设备键盘上读取10个字符串*/

gets(s1[i]);

if ((fp=fopen("string1.txt","w"))==NULL) /*假设10个字符串存放在string.txt文件中*/

{ printf("file can not open!\n");

exit(0);}

for(i=0;i<10;i++) /*将数组s1中的10个字符串写入fp指向的文件*/

{ fputs(s1[i],fp);

fputs("\n",fp);}

fclose(fp); /*关闭fp所指向的文件*/

if((fp=fopen("string1.txt","r"))==NULL)

{printf("file can not open!\n");

exit(0);} /*打开一个只读的文本文件*/

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

{fgets(s,10,fp); /*从fp指向的文件中读取一个字符串存入数组s*/

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

{if(s[j]=='\n') {s[j]='\0'; break;} }

strcat(s2,s);}

printf("%s",s2);

fclose(fp); /*关闭fp所指向的文件*/}

3.#include

struct kc

{int KNO;

int KNOM;};

main()

{ struct kc k[5],k1[5]; /*用结构体数组存放5个物资信息*/

int i,count=0;

FILE *fp,*fp1;

clrscr();

if((fp=fopen("CK","wb"))==NULL) /*以写方式打开CK文件*/

{ printf("can not open file.\n");

exit(0);}

for(i=0;i<5;i++) /*假设CK文件不存在,先建立CK文件*/

{ scanf("%d%d",&k[i].KNO,&k[i].KNOM);

if(fwrite(&k[i],sizeof(struct kc),1,fp)!=1)

{printf("file write error!\n"); break;} }

fclose(fp);

if((fp=fopen("CK","rb"))==NULL) /*以读方式打开CK文件*/

{ printf("can not open file.\n");

exit(0);}

if((fp1=fopen("XK","wb"))==NULL) /*以写方式打开XK文件*/

{ printf("can not open file.\n");

exit(0);}

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

{fread(&k[i],sizeof(struct kc),1,fp); /*向文件XK中写入有所有库存量大于100的物资编号和库存量*/

if(k[i].KNOM>100)

{ k1[count]=k[i];

fwrite(&k1[count],sizeof(struct kc),1,fp1);

count++;} }

fclose(fp1);

for(i=0;i<5;i++) /*读CK并输出有关内容*/

{ fread(&k[i],sizeof(struct kc),1,fp);

printf("\n%5d%5d",k[i].KNO,k[i].KNOM);}

if((fp1=fopen("XK","rb"))==NULL)

{ printf("can not open file.\n");

exit(0);}

for(i=0;i

{ fread(&k1[i],sizeof(struct kc),1,fp1);

printf("\n%5d%5d",k1[i].KNO,k1[i].KNOM);}

fclose(fp);

fclose(fp1);}

4.include

#include

main()

{FILE *fp;

int i,a[10],*p=a;

if((fp=fopen("DATA01.DAT","wb"))==NULL) /*以写方式打开DATA01.DA T文件*/

{printf("file can not open!\n");

exit(0);}

while(p

{scanf("%d",p++);

while(*(p-1)<=0)

{ printf("please input greater 0 numbers!\n");

p--;

scanf("%d",p++);}}

fwrite(a,sizeof(int),10,fp); /*将10个整数写入DA TA01.DA T文件中*/

fclose(fp);

if((fp=fopen("DATA01.DAT","rb"))==NULL) /*以读方式打开DA TA01.DAT文件*/

{printf("file can not open!\n");

exit(0);}

fread(a,sizeof(int),10,fp);/*读此文件,并输出*/

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

{if(i%5==0) printf("\n");

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

fclose(fp);}

5.#include

main()

{FILE *fp,fp1;

int i,a[10],b[10];

clrscr();

if((fp=fopen("DATA01.DAT","rb"))==NULL) /*以读方式打开DA TA01.DAT文件*/

{printf("file can not open!\n");

exit(0);}

if((fp=fopen("DATA01.DAT","wb"))==NULL) /*以写方式打开DA TA01.DAT文件*/

{printf("file can not open!\n");

exit(0);}

fread(a,sizeof(int),10,fp); /*读取DATA01.DAT文件中10个整数,放到数组a中*/

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

{ b[i]=a[i]+3;}

fwrite(b,sizeof(int),10,fp1); /*将a数组中10个整数,分别加3,放到数组b中,然后写到文件DA TA02.DAT中*/

fclose(fp);

fclose(fp1);}

汇编语言课后习题答案

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,若想用偏移地址寻到此单元。

C语言课后习题答案(最终)

第0章习题 1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数: (1)128 (2)511 (3)1024 (4)65535 (5)1048575 答: (1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400 (4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF 2. 将下列二进制数转化为十进制数和十六进制数: (1)1100110101B (2)101101.1011B 答: (1)821、335 (2)45.6875、2D.B 3. 写出下列数的原码、反码、补码:15、-20、-27/32 答: (1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.0010100 4. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少? 答: 0~65535、-128~127、-32768~32767 5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。 答: 结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。 6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么? 答:

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

习题一 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

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

解: 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

最新c语言课后习题答案汇总

c语言课后习题答案

第二章习题 2.什么叫做结构化算法?为什么要提倡结构化算法? 答:结构化算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。 跟结构化算法比较起来,非结构化算法有以下缺点: 流程不受限制的随意转来转去,使流程图豪无规律使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。 4. 第三章习题 1.#include #include void main() { unsigned int n;

float p,p1,r=0.09; scanf("%u",&n); p=pow(1+r,n); p1=(p-1)*100; printf("%5.2f%%\n",p1); } 运行结果:输入,回车,见结果: 2.#include #include int main() { int bj=1000; float r1,r2,r3,r5,r0,lx1,lx2,lx3,lx4,lx5; r1=0.0414; r2=0.0468; r3=0.0540; r5=0.0585; r0=0.0072; lx1=bj*r5; lx2=bj*(1+r2)*r3; lx3=bj*(1+r3)*r2; lx4=bj*pow(1+r1,5); lx5=bj*r0*5; printf("lx1=%f lx2=%f lx3=%f lx4=%f lx=5%f\n",lx1,lx2,lx3,lx4,lx5); return 0; } 运行结果: 3.#include #include int main() { long d,p; d=300000; p=6000; double m,r=0.01; m=log(p/(p-d*r))/log(1+r); printf("%4.2f",m); return 0;

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

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

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } 3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;

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

汇编语言课后习题答案郑 晓薇后的 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位数。根据源操作数的属性确定要访问的是字节单元还是字单元。

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

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(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, 根据结果影响其他标志位。

C语言课后作业答案

3-5-1正确 大写字母转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } else ch=ch; printf("%c\n",ch); } 3-5-2大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); ch=ch; { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } printf("%c\n",ch); } 3-5-3大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='a'&&ch<='z') ch=ch-32; else if(ch>='A'&&ch<='Z') ch=ch+32; else ch=ch; printf("%c\n",ch); } 3-6-1正确分段函数

#include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else { if(1 void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x>=10) y=3*x-8; else if(x>1) y=2*x+1; else y=x; printf("x=%d,y=%d\n",x,y); } 3 -6 -3正确 #include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else if(1=10) y=3*x-8; printf("x=%d,y=%d\n",x,y); } 计算器正确 #include void main() {

汇编语言程序设计第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 。

相关文档
相关文档 最新文档