文档库 最新最全的文档下载
当前位置:文档库 › 数据结构习题集(C语言版严蔚敏)第一二三章

数据结构习题集(C语言版严蔚敏)第一二三章

数据结构习题集(C语言版严蔚敏)第一二三章
数据结构习题集(C语言版严蔚敏)第一二三章

第1章 绪论

1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

1.3 设有数据结构(D,R),其中

{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =

试按图论中图的画法惯例画出其逻辑结构图。

1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

1.5 试画出与下列程序段等价的框图。

(1) product=1; i=1; while(i<=n){ product *= i; i++; } (2) i=0; do { i++;

} while((i!=n) && (a[i]!=x)); (3) switch {

case x

1.6 在程序设计中,常用下列三种不同的出错处理方式:

(1) 用exit 语句终止执行并报告错误; (2) 以函数的返回值区别正确返回或错误返回;

(3) 设置一个整型变量的函数参数以区别正确返回或某种错误返回。 试讨论这三种方法各自的优缺点。

1.7 在程序设计中,可采用下列三种方法实现输出和输入:

(1) 通过scanf 和printf 语句; (2) 通过函数的参数显式传递; (3) 通过全局变量隐式传递。 试讨论这三种方法的优缺点。

1.8 设n 为正整数。试确定下列各程序段中前置以记号@的语句的频度:

(1) i=1; k=0;

while(i<=n-1){

@ k += 10*i;

i++;

}

(2) i=1; k=0;

do {

@ k += 10*i;

i++;

} while(i<=n-1);

(3) i=1; k=0;

while (i<=n-1) {

i++;

@ k += 10*i;

}

(4) k=0;

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

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

@ k++;

}

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

for(j=1; j<=i; j++) {

for(k=1; k<=j; k++)

@ x += delta;

}

(6) i=1; j=0;

while(i+j<=n) {

@ if(i>j) j++;

else i++;

}

(7) x=n; y=0; // n是不小于1的常数

while(x>=(y+1)*(y+1)) {

@ y++;

}

(8) x=91; y=100;

while(y>0) {

@ if(x>100) { x -= 10; y--; }

else x++;

}

1.9 假设n为2的乘幂,并且n>2,试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。

int Time(int n) {

count = 0; x=2;

while(x

x *= 2; count++;

}

return count;

}

1.11 已知有实现同一功能的两个算法,其时间复杂度分别为()n

O

2和()10

n O ,假设现实计算机可连续运

算的时间为7

10秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)5

10次。试问在此条件下,这两个算法可解问题的规模(即n 值的范围)各为多少?哪个算法更适宜?请说明理由。

1.12 设有以下三个函数:

()1000

2124++=n n n f ,()3450015n n n g

+=,()n n n n h log 5005.3+=

请判断以下断言正确与否:

(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n 3.5

) (5) h(n)是O(nlogn)

1.13 试设定若干n 值,比较两函数2

n 和n n 2log 50的增长趋势,并确定n 在什么范围内,函数2n 的值

大于n n 2log 50的值。

1.14 判断下列各对函数

()n f 和()n g ,当∞→n 时,哪个函数增长更快?

(1) ()(

)

3

10!ln 102n

n n n f ++=,()724++=n n n g

(2)

()()()

2

5!ln +=n n f ,()5.213n n g

=

(3) ()141.2++=n n n f ,()()()n n n g +=2

!ln

(4) ()()()2

223

n n n f +=,()()52

n n n g n +=

1.15 试用数学归纳法证明:

(1)

()()6/12112

++=∑=n n n i

n

i

()0≥n (2)

()

()1/11

0--=+=∑x x

x n n

i i

()0,1≥≠n x

(3)

122

1

1

-=∑=-n n

i i

()1≥n

(4)

()2

1

12n

i n

i =-∑=

()1≥n

1.16 试写一算法,自大至小依次输出顺序读入的三个整数X ,Y 和Z 的值

1.17 已知k 阶斐波那契序列的定义为 00=f ,01=f ,…,02=-k f ,11=-k f ;

k n n n n f f f f ---+++=Λ21,Λ

,1,+=k k n

试编写求k 阶斐波那契序列的第m 项值的函数算法,k 和m 均以值调用的形式在函数参数表中出现。

1.18 假设有A ,B ,C ,D ,E 五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,并构成一张表,表中每一行的形式为

编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。

1.19 试编写算法,计算i

i 2!*的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=1,2,…,n)。假设计算机中允许的整数最大值为maxint ,则当n>arrsize 或对某个()n k k ≤≤1,使int max 2!>?k

k 时,应按出

错处理。注意选择你认为较好的出错处理方法。 1.20 试编写算法求一元多项式的值()∑==n

i i i n

x a x P 0

的值()0x P n ,并确定算法中每一语句的执行次数和

整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。本题的输入为()n i a i

,,1,0Λ=,0x 和

n ,输出为()0x P n 。

第2章 线性表

2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

2.2 填空题。

(1) 在顺序表中插入或删除一个元素,需要平均移动 元素,具体移动的元素个数与 有关。 (2) 顺序表中逻辑上相邻的元素的物理位置 紧邻。单链表中逻辑上相邻的元素的物理位置 紧邻。

(3) 在单链表中,除了首元结点外,任一结点的存储位置由 指示。 (4) 在单链表中设置头结点的作用是 。

2.3 在什么情况下用顺序表比链表好?

2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。

2.5 画出执行下列各行语句后各指针及链表的示意图。

L=(LinkList)malloc(sizeof(LNode)); P=L;

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

P->next=(LinkList)malloc(sizeof(LNode));

P=P->next; P->data=i*2-1;

}

P->next=NULL;

for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);

for(i=1;i<=3;i++) Del_LinkList(L,i);

2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是__________________。

b. 在P结点前插入S结点的语句序列是__________________。

c. 在表首插入S结点的语句序列是__________________。

d. 在表尾插入S结点的语句序列是__________________。

(1) P->next=S;

(2) P->next=P->next->next;

(3) P->next=S->next;

(4) S->next=P->next;

(5) S->next=L;

(6) S->next=NULL;

(7) Q=P;

(8) while(P->next!=Q) P=P->next;

(9) while(P->next!=NULL) P=P->next;

(10) P=Q;

(11) P=L;

(12) L=S;

(13) L=P;

2.7 已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a. 删除P结点的直接后继结点的语句序列是____________________。

b. 删除P结点的直接前驱结点的语句序列是____________________。

c. 删除P结点的语句序列是____________________。

d. 删除首元结点的语句序列是____________________。

e. 删除尾元结点的语句序列是____________________。

(1) P=P->next;

(2) P->next=P;

(3) P->next=P->next->next;

(4) P=P->next->next;

(5) while(P!=NULL) P=P->next;

(6) while(Q->next!=NULL) { P=Q; Q=Q->next; }

(7) while(P->next!=Q) P=P->next;

(8) while(P->next->next!=Q) P=P->next;

(9) while(P->next->next!=NULL) P=P->next;

(10) Q=P;

(11) Q=P->next;

(12) P=L;

(13) L=L->next;

(14) free(Q);

2.8 已知P结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是_______________________。

b. 在P结点前插入S结点的语句序列是_______________________。

c. 删除P结点的直接后继结点的语句序列是_______________________。

d. 删除P结点的直接前驱结点的语句序列是_______________________。

e. 删除P结点的语句序列是_______________________。

(1) P->next=P->next->next;

(2) P->priou=P->priou->priou;

(3) P->next=S;

(4) P->priou=S;

(5) S->next=P;

(6) S->priou=P;

(7) S->next=P->next;

(8) S->priou=P->priou;

(9) P->priou->next=P->next;

(10) P->priou->next=P;

(11) P->next->priou=P;

(12) P->next->priou=S;

(13) P->priou->next=S;

(14) P->next->priou=P->priou;

(15) Q=P->next;

(16) Q=P->priou;

(17) free(P);

(18) free(Q);

2.9 简述以下算法的功能。

(1) Status A(LinkedList L) { //L是无表头结点的单链表

if(L && L->next) {

Q=L; L=L->next; P=L;

while(P->next) P=P->next;

P->next=Q; Q->next=NULL;

}

return OK;

} (2) void BB(LNode *s, LNode *q) {

p=s;

while(p->next!=q) p=p->next; p->next =s;

}

void AA(LNode *pa, LNode *pb) { //pa 和pb 分别指向单循环链表中的两个结点 BB(pa,pb); BB(pb,pa);

}

2.10 指出以下算法中的错误和低效之处,并将它改写为一个既正确又高效的算法。

Status DeleteK(SqList &a,int i,int k) { //本过程从顺序存储结构的线性表a 中删除第i 个元素起的k 个元素 if(i<1||k<0||i+k>a.length) return INFEASIBLE;//参数不合法

else {

for(count=1;count

for(j=a.length;j>=i+1;j--) a.elem[j-i]=a.elem[j]; a.length--;

}

return OK;

}

2.11 设顺序表va 中的数据元素递增有序。试写一算法,将x 插入到顺序表的适当位置上,以保持该表的有序性。

解:

Status InsertOrderList(SqList &va,ElemType x) { //在非递减的顺序表va 中插入元素x 并使其仍成为顺序表的算法 int i;

if(va.length==va.listsize)return(OVERFLOW); for(i=va.length;i>0,x

va.elem[i]=va.elem[i-1]; va.elem[i]=x; va.length++; return OK; } 2.12 设

()m a a A ,,1Λ=和()n b b B ,,1Λ=均为顺序表,A '和B '分别为A 和B 中除去最大共同前

缀后的子表。若

='='B A 空表,则B A =;若A '=空表,而≠'B 空表,或者两者均不为空表,且A '

的首元小于B '的首元,则B A <;否则B A >。试写一个比较A ,B 大小的算法。

2.13 试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x);

2.14 试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。

2.15 已知指针ha 和hb 分别指向两个单链表的头结点,并且已知两个链表的长度分别为m 和n 。试写一算法将这两个链表连接在一起,假设指针hc 指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法的时间复杂度。

2.16 已知指针la 和lb 分别指向两个无头结点单链表中的首元结点。下列算法是从表la 中删除自第i 个元素起共len 个元素后,将它们插入到表lb 中第i 个元素之前。试问此算法是否正确?若有错,请改正之。

Status DeleteAndInsertSub(LinkedList la,LinkedList lb,int i,int j,int len) { if(i<0||j<0||len<0) return INFEASIBLE; p=la; k=1;

while(knext; k++; }

q=p;

while(k<=len){ q=q->next; k++; } s=lb; k=1;

while(knext; k ++; } s->next=p; q->next=s->next;

return OK;

}

2.17 试写一算法,在无头结点的动态单链表上实现线性表操作Insert(L,i,b),并和在带头结点的动态单链表上实现相同操作的算法进行比较。

2.18试写一算法,实现线性表操作Delete(L,i),并和在带头结点的动态单链表上实现相同操作的算法进行比较。

2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink 且小于maxk 的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意,mink 和maxk 是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。

2.20 同2.19题条件,试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。 2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表

()n a a ,,1Λ逆置为

()1,,a a n Λ。

2.22 试写一算法,对单链表实现就地逆置。 2.23 设线性表()m a a a A

,,,21Λ=,()n b b b B ,,,21Λ=,试写一个按下列规则合并A ,B 为线性表

C 的算法,即使得 ()n m m m b b b a b a C ,,,,,,,111ΛΛ+= 当n m ≤时;

()m n n n a a b a b a C ,,,,,,,111ΛΛ+=

当n m

>时。

线性表A ,B 和C 均以单链表作存储结构,且C 表利用A 表和B 表中的结点空间构成。注意:单链表的长度值m 和n 均未显式存储。

2.24 假设有两个按元素值递增有序排列的线性表A 和B ,均以单链表作存储结构,请编写算法将A 表和B 表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C ,并要求利用原表(即A 表和B 表)的结点空间构造C 表。

2.25 假设以两个元素依值递增有序排列的线性表A 和B 分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C ,其元素为A 和B 中元素的交集,且表C 中的元素有依值递增有序排列。试对顺序表编写求C 的算法。

2.26 要求同2.25题。试对单链表编写求C 的算法。

2.27 对2.25题的条件作以下两点修改,对顺序表重新编写求得表C 的算法。

(1) 假设在同一表(A 或B )中可能存在值相同的元素,但要求新生成的表C 中的元素值各不相同; (2) 利用A 表空间存放表C 。

2.28 对2.25题的条件作以下两点修改,对单链表重新编写求得表C 的算法。

(1) 假设在同一表(A 或B )中可能存在值相同的元素,但要求新生成的表C 中的元素值各不相同; (2) 利用原表(A 表或B 表)中的结点构成表C ,并释放A 表中的无用结点空间。

2.29 已知A ,B 和C 为三个递增有序的线性表,现要求对A 表作如下操作:删去那些既在B 表中出现又在C 表中出现的元素。试对顺序表编写实现上述操作的算法,并分析你的算法的时间复杂度(注意:题中没有特别指明同一表中的元素值各不相同)。

2.30 要求同2.29题。试对单链表编写算法,请释放A 表中的无用结点空间。

2.31 假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。已知s 为指向链表中某个结点的指针,试编写算法在链表中删除指针s 所指结点的前驱结点。

2.32 已知有一个单向循环链表,其每个结点中含三个域:pre ,data 和next ,其中data 为数据域,next 为指向后继结点的指针域,pre 也为指针域,但它的值为空,试编写算法将此单向循环链表改为双向循环链表,即使pre 成为指向前驱结点的指针域。

2.33 已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法将该线性表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一类字符。

2.34 假设在算法描述语言中引入指针的二元运算“异或”,若a 和b 为指针,则a ⊕b 的运算结果仍为原指针类型,且

a ⊕(a ⊕b)=(a ⊕a)⊕b=b

(a ⊕b)⊕b=a ⊕(b ⊕b)=a

则可利用一个指针域来实现双向链表L 。链表L 中的每个结点只含两个域:data 域和LRPtr 域,其中LRPtr 域存放该结点的左邻与右邻结点指针(不存在时为NULL )的异或。若设指针L.Left 指向链表中的最左结点,L.Right 指向链表中的最右结点,则可实现从左向右或从右向左遍历此双向链表的操作。试写一算法按任一方向依次输出链表中各元素的值。

2.35 采用2.34题所述的存储结构,写出在第i 个结点之前插入一个结点的算法。

2.36 采用2.34题所述的存储结构,写出删除第i 个结点的算法。 2.37 设以带头结点的双向循环链表表示的线性表()n a a a L ,,,21Λ=。试写一时间复杂度O(n)的算法,

将L 改造为()2431,,,,,,a a a a a L

n ΛΛ=。

2.38 设有一个双向循环链表,每个结点中除有pre ,data 和next 三个域外,还增设了一个访问频度域freq 。在链表被起用之前,频度域freq 的值均初始化为零,而每当对链表进行一次Locate(L,x)的操作后,被访问的结点(即元素值等于x 的结点)中的频度域freq 的值便增1,同时调整链表中结点之间的次序,使其按访问频度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点。试编写符合上述要求的Locate 操作的算法。 2.39 已知稀疏多项式

()m

e m e e n x c x c x c x P +++=Λ2121,其中

011≥>>>=-e e e n m m Λ,

()m i c i ,,2,10Λ=≠,1≥m 。试采用存储量同多项式项数m 成正比的顺序存储结构,编写求()

0x P n 的算法(0x 为给定值),并分析你的算法的时间复杂度。 2.40 采用2.39题给定的条件和存储结构,编写求()()()x P x P x P n n 21-=的算法,将结果多项式存放在

新辟的空间中,并分析你的算法的时间复杂度。

2.41 试以循环链表作稀疏多项式的存储结构,编写求其导函数的方法,要求利用原多项式中的结点空间存放其导函数多项式,同时释放所有无用结点。

2.42 试编写算法,将一个用循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项或偶次项,并要求利用原链表中的结点空间构成这两个链表。

第3章 栈和队列

3.1 若按教科书3.1.1节中图3.1(b)所示铁道进行车厢调度(注意:两侧铁道均为单向行驶道),则请回答:

(1) 如果进站的车厢序列为123,则可能得到的出站车厢序列是什么?

(2) 如果进站的车厢序列为123456,则能否得到435612和135426的出站序列,并请说明为什么不能得到或者如何得到(即写出以 ‘S ’表示进栈和以 ‘X ’表示出栈的栈操作序列)。

3.2 简述栈和线性表的差别。

3.3 写出下列程序段的输出结果(栈的元素类型SElemType 为char )。

void main() { Stack S; char x,y; InitStack(S); x= ‘c ’; y= ‘k ’;

Push(S,x); Push(S, ‘a ’); Push(S,y); Pop(S,x); Push(S, ‘t ’); Push(S,x);

Pop(S,x); Push(S, ‘s ’);

while(!StackEmpty(S)) { Pop(S,y); printf(y); } printf(x);

}

3.4 简述以下算法的功能(栈的元素类型SElemType 为int )。

(1) status algo1(Stack S) { int i,n,A[255]; n=0;

while(!StackEmpty(S)) { n++; Pop(S,A[n]); } for(i=1;i<=n;i++) Push(S,A[i]);

} (2) status algo2(Stack S,int e)

{ Stack T; int d; InitStack(T);

while(!StackEmpty(S)){ Pop(S,d);

if(d!=e) Push(T,d); }

while(!StackEmpty(T)){ Pop(T,d); Push(S,d); }

}

3.5 假设以S 和X 分别表示入栈和出栈的操作,则初态和终态均为空栈的入栈和出栈的操作序列可以表示为仅由S 和X 组成的序列。称可以操作的序列为合法序列(例如,SXSX 为合法序列,SXXS 为非法序列)。试给出区分给定序列为合法序列或非法序列的一般准则,并证明:两个不同的合法(栈操作)序列(对同一输入序列)不可能得到相同的输出元素(注意:在此指的是元素实体,而不是值)序列。

3.6 试证明:若借助栈由输入序列12…n 得到的输出序列为n p p p 21(它是输入序列的一个排列),则在

输出序列中不可能出现这样的情形:存在着i

j p

3.7 按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,并仿照教科书3.2节例3-2的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:

A-B×C/D+E↑ F

3.8 试推导求解n阶梵塔问题至少要执行的move操作的次数。

3.9 试将下列递推过程改写为递归过程。

void ditui(int n)

{

int i;

i = n;

while(i>1)

cout<

}

3.10 试将下列递归过程改写为非递归过程。

void test(int &sum)

{

int x;

cin>>x;

if(x==0) sum=0;

else

{

test(sum);

sum+=x;

}

cout<

}

3.11 简述队列和堆栈这两种数据类型的相同点和差异处。

3.12 写出以下程序段的输出结果(队列中的元素类型QElemType为char)。

void main()

{

Queue Q;

InitQueue(Q);

char x= ‘e’, y= ‘c’;

EnQueue(Q, ‘h’);

EnQueue(Q, ‘r’);

EnQueue(Q, y);

DeQueue(Q, x);

EnQueue(Q, x);

DeQueue(Q, x);

EnQueue(Q, ‘a’);

While(!QueueEmpty(Q))

{

DeQueue(Q,y);

cout<

}

cout<

}

3.13 简述以下算法的功能(栈和队列的元素类型均为int)。

void algo3(Queue &Q)

{

Stack S;

int d;

InitStack(S);

while(!QueueEmpty(Q))

{

DeQueue(Q, d);

Push(S, d);

}

while(!StackEmpty(S))

{

Pop(S, d);

EnQueue(Q, d);

}

}

3.14 若以1234作为双端队列的输入序列,试分别求出满足以下条件的输出序列:

(1) 能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列。

(2) 能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列。

(3) 既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。

3.15 假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么有缺点。

3.16 假设如题3.1所属火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软席车厢都被调整到硬席车厢之前。

3.17 试写一个算法,识别一次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。

3.18 试写一个判别表达式中开、闭括号是否配对出现的算法。

3.20 假设以二维数组g(1…m, 1…n)表示一个图像区域,g[i,j]表示该区域中点(i,j)所具颜色,其值为从0到k 的整数。编写算法置换点(i 0,j 0)所在区域的颜色。约定和(i 0,j 0)同色的上、下、左、右的邻接点为同色区域的点。

3.21 假设表达式有单字母变量和双目四则运算符构成。试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰表达式。

3.22 如题3.21的假设条件,试写一个算法,对以逆波兰式表示的表达式求值。

3.23 如题3.21的假设条件,试写一个算法,判断给定的非空后缀表达式是否为正确的逆波兰表达式,如果是,则将它转化为波兰式。

3.24 试编写如下定义的递归函数的递归算法,并根据算法画出求g(5,2)时栈的变化过程。

()()??

?

≥>+-≥==0

,02,10,00,n m n n m g n m n m g

3.25 试写出求递归函数F(n)的递归算法,并消除递归:

()()

??

??

?>?=+=0

20

1n n F n n n n F 3.26 求解平方根

A 的迭代函数定义如下:

()??

?

??≥-????

?????? ??+<-=e

A p e p A p A sqrt e A p p e p A sqrt 22,21,,,

其中,p 是A 的近似平方根,e 是结果允许误差。试写出相应的递归算法,并消除递归。

3.27 已知Ackerman 函数的定义如下:

()()()()??

?

??≠≠--=≠-=+=0,01,,10,01,101,n m n m akm m akm n m m akm m n n m akm

(1) 写出递归算法; (2) 写出非递归算法;

(3) 根据非递归算法,画出求akm(2,1)时栈的变化过程。

3.28 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列何处队列的算法。

3.29 如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag ,并以tag 的值为0和1来区分,尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法,并

从时间和空间角度讨论设标志和不设标志这两种方法的使用范围(如当循环队列容量较小而队列中每个元素占的空间较多时,哪一种方法较好)。

3.30 假设将循环队列定义为:以域变量rear 和length 分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。

3.31 假设称正读和反读都相同的字符序列为“回文”,例如,‘abba ’和‘abcba ’是回文,‘abcde ’和‘ababab ’则不是回文。试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。 3.32 试利用循环队列编写求k 阶菲波那契序列中前n+1项的算法,要求满足:

max

≤n f 而

max 1>+n f ,其中max 为某个约定的常数。(注意:本题所用循环队列的容量仅为k ,则在算法执行结

束时,留在循环队列中的元素应是所求k 阶菲波那契序列中的最后k 项)

3.33 在顺序存储结构上实现输出受限的双端循环队列的入列和出列(只允许队头出列)算法。设每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。

3.34 假设在如教科书3.

4.1节中图3.9所示的铁道转轨网的输入端有n 节车厢:硬座、硬卧和软卧(分别以P,H 和S 表示)等待调度,要求这三种车厢在输出端铁道上的排列次序为:硬座在前,软卧在中,硬卧在后。试利用输出受限的双端队列对这n 节车厢进行调度,编写算法输出调度的操作序列:分别以字符‘E ’和‘D ’表示对双端队列的头端进行入队列和出队列的操作;以字符A 表示对双端队列的尾端进行入队列的操作。

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

C语言课程设计小学生数学测试

C语言课程设计小学生数学测试 1 2020年4月19日

《c语言课程设计报告》学院:物理与电子信息学院 年级专业: 09级电子信息工程2班学号: 姓名: 同组人员: 指导老师: 完成日期: 6月21日 目录

一、所选课题 二、设计要求 三、程序具体分工 四、课题分析与设计 五、程序介绍 六、源程序代码 七、程序调试 八、流程图 九、实验总结 十、参考文献 一、所选课题 小学生数学测试 二、设计要求 1、可选择题型(加,减,乘,除); 2、两个数随机产生,若选择加减运算,则产生两位数,且 被减数大于减数,若选择乘法运算,则产生一位数,若 选择除法运算则被除数能被整除,且除数不能为零。 3 2020年4月19日

3、每次在输入答案后应判断对错,并给出是否继续测试的 提示,若答案错误,应给出正确答案; 4、最后给出评分。 三、程序具体分工 乘除部分由我完成,界面和加减测试部分由徐磊完成。 四、课题分析与设计 本程序是非数值计算型算法设计,我们设计出了小学生数学测试软件的基本功能,并设计了简单的界面。本程序主要考察针对小学生该怎样设计程序:例如小学生只进行两位数之间的加减法,只进行一位数与两位数之间的乘法,除法只能是整除等。课题要求我们设计个能够进行加、减、乘法的程序,但我们设计的这个小学生数学测试软件也不但实现了加、减、乘法的测试,还实现了除法的测试。 五、程序介绍 程序应包括两个头文件,其中存放库函数,而产生随机数的函数则存放在头文件中。另外程序有五个函数,分别为void menu(); /*主菜单函数*/ void add() ;/*加法函数*/ void sub();/*减法函数*/ void mul();/*乘法函数*/ void div1();/*除法函数*/,还有产生随机数函数在程序中直接调用。然后根据要求编写程序,乘法、除法的要求和做题后的判断、提示等。 六、源程序代码 #include 4 2020年4月19日

C语言月考试卷

2010-2011学年度第一学期第二次月考 C 语言程序设计试卷 命题人:林学梅 校对: 考试时长: 100分钟 分值: 150分 一、单项选择题(本题共20小题,每小题2分,共40分) 1.以下正确的C 语言自定义标识符是______。 ( ) A. _1a B. 2a_ C. do D. a.12 2. 在C 语言中,错误的常数表示是_______。 ( ) A. 0L B.-0x6aL C. ‘6’ D. 1.234E 3.5 3. 设int a, x=2; 执行语句a=x>0?3*x:(x=10);后,变量x 的值是_______。 ( ) A. 1 B. 2 C. 6 D. 10 4.设有以下程序段: int x=2,y=2,z=0,a; a=++x||++y&&z++; printf("%d,%d,%d\n",x,y,z); 执行后输出的结果是_________。 ( ) A. 2, 2, 0 B. 3, 3,1 C. 3, 2, 0 D. 3, 2, 1 5、putchar 函数可以向终端输出一个 ( ) A. 整型变量的值 B. 实型变量的值 C. 字符串 D. 字符或字符型变量的值 6. 设float x ,由键盘输入:12.45, 能正确读入数据的输入语句是_________。 ( ) A. scanf("%5f",&x) B. scanf("%5d",&x); C. scanf("%f",x); D. scanf("%s",&x); 7.逗号表达式a=2*6,a*3,a+5的值是_________。 ( ) A. 12 B. 17 C .36 D. 41 8. 以下能正确地定义变量a,b 和c 并为它们赋初值5的语句是: ( ) A. int a=5,b=5,c=5; B. int a,b,c=5; C. a=5,b=5,c=5; D. int a=b=c=5; 9. 设int x;,则与计算︱x ︱等价的表达式是_________。 ( ) A. x>0?-x:x B. x>0?x:-x C. x<0?x:-x D. x<0?-x:-x 10.设有如下定义: int x=10,y=3,z; 则语句printf("%d\n",z=(x%y,x/y)); 的输出结果是_______。 ( ) A. 1 B. 0 C. 4 D. 3 11.两次运行下面的程序,如果从键盘上分别输入6和3,则输出结果是_______。( ) if(x++>5) printf("%d",x); else printf("%d\n",x - -); A. 7和5 B. 6和3 C. 7和4 D. 6和4 12. 执行下面的程序段后,k 的值是_______。 ( ) int k=1,n=325; do { k*=n%10;n/=10;}while(n); A. 3 B. 30 C. 523 D. 325 13. 表达式的值为0的是_________。 ( ) A. 5/5%5 B. 5>2 C. !4 D. 0x7&&7 14. 设int a=11, b=2;执行下述程序段后,变量a 和b 的值分别是_______。( ) do { a/=b++; }while(a>b); A. 1,3 B. 1,4 C. 2,3 D. 2,4 15. 以下表达式为真时不能表示A 为奇数的表达式是: ( ) A. A%2==1 B. !(A%2==0) C. !(A%2) D. A%2 16. switch(表达式)语句中的“表达式”,允许的类型是 _________。 ( ) A .float, int B .float, int, char C. int, char D.char, double 17. 下列属于文件包含的命令是_________。 ( ) A. #define N 25 B. #endif C. #include "stdio.h" D. #else 18. 设int i,j; for(i=5;i;i- -) for(j=0;j<4;j++) {…} 则循环体执行次数是________。 ( ) A. 5 B.4 C. 20 D.无限次 19.正确的变量定义是________。 ( ) A. unsigned long d=1000; B. float m1=m2=10.0; C. char c1='A',c2=A; D. double x=0.618,x=3.14; 20.下面程序的输出结果是_______。 ( ) #include void main() { int s,k; for(s=1,k=2;k<5;k++)

C语言上机练习题

上机练习题 1.输入一个不超过五位的正整数,输出其逆数。例如输入12345,输出应为54321。 2.计算1+2+3…+n的值,n是从键盘输入的自然数。 3.从终端(键盘)读入20个数据到数组中,统计其中正数的个数,并计算这些正数之和。 4.从终端(键盘)将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中 各元素的值。 5.要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面 值至少1张,编程输出所有可能的换法,程序应适当考虑减少重复次数。 6.求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,n从键盘输入。 例如若n为1000时,函数值应为:s=153.909064。 7.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下 车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索找出车号。 8.输入1~10之间的一个数字,输出它对应的英文单词。 9.个位数为6且能被3整除但不能被5整除的三位自然数共有多少个,分别是哪些? 10.用自然语言描述程序逻辑如下,试写程序。 ①设置环境; ②定义变量i、j、s,以及用于放置结果的变量sum,并令sum初值为0; ③i=1; ④如果i≤100,则转⑤,否则转⑧; ⑤令s=0,求前i个自然数之和,并放于变量s之中; ⑥sum=sum+s; ⑦i增加1,转④; ⑧输出和sum,结束。 11.用自然语言描述的程序逻辑为: ①设置环境; ②定义变量i、flag和password,并令flag=0,i=0; ③用户回答口令,将其赋于password变量; ④口令正确?如果是,则flag=1,转⑥。否则转⑤; ⑤回答三次口令了吗?如果没有,计数器加1后(i++),转③,否则转⑥; ⑥根据flag之值输出相应信息。 12.用自然语言描述的程序逻辑如下: ①设置环境; ②定义变量digit、x、y分别表示原始数、原始数的个位数和逆数; ③输入原始正整数x; ④从x中分解出个位数字digit; ⑤合并个位digit至逆数y中; ⑥原始数x缩小10倍:x=x/10; ⑦如果x非零,则转④; ⑧输出逆数y,结束 13.输入某三角形的三个边的长度,判断出这是个什么三角形(等腰、等边、任意,或不能构 成)。 14.输入10个数,分别统计其中正数、负数、零的个数。 15.先随机产生N个三位自然数输出,然后再输出其中同时是3、5、7倍数的数。(设N为100)

C语言试卷及答案

《C语言程序设计》考试试卷(答案) 一、填空题(每小空1分,共10分) 1.C语言程序的三种基本结构是顺序结构、选择结构、循环结构。 2.一个C程序有且仅有一个main( ) 函数。 3.C语言描述“x和y都大于或等于z”的表达式是x>=z && y>=z。 4.C语言可以用来实现循环的结构化语句是while、do while、for。 5.数组名表示数组在内存的首地址。 6.int a=3,*p=&a;*p+2的值是5。 二、单项选择题(每小题2分,共70分) 1.__B___是C语言合法的常量。 (A).45(B)078 (C)25.6e3.4 (D)‘xy’2.一个程序的执行是从 A 。 (A)本程序的main函数开始,到main函数结束 (B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。 (C)本程序的main函数开始,到本程序文件的最后一个函数结束。 (D)本程序文件的第一个函数开始,到main函数结束。 3.以下叙述正确的是 C 。 (A)在C程序中,main函数必须位于程序的最前面。 (B)C程序每行中只能写一条语句。 (C)C语言本是没有输入输出语句。 (D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误。 4.以下叙述不正确的是 D 。 (A)逗号运算符的运算级最低。 (B)ABC和abc是两个不同的变量。 (C)若a和b类型相同,在执行a=b后,b的自身值不变。 (D)‘a’和“a”是完全等价的常量。 5.int x=3,y=2;则表达式x+=x*=y+8的值为 C 。 (A)28 (B)30 (C)60(D)17 6.设x=2.7,a=8,y=4.9,算术表达式x+a%3*(int)(x+y)%5/3的值为 B 。 (A)2.7 (B)3.7(C)4.7 (D)4.03 7.执行下面两个语句后,输出的结果为__D___。 char c1=98; printf(“%d %c”,c1,c1-32); (A)97 66 (B)98 b (C)b 66 (D)98 B 8.执行下面语句后的结果为 C 。 y=10;x=y++; (A)x=10,y=10 (B)x=11,y=11 (C)x=10,y=11(D)x=11,y=10 9.Char w;int x;float y;double z;则表达式w*x+z-y值的数据类型是A 。 (A)double (B)char (C)int (D)float 10.C语言中要求操作数必须是整数的运算符是 B 。

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题 一、选择题。 1在数据结构中,从逻辑上可以把数据结构分为 C 。 A ?动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2?数据结构在计算机内存中的表示是指_A_。 A .数据的存储结构B.数据结构 C .数据的逻辑结构 D .数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A .逻辑 B .存储C.逻辑和存储 D .物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_C A .数据的处理方法 B .数据元素的类型 C.数据元素之间的关系 D .数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A A .各结点的值如何C.对数据有哪些运算 B .结点个数的多少 D .所用的编程语言实现这种结构是否方 6.以下说法正确的是D A .数据项是数据的基本单位 B .数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D .一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1) A .找出数据结构的合理性B.研究算法中的输入和输出的关系 C .分析算法的效率以求改进C.分析算法的易读性和文档性 (2) A .空间复杂度和时间复杂度B.正确性和简明性 &下面程序段的时间复杂度是0( n2) s =0; for( I =0; i

精选C语言试卷(带答案).

2006-2007学年第二学期考试试卷A卷 考试科目C语言程序设计考试方式闭卷完成时限2小时 拟题人审核人批准人2007年7 月 5 日机械、电气、信息、生化、轻工、经管、理学院2006年级各理工科专业 说明: 1.应将全部答案写在答卷纸对应的题号处;否则作无效处理; 2.编程题应写明题号,若答卷纸不够,请写在背面,不要另添卷纸; 3.考试完成后,必须将试卷与答卷同时交回。 一、判断题(10小题,每题1分,共10分;用√表示正确,用×表示错误)1.在循环体内使用break语句和continue语句的作用相同。 2.函数返回值的类型最终取决于函数定义时形参的类型。 3.else语句一定要与if语句配对使用,程序中else语句的个数一定小于或者等于if语句的个数。 4.从狭义角度讲,算法是解决一个问题采取的方法和步骤的描述。 5.1/2的结果是0,所以1.0/2的结果也是0。 6.a=b=c=5可以理解为a=(b=(c=5))。 7.假设有语句int a[10]={1,2,3},*p;p=a;则p++完全等价于a++。 8.for(;;)等价于while(1)语句。 9.假定int类型变量占用两个字节,若有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是6。 10.char *sp ={"welcome"};可以写成char *sp="welcome"; 。 二、单选题(16小题,每题1分,共16分) 1.以下数组定义中错误的是: (A) int x[][3] ={0}; (B) int x[2][3]={{1,2},{3,4},{5,6}};

(C) int x[][3]={{1,2,3},{4,5,6}}; (D) int x[2][3]={1,2,3,4,5,6}; 2.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为: (A)EOF (B)NULL (C) 0 (D)非0值 3.有以下程序: main() {int y=10; while(y--) ; printf(“y=%d\n”,y); } 程序执行后的输出结果是: (A) y=0; (B)y=-1; (C) y=1 (D)while构成无限循环 4. 若有以下宏定义: #define N 2 #define Y(n) (N+1)*n 则执行语句int z; z=2*N+Y(5);后的值是 (A) 50 (B)34 (C)19 (D)无定值 5.以下叙述中错误的是: (A)c程序必须由一个或者一个以上的函数组成。 (B)函数调用可以作为一个独立的语句存在。 (C)若函数有返回值,必须通过return 语句返回。 (D)函数形参的值也可以传回给对应的实参。 6.设有如下定义的变量 union data { int i; char ch; float f; }b; 则变量b占用内存的字节数是(假设int类型占2个字节,char类型占1个字节,float类型占4个字节): (A) 4 (B)5 (C) 6 (D)7 7.以下叙述中错误的是:

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

C语言试题库(完整版)

C语言试题库 一、单项选择 第一章 C语言概述 (1)一个C程序的执行是从 A、本程序的MAIN函数开始,到MAIN 函数结束。 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。 C、本程序的MAIN函数开始,到本程序的最后一个函数结束。 D、本程序文件的第一个函数开始,到本程序的MAIN函数结束。(2)以下叙述正确的是 A、在C程序中,MAIN函数必须位于程序的最前面。 B、 C程序的每行中只能写一条语句。 C、 C语言本身没有输入输出语句。 D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误。(3) C语言规定,在一个源程序中,MAIN主函数的位置是在: A、必须在最前面。 B、必须在系统调用的库函数的后面 C、可以在任意位置。

D、必须在最后面 (4)一个C程序是由: A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 (5)以下叙述不正确的是: A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个MAIN函数 C、 C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 第二章数据类型、运算符与表达式 (1)若x, i, j, k都是int型变量,则计算下面表达式后,x的值为x=( i=4, j=16, k=32) A、4 B、16 C、32

D、52 (2)下列四组选项中,均不是C语言键字的选项是 A、define , IF, type B、getc, char, printf C、include, scanf, case E、 if, struct, type (3)下面四个选项中,均是不合法的用户标识符的选项是A、A,P_0,do B、float,1a0, _A C、b-a, goto, int D、_123, temp, INT (4)若有代数式3ae/bc,则正确的C语言表达式是A、a/b/c*e*3 B、3*a*e/bc C、3*a*e/b*c D、a*e/c/b*3 (5)已知各变量的类型说明如下:

最新C语言程序设计试卷(含答案)

说明:请将单项选择题(1~50空)的正确答案涂写考试答题卡,将填空(51~75空)等文字题按【】中的序号写入下面文字答题卡,否则不得分。 二、阅读程序题文字答题卡:(每空2分,共24分) 三、完善程序填空题文字答题卡:(每空2分,共26分) 一、单项选择题(每空1分,共50分) 请将正确答案按【】中的序号写入答题卡,否则不得分。 1.在C语言中,一条语句以【】字符作为结束符。

A),B);C).D)无符号2.以下4组标识符中,能作为变量名使用的是【】。 A)age,struct,s1 B)2A,b_3,main C)ELSE,a[2],m123 D)_abc,INT,abcd 3.判断char型变量ch是否为数字字符的正确表达式为【】。 A)0<=ch<=9 B)'0'<=ch<='9' C)(0<=ch)&&(ch<=9)D)('0'<=ch)&&(ch<='9') 4.已知小写字母a的ASCII码值是97,大写字母A的ASCII码值是65,下列语句中不能输出大写字母B的是【】。 A)putchar('A'+1);B)putchar('b'-32); C)putchar(98-32);D)putchar(B); 5.空字符串的长度是【】。 A)0B)1 C)2 D)3 6.整型变量a定义后赋初值的结果是【】。 int a=2.8*6; A)12 B)16C)17 D)18 7.若有以下说明语句,则该语句【】。 char a='\077'; A)使a的值包含1个字符B)使a 的值包含4个字符 C)使a的值包含3个字符D)说明不合法 8.下面的程序结果为:【】。 main() { int x=023; printf("%d\n",--x); } A)17 B)18C)23 D)24 9.源程序执行后,屏幕上显示【】。 main() { int a; float b; a=4; b=9.5; printf("a=%d,b=%4.2f\n",a,b); } A)a=%d,b=%f\n B)a=%d,b=%f C)a=4,b=9.50 D)a=4,b=9.5 10.设int x=10;x+=x%=(-6)+4;则x= 【】。 A)0B)16 C)18 D)10

数据结构(C语言版)期末复习

数据结构(C语言版)期末复习汇总 第一章绪论 数据结构:是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 数据结构分为:逻辑结构、物理结构、操作三部分 逻辑结构:集合、线性结构、树形结构、图(网)状结构 物理结构(存储结构):顺序存储结构、链式存储结构 算法:是为了解决某类问题而规定的一个有限长的操作序列。 算法五个特性:有穷性、确定性、可行性、输入、输出 评价算法优劣的基本标准(4个):正确性、可读性、健壮性、高效性及低存储量 语句频度的计算。 算法的时间复杂度: 常见有:O(1),O(n),O(n2),O(log2n),O(nlog2n),O(2n) 第二章线性表 线性表的定义和特点: 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列。线性表中元素个数n(n≥0)定义为线性表的长度,n=0时称为空表。 非空线性表或线性结构,其特点: (1)存在唯一的一个被称作“第一个”的数据元素; (2)存在唯一的一个被称作“最有一个”的数据元素; (3)除第一个之外,结构中的每个数据元素均只有一个前驱; (4)除最后一个之外,结构中的每个数据元素均只有一个后继。 顺序表的插入:共计n个元素,在第i位插入,应移动(n-i+1)位元素。 顺序表的删除:共计n个元素,删除第i位,应移动(n-i)位元素。 线性表的两种存储方式:顺序存储、链式存储。 顺序存储 概念:以一组连续的存储空间存放线性表; 优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑; 缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充; 操作:查找、插入、删除等 查找: ListSearch(SqlList L,ElemType x,int n) { int i; for (i=0;i

C语言 小学生测试

[南京理工大学紫金学院] [C语言报告] 小学生测试 成员:谢德煜,徐安伟 徐凡,徐航 指导教师:郑老师 组别:16自动化第7组 2017年12月15日

一、组内成员分工......................................................................................... 错误!未定义书签。 二、课题介绍................................................................................................. 错误!未定义书签。 三、程序功能介绍......................................................................................... 错误!未定义书签。 四、主体内容................................................................................................. 错误!未定义书签。 1.设计分析...................................................................................................... 错误!未定义书签。 2.流程图.......................................................................................................... 错误!未定义书签。 3.各模块的功能及程序说明.......................................................................... 错误!未定义书签。 4.源代码.......................................................................................................... 错误!未定义书签。 5.操作方法...................................................................................................... 错误!未定义书签。 6.实验结果...................................................................................................... 错误!未定义书签。 五、设计......................................................................................................... 错误!未定义书签。

C语言程序设计试卷及答案

C语言程序设计试卷及 答案 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

C语言程序设计 一、单项选择题(共15小题,每题4分,共60分) 1、下列有关C语言的叙述中错误的是()。 A)C语句必须以分号结束B)任何一个C程序中有且只有一个主函数 C)复合语句在语法上可被看作一条语句D)C程序中对数据的任何操作都可由运算符实现 2、以下不能定义为用户标识符的是()。 A)MAINB)_HJC)2ongD)LINE1 3、以下能正确定义一维数组的是()。 A)inta[5]={0,1,2,3,4,5};B)inta[5]=”012345”; C)chara[]=”012345”;D)chara[5]={0,1,2,3,4,5}; 4、以下关于main()函数的说法,正确的是。 A)main()必须是程序的第一行B)main()可以有参数 C)一个程序可以有多个main()D)main()可以被用户自定义的函数调用 5、设charstr1[10]=“ABCDE”,str2[10]=“xyz”; 则执行语句printf(“%d”,strlen(strcpy(str1,str2)));后的输出结果是()。 A)9B)8C)5D)3 6、若用数组名作为函数调用的实参,则传递给形参的是()。 A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数 7、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为()。 A)void?B)double?C)int?D)char 8、下面不能正确进行字符串赋值操作的语句是()。

C语言编程测验题绝对经典!

马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭 共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人? 解方程组 编写程序,采用穷举法求出结果。 编写程序,根据以下公式求e 的值。要求用两种方法计算: 1) for 循环,计算前50项 2)while 循环,直至最后一项的值小于10-4 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。 猴子吃桃子问题。猴子第一天摘下若干个桃,当即只一半,又多吃一个。第二天早上又将剩下 的一半吃掉一半,双多吃一个。以后每天早上都吃了前天剩下的一半零一个,到第10天早上 只剩下最后一个桃。问第一天摘了几个桃。 编程打印九九乘法表 青年歌手参加歌曲大奖赛,有10个评委打分,试编程求选手的平均得分(去掉一个最高分和 一个最低分)。 从键盘中输入一个数字(可以包含小数点,其位数在60位以下,求其整数的有效位数,如输入 0123.456,返回值为整数有效位数为3) 1) 输入数据为浮点型,不用数组,不用字符串,只有变量的算术运算实现此功能。 2) 使用数组来进行编程。 使用数组,编写一个十进制正整数转换为任意进制数的转换工具。 (大进制向小进制的转换。(方法是相除去余) 10进制327转八进制: 327/8 = 40 余数为7 40/8 = 5 余数为0 于是八进制数为507(第一位5是最后的商)) 使用数组,编写一个任意进制正整数转换为十进制的转换工具。(以2,10进制互转为例,其 他请举一反三: 二进制数1101转十进制: 1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13) 10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6, 14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为 奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。 编写一个函数,用以求x2-5x+4的值,x 做为函数的形参,调用此函数,求: y1= 22-5×2+4 Y2=(x+15)2-5(x+15)+4 Y3=(sinx)2-5sinx+4 sinx 可以加载”math.h ” 库函数后使用,函数说明为 double sin( double x) 编写一个函数,使给定的一个二维数组(N ×N)行列互换(N>3)。 从键盘中输入一个不超过40个字符的字符串,再输入一个位数,删除对应 位数的字符,然后 输出删除指定字符后的字符串 要求:1) 用puts 输出指示信息 2) 用gets 接收字符串 如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数);比如101,32123, 11111111!2!3!4!5!!e n ≈++++++??????+

C语言程序设计第一次月考试题

C语言程序设计第一次月考试题(2011.9) 班级:姓名:总分: 一、选择题(每小题3分,共60分) 1.一个C语言程序是由() A)一个主程序和若干子程序组成B)函数 C)若干过程组成D)若干子程序组成 2.下面4个选项中,均是C语言关键字的选项是() A)auto enum include B)switch typedef continue C)singed union scanf D)if struct type 3. 下面4个选项中,均是不合法的用户标识符的选项是() A)A P_0 do B)float 1a0 -A C) b—a goto int D) _123 temp INT 4.下面4个选项中,均是不合法的整形常量的选项是() A)- - 0f1 - oxfff 0011 B)- oxcdf 017 12,456 C) – 018 999 5e2 D)-0x48eg -068 03f 5. 下面4个选项中,均是不合法的浮点数的选项是() A)160.0.12 e3 B)123 2e4.2 .e5 C)-.18 123e4 0.0 D)-e3 .234 1e3 6.下面4个选项中,均是不合法的转义字符的选项是() A)‘\‖‘?\\‘?\xf‘B)‘\1011‘?\‘?\a‘ C) ?\011‘?\f‘?\}‘D)‘\abc‘?\101‘?x1f‘ 7.下面不正确的字符串常量是() A)‘abc‘B)‖12‘12‖C) ‖0‖D)‖‖ 8.Int k=7, x=12; 则以下能使值为3的表达式是() A)x%=(k%=5) B)x%=(k- k%5) C) x%=k-k%5 D)(x%=k) – (k%=5) 9.若x、i、j和k都是int型变量,则执行表达式x=(i=4,j=16,k=32)后x的值 是() A) 4 B)16 C)32 D)52 10.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( ) A) 7 B) 8 C)6 D)2 11.已知各变量的类型说明如下: Int k, a, b; unsigned long w=5; double x=1.42; 则以下不正确的表达式是() A) x%(-3) B)w+=-2 C) k=(a=2,b=3, a+b) D)a+=a-=(b=4)*(a=3) 12.已知字母A的ASCII码为65,且定义c2为字符型变量,则执行语句c2=‘A‘+‘6‘-?3‘;后;c2中的值为() A) D B) 68 C)不确定的值D) C

C语言测试题(含答案)

题目1:除不尽的数 一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。 *运行结果 The required number is:1993 题目2:要发就发 “1898--要发就发”。请将不超过1993的所有素数从小到大排成第一行,第二行上的每个素数都等于它右肩上的素数之差。编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假好存在的话,又有几种这样的情况? 第一行:2 3 5 7 11 13 17......1979 1987 1993 第二行:1 2 2 4 2 4 (8) 运行结果 There are follwing primes sequences in first row: (1).89,......,1987 (2).53,......,1951 (3). 3,......,1901 题目3:填表格 将1、2、3、4、5和6 填入下表中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。按此要求,可有几种填写方法? . . . . . . /*两个点之间为表格*/ *运行结果 The possble table satisfied above conditions are: No.1: No.2: No.3: No.4: No.5: 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 4 5 6 3 5 6 3 4 6 2 5 6 2 4 6 题目4: 1.黑白子交换 有三个白子和三个黑子如下图布置: ○○○ . ●●● 游戏的目的是用最少的步数将上图中白子和黑子的位置进行交换: ●●● . ○○○ 游戏的规则是:(1)一次只能移动一个棋子;(2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。请用计算机实现上述游戏。 *问题分析与算法设计 计算机解决胜这类问题的关键是要找出问题的规律,或者说是要制定一套计算机行动的规则。分析本题,先用人来解决问题,可总结出以下规则: (1) 黑子向左跳过白子落入空格,转(5) (2) 白子向右跳过黑子落入空格,转(5)

C语言程序设计试卷及答案

C 语言程序设计 笔试试题 试卷说明: 1. 笔试卷面总分100分,取卷面成绩的70%计入总分; 2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%; 3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸; 4. 答题时间120分钟。 一、单项选择题。将正确答案填入下面框中。 (本题16分,每小题1分) 1. 有以下程序 main() {int a=1,b=0; if(!a) b++; else if(a==0) if(a) b+=2; else b+=3; printf(“%d\n ”,b); }则程序输出( A )。 A) 0 B) 1 C) 2 D) 3 2. 有以下定义:int a; long b; double x,y;则下列正确的是( A )。 A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x 3. 若有定义 int (*p)[3];则下列说法正确的是( C )。 注意行为规范 遵守考试纪律

A) 定义了基类型为int的三个指针变量 B) 定义了一个名为*pt、具有三个元素的整型数值 C) 定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组 D) 定义了基类型为int的具有三个元素的整型数组 4. 有以下程序段 main() { int x=10; while(x--); printf("x=%d\n",x);} 则最后的输出结果是:( B)。 A) x=0 B) x= -1 C) x=1 D)while构成无限循环 5. 有以下程序: int fun() {static int x=1; x *= 2; return x;} main( ) { int i,s=1 ; for(i=1 ;i<=2 ;i++) s=fun() ; printf(“%d\n ”,s) ;} 执行后的输出结果为( D)。 A) 0 B) 1 C) 8 D) 4 6. void main( ){ int k=011; printf("%d\n",k++); } }程序输出结果是( D ) A)12 B) 11 C) 10 D) 9 7. 以下C语言标识符中,不合法的是( C)。 A) _2 B) a_b C) a--b D) AaBc 8. C语言允许函数类型默认定义,此时该函数值隐含的类型是( B)。 A) float B) int C) long D) double 9. 以下程序段运行结果是( B)。 enum weekday{aa,bb=2,cc,dd,ee}week=ee;

大学C语言期末考试练习题(带详解答案)之欧阳学创编

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成

(2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D 中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E 均为为关键字,不满足(3);选项D中的“-”不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3) 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3

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