1、2015年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】下面流程图的功能是:在给定的一个整数序列中查找最长的连续递增子序列。设序列存放在数组 A1: n(n2)中,要求寻找最长递增子序列 AK: K+L一1(即 AK AK+1 AK+L一 1)。流程图中,用 Kj和 Lj分别表示动态子序列的起始下标和长度,最后输出最长递增子序列的起始下标 K和长度 L。例如,对于序列 A=1, 2, 4, 4, 5, 6, 8, 9, 4, 5, 8,将输出 K=4, L=5。【流程图】 注:循环开始框内
2、应给出循环控制变量的初值和终值,默认递增值为 1,格式为:循环控制变量 =初值,终值 2 阅读以下说明和 C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的代码运行时,从键盘输入一个四位数 (各位数字互不相同,可以有 0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数 max4和最小四位数 min4(有 0时为三位数 ),计算 max4与 min4的差值,得到一个新的四位数。若该数不等于 6174,则重复以上过程, 直到得到 6174为止。 例如,输入 1234,则首先由 4321-1234,得到 3087;然后由 8730-378,得到8352;最后由
3、 8532-2358,得到 6174。 【 C代码】 #include int difference(int a) int t,i,j,max4,min4; for(i=0; i 3; i+) *用简单选择排序法将 a0 a3按照从大到小的顺序排列 * t=i; for(j=i+1; _(1); j+) if(aj at)_(2); if(t!=i) int temp=at; at=ai; ai=temp; max4=_(3); min4=_(4); return max4-min4; int main() int n, a4; printf(“input a positive four-di
4、git number: “); Scanf(“ d“, &n); while(n!=6174) a0=_(5); *取 n的千位数字 * a1=n 100 10; *取 n的百位数字 * a2=n 10 10; *取 n的十位数字 * a3=_(6); *取 n的个位数字 * n=difference(a); return 0; 3 阅读以下说明和 C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者 (称为左子序列 )和大于基准值者 (称为右子
5、序列 ),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。函数 quicksort(int a, int n)实现了快速排序,其中, n个整数构成的待排序列保存在数组元素 a0 an一 1中。 【 C代码】 #include Void quicksort(int a, int n) int i, j; int pivot=a0; 设置基准值 i=0; j=n一 1; while (i j) while(i j _(1) j-; 大于基准值者保持在原位置 if (i j) ai=aj; i+; ) while(i j _(2) i+; 不大于基准值者保持在原位置 if (i
6、 j) aj=ai; j-; ai=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类型的 orderList中,即orderList push_back(order)。 placeorders()函数是实现将所有买卖股票的指示进行实际买入和卖出操作,即采用 for循环,对每个 or
7、derList中的 Stock实例,调用在 BuyStock和 SellStock中实现的 execute()加以执行。 for(int i=0; i orderList size(); i+)orderListi execute(); StockCommand主要是根据操作指示进行股票交易,实现为一个函数 main(),其中创建欲进行 交易的股票对象 aStock和 bStock,创建买 aStock卖 bStock股票的对象 buyStockOrder和 sellStockOrder对象: Order* buyStockOrder=new BuyStock(aStock); Order*
8、sellStockOrder=new SellStock(bStock); 再创建股票代理 Broker类的对象 broker,并接收买卖股票的指示: broker takeOrder(buyStockOrder); broker takeOrder(sellStockOrder); 最后将所有买卖指示用 placeOrders()下执行命令: broker placeOrders (); 主控逻辑代码在 main()函数中实现。在 main()函数中,先初始化 StockCommand类的对象指针 stockCommand,代码为: StockCommand*StockCommand=new
9、 StockCommand(); 即生成一个股票指示,并调用其 main()函数启动股票交易,即调用stockCommand的 main()函数,实现股票的买卖指示的创建和执行。主控 main()函数中,使用完数组对象之后,需要用 delete操作释放对象,对 stockCommand对象进行删除,即 delete StockCommand; 因此,空 (1)需要表示继承 Order类的 “public Order”;空 (2)需要表示当前对象的 stock属性,填入 “this stock”或 “(*this) stock”;空 (3)需要填入 BuyStock和 SellStock均能表示
10、的父类 “Order*”;空 (4)需要 orderList中每个对象指针调用execute(),即填入 “orderListi”或 “*(orderList+i)”;空 (5)处为调用“placeOrders()”来下达执行命令。 6 【正确答案】 (1)implements (2)this stock (3)Order (4)Order (5)placeOrders() 【试题解析】 本题考查 Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。 先 考查题目说明,在股票交易中,股票代理根据客户发出的股票操作
11、指示进行股票的买卖操作。根据说明进行设计,题目说明中给出了类图。涉及到股票(Stock)、股票代理 (Broker)、股票操作指示 (StockCommand)、买卖股票 (Order接口、 BuyStock与 SellStock类 )等类以及相关操作。 Stock类定义了两个操作 buy()和 sell(),分别实现买和卖的操作。在构造函数中接收参数 name和 quantity,分别表示买卖股票的名称和数量,对当前所创建对象中的 name和 quantity赋值 ,用 this表示区别当前对象,所以构造器为: public Stock(String name, int quantity)
12、this name=name; this quantity=quantity; Order接口声明接口 execute(),表示执行股票交易 (即买和卖 )方法接口。 BuyStock实现接口 Order: class BuyStock implements Order,构造器接收参数stock,实现方法 execute(),进 行股票买入, stock buy()。 SellStock和 BuyStock类似,实现接口 Order,构造器接收参数 stock,实现函数 execute(),进行股票卖出, stock sell()。 Broker类实现接收客户的买卖指示 tackOrder()
13、,接收 BuyStock或者 SellStock的实例, BuyStock和 SellStock均是 Order的实现类,所以 BuyStock和 SellStock的实例也是 Order类型,因此 tackOrder()所接收的参数用 Order。类型。接收到买卖指示之后 ,存入 List类型 (具体对象类型为 ArrayList)的orderList中: orderList push_back(order); placeOrders()函数是实现将所有买卖股票的指示进行实际买入和卖出操作,即采用 for循环, Java自 1 5起支持 foreach循环,对每个 orderList中的 S
14、tock实例,调用在 BuyStock和 SellStock中实现的 execute()加以执行。 for(Order order: orderList) order execute(); StockCommand主要是根据操作指示进行股票交易,主控逻辑代码实现在 main()方法中,其中创建欲进行交易的股票对象 aStock和 bStock,创建买 aStock卖bStock股票的对象 buyStockOrder和 sellStockOrder对象: Order buyStockOrder=new BuyStock(aStock); Order sellStockOrder=new Sell
15、Stock(bStock); 再创建股票代理 Broker类的对象 broker,并接收买卖股票的指示: broker takeOrder(buyStockOrder); broker takeOrder(sellStockOrder); 最后将所有买卖指示用 placeOrders()下执行命令: broker placeOrders (); 因此,空 (1)需要表示实现 Order接口的关键字 implements;空 (2)需要表示当前对象的 stock属性, this stock;空 (3)需要 BuyStock和 SellStock均能表示的所实现的接口类型 Order;空 (4)需要 orderList中每个对象的类型 Order并能调用execute();空 (5)处为调用 placeOrders()。