2017上半年程序员下午题

2019-01-19 12:25

1 阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】下面流程图的功能是:在给定的一个整数序列中查找最长的连续递增子序列。设序列存放在数组A[1:n](n≥2)中,要求寻找最长递增子序列A[K:K+L一1](即A[K]<A[K+1]<…<A[K+L一1])。流程图中,用Kj和Lj分别表示动态子序列的起始下标和长度,最后输出最长递增子序列的起始下标K和长度L。例如,对于序列A={1,2,4,4,5,6,8,9,4,5,8},将输出K=4,L=5。【流

程图】注:循环开始框内应给出循环控制变量的初

值和终值,默认递增值为1,格式为:循环控制变量=初值,终值

2 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】

下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数min4(有0时为三位数),计算max4与min4的差值,得到一个新的四位数。若该数不等于6174,则重复以上过程,直到得到6174为止。

例如,输入1234,则首先由4321-1234,得到3087;然后由8730-378,得到8352;最后由8532-2358,得到6174。 【C代码】

#include int difference(int a[]) { int t,i,j,max4,min4;

for(i=0;i<3;i++){/*用简单选择排序法将a[0]~a[3]按照从大到小的顺序排列*/ t=i;

for(j=i+1;___________(1);j++) if(a[j]>a[t])__________(2); if(t!=i) {

int temp=a[t]; a[t]=a[i]; a[i]=temp; } }

max4=___________(3); min4=___________(4); return max4-min4; }

int main()

{ int n,a[4];

printf(\:\; Scanf(\%d\,&n); while(n!=6174){

a[0]=__________(5); /*取n的千位数字*/ a[1]=n/100%10; /*取n的百位数字*/ a[2]=n/10%10; /*取n的十位数字*/ a[3]=__________(6); /*取n的个位数字*/

n=difference(a); }

return 0; }

3 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】

对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快

速排序,最终得到非递减的有序序列。函数quicksort(int a[],int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组元素a[0]~a[n一1]中。 【C代码】

#include

Void quicksort(int a[], int n) {

int i,j;

int pivot=a[0]; //设置基准值 i=0;j=n一1; while (i<j){

while(i<j&&___________(1)) j--; //大于基准值者保持在原位置 if (i<j) { a[i]=a[j];i++;)

while(i<j&&__________(2)) i++; //不大于基准值者保持在原位置 if (i<j) {a[j]=a[i];j--;} }

a[i]=pivot; //基准元素归位 if(i>1)

___________(3); //递归地对左子序列进行快速排序 if(n—i一1>1)

___________(4); //递归地对右子序列进行快速排序 }

int main() {

int i,arr[]={23,56,9,75,18,42,11,67);

quicksort(___________(5)); //调用quicksort对数组arr[]进行排序 for(i=0;i

return 0; }

4 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】 函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数

DelListElem(LinkList L,int i,ElemType*e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。 例如,某含头结点单链表L如图4-1(a)所示,删除第3个元素结点后的

单链表如图4.1(b)所示。

#define SUCCESS 0

#define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node,

*LinkLiSt; 【C代码】 LinkList GetListElemPtr(LinkList L, int i) { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList P; int k; /*用于元素结点计数*/ if(i<i||!L||!L一>next)return NULL; k=1;P=L一>next; /*令P指向第1个元素所在结点*/ while (p&&__________(1)){ /*查找第i个元素所在结点*/ ___________(2); ++k; } return P; } Status DelLiStElem(LinkList L,int i,ElemType*e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令P指向第i个元素的前驱结点*/ if(i==i)

___________(3); else p=GetListElemPtr(L,i—1); if(!P||!p一>next) return ERROR;/*不存在第i个元素*/ q=___________(4); /*令q指向待删除的结点*/ p一>next=q一>next; /*从链表中删除结点*/ __________(5); /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }

5 阅读以下说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如图5-1所示,相应的C++代码附后。

【C++代码】 #include #include #include using

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<<\,数量:\<<quantity<<endl;} void sell() {cout<<\卖出]股票名称:\<<name<<\,数量:\<<quantity<<endl;} }; Class Order{ public: virtual void execute()=0; }; class BuyStock:____________(1){ private: Stock*stock; public:

BuyStock(Stock*stock){__________(2)=stock;} void execute(){ stock->buy(); } }; //类SellStock的实现与BuyStock类似,此处略 class Broker{ private: vectororderList; public: void

takeOrder(_________(3)order){ orderList.push back(order);} void placeOrders() { for(int i=0;i<orderList.size();i++){__________(4)->execute();} orderList.clear(); } }; class StockCommand{ public: void 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->___________(5) (); } }; int main(){ StockCommand*stockCommand=new

StockCommand(); stockCommand->main(); delete stockCommand; }

6 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如图6-1所示。相应的Java代码附后。

【Java代码】 import java.util.ArrayList;

import java.util.List; Class Stock{ private String name; private int quantity; publiC Stock(String name,int quantity){ this.name=name;

this.quantity=quantity; } public void buy(){ System.out.println(\买进]:\,数量:\;} public void sell(){System.out.println(”[卖出]:\,数量:\;} } interface Order{ void execute(); } class BuyStock_________(1)Order{ private Stock stock; public BuyStock(Stock stock){___________(2)=stock; } public void execute(){stock.buy(); } } //类SellStock实现和BuyStock类似,略 class Broker{ private ListorderList=new ArrayList(); public void takeOrder( ___________(3)order){orderList.add(order); } publiC void placeOrders(){ for(___________(4)order:orderList){ order.execute(); } orderLiSt.clear(); } } public class StockCommand{ public statiC void

main(String[]args){ 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.___________(5); } }


2017上半年程序员下午题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:GE公司PAC和PLC产品概述[1]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: