c++练习题及答案_第1页
c++练习题及答案_第2页
c++练习题及答案_第3页
c++练习题及答案_第4页
c++练习题及答案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、练习题(一) 一、编程题。根据程序要求,写出函数的完整定义。 1写一个函数,找出给定字符串中大写字母字符(即A-Z这26个字母)的个数(如字符串”China Computer Wrold”中大写字母字符的个数为3个)。函数的原型:int CalcCapital (char *str); 函数参数: str为所要处理的字符串;函数返回值:所给字符串中数字字符的个数2写一个函数,用递归函数完成以下运算:sum(n) = 1 1/2 + 1/3 1/4 + -(1/n)*(-1)n (其中n0) 函数原型:float sum(int n); 函数参数:n为正整数。 函数返回值:相应于给定的n,右边表

2、达式运算结果。提示:你可以使用递归表达式:sum(n) = sum(n-1) -(1/n)*(-1)n 3. 给定新数值,在一个按节点所存放数值从大到小排序的链表中,找适当位置插一个新节点,仍保持有序的链表,写一个函数,完成此操作。 函数的原型:Node * InsNode(Node * head, int newValue); 其中,链表节点的定义如下: struct Nodee int Value; /存放数值 Node * next; /指向链表中的下一个节点 ; 函数参数:函数的第一个参数head指向链表头一节点的指针,如果链表为空,则head的值为NULL。第二个参数newValue

3、为所给定的插入新节点的新数值。 函数返回值:当成功地插入新的节点时,函数返回指向新链表头一节点的指针,否则,若不能申请到内存空间,则返回NULL。 4写一个函数,找出给定数组中具有最小值的元素。 函数的原型: char MinCode(char charAry); 函数参数:charAry所要处理的字符数组名; 函数返回值:返回具有最小ASCII码的字符。 二、理解问答题: 下面的文件stack.h是一个堆栈类模板Stack的完整实现。在这个文件中,首先定义了一个堆栈元素类模板StackItem,然后,在这个类的基础上定义了堆栈类模板Stack。在Stack中使用链表存放堆栈的各个元素,top

4、指针指向链表的第一个节点元素,bottom指针指向链表的最后一个节点元素,成员函数push()将一个新节点元素加入(压进)到堆栈顶部,pop()从堆栈顶部删除(弹出)一个节点元素。为方便起见,程序中加上了行号。阅读程序,根据程序后面的问题作出相应解答。 1. /*- -*/2. /* 文件stack.h */3. /*- -*/4. template 5. class Stack;6. /* 定义模板类StackItem */7. template8. class StackItem9. 10. public:11. StackItem(const Type & elem):item(elem

5、) 12. StackItem() 13. private:14. Type item;15. StackItem * nextItem;16. friend class Stack;17. ;18. /* 定义模板类Stack */19. template 20. class Stack21. 22. public:23. Stack():top( NULL), _(A)_ 24. Stack();25. Type pop();26. void push(const Type &);27. bool is_empty() const return _(B) _ ; 28. private:2

6、9. StackItem * top;30. StackItem * bottom;31. ;32. /模板类Stack的函数成员pop()的实现。33. /从堆栈顶弹出一个节点,并返回该节点的值34. template35. Type Stack:pop()36. 37. StackItem *ptop; /指向顶部节点的临时指针38. Type retVal; /返回值39. _(C) _;40. retVal = top-item;41. top = top-nextItem;42. delete ptop;43. return retVal;44. 45. /模板类Stack的函数成员

7、push()的实现46. template47. void Stack:push(const Type & newItem)48. 49. StackItem *pNew = new StackItem( newItem);50. _(D)_;51. if (bottom = NULL) bottom = top = pNew;52. else _(E)_;53. 54. /模板类Stack的析构函数Stack()的实现55. template56. Stack:Stack()57. 58. StackItem *p = top, *q;59. while(p != NULL) 60. q =

8、 p-nextItem;61. delete p;62. p = q;63. 64. 问题1: 程序中有几处填空,将它们完成。 (A)_(B)_(C)_(D)_(E)_ 问题2:程序第4,5行有什么作用?如果没有这两行语句,程序还正确吗?问题3:程序中多处出现const,请分别说明它们各自表示什么含义。问题4:程序中模板类Stack的析构函数主要做了什么事情?为什么要这么做? 问题5:下面的程序使用了stack.h文件中定义的类模板,请说明下列程序中定义堆栈对象的语句(1-5)是否正确。 #include “stack.h”void main() Stack q1; /1Stack q2; /

9、2Stack q3(10); /3Stack q410; /4Stack *q5 = new Stack; /5 /. delete q5;练习题(一)参考答案一,编程题答案 1. 程序为: int CalcCapital (char *str) if (str = NULL) return 0; /判断字符指针是否为空 int num_of_Capital = 0; /记录大写字母字符个数的变量,初值为0 for(int i=0; stri != 0x0; i+) if (stri = Z) num_of_ Capital +; /若是大写字母,则总数加1 return num_of_ Ca

10、pital; /返回大写字母字符数 2程序为: float sum(int n) if (n = 1) return 1; else return sum(n-1) -(1.0/n)*(-1)n; 3程序为: Node * insNode(Node * head, int newValue) Node * newNode = new Node; /申请新的节点空间 if (newNode = NULL)return NULL;/ newNode-data = newValue; /填充新节点的内容 newNode-next = NULL; Node *pre, *cur; Pre = head

11、; if (head = NULL) head = newNode; /插入到空链表的表头 else if(newValue=head-Value) newNode-next=head; head = newNode; /插入到链表的表头 else /在链表寻找插入点 Node *cur,*pre = head; while(pre-next != NULL) cur = pre-next; if(newValue = cur-Value) break; else pre = cur; if(pre-next!= NULL) newNode-next = cur;/若非末尾,则有下一节点 pr

12、e-next = newNode; /将新节点插入 return head; 4程序可以有多种写法,下面是其中一种 char MinCode(char charAry,int len=10) char mixCode = 0x0; for(int i=0; i len; i+) if (charAry i nextItem = top;(E) top = pNew; 问题2,答:不正确。因为类StackItem模板类的定义中用到了模板类Stack, Stack还没有定义,所以,必须先声明Stack是一个模板类,否则,编译程序就不知道标识符Stack代表什么样的含义,无法进行编译。 问题3,答:第11、26和47行的const修饰的都是函数的参数,表示在这个函数体中不能改它所修饰的参数的值。第27行的co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论