[计算机类试卷]2011年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc
《[计算机类试卷]2011年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2011年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc(11页珍藏版)》请在麦多课文档分享上搜索。
1、2011年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺 (1) (5),将解答填入对应栏内。 说明 下面的流程图可在正文字符串 T(1:L)中计算关键词字符串 K(1:m)出现的次数 (用 n表示 )。其中, L为字符串 T的长度, m为字符串 K的长度 (m L)。为便于模糊查找,关键词中的字符 “?”可以匹配任意一个字符。 在该流程图中,先从 T中取出长度为 m的子串存入 A中,再将 A与 K进行逐个字符的比较 (其中, K可以包含字符 “?”)。注意:从正文字符 串中取出的关键词字符串不允许交叉。例如,“aaaaa
2、a”中有 3个关键词字符串 “aa”。 流程图 1 阅读以下说明和 C函数,回答问题 1至问题 3,将解答写在对应栏内。 说明 1 函数 substring(const char str, int index, int length)的功能是求出字符串 str中指定序号 index开始且长度为 length的子串,并返回所取出的子串。以字符串 “China today”为例,其第一个字符 “C”的序号为 1(而其在字符数组 str中的下标为 0),从序号 5开始且长度为 3的子 串为 “at”。 C函数1说明 2 在 C函数 2中, reverse(unsigned int n)的功能是求出并
3、返回 n的反序数。例如, 1234的反序数是 4321,其求解过程如下: (1)由 1234除以 10得到商 123和余数 4, 0乘以 10再加上 4得到 4; (2)由 123除以 10得到商 12和余数 3, 4乘以 10再加上 3得到 43; (3)由 12除以 10得到商 1和余数 2, 43乘以 10再加上 2得到432; (4)由 1除以 10得到商 0和余数 1, 432乘以 10再加上 1得到 4321。 C函数2 unsigned int reverse(unsigned int n) unsigned int result=0; while( (1) ) result=r
4、esult *10+n%10; n= (2) ; return result; 2 请根据说明 2,填充 C函数 2中的空缺 (1)和 (2)。 3 用 567, 1234, 56781234, 62354879643分别作为实参调用函数 reverse,对应的返回值分别为 765, 4321, 43218765, 1357400630。请说明以 62354879643作为实参 调用函数 reverse时返回结果出错的原因。 3 阅读以下说明和 C函数,回答问题 1和问题 2,将解答填入对应栏内。 说明 对于具有 n个元素的整型数组 a,需要进行的处理是删除 a中所有值为 0的数组元素,并将
5、a中所有非 0元素按照原顺序连续地存储在数组空间的前端。 下面分别用函数 compactArr_v1和 compactArr_v2来实现上述处理要求,函数的返回值为非零元素的个数。 函数 CompactArr(int a, int n)的处理思路是:首先申请一个与数组 a的大小相同的动态 数组空间,然后顺序扫描数组 a的每一个元素,将遇到的非 0元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组 a中。 函数 CompactArr_v2(int a, int n)的处理思路是:利用下标 i(初值为 0)顺序扫描数组 a的每一个元素,下标 k(初值为 0)表示数组 a中连续存储的非
6、0元素的下标。扫描时,每遇到一个数组元素, i就增 1,而遇到非 0元素并将其前移后 k才增 1。 C函数 1 int CompactArr vl(int a, int n) int i, k; int *temp=(int*)malloc(n* (1) ); if(!temp) return-1; for(i=0, k=0; i n; i+) if(ai!=0) (2) =ai; for(i=0; (3) ; i+) ai=tempi; return k; C函数 2 intCompactArr v2(inta, intn) int i, k; for(i=0, k=0; i n; i+)
7、if(ai!=0) (4) =ai; return k; 4 请根据说明中函数 CompactArr_v1的处理思路填补空缺 (1) (3),根据CompactArr_v2的处理思路填补空缺 (4)。 5 请说明函数 CompactArr_v1存在的缺点。 6 阅读以下说明和 C函数,填补 C函数中的空缺 (1) (5),将解答写在对应栏内。 说明 假设一个算术表达式中可以包含 以下三种括号: “(”和 “)”、 “”和 “”及 “”和 “”,并且这三种括号可以按照任意的次序嵌套使用。 下面仪考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式 a-(b-5)*c中的括号是完全匹配的,而
8、表达式 a-(b-5)*c中的括号不是完全匹配的,因为 “(”与 “”不能匹配,而且多了一个 “)”,即缺少一个与 “)”相匹配的 “(”。 函数 if Matched(char expr)的功能是用栈来判断表达式中的括号是否匹配,表达式以字符串的形式存储在字符数组 expr中。若 表达式中的括号完全匹配,则该函数的返回值为 Matched,否则返回值为 Mismatched。 该函数的处理思路如下: (1)设置一个初始为空的栈,从左至右扫描表达式。 (2)若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。 (3)若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈,
9、然后继续匹配过程;否则返回 Mismatched,结束判断过程。 (4)若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回Matched。 函数 if Matched中用到了两种用户白定义数据类型 BOOL和 STACK,其中,BOOL类型的定义如下: typedef enum Mismatched, Matched BOOL; STACK(即栈类型 )的定义省略,栈的基本操作的函数原型说明如下: void InitStack(STACK*S):初始化一个空栈。 void Push(STACK*S. char e):将一个字符压栈,栈中元素数目增 1。 void Pop(ST
10、ACK*S):栈顶元素出栈,栈中元素数目减 1。 char Top(STACK S):返回非空栈 S的栈顶元素值,栈中元素数目不变。 int IsEmpty(STACK S):若 S是空栈,则返回 1,否则返回 0。 C函数 BOOL ifMatched(char expr) char *cptr; /*cptr指向表达式中的字符 */ STACK S; char e; InitStack( S); /*构造一个空栈 */ for(cptr=expr; *cptr!=0 (1) ) if(*cptr=( | *cptr= | *cptr=() (2) ; else if(*cptr=) | *
11、cptr= | *cptr=) if(IsEmpty(S) return Mismatched; e= (3) ;/*取栈顶的左括号 */ if (*cptr=) e!=( ) return Mismatched; if(*cptr= e!=) return Mismatched; if (*cptr=) e!= ) return Mismatched; (4) ;/*栈顶的左括号出栈 */ if( (5) )return Matched; return Mismatched; 7 阅读下列说明、图和 C+代码,填补 C+代码中的空缺 (1) (5),将解答写在对应栏内。 说明 已知对某几何图
12、形绘制工具进行类建模的结果如图 5-1所示,其中Shape为抽象类 (应至少包含一个纯虚拟 (virreal)函数 ),表示通用图形, Box表示矩形, Ellipse表示椭圆, Circle表示圆 (即特殊的椭圆 ), Line表示线条。下面的 C+代码用于实现图 5-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为: Ellipse Circle Ellipse C E C+代码 #include string #include iostream using namespace Std; class Shape public: Shape(const String name)
13、m_name=name; Shape() (1) void paint()=0; string getName()const return m_name; private: string m_name; ; /Box和 Line类的定义与 Ellipse类似,其代码略 class Ellipse (2) public: Ellipse(const String name): Shape(name)cout “E1lipse“ end1; void paint() cout getName() end1; ; class Circle (3) public: Circle(const strin
14、g name): Ellipse(name)(cout “Circle“ end1; ; class Diagram public: void drawAShap(Shape* shape) shape- paint(); void drawShapeS() shapes0=new Circle(“C“); shapes1=new Ellipse(“E“); for (int i=0; i 2; +1) drawAShap(Shapesi); void close()( /*N除形状,代码略 $/) private: Shape* shapes2; ; int main() Diagram*
15、diagram= (4) ; diagram- drawShapes(); diagram-close(); (5) diagram; 8 阅读以下说明和 Java代码,填补 Java代码中的空缺 (1) (6), 将解答写在对应栏内。 说明 已知对某几何图形绘制工具进行类建模的结果如图 6-1所示,其中Shape为抽象 (abstract)类,表示通用图形, Box(矩形 )、 Ellipse(椭圆 )和 Line(线条 )继承 (extends)了 Shape类,其中, Circle表示圆 (即特殊的椭圆 )。下面的 Java代码用于实现图 6-1所给出的设计思路,将其空缺处填充完整并编译
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2011 上半年 软件 水平 考试 初级 程序员 下午 应用技术 试题 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-492979.html