《数据结构——用C语言描述》+课后题答案

《数据结构——用C语言描述》+课后题答案
《数据结构——用C语言描述》+课后题答案

(2)(2)O(n)

(3)(3)O(n)

(4)(4)O(n12)

(5)(5)执行程序段的过程中,x,y值变化如下:

循环次数x y

0(初始)91 100

1 9

2 100

2 9

3 100

………………

9 100 100

10 101 100

11 91 99

12 92 100

………………

20 101 99

21 91 98

………………

30 101 98

31 91 97

到y=0时,要执行10*100次,可记为O(10*y)=O(1)

1.5 2100 , (23)n , log2n , n12 ,n32, (32)n , n log2n , 2 n ,n! , n n

第二章线性表(参考答案)

在以下习题解答中,假定使用如下类型定义:

(1)顺序存储结构:

#define MAXSIZE 1024

typedef int ElemType; 实际上,ElemType可以是任意类型

typedef struct

{ ElemType data[MAXSIZE];

int last; last表示终端结点在向量中的位置

}sequenlist;

(2)链式存储结构(单链表)

typedef struct node

{ElemType data;

struct node *next;

}linklist;

(3)链式存储结构(双链表)

typedef struct node

{ElemType data;

struct node *prior,*next;

}dlinklist;

(4)静态链表

typedef struct

{ElemType data;

int next;

}node;

node sa[MAXSIZE];

2.1 头指针:指向链表的指针。因为对链表的所有操均需从头指针开始,即头指针具有标识链表的作用,所以链表的名字往往用头指针来标识。如:链表的头指针是la,往往简称为“链表la”。

头结点:为了链表操作统一,在链表第一元素结点(称为首元结点,或首结点)之前增加的一个结点,该结点称为头结点,其数据域不无实际意义(当然,也可以存储链表长度,这只是副产品),其指针域指向头结点。这样在插入和删除中头结点不变。

开始结点:即上面所讲第一个元素的结点。

2.2 只设尾指针的单循环链表,从尾指针出发能访问链表上的任何结点。

2·3

void insert(ElemType A[],int elenum,ElemType x)

向量A目前有elenum个元素,且递增有序,本算法将x插入到向量A中,并保持向量的递增有序。

{ int i=0,j;

while (i

for (j= elenum-1;j>=i;j--) A[j+1]=A[j]; 向后移动元素

A[i]=x; 插入元素

} 算法结束

2·4

void rightrotate(ElemType A[],int n,k)

以向量作存储结构,本算法将向量中的n个元素循环右移k位,且只用一个辅助空间。{ int num=0; 计数,最终应等于n

int start=0; 记录开始位置(下标)

while (num

{ temp=A[start]; 暂存起点元素值,temp与向量中元素类型相同

empty=start; 保存空位置下标

next=(start-K+n) %n; 计算下一右移元素的下标

while (next !=start)

{ A[empty]=A[next]; 右移

num++; 右移元素数加1

empty=next;

next=(next-K+n) %n; 计算新右移元素的下标

}

A[empty]=temp; 把一轮右移中最后一个元素放到合适位置

num++;

start++; 起点增1,若num

}

} 算法结束

算法二

算法思想:先将左面n-k个元素逆置,接着将右面k个元素逆置,最后再将这n个元素逆置。

void rightrotate(ElemType A[],int n,k)

以向量作存储结构,本算法将向量中的n个元素循环右移k位,且只用一个辅助空间。{ ElemType temp;

for(i=0;i<(n-k)2;i++) 左面n-k个元素逆置

{temp=A[i]; A[i]=A[n-k-1-i]; A[n-k-1-i]=temp; }

for(i=1;i<=k;i++) 右面k个元素逆置

{temp=A[n-k-i]; A[n-k-i]=A[n-i]; A[n-i]=temp; }

for(i=0;i

{temp=A[i]; A[i]=A[n-1-i]; A[n-1-i]=temp; }

} 算法结束

2·5

void insert(linklist *L,ElemType x)

带头结点的单链表L递增有序,本算法将x插入到链表中,并保持链表的递增有序。{ linklist *p=L->next, *pre=L,*s;

p为工作指针,指向当前元素,pre为前驱指针,指向当前元素的前驱

s=(linklist *)malloc(sizeof(linklist));申请空间,不判断溢出

s->data=x;

while (p && p->data<=x) {pre=p; p=p->next;} 查找插入位置

pre->next=s; s->next=p; 插入元素

} 算法结束

2·6

void invert(linklist *L)

本算法将带头结点的单链表L逆置。

算法思想是先将头结点从表上摘下,然后从第一个元素结点开始,依次前插入以L为头结点的链表中。

{ linklist *p=L->next,*s;

p为工作指针,指向当前元素,s为p的后继指针

L->next=null;头结点摘下,指针域置空。算法中头指针L始终不变

while (p)

{s=p->next; 保留后继结点的指针

p->next=L->next; 逆置

L->next=p;

p=s; 将p指向下个待逆置结点

}

} 算法结束

2·7

(1) int length1(linklist *L)

本算法计算带头结点的单链表L的长度

{ linklist *p=L->next; int i=0;

p为工作指针,指向当前元素,i 表示链表的长度

while (p)

{ i++; p=p->next; }

return(i);

} 算法结束

(2) int length1(node sa[MAXSIZE])

本算法计算静态链表s中元素的个数。

{ int p=sa[0].next, i=0;

p为工作指针,指向当前元素,i 表示元素的个数,静态链指针等于-1时链表结束

while (p!=-1)

{ i++; p=sa[p].next; }

return(i);

} 算法结束

2·8

void union_invert(linklist *A,*B,*C)

A和B是两个带头结点的递增有序的单链表,本算法将两表合并成

一个带头结点的递减有序单链表C,利用原表空间。

{ linklist *pa=A->next,*pb=B->next,*C=A,*r;

pa,pb为工作指针,分别指向A表和B表的当前元素,r为当前逆置

元素的后继指针, 使逆置元素的表避免断开。

算法思想是边合并边逆置,使递增有序的单链表合并为递减有序的单链表。

C->next=null;头结点摘下,指针域置空。算法中头指针C始终不变

while (pa && pb) 两表均不空时作

if (pa->data<=pb->data) 将A表中元素合并且逆置

{ r=pa->next; 保留后继结点的指针

pa->next=C->next; 逆置

C->next=pa;

pa=r; 恢复待逆置结点的指针

}

else 将B表中元素合并且逆置

{ r=pb->next; 保留后继结点的指针

pb->next=C->next; 逆置

C->next=pb;

pb=r; 恢复待逆置结点的指针

}

以下while (pa)和while (pb)语句,只执行一个

while (pa) 将A表中剩余元素逆置

{ r=pa->next; 保留后继结点的指针

pa->next=C->next; 逆置

C->next=pa;

pa=r; 恢复待逆置结点的指针

}

while (pb) 将B表中剩余元素逆置

{ r=pb->next; 保留后继结点的指针

pb->next=C->next; 逆置

C->next=pb;

pb=r; 恢复待逆置结点的指针

}

free(B);释放B表头结点

} 算法结束

2·9

void deleteprior(linklist *L)

长度大于1的单循环链表,既无头结点,也无头指针,本算法删除*s 的前驱结点

{ linklist *p=s->next,*pre=s; p为工作指针,指向当前元素,

pre为前驱指针,指向当前元素*p的前驱

while (p->next!=s) {pre=p; p=p->next;} 查找*s的前驱

pre->next=s;

free(p); 删除元素

} 算法结束

2·10

void one_to_three(linklist *A,*B,*C)

A是带头结点的的单链表,其数据元素是字符字母、字符、数字字符、其他字符。本算法将A表分成

三个带头结点的循环单链表A、B和C,分别含有字母、数字和其它符号的同一类字符,利用原表空间。

{ linklist *p=A->next,r;

p为工作指针,指向A表的当前元素,r为当前元素的后继指针,使表避免断开。

算法思想是取出当前元素,根据是字母、数字或其它符号,分别插入相应表中。

B=(linklist *)malloc(sizeof(linklist));申请空间,不判断溢出

B->next=null; 准备循环链表的头结点

C=(linklist *)malloc(sizeof(linklist));申请空间,不判断溢出

C->next=null; 准备循环链表的头结点

while(p)

{ r=p->next; 用以记住后继结点

if (p->data>=’a’&&p->data<=’z’||p->data>=’A’&& p->data<=’Z’)

{p-> next=A->next; A->next=p;} 将字母字符插入A表

else if (p->data>=’0’&&p->data<=’9’)

{p->next=B->next; B->next=p;} 将数字字符插入B 表

else {p->next=C->next; C->next=p;} 将其它符号插入C 表

p=r; 恢复后继结点的指针

}while

} 算法结束

2·11

void locate(dlinklist *L)

L是带头结点的按访问频度递减的双向链表,本算法先查找数据x,

查找成功时结点的访问频度域增1,最后将该结点按频度递减插入链表中适当位置。

{ linklist *p=L->next,*q;

p为工作指针,指向L表的当前元素,q为p的前驱,用于查找插入位置。

while (p && p->data !=x) p=p->next; 查找值为x的结点。

if (!p) return (“不存在值为x的结点”);

else { p->freq++; 令元素值为x的结点的freq域加1 。

p->next->prir=p->prior; 将p结点从链表上摘下。

p->prior->next=p->next;

q=p->prior; 以下查找p结点的插入位置

while (q !=L && q->freqprior;

p->next=q->next; q->next->prior=p; 将p结点插入

p->prior=q; q->next=p;

}

} 算法结束

第三章栈和队列(参考答案)

从数据结构角度看,栈和队列是操作受限的线性结构,其顺序存储结构

和链式存储结构的定义与线性表相同,请参考教材,这里不再重复。

3.1 1 2 3 4 2 1 3 4 3 2 1 4 4 3 2 1

1 2 4 3 2 1 4 3 3 2 4 1

1 3

2 4 2

3 1

4 3 4 2 1

1 3 4

2 2

3

4 1

1 4 3

2 2 4

3 1

设入栈序列元素数为n,则可能的出栈序列数为C2n n=(1n+1)*(2n!(n!)2)

3.2 证明:由jp k说明p j在p k之后出栈,即p j被p k压在下面,后进先出。由以上两条,不可能存在i

3.3 void sympthy(linklist *2) 前一半字符进栈

{ push(s,p->data); p=p->next; }

if (n % 2 !==0) p=p->next; 奇数个结点时跳过中心结点

while (p && p->data==pop(s)) p=p->next;

if (p==null) printf(“链表中心对称”);

else printf(“链表不是中心对称”);

} 算法结束

3.4

int match()

从键盘读入算术表达式,本算法判断圆括号是否正确配对

(init s;初始化栈s

scanf(“%c”,&ch);

while (ch!=’#’) ’#’是表达式输入结束符号

switch (ch)

{ case ’(’: push(s,ch); break;

case ’)’: if (empty(s)) {printf(“括号不配对”); exit(0);} pop(s);

}

if (!empty(s)) printf(“括号不配对”);

else printf(“括号配对”);

} 算法结束

3.5

typedef struct 两栈共享一向量空间

{ ElemType v[m]; 栈可用空间0—m-1

int top[2] 栈顶指针

}twostack;

int push(twostack *s,int i, ElemType x)

两栈共享向量空间,i是0或1,表示两个栈,x是进栈元素,

本算法是入栈操作

{ if (abs(s->top[0] - s->top[1])==1) return(0); 栈满

else {switch (i)

{case 0: s->v[++(s->top)]=x; break;

case 1: s->v[--(s->top)]=x; break;

default: printf(“栈编号输入错误”); return(0);

}

return(1); 入栈成功

}

} 算法结束

ElemType pop(twostack *s,int i)

两栈共享向量空间,i是0或1,表示两个栈,本算法是退栈操作

{ ElemType x;

if (i!=0 && i!=1) return(0); 栈编号错误

else {switch (i)

{case 0: if(s->top[0]==-1) return(0);栈空

else x=s->v[s->top--];break;

case 1: if(s->top[1]==m) return(0);栈空

else x=s->v[s->top++]; break;

default: printf(“栈编号输入错误”);return(0);

}

return(x); 退栈成功

}

} 算法结束

ElemType top (twostack *s,int i)

两栈共享向量空间,i是0或1,表示两个栈,本算法是取栈顶元素操作

{ ElemType x;

switch (i)

{case 0: if(s->top[0]==-1) return(0);栈空

else x=s->v[s->top]; break;

case 1: if(s->top[1]==m) return(0);栈空

else x=s->v[s->top]; break;

default: printf(“栈编号输入错误”);return(0);

}

return(x); 取栈顶元素成功

} 算法结束

3.6

void Ackerman(int m,int n)

Ackerman 函数的递归算法

{ if (m==0) return(n+1);

else if (m!=0 && n==0) return(Ackerman(m-1,1);

else return(Ackerman(m-1,Ackerman(m,n-1))

} 算法结束

3.7

(1) linklist *init(linklist *q)

q是以带头结点的循环链表表示的队列的尾指针,本算法将队列置空

{ q=(linklist *)malloc(sizeof(linklist));申请空间,不判断空间溢出

q->next=q;

return (q);

} 算法结束

(2) linklist *enqueue(linklist *q,ElemType x)

q是以带头结点的循环链表表示的队列的尾指针,本算法将元素x入队

{ s=(linklist *)malloc(sizeof(linklist));申请空间,不判断空间溢出

s->next=q->next; 将元素结点s入队列

q->next=s;

q=s; 修改队尾指针

return (q);

} 算法结束

(3) linklist *delqueue(linklist *q)

q是以带头结点的循环链表表示的队列的尾指针,这是出队算法

{ if (q==q->next) return (null); 判断队列是否为空

else {linklist *s=q->next->next; s指向出队元素

if (s==q) q=q->next; 若队列中只一个元素,置空队列

else q->next->next=s->next; 修改队头元素指针

free (s); 释放出队结点

}

return (q);

} 算法结束。算法并未返回出队元素

3.8

typedef struct

{ElemType data[m]; 循环队列占m个存储单元

int front,rear; front和rear为队头元素和队尾元素的指针

约定front指向队头元素的前一位置,rear指向队尾元素

}sequeue;

int queuelength(sequeue *cq)

cq为循环队列,本算法计算其长度

{ return (cq->rear - cq->front + m) % m;

} 算法结束

3.9

typedef struct

{ElemType sequ[m]; 循环队列占m个存储单元

int rear,quelen; rear指向队尾元素,quelen为元素个数

}sequeue;

(1) int empty(sequeue *cq)

cq为循环队列,本算法判断队列是否为空

{ return (cq->quelen==0 ? 1: 0);

} 算法结束

(2) sequeue *enqueue(sequeue *cq,ElemType x)

cq是如上定义的循环队列,本算法将元素x入队

{if (cq->quelen==m) return(0); 队满

else { cq->rear=(cq->rear+1) % m; 计算插入元素位置

cq->sequ[cq->rear]=x; 将元素x入队列

cq->quelen++; 修改队列长度

}

return (cq);

} 算法结束

ElemType delqueue(sequeue *cq)

cq是以如上定义的循环队列,本算法是出队算法,且返回出队元素

{if (cq->quelen==0) return(0); 队空

else { int front=(cq->rear - cq->quelen + 1+m) % m; 出队元素位置

cq->quelen--; 修改队列长度

return (cq->sequ[front]); 返回队头元素

}

} 算法结束

第四章串 (参考答案)

在以下习题解答中,假定使用如下类型定义:

#define MAXSIZE 1024

typedef struct

{ char data[MAXSIZE];

int curlen; curlen表示终端结点在向量中的位置

}seqstring;

typedef struct node

{char data;

struct node *next ;

}linkstring;

4.2 int index(string s,t)

s,t是字符串,本算法求子串t在主串s中的第一次出现,若s串中包含t串,返回其第一个字符在s中的位置,否则返回0

{m=length(s); n=length(t);

i=1;

while(i<=m-n+1)

if(strcmp(substr(s,i,n),t)==0) break;

else i++;

if(i<=m-n+1) return(i);模式匹配成功

else return(0);s串中无子串t

}算法index结束

4.3 设A=” ”, B=”mule”, C=”old”, D=”my” 则:

(a)(a)strcat(A,B)=”mule”

(b)(b)strcat(B,A)=”mule”

(c)(c)strcat(strcat(D,C),B)=”myoldmule”

(d)(d)s ubstr(B,3,2)=”le”

(e)(e)substr(C,1,0)=” ”

(f)(f)strlen(A)=0

(g)(g)strlen(D)=2

(h)()replace(C,2,2,”k”)=”ok”

4.4 将S=“(xyz)*”转为T=“(x+z)*y”

S=concat(S, substr(S,3,1)) ”(xyz)*y”

S=replace(S,3,1,”+”) ”(x+z)*y”

4.5

char search(linkstring *X, linkstring *Y)

X和Y是用带头结点的结点大小为1的单链表表示的串,本算法查找X中第一个不在Y中出现的字符。算法思想是先从X中取出一个字符,到Y中去查找,如找到,则在X中取下一字符,重复以上过程;若没找到,则该字符为所求

{ linkstring *p, *q,*pre; p,q为工作指针,pre控制循环

p=X->next; q=Y->next; pre=p;

while (p && q)

{ ch=p->data; 取X中的字符

while (q && q->data!=ch) q=q->next; 和Y中字符比较

if (!q) return(ch); 找到Y中没有的字符

else { pre=p->next; 上一字符在Y中存在,

p=pre; 取X中下一字符。

q=Y->next; 再从Y的第一个字符开始比较

}

}

return(null); X中字符在Y中均存在

} 算法结束

4.6

int strcmp(seqstring *S, seqstring *T)

S和T是指向两个顺序串的指针,本算法比较两个串的大小,若S串大于T串,返回1;若S串等于T串,返回0;否则返回-1

{int i=0;

while (s->ch[i]!=’\0’ && t->ch[i]!=’\0’)

if (s->ch[i]>t->ch[i]) return(1);

else if (s->ch[i]ch[i]) return(-1);

else i++; 比较下一字符

if (s->ch[i]!=’\0’&& t->ch[i]==0) return(1);

else if (s->ch[i]==’\0’&& t->ch[i]!=0) return(-1);

else return(0);

} 算法结束

4.7

linkstring *invert(linkstring *S, linkstring *T)

S和T是用带头结点的结点大小为1的单链表表示的串,S是主串,T是

模式串。本算法是先模式匹配,查找T在S中的第一次出现。如模式匹

配成功,则将S中的子串(T串)逆置。

{linkstring *pre,*sp, *tp;

pre=S; pre是前驱指针,指向S中与T匹配时,T 中的前驱

sp=S->next; tp=T->next;sp 和tp分别是S和T串上的工作指针

while (sp && tp)

if (sp->data==tp->data) 相等时后移指针

{sp=sp->next; tp=tp->next;}

else 失配时主串回溯到下一个字符,子串再以第一个字符开始

{pre=pre->next; sp=pre->next; tp=T->next;}

if (tp!=null) return (null); 匹配失败,没有逆置

else 以下是T串逆置

{tp=pre->next; tp是逆置的工作指针,现在指向待逆置的第一个字符pre->next=sp; 将S中与T串匹配时的前驱指向匹配后的后继

while (tp!=sp)

{ r=tp->next;

tp->next=pre->next;

pre->next=tp;

tp=r

}

}

} 算法结束

第五章多维数组和广义表(参考答案)

5.1 A[2][3][2][3]

A0000, A0001, A0002

A0010, A0011, A0012

A0100, A0101, A0102

A0110, A0111, A0112

A0200, A0201, A0202

A0210, A0211, A0212

将第一维的0变为1后,可列出另外18个元素。以行序为主(即行优先)时,先改变右边的下标,从右到左进行。

5.2 设各维上下号为c1…d1,c2…d2,c3…d3,每个元素占l个单元。

LOC(a ijk)=LOC(a c1c2c3)+[(i-c1)*(d2-c2+1)*(d3-c3+1)+(j-c2)*(d3-c3+1)+(k-c3)]*l

推广到n维数组!!(下界和上界)为(ci,di),其中1<=i<=n.则:其数据元素的存储位置为:

LOC(a j1j2….jn)=LOC(a c1c2…cn)+[(d2-c2+1)…(d n-c n+1)(j1-c1)+(d3-c3+1) …(d n-c n+1)

n

(j2-c2)+…+(d n-c n+1)(j n-1-c n-1)+(j n-c n)]*l=LOC(a c1c2c3)+ ∑αi(j i-c i)

i=1

n

其中αi∏(d k-c k+1)(1<=i<=n)

k=i+1

若从c开始,c数组下标从0开始,各维长度为b i(1<=i<=n)则:

LOC(a j1j2…jn)=LOC(a00…0)+(b2* b3*…* b n*j1+ b3* …* b n*+ j2…+ b n* j n-1+ j n)*l

n

=LOC(a00…0)+ ∑αi j i其中:αi=l,αi-1=b i*αi,1

5.3 (1) k=2*i+j ( 0<=k<3n-2 )

(2) i=(k+1)3 ( 0<=k<3n-2 )

j=k-2*i

5.4

void saddlepoint(int a[m][n]);

a是m行n列的二维数组,本算法求所有马鞍点

b是一维数组,存放一行中可能的马鞍点的列值,k记相等值个数

c是一维数组,存放某列可能马鞍点的行值,kk记相等值个数

{for(i=0;i

{min=a[i,0]; 最小值初始化

b[0]=0; k=1; b数组记最小值的列号,k记最小值的个数

for(j=1;j

if (a[i][j]

else if (a[i][j]==min) {b[k+1]=j; k++;} 有相等的最小值

for (jj=0;jj

{j=b[jj]; max=a[i][jj]; kk=0; a[i][j]是否是马鞍点

while (kk=a[i][kk]) kk++;

if(kk>=m)printf(“马鞍点 i=%d,j=%d,a[i][j]=%d”,i,j,a[i][j]);

} END OF for jj

} END OF for i

最坏时间复杂度为O(m*(n+n*m)). (最坏时所有元素相同,都是马鞍点)

解法2: 若矩阵中元素值互不相同,则用一维数组row记下各行最小值,再用一维数组col 记下各列最大值,相等者为马鞍点。

for (i=0;i

{row[i]=a[i][0]; 最小值初始化

for (j=1;j

if (a[i][j]

}

for (j=0;j

{col[j]=a[0,j]; 最大值初始化

for (i=1;i

if (a[i][j]>col[j]) col[j]=a[i][j]; 重新确定最大值

}

for (i=0;i

for (j=1;j

if(row[i]==col[j])

printf(“马鞍点 i=%d,j=%d,a[i][j]=%d”,i,j,a[i][j]);

时间复杂度O( (m*n)).

解法3: 设定两个数组: max[0..n-1] 记各列的最大值所在行号

min[0..m-1] 记各行的最小值所在列号

第j 列的最大值为A[max[j]][j],第i行的最小值是A[i][min[i]]

void saddlepoint(int a[m][n]);

a是m行n列的二维数组,本算法求所有马鞍点

{ int max[]=0,min[]=0;for(i=0;i

for(i=0; i

for (j=0; j

{ if (A[i][j]>A[max[j]][j]) max[j]=i; 重新确定第j列最大值的行号if (A[i][j]

}

for (i=0;i

{j=min[i]; a[i][j]是否是马鞍点

if( max[j]==i) printf(“马鞍点 A[%d][%d]=%d”,i,j,a[i][j]);

} END OF for jj

}

时间复杂度为O(m*n+m).

5.5 (1)三元组表(行号0—5,列号0—5)

S=((0,0,15),(0,3,22),(0,5,-15),(1,1,11),(1,2,3),(2,3,-6),(4,0,91),(5,2,28))

(2)

5.6算法分析:两矩阵A和B相加的结果是一矩阵C,其元素C ij有三种情况;(1)C ij=A ij (B ij =0);(2)C ij=B ij(A ij =0);(3)C ij=A ij+B ij。在(3)种情况下,要看结果是否为0,C矩阵只有非零元素。

V oid matrixaddition(crosslist *A,*B)

稀疏矩阵A和B用十字链表存储结构,本算法将稀疏矩阵B加到矩阵A上{ca=A->next;cb=B->next;

while(ca!=A&&cb!=B)

设pa和pb为矩阵A和B想加时的工作指针

{pa=ca->right;pb=cb->right;}

if(pa==ca)ca=ca->next;A表在该行无非0元素;

else

if(pb==cb)cb=cb->nextB表在该行无非0元素;

else if(pb->colcol)B的非0元素插入A中;

{j=pb->col;pt=chb[j];pre=pt 取到表头指针;

while(pt->down_colcol)

{pre=pt;pt=pt->down;}

pre->down=pt->down;该结点从B表相应列摘下

i=pb->right;pt=chb[i];pre=pt;取B表行表头指针

while(pt->right->rowrow

{pre=pt;pt=pt->right;}

pre->right=pt->riht;该结点从B表相应行链表中摘下。

Pbt=pb;pb=pb->right;B表移至下一结点

以下是将pbt插入A表的相应列链表中

j=pbt->col;pt=cha[j];pre=pt;

while(pt->down !=cha[j]&&pt->down->rowrow)

{pre=pt;pt=pt->down}

pre->down=pbt;pbt->down=pt;

以下是将pbt插入A表相应行链表中

i=pbt->right;pt=cha[i];pre=pt;

while(pt->right !=cha[i]&&pt->right-colcol)

{pre=pt;pt=pt->right;}

pre->right=ptb;

ptb->right=pt;

}end of “if (pb->colcol)

else if(pa->col=pb->col)处理两表中行列相同的非0元素

{v=pa->data+pb->data;

if(v !=0)

{pa->data+=pb->data;pa=pa->right;

将pb从行链表中删除;pb=pb->right;

}

else{将pa,pb从链表中删除;然后

pa=pa->right;

pb=pb->right;

}

5.7 (1) ,则

n=n0+n1+n2+……+nm+ (1)

设树的分支数为B,有

n=B+1

n=1n1+2n2+……+mnm+1 (2)

由(1)和(2)有:

n0=n2+2n3+……+(m-1)nm+1

6.4

(1) k i-1 (i为层数)

(2) (n-2)k+1

(3) (n-1)*k+i+1

(4) (n-1)%k !=0; 其右兄弟的编号 n+1

6.5(1)顺序存储结构

注:#为空结点

6.6

(1) 前序 ABDGCEFH

(2) 中序 DGBAECHF

(3) 后序 GDBEHFCA

6.7

(1) 空二叉树或任何结点均无左子树的非空二叉树

(2) 空二叉树或任何结点均无右子树的非空二叉树

(3) 空二叉树或只有根结点的二叉树

6.8

int (0);

else { bl=(bl>br? bl+1: br+1); 左右子树高度的大者加1(根) }

} 算法结束

6.9

void preorder(cbt[],int n,int i);

cbt是以完全二叉树形式存储的n个结点的二叉树,i是数

组下标,初始调用时为1。本算法以非递归形式前序遍历该二叉树

{ int i=1,s[],top=0; s是栈,栈中元素是二叉树结点在cbt中的序号 top是栈顶指针,栈空时top=0

if (n<=0) { printf(“输入错误”);exit(0);}

while (i<=n ||top>0)

{ while(i<=n)

{visit(cbt[i]); 访问根结点

if (2*i+1<=n) s[++top]=2*i+1; 若右子树非空,其编号进栈

i=2*i; 先序访问左子树

}

if (top>0) i=s[top--]; 退栈,先序访问右子树

} END OF while (i<=n ||top>0)

} 算法结束

以下是非完全二叉树顺序存储时的递归遍历算法,“虚结点”用‘*’表示

void preorder(bt[],int n,int i);

bt是以完全二叉树形式存储的一维数组,n是数组元素个数。i是数

组下标,初始调用时为1。

{ if (i<=n && bt[i]!=’*’)

{ visit(bt[i]);

preorder(bt,n,2*i);

preorder(bt,n,2*i+1);

} 算法结束

6.10

int equal(bitree T1,bitree T2);

T1和T2是两棵二叉树,本算法判断T1和T2是否等价

T1和T2都是空二叉树则等价

T1和T2只有一棵为空,另一棵非空,则不等价

T1和T2均非空,且根结点值相等,则比较其左、右子树

{if (T1==null && T2==null) return(1); 同为空二叉树

else if (T1==null || T2==null) return(0); 只有一棵为空

else if (T1->data!=T2->data) return(0); 根结点值不等

else return(equal(T1->lchild,T2->lchild)&&equal(T1->rchild,T2->rchild)) 判左右子树等价

} 算法结束

6.11

void levelorder (bitree +1]; s是指针数组,数组中元素为二叉树节点的指针

top=0;

while (t!=null || top!=0)

{ while (t!=null) { visit(*t); s[++top]=t; t=t->lchild }

if (top!=0) { t=s[top--]; t=t->rchild;}

}

} 算法结束

void inorder (bitree *t); (中序非递归遍历)

top=0;

while ((t!=null || top!=0)

{ while (t!=null) { s[++top]=t; t=t->lchild }

if (top!=0) { t=s[top--]; visit(*t); t=t->rchild; }

} 算法结束

void postorder (bitree *t); (后序非递归遍历)

{typedef struct node

{ bitree *t; tag:0..1

} stack;

stack s[n+1] ;

top=0;

while (t || top)

{ while (t) { s[++top].t=t; s[top].tag=0; t=t->lchild; }

while (top && s[top].tag==1) { printf(s[top--].t->data:3);}

if (top) { s[top].tag=1; t=s[top].t->rchild ;}

}

} 算法结束

6.13

bitree *dissect(bitree **t,ElemType x)

二叉树t至多有一个结点的数据域为x,本算法拆去以x为根的子树

拆开后的第一棵树用t表示,成功拆开后返回第二棵二叉树

{bitree *p,*find;

if (*t!=null)

{ if ((*t)->data==x) 根结点数据域为x

{p=*t; *t=null;

return(p);

}

else {find=(dissect(&(*t)->lchild),x); 在左子树中查找并拆开若在左子树中未找到,就到右子树中查找并拆开

if (!find) find=(dissect(&(*t)->rchild),x);

return(find);

}

}

else return(null); 空二叉树

} 算法结束

6.14

int search(bitree t,ElemType x)

设二叉树t中,值为x的结点至多一个,本算法打印x的所有祖先

算法思想是,借助后序非递归遍历,用栈装遍历过程的结点,当查到

值为x的结点时,栈中元素都是x的祖先

{ typedef struct

int tag;

}snode;

snode s[];

int top=0;

while (t && t->data !=x || top)

{ while (t && t->data !=x) 沿左分支向下

{ s[++top].p=t; s[top].tag=0; t=t->lchild; }

if (t->data==x)

{for (i=1;i<=top;++i) printf(“%c\n”,s[i].p->data); 输出,设元素为字符

return(1);

}

else

while (top>0 && s[top].tag==1) top--;退出右子树已访问的结点

if (top>0) 置访问标志1,访问右子树

{s[top].tag=1;t=s[top].p; t=t->rchild; }

}

return(0); 没有值为x的结点

} 算法结束

6.15 中序序列

后序序列

前序序列ABCDEFGH

6.16

null

只有空指针处才能加线索。

6.17

bitree *search(bitree *p)

查找前序线索二叉树上给定结点p的前序后继

{ if (p->ltag==1) return(p->rchild);左标记为1时,若p的右子树非空,p的右子树的根p->rchild为p的后继;若右子树为空,p->rchild指向后继

else return(p->lchild); 左标记为0时,p的左子女p->lchild为p的后继 .

} 算法结束

6.18 bitree *search(b:tree *p)

在后序线索二叉树中查找给定结点的后序前驱的算法

{ if(p->rtag==0) return(p->rchild); p有右子女时,其右子女p->rchild是p的后序前驱else return(p->lchild);

p的左标记为0,左子女p->lchild是后序前驱, 否则,线索p->lchild指向p的后序前驱

}

6.19

前序序列:ABCDEFGHIJKLMPQRNO

后序序列:BDEFCAIJKHGQRPMNOL

6.21

6.22

7,19,2,6,32,3,21,10其对应字母分别为a,b,c,e,f,g,,i<>j.

{ visited[1..n]=0;found=0;

scanf (&i,&j);

dfs (i);

if (found) printf (” 顶点”,i,”和顶点 ”,j,”有路径 ”);

else printf (” 顶点”,i,”和顶点 ”,j,”无路径 ”);

} void connect_DFS

(2)宽度优先遍历

全程变量,调用函数与(1)相同,下面仅写宽度优先遍历部分。

void bfs(vtxptr x)

{ initqueue(q);enqueue(q,x);

while (!empty(q));

{ y=delqueue(q);

if (y= =j)

{ found=1;exit(0);}有通路,退出

else {p=g[x].firstarc;第一邻接点

while (p!=null)

{k=p->adjvex;

if (! Visted[k]) enqueue(q,k);

p=p->nextarc

}

} if(y= =j)

}while(!empty(q))

7.5。假定该有向图以邻接表存储,各顶点的邻接点按增序排列

DFS 序列:V1,V3,V6,V7,V4,V2,V5,V8

BFS 序列:V1,V3,V4,V6,V7,V2,V5,V8

DFS 森林 BFS 森林 V1 V2 V1

V2

V3 V4 V3

V4 V5

V5

V6 V7

V6 V8 V8

V7

7.6简单回路指起点和终点相同的简单路径。算法基本思想是利用图的遍历,以顶点VK 开始,若遍历中再通到VK ,则存在简单回路,否则不存在简单回路。

Adjlisttp g ; visited[1..n]=0;

Int found =0;全程变量

Int dfs(btxptr x)

从k 顶点深度优先遍历图g ,看是否存在k 的简单回路

{ visited[x]=1;

p=g[x].firstarc;

while(p!=null)

{ w=p->adjvex;

if(w= =k)

{ found=1;exit(0);}有简单回路,退出

if (!visited[k] ) dfs(w );

p=p->nextarc;

}while(p!=null)

} dfs

7

统计学第七章、第八章课后题答案

统计学复习笔记 第七章参数估计 一、思考题 1.解释估计量和估计值 在参数估计中,用来估计总体参数的统计量称为估计量。估计量也是随机变量。如样本均值,样本比例、样本方差等。 根据一个具体的样本计算出来的估计量的数值称为估计值。 2.简述评价估计量好坏的标准 (1)无偏性:是指估计量抽样分布的期望值等于被估计的总体参数。 (2)有效性:是指估计量的方差尽可能小。对同一总体参数的两个无偏估计量,有更小方差的估计量更有效。 (3)一致性:是指随着样本量的增大,点估计量的值越来越接近被估总体的参数。 3.怎样理解置信区间 在区间估计中,由样本统计量所构造的总体参数的估计区间称为置信区间。置信区间的论述是由区间和置信度两部分组成。有些新闻媒体报道一些调查结果只给出百分比和误差(即置信区间),并不说明置信度,也不给出被调查的人数,这是不负责的表现。因为降低置信度可以使置信区间变窄(显得“精确”),有误导读者之嫌。在公布调查结果时给出被调查人数是负责任的表现。这样则可以由此推算出置信度(由后面给出的公式),反之亦然。 4.解释95%的置信区间的含义是什么 置信区间95%仅仅描述用来构造该区间上下界的统计量(是随机的)覆盖总体参数的概率。也就是说,无穷次重复抽样所得到的所有区间中有95%(的区间)包含参数。 不要认为由某一样本数据得到总体参数的某一个95%置信区间,就以为该区间以的概率覆盖总体参数。 5.简述样本量与置信水平、总体方差、估计误差的关系。 1. 估计总体均值时样本量n 为 (z 2 )2 2其中: E z n n E22 其中: E z 2 n 2. 样本量n 与置信水平1- α、总体方差、估计误差E之间的关系为与置信水平 成正比,在其他条件不变的情况下,置信水平越大,所

嵌入式习题答案

嵌入式习题答案Last revision on 21 December 2020

第一章习题答案 1.什么是嵌入式系统请列举几个常见的嵌入式系统。 答:根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是控制、监视或者辅助设备、机器和生产线运行的装置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从产品的应用角度加以定义的,由此可以看出嵌入式系统是软件和硬件的综合体,可以涵盖机械等附属装置。 目前被我国科学家普遍认同的定义是:嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。 常见的嵌入式系统:手机,DVD,路由器,核磁共振仪,全自动洗衣机。 2.嵌入式系统与通用计算机有哪些区别 答:(1) 以应用为中心;(2) 以计算机技术为基础(3) 软件和硬件可裁减(4) 对系统性能要求严格(5)软件的固件化(6)需要专用的开发工具 3.嵌入式系统的发展分为哪几个阶段 答:第一阶段:无操作系统的嵌入算法阶段。第二阶段:以嵌入式CPU为基础,以简单操作系统为核心的嵌入式系统。第三阶段:以嵌入式操作系统为标志的嵌入式系统。第四阶段:以基于Internet为标志的嵌入式系统。 4.请列举嵌入式系统的主要应用领域。 答:(1)工业控制领域(2)交通运输领域(3)消费电子产品(4)家电领域(5)通信领域(6)商业和金融领域(7)环境监测领域(8)医疗领域(9)建筑领域(10)军事国防领域(11)航天航空领域

嵌入式复习思考题(1)答案

嵌入式复习思考题及答案(1) 一、简答题 1、ARM9有哪几种工作模式?其中哪几种属于特权模式?哪几种属于几种异常模式? 答:有用户、系统、管理、中止、未定义、普通中断、快速中断。系统、管理、中止、未定义、普通中断、快速中断属于特权模式。管理、中止、未定义、普通中断、快速中断属于几种异常模式。 2、ARM9有哪2种工作状态?各自特点?实现状态切换指令的是什么? 答:ARM状态与Thumb状态。ARM状态指令是32位;Thumb状态指令是16位。切换指令是BX。 3、简述ARM9在不同工作模式下寄存器分布情况(用图表说明)。R13、R1 4、R15的固定用途;CPRS和SPRS名称及功能。 答:R13常作为堆栈指针SP、R14作为链接寄存器LR、R15作为程序计数器PC。CPRS是当前程序状态寄存器,包含条件代码、中断禁止位、当前处理器模式以及其他状态和控制信息。SPRS是程序状态保存寄存器,异常出现时用于保存CPRS的状态。 4 5 答:响应过程:1、将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14中; 2、将CPSR的内容保存到将要执行的异常中断对应的SPSR中; 3、根据异常类型CPSR中的运行模式位; 4、将相应的矢量地址赋值给PC,开始执行异常处理程序。还可设中断禁止位。 返回过程: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中; 2、将SPSR内容送回CPSR; 3、若在进入异常处理时设置了中断禁止位,要在此清除。 6、写出ARM9支持的寻址方式,各举一例。 答:略 7、写出指令LDRB/LDRH/LDR的区别。 答:LDRB将内存单元一个字节的数据扩展到32位装载到寄存器; LDRH将内存单元半字(两个字节)的数据扩展到32位装载到寄存器; LDR 将内存单元一个字的数据装载到寄存器。 8、写出LDM、STM指令用于数据块拷贝时对应的4种后缀以及用于堆栈操作对应的4种后缀。 解释各自的执行过程。 答:数据块拷贝后缀:IA操作后指针增;DA操作后指针减; IB操作前指针增;DB操作前指针减。 堆栈操作后缀:FD满递减;ED空递减;FA满递增;EA空递增。 9、ARM和Thumb两种状态下各自堆栈的生成方式有何不同?写出各自对应的入栈、出栈指令。答:ARM堆栈有4种生成方式满递增、满递减、空递增、空递减; 入栈指令:STM(FD\ED\FA\EA 4种后缀之一)出栈指令:LDM(FD\ED\FA\EA 4种后缀之一)Thumb堆栈采用满递减的生成方式。入栈指令:PUSH . 出栈指令:POP 10、写出条件代码NE、EQ的判断条件。 答:NE Z=0 (不相等);EQ Z=1 (相等) 11、B、BL及BX指令有何区别?写出无嵌套的子程序调用及返回指令。 答:B是简单的转移指令,实现向目的地址的简单的跳转;

王道俊_教育学课后习题与答案

第一章教育与教育学一、选择题 1.“以僧为师”,“以吏为师”是古代什么时期的教育特征? ( ) A.中国 B.埃及 C.希腊 D.罗马 2.以培养有文化修养和多种才能的政治家和商人为教育目的的是古代( ) A.斯巴达 B.埃及C.希腊 D.雅典 3.以培养忠于统治阶级的强悍的军人为教育目的是古代 ( ) A.希腊B.埃及 C.斯巴达 D.雅典 4.以注重身心的和谐发展,教育内容比较丰富,教育方法比较灵活为特征的是古代 ( ) A.希腊 B.埃及 C.斯巴达 D.雅典 5.以强调军事体育训练和政治道德灌输,教 育内容单一,教育方 法比较严厉为特征 是古代 ( ) A.希腊 B.埃及 C.斯巴达 D.雅典 6.初等义务教育普遍实施于 ( ) A.古代 B.文艺复兴后的欧洲 C.近代 D.现代 7.以“教育的终身化”为教育特征的是 ( ) A.古代 B.文艺复兴后的欧洲 C.近代 D.现代 8.以“教育的民主化”为教育特征的是 ( ) A.古代 B.文艺复兴后的欧洲 C.近代 D.现代 9.以“教育的多元化”是为教育特征的是 ( ) A.古代 B.文艺复兴后的欧洲 C.近代 D.现代 10.反映孔子教育思想的文献是 ( ) A.《学记》 B.《论语》C.《礼记》 D.《中庸》11.在教育史上主张“有教无类”的教育家是 ( ) A.孔子 B.孟子 C.墨翟 D.荀子 12.在教育史上提出“学而不思则惘,思而不学则殆”的教育家是 ( ) A.孔子 B.孟子 C.墨翟 D.荀子

13.在教育史上主张“不愤不启,不悱不发”的教育家是 ( ) A.孔子 B.孟子 C.墨翟 D.荀子 14.下述属于墨家主张的是 ( ) A.有教无类 B.兼爱C.复归人的自然本性D.化民成俗,其必由学15.下述属于孔子主张的是 ( ) A.有教无类 B.兼爱C.复归人的自然本性D.化民成俗,其必由学16.下述属于孔子主张的是 ( ) A.兼爱 B.“学而不思则惘,思而不学则殆” C.复归人的自然本性D.化民成俗,其必由学17.下述属于孔子主张的是 ( ) A.复归人的自然本性B.兼爱 C.“不愤不启,不悱不发” D.化民成俗,其必由学 18.下述属于道家的主张是 ( ) A.有教无类 B.兼爱C.复归人的自然本性D.化民成俗,其必由学19.由《学记》提出的教育主张是 ( ) A.有教无类 B.兼爱C.复归人的自然本性D.化民成俗,其必由学20.“道而弗牵,强而弗抑,开而弗达”出自 ( ) A.《学记》 B.《论语》C.《礼记》 D.《中庸》21.“学不躐等”出自( ) A.《学记》 B.《论语》C.《礼记》 D.《中庸》22.“建国君民,教学为先”这句话反映了 ( ) A.教育与政治的关系B.教育与经济的关系C.教育与文化的关系D.教育与科技的关系23.西方古代以其雄辩和与青年智者的问答法著名的教育家是 ( ) A.苏格拉底 B.柏拉图 C.亚里士多德 D.德莫克里特 24.下述著作中反映柏拉图的教育思想的是 ( ) A.《理想国》 B.《政治学》 C.《论演说家的教育》 D.《民本主义与教育》 25.反映古希腊百科全书

第八章--西方经济学-第五版课后习题答案word版本

第八章生产要素价格的决定 1.说明生产要素理论在微观经济学中的地位。 解答:第一,从商品的角度来看,微观经济学可以分为两个部分,即关于“产品”的理论和关于“要素”的理论。前者讨论产品的价格和数量的决定,后者讨论要素的价格和数量的决定。 第二,产品的理论和要素的理论是相互联系的。特别是,产品理论离不开要素理论,否则就不完全。这是因为,首先,产品理论在讨论产品的需求曲线时,假定了消费者的收入水平既定,但并未说明收入水平是如何决定的;其次,在推导产品的供给曲线时,假定了生产要素的价格既定,但并未说明要素的价格是如何决定的。这两点都与要素理论有关。因此,要素理论可以看成是产品理论的自然延伸和发展。 第三,在西方经济学中,产品的理论通常被看成是“价值”理论,要素理论通常被看成是“分配”理论。产品理论加上要素理论,或者,价值理论加上分配理论,构成了整个微观经济学的一个相对完整的体系。 2.试述完全竞争厂商的要素使用原则。 解答:第一,厂商在使用要素时同样遵循利润最大化原则,即要求使用要素的“边际成本”和“边际收益”相等。 第二,在完全竞争条件下,使用要素的边际收益等于“边际产品价值”(要素的边际产品和产品价格的乘积),而使用要素的边际成本等于“要素价格”。于是,完全竞争厂商使用要素的原则是:边际产品价值等于要素价格。 3.完全竞争厂商的要素使用原则与利润最大化产量原则有何关系? 解答:从表面上看,完全竞争企业(实际上也包括其他企业)在生产过程中似乎有两个不同的决策要做:第一,购买多少要素?这是所谓的“要素需求”问题——使用多少要素才能够使利润达到最大?第二,生产多少产量?这是所谓的“产品供给”问题——生产多少产量才能够使利润达到最大? 实际上,这两个问题是一回事。这是因为在企业的要素需求和产品供给之间存在着一定的关系:如要减少对要素的需求,则产品供给常常就不得不减少;反之,如要增加对产品的供给,则要素的需求常常又不得不增加。二者之间的关系就是所谓的生产函数:Q=Q(L)。这里,L为企业使用的要素数量(如劳动),Q为使用要素L所生产的产品数量。它们通过生产函数而“一一对应”。正是通过生产函数,企业关于使用要素的决策和关于生产产量的决策成为一枚硬币的两面:一旦企业决定了购买多少要素,它也就同时决定了应当生产多少产量;同样,一旦企业决定了生产多少产量,它也就同时决定了应当购买多少要素。 这样一来,我们就可以有两种不同的方式来讨论企业的生产决策:或者,先求出利润最大化的要素需求量,然后再根据生产函数,由要素的需求量求出相应的产品供给量;或者,先求出利润最大化的产品供给量,然后再根据生产函数,由产品的供给量求出相应的要素需求量。 4.试述完全竞争厂商及市场在存在和不存在行业调整情况下的要素需求曲线。 解答:第一,在完全竞争条件下,厂商对要素的需求曲线向右下方倾斜,即随着要素价格的下降,厂商对要素的需求量将增加。 第二,如果不考虑某厂商所在行业中其他厂商的调整,则该厂商的要素需求曲线就恰好与其边际产品价值曲线重合。 第三,如果考虑该厂商所在行业中其他厂商的调整,则该厂商的要素需求曲线将不再与边际产品价值曲线重合。这是因为随着要素价格的变化,如果整个行业所有厂商都调整自己的要素使用量从而都改变自己的产量的话,则产品的市场价格即会发生变化。产品价格的变化会反过来使每一个厂商的边际产品价值曲线发生变化。于是,厂商的要素需求曲线将不再等于其边际产品价值曲线。在这种情况下,厂商的要素需求曲线叫做“行业调整曲线”。行业调整曲线仍然向右下方倾斜,但比边际产品价值曲线要陡峭一些。 第四,在完全竞争条件下,市场的要素需求曲线等于所有厂商的要素需求曲线(行业调整曲线)的水平相加。

ARM嵌入式系统课后习题部分答案

A R M嵌入式系统课后 习题部分答案 SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

一填空题 嵌入式系统从大的方面分为(嵌入式系统硬件平台)和(嵌入式软件)两大部分。 驱动层程序一般包括(硬件抽象层HAL)、(板级支持包BSP)和(设备驱动程序)。 嵌入式系统核心是嵌入式处理器,可分为(嵌入式微处理器)、(嵌入式微控制器)、嵌入式DSP处理器和(嵌入式片上系统SoC)4大类。 处理器分为(ARM)和(Thumb)两种操作状态。 状态下,SP寄存器指的是(R13)、LR寄存器指的是(R14)、PC寄存器指的是(R15). 处理器支持的数据类型中,字节为(8)位、半字为(16)位、字为(32)位。 (-S)指令集包括(ARM)指令集和(Thumb)指令集。 指令用于从(存储器)中将一个32位的字数据传送到(目的寄存器)中。指出下面各条指令的寻址方式。 SUB R0,R1,R2 ;寻址方式:(寄存器寻址)。 SUBS R0,R0,#1 ;寻址方式:(立即寻址)。 MOV R0,R2,LSL#3 ;寻址方式:(寄存器移位寻址)。 SWP R1,R1,[R2] ;寻址方式:(寄存器间接寻址)。 LDR R2,[R3,#0x0C] ;寻址方式:(基址寻址)。 汇编语言源程序中语句一般有(指令)、(伪指令)、(伪操作)和宏指令组成。 对Flash存储器的编程可通过(JTAG仿真/调试器)、( ISP )和(IAP)3重方法来实现。 异常向量表可以来自4个不同的存储器区域,分别是(片内Flash )、(片内SRAM )、( Boot Block )和片外存储器。 系列的定时器主要用于3个方面:(对内部事件进行计数的间隔定时器)、(通过捕获输入实现脉宽解调器)、(自由运行的定时器)。二选择题 可以表示微控制器的缩略词是( B ) A. MPU B. MCU C. WDT 类存储器包括( ABD ) A. NOR Flash B. EPROM C. SRAM D. PROM 不属于ARM的系列是( D ) A. MCS-96 B. 80C51 C. LPC2000 处理器系列采用( A )级流水线。 A. 3 B. 5 C. 6 D. 8 下面ARM处理器模式中属于特权模式的有( BCD ) A. 用户模式 B. 中断模式 C. 系统模式 D. 管理模式 (或STM)指令允许一条指令最多传送( C )个寄存器。 A. 4 B. 8 C. 16 D. 24 指令限制在当前指令的( B )地址范围。

教育学的第二章课后练习题及答案附答案 (1)

第二章教育的产生与发展 一、填空题 1.广义的学校包括、、学校教育等部分。 2. 狭义的教育主要指。 3.教育的基本要素为教育者、受教育者和。 4.按照教育的目的是否正确,指导思想是否明确来看,教育的功能可以分为正向功能和。 5.从教育功能的呈现形式来划分,教育可分为显性功能和。 6.教育的“生产力说”是是建立在人力资本理论的基础之上的,其代表人 物为美国著名经济学家。 7.教育的生物起源论由法国社会学家、哲学家首倡,认为教育活 动是人类社会活动的一种。 8.教育的心理起源论由美国学者首倡,认为教育起源于原始公社 中儿童对成人的本能的无意识的。 9.教育的劳动起源说是由前苏联学者于20世纪30年代提出的,认为教育 产生于社会的。 10.从教育的演进过程看,教育大致经历了原始形态的教育、、 近代社会的教育、现代社会的教育四个阶段。 11.在我国奴隶社会教育的主要内容是六艺,是指。 12.学校教育的产生是古代社会教育的一个突出特点,学校教育是形式化教 育与非形式化教育的分水岭,它产生于社会时期。 13.“中学为体,西学为用”是我国近代教育总的指导思想,提出这一思想 的清末湖广总督。 14.1904年颁布的“葵卯学制”是我国近代第一部真正意义上的学制,它为 我国后来学制的进一步完善奠定了良好的基础。 15.德国皇帝腓特烈二世于年,颁布了《乡村学校规程》,规定5至13岁儿童必须接受义务教育。 16.终身教育的思想始于20世纪60年代,由联合国教科文组织成人教育局 局长法国人提出。

二、单项选择 1.《中华人民共和国教育法》颁布的时间是()。 A.1993年 B.1995年 C.1998年 D.1996年 2.学校教育产生于()。 A.奴隶社会初期 B.奴隶社会末期 C.封建社会初期 D.原始社会末期 3.“劳心者治人,劳力者治于人,治于人者食人,治人者食于人”反映了古 代教育的()特点。 A.严格的等级性B.教育与生产实践的分离和对立 C.教育目标明确D.鲜明的阶级性 4.世界上最早颁布义务教育法的国家是()。 A.英国B.法国C.德国D.美国 5.班级授课制首行于()。 A.17世纪的欧洲 B.16世纪的亚洲C.17世纪的亚洲D.16世纪的欧洲 6. 6.“面向现代化,面向世界,面向未来”即“三个面向”提出的时间是()。 A.1982年B.1983年C.1985年D.1980年 7.认为教育起源于动物本能活动的观点属于()。 A.心理起源论 B.劳动起源论 C.需要起源论 D.生物起源论 8.认为教育起源于儿童对成人无意识的模仿的观点属于()。 A.需要起源论 B.心理起源论 C.生物起源论 D.劳动起源论 9.心理起源论的主要代表人物是()。 A.利托尔诺 B.斯金纳 C.孟禄 D.沛西·能 10.我国奴隶社会的教育内容主要是()。 A.五经 B.自然科学 C.六艺 D.四书 11.首次对班级授课制给予系统的理论描述和概括的教育家是()。 A.赫尔巴特 B.夸美纽斯 C.凯洛夫 D.柏拉图 12.我国古代中央官学首创于()。 A.明代 B.汉代 C.清代 D.唐代 13.中国传统文化的主流是()。 A.儒家文化B.墨家文化C.宗教文化D.道家文化 14.终身教育思想的提出者是()。 A.孟禄B.利托尔诺C.保罗·朗格朗D.斯金纳

(完整word版)西方经济学(微观经济学)课后练习答案第八章

微观第八章习题 一、名词解释 引致需求 联合需求 边际产品价值 边际收益产品 边际要素成本 完全竞争要素市场 买方垄断 卖方垄断 二、选择题 1、下列各项中不属于生产要素的是( D ) A .企业管理者的管理才能 B. 农民拥有的土地 C .用于生产的机器厂房 D. 在柜台上销售的服装 2、完全竞争厂商对生产要素的需求曲线向右下方倾斜的原因在于( ) A.要素的边际成本递减 B.要素的边际产量递减 C.要素生产的产品的边际效用递减 D.要素参加生产的规模报酬递减 3、在产品X 市场和要素K 、L 的市场都是完全竞争市场的厂商,利润最大化的条件是( D ) A .X X X P MC MC =,且上升 B .L K L K MP MP P P = C .1L K L K X MP MP P P MC == D .11L K L K X X MP MP P P MC P === 4、对于一个垄断企业(其所处要素市场是完全竞争的),投入品M 的价格为20元,边际产量为5,产品价格是4元,则这个企业的产量( ) A.未达到利润最大化,应减少产量 B.未达到利润最大化,应扩大产量 C.生产出利润最大化,但是成本未达到最小化 D.在成本最小条件下实现利润最大化产量 5、市场中单个厂商对某种生产要素的需求曲线同全体厂商对该种生产要素的需求曲线之间的关系表现为( ) A.两者是重合在一起的 B.前者较后者平坦 C.前者较后者陡峭 D.无法确定 6、在一个完全竞争的市场中,追求利润最大化的厂商的产品价格上升时,将引起劳动的边际产品价值( ),从而导致劳动的需求曲线( ) A.降低,右移 B.增加,左移 C.增加,右移 D.降低,左移

ARM嵌入式系统基础教程第二版课后习题答案

第1章嵌入式系统概述 (1)举出3个本书中未提到的嵌入式系统的例子。 答:键盘、鼠标、扫描仪。 (2)什么叫嵌入式系统? 答:嵌入到对象体系中的专用计算机应用系统。 (3)什么叫嵌入式处理器?嵌入式处理器分为哪几类? 答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。 (4)什么是嵌入式操作系统?为何要使用嵌入式操作系统? 答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。3.充分发挥了32位CPU的多任务潜力。 第2章 ARM7体系结构 1.基础知识 (1)ARM7TDMI中的T、D、M、I的含义是什么? 答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。 (2)ARM7TDMI采用几级流水线?使用何种存储器编址方式? 答:3级;冯·诺依曼结构。 (3)ARM处理器模式和ARM处理器状态有何区别? 答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。 (4)分别列举ARM的处理器模式和状态? 答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。 (5)PC和LR分别使用哪个寄存器? 答:PC:R15;LR:R14。 (6)R13寄存器的通用功能是什么? 答:堆栈指针SP。 (7)CPSR寄存器中哪些位用来定义处理器状态?

嵌入式SQL习题答案

9.3.1 a) void closestMatchPC() { EXEC SQL BEGIN DECLARE SECTION; char manf[], SQLSTATE[6]; int targetPrice, float tempSpeed, speedOfClosest; char tempModel[4], modelOfClosest[4]; int tempPrice, priceOfClosest; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE pcCursor CURSOR FOR SELECT model, price, speed FROM PC; EXEC SQL OPEN pcCursor; EXEC SQL FETCH FROM pcCursor INTO :modelOfClosest, :priceOfClosest, :speedOfClosest; if(NOT_FOUND) /* print message and exit */ ; while(1) { EXEC SQL FETCH pcCursor INTO :tempModel, :tempPrice, :tempSpeed; if (NOT_FOUND) break; if(|tempPrice-targetPrice|<|priceOfClosest-targetPrice|) { modelOfClosest = tempModel; priceOfClosest = tempPrice; speedOfClosest = tempSpeed; } } EXEC SQL SELECT maker INTO :manf FROM Product WHERE model = :modelOfClosest; printf("manf=%s, model=%d, speed=%d\n", manf, modelOfClosest, speedOfClosest); EXEC SQL CLOSE CURSOR pcCursor; }

《高等教育学》课后练习答案

第一章 一、基本概念 高等教育:从高等教育在整个学制体系中的位置来看高等教育是初等教育、中等教育、高等教育三级学制体系中的最高阶段,它是建立在完整的中等教育基础上的教育。从高等教育的性质看,高等教育是一种专业教育,是依据专业分工培养各类高级专门人才的社会活动(本质属性)。 高等教育化:即追求学术的,追求教育机会的均等。 人力资本理论:人力资本理论的奠基人舒尔茨在研究基础上提出资本分为两种:物质资本和人力资本。舒尔茨认为“人力资本”是最好的投资,学校教育和知识的增长是经济增长的主要源泉。于是,这成为美国经济发展的导向。教育是人类生产性投资。人力资本理论对美国经济的发展起重要作用。 中世纪大学:十二世纪在西欧产生了中世纪大学,其特点是由行会组织的,旨在保存和传递知识,培养训练有素的官司吏、通晓教义的牧师、懂得法理的法官和律师以及精通医术的医生。中世纪大学的办学目的与方向决定了其职能基本上是培养专门人才,而并不进行科学研究。中世纪大学的办学目的和模式后来在世界各地被广为效法。最早产生的中世纪大学是意大利的萨莱诺大学、波隆那大学,法国的巴黎大学,英国的牛津大学、剑桥大学等。 柏林大学:1810年,洪堡以新人文主义思想为指导建立柏林大学,柏林大学把培养学者和学术发展看成自身的目的,从而确立了大学发展科学的职能。并提出“大学自主与学术自由”及“教学与科研相统一的原则”,自此,大学的职能从中世纪大学培训人才扩展到培养人才及发展科学。 《莫里尔法案》:1862年,美国总统林肯签署了著名的《莫里尔法案》。法案规定联邦政府按1860年分配的名额,每州凡有国会议员一人可获得三万英亩的公共土地或相等的土地期票,赠予各州作为建立人事农业和机械工程教育的学家的经费资助,并要求所建立的学院依照各州议会分别规定的方式,授予农业和机械专业有关知识。自此,美国诞生了一批“赠地学院”。

第八章课后练习题答案

第八章课后练习题答案 一、单项选择题 1.某企业全年需用A材料2400吨,每次订货成本为400元,每吨材料年储备成本12元,则每年最佳订货次数为( B ) A.12 B.6 C.3 D.4 2.企业采用什么程度的现金折扣,要与( C )结合起来考虑。 A.信用标准B.信用折扣 C.信用期间D.现金折扣政策 3.在下列各项中,属于应收账款机会成本的是( C ) A.收账费用B.坏账损失 C.应收账款占用资金的应计利息D.对客户信用进行调查的费用4.企业为了使其持有的交易性现金余额降到最低,可采取( A )A.力争现金流量同步B.使用现金浮游量 C.加速收款D.推迟应付款的支付 5.下列订货成本中属于变动性成本的是( C )。 A.采购人员计时工资B.采购部门管理费用 C.订货业务费D.存货占用资金的机会成本 6.在确定应收账款信用期的过程中,需要运用的计算公式有:( D )。 A.应收账款应计利息=应收账救占用资金×销售成本率 B.收益的增加=销售量增加×边际贡献率 C.应收账款占用资金=应收账款平均余额×边际贡献率 D.应收账款平均余额=日销售额×平均收现期 7.企业置存现金的原因,主要是为了满足( C )。 A.交易性、预防性、收益性需要B.交易性、投机性、收益性需要C.交易性、预防性、投机性需要D.预防性、收益性、投机性需要8.企业6月10日赊购商品时双方约定“2/10,N/20”。在6月15日有能力付款,但直到6月20 日才支付这笔款项。其目的是运用现金日常管理策略中的( D )。 A.力争现金流量同步B.使用现金浮游量 C.加速收款D.推迟应付款的支付 9.下列各项中,与再订货点无关的因素是( A )。 A.经济订货量B.日耗用量 C.交货日数D.保险储备量 10.现金管理的目标是( A )。 A.权衡流动性和收益性B.权衡流动性和风险性 C.权衡收益性和风险性D.权衡收益性、流动性、风险性11.已知某种存货的全年需要量为36000个单位,该种存货的再订货点为1000个单位,则其交货间隔时间应为( B )。 A.36天B.10天C.18天D.12天12.下列各项中不属于流动资产特点的是( D )。 A.形态的变动性B.数量的波动性 C.流动性D.投资的集中性和收回的分散性

《嵌入式》课后习题答案

第一章 1.简述嵌入式的定义 以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2.举例说明嵌入式系统的“嵌入性”、“专用性”、“计算机系统”的基本特征。 按照嵌入式系统的定义,嵌入式系统有3个基本特点,即“嵌入性”、“专用性”与“计算机”。 “嵌入性”由早期微型机时代的嵌入式计算机应用而来,专指计算机嵌入到对象体系中,实现对象体系的智能控制。当嵌入式系统变成一个独立应用产品时,可将嵌入性理解为内部嵌有微处理器或计算机。 “计算机”是对象系统智能化控制的根本保证。随着单片机向MCU、SoC发展,片内计算机外围电路、接口电路、控制单元日益增多,“专用计算机系统”演变成为“内含微处理器”的现代电子系统。与传统的电子系统相比较,现代电子系统由于内含微处理器,能实现对象系统的计算机智能化控制能力。 “专用性”是指在满足对象控制要求及环境要求下的软 硬件裁剪性。嵌入式系统的软、硬件配置必须依据嵌入对象

的要求,设计成专用的嵌入式应用系统。 3. 简述嵌入式系统发展各阶段的特点。 (1)无操作系统阶段:使用简便、价格低廉;(2)简单操作系统阶段:初步具有了一定的兼容性和扩展性,内核精巧且效率高,大大缩短了开发周期,提高了开发效率。 (3)实时操作系统阶段:系统能够运行在各种不同类型的微处理器上,具备了文件和目录管理、设备管理、多任务、网络、图形用户界面Graphic User Interface,GUI)等功能,并提供了大量的应用程序接口Application Programming Interface,API),从而使应用软件的开发变得更加简单。(4)面向Internet阶段:进入21世纪,Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式技术与Internet技术的结合正在推动着嵌入式系统的飞速发展 4.简述嵌入式系统的发展趋势。 (1)新的微处理器层出不穷,精简系统内核,优化关键算法,降低功耗和软硬件成本。(2)Linux、Windows CE、Palm OS等嵌入式操作系统迅速发展。(3)嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。

arm嵌入式系统课后习题部分答案

a r m嵌入式系统课后习题 部分答案 The pony was revised in January 2021

一填空题嵌入式系统从大的方面分为(嵌入式系统硬件平台)和(嵌入式软件)两大部分。 驱动层程序一般包括(硬件抽象层HAL)、(板级支持包BSP)和(设备驱动程序)。 嵌入式系统核心是嵌入式处理器,可分为(嵌入式微处理器)、(嵌入式微控制器)、嵌入式DSP处理器和(嵌入式片上系统SoC)4大类。处理器分为(ARM)和(Thumb)两种操作状态。 状态下,SP寄存器指的是(R13)、LR寄存器指的是(R14)、PC寄存器指的是(R15). 处理器支持的数据类型中,字节为(8)位、半字为(16)位、字为(32)位。 (-S)指令集包括(ARM)指令集和(Thumb)指令集。 指令用于从(存储器)中将一个32位的字数据传送到(目的寄存器)中。 指出下面各条指令的寻址方式。 SUB R0,R1,R2 ;寻址方式:(寄存器寻址)。

SUBS R0,R0,#1 ;寻址方式:(立即寻址)。 MOV R0,R2,LSL#3 ;寻址方式:(寄存器移位寻址)。 SWP R1,R1,[R2] ;寻址方式:(寄存器间接寻址)。 LDR R2,[R3,#0x0C] ;寻址方式:(基址寻址)。 汇编语言源程序中语句一般有(指令)、(伪指令)、(伪操作)和宏指令组成。 对Flash存储器的编程可通过(JTAG仿真/调试器)、( ISP )和(IAP)3重方法来实现。 异常向量表可以来自4个不同的存储器区域,分别是(片内Flash )、(片内SRAM )、( Boot Block )和片外存储器。 系列的定时器主要用于3个方面:(对内部事件进行计数的间隔定时器)、(通过捕获输入实现脉宽解调器)、(自由运行的定时器)。二选择题 可以表示微控制器的缩略词是( B ) A. MPU B. MCU C. WDT 类存储器包括( ABD )

教育学课后题答案 简答

1、简述教育的政治功能 教育通过培养政治领导人服务于政治; 教育通过传播一定的社会意识形态服务于政治; 教育通过提高全民族的素质服务于政治; 教育可以推进社会的民主进程。 2、简述教育的经济功能 教育通过再生产劳动力和提高劳动力的素质促进经济发展; 教育通过生产科学技术促进经济的发展; 教育服务本身就是一项巨大的产业 3、简述教育的文化功能 激活与传承文化的功能; 选择与整理文化的功能; 更新与创造文化的功能; 交流与融合文化的功能。 第三章 1、个体身心发展的一般规律有哪些? 答:身心发展的顺序性; 身心发展的阶段性; 身心发展的不均衡性; 身心发展的个别差异性; 身心发展的互补性 2、举例说明个体身心发展的不均衡性表现在哪些方面? 人身心发展的不均衡性主要表现在两个方面: 一是同一方面的发展发展速度,不同的年龄阶段发展是不均衡的。例如,人的身高体重有两个增长的高峰,第一个高峰出现在出生后的第一年,第二个高峰出现在青春发育期。在这两个高峰期内,身高体重的发展较之其他年龄阶段更为迅速。 二是不同方面发展的不均衡性。有的方面在较早的年龄阶段就已经达到较高的发展水平,有的则要到较晚的年龄阶段才能达到成熟水平。 3、简述学校教育对个体发展的特殊功能(在个体发展中的作用)。 学校教育属于一种特殊的社会环境,它具有极大的人为性。具有明确的目的、有指定的教育内容与活动计划、有系统的组织和特殊的教育条件。这些特殊性使学校在影响人的发展上具有独特的功能。 1、学校教育对个体的身心发展方向作出了社会性规范 2.学校教育具有加速个体发展的特殊功能 3.学校教育具有开发个体特殊才能和发展个性的功能 基于以上特点和独特功能,学校教育在一定程度上制约着人发展的方向、进程、水平、程度和速率。所以说,学校教育在人的发展中起主导作用。 4、简述学校教育主导作用发挥的条件。 1.不断完善学校和提高学校教育的办学条件。 2.了解、研究和遵循青少年身心发展规律。 3.充分调动学生的主观能动性。 4.积极协调其他教育力量,形成教育合力。

第八章二重积分习题答案

第八章二重积分习题答案 练习题8.1 1.设D :0y ≤,0x a ≤≤,由二重积分的几何意义 计算d D x y 解:d D x y =200 d π θ?? =2220 01()2d a r π θ=--?? 332012236 a d a ππ θ==? 2. 设二重积分的积分区域为2214x y ≤+≤,则2dxdy =?? 解:2dxdy = ??22 1 26d rdr π θπ=? ? 练习题8.2 1.2d D x σ??其中D 是两个圆,y x 122=+与,y x 422=+围成的环型区域. 解:2d D x σ??=22 222301001515 cos [cos2]84 d r dr d d πππθθθθθπ= +=???? 2计算二重积分σd y x D )3 41(-- ??,其中D 是由直线2,,2=-=x x ;1,1=-=y y 围成的矩形。 解:σd y x D )341(--??= 221211212(1)[(1)]4346x y x y dx dy y dx ------=--??? =2 22 (1)84x dx --=? 3. 应用二重积分,求在xy 平面上由曲线224x x y x y -==与所围成的区域D 的面积. 解: 2 2 2 42 20 2320(42) 28 (2)|33 x x x D A dxdy dx dy x x x x -===-=- =????? 4. 求旋转抛物面224z x y =--与xy 平面所围成的立体体积

解: 22 222 2 (4)(4)48D V x y d d r rdr d ππ σθθπ=--=-==????? 习 题 八 一.判断题 1.d D σ??等于平面区域D 的面积.(√) 2.二重积分 100f(x,y)d y dy x ??交换积分次序后为1 1 f(x,y)d x dx x ? ? (×) 二.填空题 1.二重积分的积分区域为2214x y ≤+≤,则4dxdy = ?? 12π12π. 2.二重积分d d D xy x y ??的值为 112 ,其中2:0D y x ≤≤,01x ≤≤. 112 3.二重积分 10 (,)y dy f x y dx ?? 交换积分次序后为 11 (,)x dx f x y dy ?? . 11 (,)x dx f x y dy ?? 4.设区域D 为1x ≤,1y ≤,则??(sin x x -)d d x y =0 .0 5. 交换积分次序 1 d (,)y f x y dx ? = 2 1 1 (,)(,)x dx f x y dy f x y dy +?? . 2 1 1 (,)(,)x dx f x y dy f x y dy +?? 6.设D 是由221x y +≤所确定的区域。则22 1D dxdy x y ++?? =_ln 2πln 2π 三. 选择题 1.设1ln D I =??(x y +)d d x y ,2D I =??(x y +)2d d x y ,3D I =??(x y +)d d x y ,其中D 是由直线0x =,0y =,12 x y +=,1x y +=所围成的区域,则1I ,2I ,3I 的大小顺序为( B ). A 321I I I << B 123I I I << C 132I I I << D 312I I I <<

嵌入式复习题含全部答案)

嵌入式系统复习题 一、填空题: 1、试列举三种主流的嵌入式处理器:( ARM )、( MIPS )、(PowerPC)。 2、ARM处理器共有(37)个寄存器,其中包括(31个通用寄存器)和(6个状态寄存器)。 3、寄存器R13在ARM指令中(堆栈指针SP )。R14也称(程序连接寄存器LR)在程序里的作用是(程序计数器PC的备份)。当发生中断或异常时,对应分组寄存器分别是(R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值)。 4、ARM微处理器支持两种指令集:(ARM)和(Thumb)。 5、寄存器R15用作(程序计数器PC)。该寄存器在ARM状态下,(位[1:0]为00),位[31:2]用于保存PC;在Thumb状态下,(位[0]为0),位[31:1]用于保存PC。 6、CPSR用作( 状态寄存器 ),CPSR可在任何运行模式下被访问。每一种运行模式下又都有一个专用的物理状态寄存器,称为(程序状态保存寄存器SPSR)。 7、Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问的通用寄存器是(R0—R7,PC,SP,LR,CPSR)。 8、ARM指令中条件执行功能是通过(指令中添加条件码)来实现的,包含的条件码位于指令的最高(四)位。 9、试列举五种以上常见的嵌入式操作系统:(μC/OS-II)、(Vxworks)、(WinCE)、(Linux/μCLinux)、(PalmOS)。 10、计算机结构中,哈佛结构和冯?诺依曼结构的主要区别是(指令与数据分开),ARM7采用(冯?诺依曼结构),ARM9采用(哈佛结构)。 11、ARM处理器采用(Thumb指令)操作来访问SFR。 12、在ARM汇编语言程序设计中,语句一般是由(指令操作码)、(指令的条件码)、(目标寄存器编码)和(包含第一个操作数的寄存器编码)组成。 二、名词解释: 1、ARM处理器:先进的RISC指令集处理器。广泛地使用在许多嵌入式系统设计。 2、交叉编译:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码, 这个编译过程就叫交叉编译。 3、异常:异是导致程序中断运 行的一种指令流。(是指CPU在 执行指令时出现的错误,即不正 常的情况。异常是与当前所执行 的程序有关的,如存取数据或指 令错误、计算结果溢出等。) 4、大端格式:字数据的高字节 存储在低地址中,而字数据的低 字节则存放在高地址中。 5、小端格式:低地址中存放的 是字数据的低字节,高地址存放 的是字数据的高字节。 6、寻址方式:处理器根据指令 中给出的(地址)信息,寻找操 作数(物理地址)的方式。 7、嵌入式系统:广义上:凡是 不用于通用目的的可编程计算 机设备,就可以算是嵌入式计算 机系统。狭义上而言,嵌入式系 统是指以应用为核心,以计算机 技术为基础,软硬件可裁剪,对 功能、可靠性、成本、体积和功 耗严格要求的专用计算机系统。 8、GNU:GNU(GNU’s Not Unix), 它的目标是建立可自由发布和 可移植的类Unix操作系统。 9、伪指令:是汇编语言程序里 的特殊指令助记符,在汇编时被 合适的机器指令替代。 10、伪操作:为汇编程序所用, 在源程序进行汇编时由汇编程 序处理,只在汇编过程起作用, 不参与程序运行。 11、RTOS :实时系统,能够对 外部事件做出及时响应的系统。 12、微控制器:俗称“单片机", 它将整个计算机系统集成到一 块芯片中。 三、简答题: 1、请从广义和狭义两个方面简 述嵌入式系统的含义。 答:嵌入式系统:Embedded System 广义上:凡是不用于通用目 的的可编程计算机设备,就可以 算是嵌入式计算机系统。 狭义上:,嵌入式系统是指以 应用为核心,以计算机技术为基 础,软硬件可裁剪,对功能、可 靠性、成本、体积和功耗严格要 求的专用计算机系统。 2、简述采用RISC架构的ARM微 处理器的特点。 a.采用固定长度的指令格式, 指令规整,简单,基本寻址2~3 种。 b.使用单周期指令,便于流水 线操作。 c.大量使用寄存器,提高指令 的执行效率。 d.所有的指令都可以根据前 面的执行后,决定是否执行从而 提高指令的执行效率。 e.可以加载/存储指令,批量 传输数据,以提高数据的传输效 率。 3、选择嵌入式微处理器时,应 考虑那些因素? a, 调查市场上已有的CPU供应 商。 b, CPU的处理速度 c,技术指标。 d,处理器的低功耗。 e,处理器的软件支持工具。 f,处理器是否内置调试工具。 g,处理器供应商是否提供评估 板。 h,片内存储容量。 4、简述嵌入式系统的特点。 (1)软硬件一体化,集计算机 技术、微电子技术、行业技术于 一体; (2)需要操作系统支持,代码 少,执行速度快; (3)系统内核小、专用性强、 系统精简。 (4)高实时性的系统软件(OS) 是嵌入式软件的基本要求。 (5)嵌入式软件开发要想走向 标准化,就必须使用多任务的操 作系统。 (6)嵌入式系统开发需要开发 工具和环境。 5、画出当前主流嵌入式系统的 硬件组成结构框图。 6、比较ARM920T和ARM720T的 主要异同。 ARM9 5级流水线独立的指令 总线哈佛结构 ARM7 3级流水线数据与指令 一起冯·诺依曼结构 7、ARM9指令是几级流水线,各 阶段执行什么操作? 答:ARM9采用5级流水线。 取指:从指令Cache中读取 指令。 译码:对指令进行译码,识 别出是对哪个寄存器进行操作 并从通用寄存器中读取操作数。 执行:进行ALU运算和移位 操作,如果是对存储器操作的指 令,则在ALU中计算出要访问 的存储器地址。 数据缓冲:如果是对存储器 访问的指令,用来实现数据缓冲 功能(通过数据Cache) 回写:将指令运算或操作结 果写回到目标寄存器中。 8、写出不少于12类嵌入式产品 中的常用接口。 UART接口、SPI接口、I2C接口、 ADC和触摸屏接口、USB接口、 以太网接口、外存接口、LCD接 口、时钟接口、PWM接口、中断 接口、JTAG接口、VGA接口、音 频接口 9、若允许FIQ、IRQ中断,CPSR 如何设置? FIQ: CPSR[4:0]=0B10001 IRQ: CPSR[4:0]=0B10010 CPSR[5]=0 CPSR[6]=0 CPSR[7]=0 10、举例说明ARM的各种寻址方 式。 寄存器寻址:LDR R1,R2 寄存器间接寻址:LDR R1,[R2] 寄存器偏移寻址:LDR R1,[R2,-R4,LSL#3] 立即寻址:LDR,R3,#34 多寄存寻址:LDMIA R0,{R1,R3,R4,R5} 11、对比说明ADR、ADRL与LDR 的区别与联系。 ADR:小范围的地址读取伪指令。 ADRL:中等范围的地址读取伪指 令。 LDR:大范围的地址读取伪指令。 ADR伪指令功能:将基于PC相对 偏移的地址值或基于寄存器相 对偏移的地址值读取到寄存器 中。 ADRL伪指令功能:将基于PC相 对偏移的地址值或基于寄存器 相对偏移的地址值读取到寄存 器中,比ADR伪指令可以读取更 大范围的地址。 LDR伪指令功能:用于加载32位 立即数或一个地址值到指定的 寄存器。

相关文档
最新文档