ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:121.51KB ,
资源ID:17168474      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17168474.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(上半年初级程序员考试真题下午考卷及详解文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

上半年初级程序员考试真题下午考卷及详解文档格式.docx

1、最后一次比较应是“An-1An?”。因此(1)处应填n-1。当AiAi+1成立时,这是递增的情况。此时应将动态连续递增序列的长度增1,因此(2)处应填写Li+1Lj。当AiAi+1不成立时,表示以前可能存在的连续递增已经结束。此时的动态长度Li应与擂台上的长度L进行比较。即(3)处应填LjL。当LjL时,则Lj将做新的擂主(LjL),同时执行KjK。所以(4)处应填Kj。当LjL不成立时,L不变,接着要从新的下标i+1处开始再重新查找连续递增子序列。因此(5)处应填i+1。长度Lj也要回到初始状态1。循环结束时,可能还存在最后一个动态连续子序列(从下标Kj那里开始有长度Lj的子序列)没有得到处

2、理。因此还需要再打一次擂台,看是否超过了以前的擂主长度。一旦超过,还应将其作为擂主,作为查找的结果。试题二1. 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数min4(有0时为三位数),计算max4与min4的差值,得到一个新的四位数。若该数不等于6174,则重复以上过程,直到得到6174为止。例如,输入1234,则首先由4321-1234,得到3087;然后由8730-378,得到8352;最后由8532-2358,得到

3、6174。C代码#includestdio.hint difference(int a)( int t,i,j,max4,min4;for(i=0; i3; i+)/*用简单选择排序法将a0a3按照从大到小的顺序排列*/t=i;for(j=i+1; _; j+)if(ajat) _;if(t!=i)int temp=at; at=ai; ai=temp;max4=_;min4=_;return max4-min4;int main() int n,a4;printf(input a positive four-digit number:);scanf(%d,&n);while(n!=6174)

4、a0= _; /*取n的千位数字*/a1=n/100%10; /*取n的百位数字*/a2=n/10%10; /*取n的十位数字*/a3= _; /取n的个位数字*/n=difference(a);return 0;j4或等价形式t=ja0*1000+a1*100+a2*10+a3 或等价形式a3*1000+a2*100+a1*10+a0 或等价形式n/1000 或等价形式n%10 解析 本题考查C程序设计基本技能及应用。题目要求在阅读理解代码说明的前提下完善代码。由于C程序的执行是从main函数开始的,因此首先理解main函数的代码结构。显然,调用函数difference时实参为数组a,并且从

5、注释中可以确定空(5)的内容为“n/1000”或其等价形式,空(6)处填写“n%10”或其等价形式。这样,数组元素a0a3就依次保存了n值从左至右的各位数字。接下来分析函数difference的代码结构。双重for循环是对数组a进行简单选择排序,目的是将数组中最大数字放入a0,最小的数字放入a3。处理思路是通过比较找出最大数字并用t记下最大数字所在数组元素的下标,第一趟需在a0a3中进行选择,通过比较记下最大数字的下标,最后将最大数字交换至a0,第二趟需在a1a3中进行选择,通过比较记下这三个数中最大者的下标,并最大者交换至a1,依次类推。因此,空(1)处应填入“j4”或其等价形式,以限定选择

6、范围,空(2)处应填入“t=j”,以记下选择范围内最大者的下标。根据题目的说明部分,显然空(3)处应填入“a0*1000+a1*100+a2*10+a3”、空(4)处应填入“a3*1000+a2*100+a1*10+a0”,或其等价形式。试题三对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。函数quicksort(int a,int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组

7、元素a0an-1中。void quicksort(int a, int n)int i,j;int pivot=a0; /设置基准值i=0; j=n-1;while (ij)while (i1 & _) j-; /大于基准值者保持在原位置if (ij) ai =aj; i+;while(ij& _) i+; /不大于基准值者保持在原位置if (i1) aj =ai; 1-;ai=pivot; /基准元素归位if (i1 )_; /递归地对左孔序列进行快速排序if (n-i-11 ) /递归地对右孔序列进行快速排序int i, arr =23,56,9,75,18,42,11,67;quicks

8、ort(_); /调用quicksort对数组arr进行排序for( i=0; isizeof(arr)/sizeof(int); i+ )%dt,arri);ajpivot 或 aj=pivot 或等价形式ai=pivot 或 aipivot 或等价形式quicksort(a,i) 或 quicksort(a,j) 或等价形式quicksort(a+i+1,n-i-1) 或 quicksort(a+j+1,n-j-1) 或等价形式a+i+1可表示为&ai+1,a+j+1可表示为&aj+1arr,sizeof(arr)/sizeof(int)sizeof(arr)/sizeof(int)可替换

9、为8 解析 本题考查C程序设计基本技能及快速排序算法的实现。题目要求在阅读理解代码说明的前提下完善代码,该题目中的主要考查点为运算逻辑和函数调用的参数处理。程序中实现快速排序的函数为quicksort,根据该函数定义的首部,第一个参数为数组参数,其实质是指针,调用时应给出数组名或数组中某个元素的地址;第二个参数为整型参数,作用为说明数组中待排序列(或子序列)的长度。快速排序主要通过划分来实现排序。根据说明,先设置待排序列(或子序列,存储在数组中)的第一个元素值为基准值。划分时首先从后往前扫描,即在序列后端找出比基准值小或相等的元素后将其移到前端,再从前往后扫描,即在序列前端找出比基准值大的元素

10、后将其移动到后端,直到找出基准值在序列中的最终排序位置。再结合注释,空(1)处应填入“ajpivot”,使得比基准值大者保持在序列后端。空(2)处应填入“ai=pivot”,使得不大于基准值者保持在前端。在完成1次划分后,基准元素被放入ai,那么分出来的左子序列由a0ai-1这i个元素构成,右子序列由ai+1an-1构成,接下来应递归地对左、右子序列进行快排。因此,结合注释,空(3)应填入“quicksort(a,i)”或其等价形式,以对左子序列的i个元素进行快排,也可以用&a0代替其中的a,它们是等价的,a与&a0都表示数组的起始地址。空(4)所在代码实现对右子序列进行快排。右子序列由ai+

11、1an-1构成,其元素个数为n-1-(i+1)+1,即n-i-1,显然元素ai+1的地址为&ai+1或a+i+1,所以空(4)应填入“quicksort(a+i+1,n-i-1)”或其等价形式。在main函数中,空(5)所在代码首次调用函数quicksort对main函数中的数组arr进行快排,因此应填入“arr,sizeof(arr)/sizeof(int)”或其等价形式。试题四函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。函数DelListElem(LinkList L,int i

12、,ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。例如,某含头结点单链表L如下图(a)所示,删除第3个元素结点后的单链表如下图(b)所示。#define SUCCESS 0#define ERROR -1typedef int Status;typedef int ElemType;链表的结点类型定义如下:typedef struct NodeElemType data;struct Node *next;Node,*LinkList;LinkList GetListElemPtr(LinkLis

13、t L,int i) /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点;若找到,则返回该元素结点的指针,否则返回NULL*/LinkList p;int k; /*用于元素结点计数*/if(i1 | !L | !L-next) return NULL;k=1; p=L-next; /*令p指向第1个元素所在结点*/while(p & _) /*查找第i个元素所在结点*/ +k;return p;Status DelListElem(LinkList L,int i,ElemType *e) /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/LinkList p,q;

14、/*令P指向第i个元素的前驱结点*/if(i=1)elsep=GetListElemPtr(L,i-1);if(!P | !p-next) return ERROR; /*不存在第i个元素*/q=_; /*令q指向待删除的结点*/p-next=q-next; /从链表中删除结点*/ /*通过参数e带回被删除结点的数据*/free(q);return SUCCESS;kip=p-nextp=Lp-next*e=q-data 解析 本题考查C语言的指针应用和运算逻辑。本问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。函数GetListElemPtr(Lin

15、kList L,int i)的功能是在L为头指针的链表中查找第i个元素,若找到,则返回指向该结点的指针,否则返回空指针。描述查找过程的代码如下,其中k用于对元素结点进行计数。 _) /*查找第i个元素所在结点*/上述代码执行时,k的初始值为1,同时p指向第一个元素结点。当找到第i个元素结点时,k应等于i,尚未到达第i个结点时,k小于i。因此,空(1)处应填入“ki”或其等价形式,使得没有达到第i个结点时继续查找。空(2)处应填入“p=p-next”,从而使得指针p沿着链表中的结点向第i个结点移动。函数DelListElem(LinkList L,int i, ElemType *e)的功能是删

16、除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。根据注释,空(3)所在语句需要指向第一个结点之前的结点(即头结点),显然此处应填入“p=L”。空(4)所在语句令q指向待删除的结点,由于之前已经令p指向待删除结点的前驱结点,显然,此空应填入“p-next”。空(5)所在语句通过参数e带回被删除结点的数据,由于此时只能通过指针q找到被删除的结点,所以应填入“*e=q-data”。试题五1. 阅读以下说明和C+代码,填补代码中的空缺,将解答填入答题纸的对应栏内。在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如

17、下图所示,相应的C+代码附后。类图C+代码#includeiostream#includestring#includevectorusing namespace std;class Stock private:string name; int quantity;public:Stock(string name,int quantity) this-name=name; this-quantity=quantity;void buy() cout买进股票名称:name,数量:quantityendl;void sell() cout卖出股票名称:quantityendl;clasS orderv

18、irtual void execute()=0;class BuyStock:_ Stock* stock;BuyStock(Stock* stock)_ =stock; void execute() stock-buy();/类SellStock的实现与BuyStock类似,此处略class BrokervectorOrder* orderList;void takeOrder(_ order)( orderLiSt.push back(order);void placeorders() for(int i=0;iorderList.Size(); i+)_ -execute();0rder

19、LiSt.clear();class StockCommandVOid main()Stock* aStock=new Stock(股票A,10);Stock*bStock=new Stock(股票B,20);Order*buyStockOrder=new BuyStock(aStock);Order* sellStockOrder=new SellStock(bStock);Broker* broker=new Broker();broker-takeOrder(buyStockorder);broker-takeOrder(sellStockOrder);broker- _ ();int

20、main()StockCommand* stockCommand=new StockCommand();StockCommand-main();delete StoCkCommand;publicOrderthis-stock 或(*this).stockOrder*orderListi 或 *(orderList+i)placeOrders 解析 本题考查C+语言程序设计能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。先考查题目说明,在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。根据说明进行设计,题目说明中

21、给出了类图。涉及到股票(Stock)、股票代理(Broker)、股票操作指示(StockCommand)、买卖股票(Order接口、BuyStock与SellStock类)等类以及相关操作。Stock类定义了两个函数buy()和sell(),分别实现买和卖的操作。在构造函数中接收参数name和quantity,分别表示买卖股票的名称和数量,对当前所创建对象中的name和quantity赋值,用this表示区别当前对象,所以构造函数为:Stock(String name,int quantity)thiS-name=name;thiS-quantity=quantity;Order虚类声明纯虚函

22、数execute():virtual void execute()=0;表示执行股票交易(即买和卖)的函数原型。BuyStock继承Order,构造函数接收参数stock,实现函数execute(),进行股票买入,stock-buy()。SellStock和BuyStock类似,继承Order,构造函数接收参数stock,实现函数execute(),进行股票卖出,stock-sell()。Broker类实现接受客户的买卖指示tackOrder(),接收BuyStock或者SellStock的实例,BuyStock和SellStock均是Order的子类,所以BuyStock和SellStock

23、的实例也是Order,因此tackOrder0所接收的参数用Order类型。接收到买卖指示之后,存入vectorOrder*类型的orderList中,即orderList.push_back(order)。placeOrders()函数是实现将所有买卖股票的指示进行实际买入和卖出操作,即采用for循环,对每个orderList中的Stock实例,调用在BuyStock和SellStock中实现的execute()加以执行。 iorderList.Size();i+) orderListi-execute();StockCommand主要是根据操作指示进行股票交易,实现为一个函数main(),

24、其中创建欲进行交易的股票对象aStock和bStock,创建买aStock卖bStock股票的对象buyStockOrder和sellStockOrder对象:Order*buyStockorder=new BuyStock(aStock);再创建股票代理Broker类的对象broker,并接收买卖股票的指示:broker-takeOrder(buyStockOrder);最后将所有买卖指示用placeOrders()下执行命令:broker-placeOrders ();主控逻辑代码在main()函数中实现。在main()函数中,先初始化StockCommand类的对象指针stockComm

25、and,代码为:即生成一个股票指示,并调用其main()函数启动股票交易,即调用stockCommand的main()函数,实现股票的买卖指示的创建和执行。主控main()函数中,使用完数组对象之后,需要用delete操作释放对象,对stockCommand对象进行删除,即delete StockCommand;因此,空(1)需要表示继承Order类的“public Order”;空(2)需要表示当前对象的stock属性,填入“this-stock”或“(*this).stock”;空(3)需要填入BuyStock和SellStock均能表示的父类“Order*”;空(4)需要orderList中每个对象指针调用execute(),即填入“orderListi”或“*(orderList+i)”;空(5)处为调用“placeOrders()”来下达执行命令。试题六1. 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。其类图如下图所示。相应的Java代码附后。Java代码import Java.util.A

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1