




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
练习题(一)一、编程题。根据程序要求,写出函数的完整定义。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,右边表达式运算结果。提示:你可以使用递归表达式: sum(n) = sum(n-1) -(1/n)*(-1)n3. 给定新数值,在一个按节点所存放数值从大到小排序的链表中,找适当位置插一个新节点,仍保持有序的链表,写一个函数,完成此操作。函数的原型: Node * InsNode(Node * head, int newValue);其中,链表节点的定义如下:struct Nodeeint Value; /存放数值Node * next; /指向链表中的下一个节点;函数参数:函数的第一个参数head指向链表头一节点的指针,如果链表为空,则head的值为NULL。第二个参数newValue为所给定的插入新节点的新数值。函数返回值:当成功地插入新的节点时,函数返回指向新链表头一节点的指针,否则,若不能申请到内存空间,则返回NULL。4写一个函数,找出给定数组中具有最小值的元素。函数的原型:char MinCode(char charAry);函数参数:charAry所要处理的字符数组名;函数返回值:返回具有最小ASCII码的字符。二、理解问答题:下面的文件stack.h是一个堆栈类模板Stack的完整实现。在这个文件中,首先定义了一个堆栈元素类模板StackItem,然后,在这个类的基础上定义了堆栈类模板Stack。在Stack中使用链表存放堆栈的各个元素,top指针指向链表的第一个节点元素,bottom指针指向链表的最后一个节点元素,成员函数push()将一个新节点元素加入(压进)到堆栈顶部,pop()从堆栈顶部删除(弹出)一个节点元素。为方便起见,程序中加上了行号。阅读程序,根据程序后面的问题作出相应解答。1. /*- -*/2. /* 文件stack.h */3. /*- -*/4. template5. class Stack;6. /* 定义模板类StackItem */7. template8. class StackItem9. 10. public:11. StackItem(const Type & elem):item(elem) 12. StackItem() 13. private:14. Type item;15. StackItem * nextItem;16. friend class Stack;17. ;18. /* 定义模板类Stack */19. template20. 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:29. 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的函数成员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 = 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; / 1Stackq2; / 2Stackq3(10); / 3Stackq410; / 4Stack*q5 = new Stack; / 5/.delete q5;答:语句号12345对/错一,编程题答案1. 程序为:int CalcCapital (char *str)if (str = NULL) return 0; /判断字符指针是否为空int num_of_Capital = 0; /记录大写字母字符个数的变量,初值为0for(int i=0; stri != 0x0; i+)if (stri = Z) num_of_ Capital +; /若是大写字母,则总数加1return num_of_ Capital; /返回大写字母字符数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;if (head = NULL) head = newNode; /插入到空链表的表头elseif(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;/若非末尾,则有下一节点pre-next = newNode; /将新节点插入return head;4程序可以有多种写法,下面是其中一种char MinCode(char charAry,int len=10)char mixCode = 0x0;for(int i=0; iif (charAry i nextItem = top;(E) top = pNew;问题2,答:不正确。因为类StackItem模板类的定义中用到了模板类Stack, Stack还没有定义,所以,必须先声明Stack是一个模板类,否则,编译程序就不知道标识符Stack代表什么样的含义,无法进行编译。问题3,答:第11、26和47行的const修饰的都是函数的参数,表示在这个函数体中不能改它所修饰的参数的值。第27行的const修饰的是模板类Stack的成员函数is_empty(),它表示在函数is_empty()的函数体中不能改变任何数据成员的值。问题4,答:析构函数中主要是释放存放的各个节点所占涌空间。因为Stack对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间。这些空间应随着对象的消亡而释放掉,所以,需要在析构函数中释放这些空间。问题5,答:语句号12345对/错错对错错对一,理解问答题 请回答下面有模板的定义问题:1下列模板的定义是否合法的?若为非法的,请简单扼要说明理由。(1) 非法的,两次声明不一样(2) 合法的(3) 非法的,两个类型参数的名字不能相同(4) 非法的,参数U没有类型说明(5) 合法的2关于类List的如下定义中有若干错误,请指出其所在行号并改正 (但不求补充实现成员函数)。1 templateclass ListItem;23 templateclass List4 5 public:6 List (): front(NULL), end(NULL) /有错7 List (const List &); /有错8 List();9 void insert(ListItem*ptr, elemType value);/有错10 int remove(elemType value); /有错11 int size( ) return size; 12 private:13 ListItem*front; /有错14 ListItem*end; /有错,以上错均已改正15 ;二,理解问答题问题1. 答:程序的输出结果为:Size of val_array = 10The values of val_array before calling inv():0 1 2 3 4 5 6 7 8 9The result of val_array after calling inv():0 -1 -2 -3 -4 -5 -6 -7 -8 -9问题2答:题号ABCDE对/错对错对错对问题3答:该函数实现有以下错误:(1) 函数的参数x为const参数,不能在函数体中被改变(2) 在函数中应该创建一个临时对象,这个对象的内容由参数x的内容运算而来(3) 函数返回的应是临时对象,而不是参数正确的函数实现为:templateval_aryinv(const val_ary& x)INTARY ret_array(x); /利用拷贝构造函数构造临时对象for (int i = 0; i x.size(); i+) ret_array *= -1; /符号取反return ret_array; /返回临时对象或者templateval_aryinv(const val_ary& x)INTARY ret_array(x.size(); /构造一个与x长度相同的对象for (int i = 0; i namb;为了分别将lO和20分别赋给n和m,look赋给a,t赋给b,则正确的输入为A)10”look”20tB)10”look”10C)10 look 20 tD)10look20t(3)对于以下带参数的main()函数的第二形参,void main(int arge, ),不可能的形式是A)char*argvB)char argvC)char*aD)char*m(4)能保证对所有的参数能够结束的递归函数是A)int f(imt n)if(n1)return 1;else return n*f(n一1);C)int f(int n)if(abs(n)1)return 1;else return n*f(n*2);(5)执行完下列语句int a,b,*c=&a;int*&p=c;p=&b;后c指向A)aB)bC)cD)无效地址(1)以下叙述中正确的是A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)所有被调用的函数一定要在调用之前进行定义(2)以下选项中合法的实型常数是A)5 E 2OB)E一3C)2 EOD)13 E(3)为了避免嵌套的ifelse
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鹿鸣路二模数学试卷
- 2025年聚烯烃类线缆项目规划申请报告模板
- 2025年学历类自考专业(电子商务)网络营销与策划-经济学(二)参考题库含答案解析
- 2025年学历类自考专业(电子商务)电子商务英语-国际贸易实务(三)参考题库含答案解析
- 六年级权威数学试卷
- 2025年学历类自考专业(电子商务)国际贸易实务(三)-国际贸易实务(三)参考题库含答案解析
- 2025年学历类自考专业(法律)行政法学-国际私法参考题库含答案解析
- 2025年学历类自考专业(法律)法理学-税法参考题库含答案解析
- 多功能复合材料考核试卷
- 2025年政府机关绩效考核管理培训课程资料及试题解析
- 合作社和公司合作协议书(2篇)
- 路试作业安全操作规程(4篇)
- keycloak中文使用文档-Keycloak使用手册(打印版)
- 医药代表大客户管理经验分享
- 教师安全教育培训内容
- 人教版八年级下册地理2024-2025学年八年级下册地理期末综合测试卷(二)(含答案)
- 密态深度学习-记录
- 医院医学院医疗机构培训《烧伤病人护理教学查房》课件
- 家政服务协议书范本
- 中小学生研学旅行投标方案(技术方案)
- 成人手术后疼痛评估与护理-中华护理学会团体标准2023 2
评论
0/150
提交评论