2014年下半年程序員考試下午真題

程序員 責(zé)任編輯:YLM 2017-08-17

添加老師微信

備考咨詢

加我微信

摘要:以下是由希賽網(wǎng)整理的2014年下半年程序員考試下午真題​,希望對(duì)備考程序員考試的考生有所幫助。

2014年下半年程序員考試下午真題:

>>>點(diǎn)擊進(jìn)入軟考初級(jí)程序員歷年真題下載

●閱讀以下說(shuō)明和流程圖,填補(bǔ)流程圖中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

本流程圖旨在統(tǒng)計(jì)一本電子書(shū)中各個(gè)關(guān)鍵詞出現(xiàn)的次數(shù)。假設(shè)已經(jīng)對(duì)該書(shū)從頭到尾依次分離出各個(gè)關(guān)鍵詞{A(i)|i=1,…,n)(n>1)},其中包含了很多重復(fù)項(xiàng),經(jīng)下面的流程處理后,從中挑選出所有不同的關(guān)鍵詞共m個(gè){K(j)|j=1,…,m},而每個(gè)關(guān)鍵詞K(j)出現(xiàn)的次數(shù)為NK(j),j=1,…,m。

【流程圖】

1.png

●閱讀以下說(shuō)明和C函數(shù),填補(bǔ)代碼中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

函數(shù)removeDuplicates(char *str)的功能是移除給定字符串中的重復(fù)字符,使每種字符僅保留一個(gè),其方法是:對(duì)原字符串逐個(gè)字符進(jìn)行掃描,遇到重復(fù)出現(xiàn)的字符時(shí),設(shè)置標(biāo)志,并將其后的非重復(fù)字符前移。例如,若str指向的字符串為“aaabbbbscbsss”,則函數(shù)運(yùn)行后該字符串為“absc”。

【C代碼】

void removeDuplicates(char *str)

{

int i, len=strlen(str); /* 求字符串長(zhǎng)度 */

if( (1) ) return; /* 空串或長(zhǎng)度為1的字符串無(wú)需處理 */

for( i=0; i

int flag=0; /* 字符是否重復(fù)標(biāo)志 */

int m;

for( m= (2) ; m

if( str[i]==str[m] ) {

(3) ; break;

}

}

if(flag) {

int n, idx=m;

/* 將字符串第idx字符之后、與str[i]不同的字符向前移 */

for( n=idx+1; n

if( str[n]!=str[i] ) {

str[idx]=str[n]; (4) ;

}

str[ (5) ]='\0'; /* 設(shè)置字符串結(jié)束標(biāo)志 */

}

}

}

●閱讀以下說(shuō)明和C函數(shù),填補(bǔ)函數(shù)代碼中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

隊(duì)列是一種常用的數(shù)據(jù)結(jié)構(gòu),其特點(diǎn)是先入先出,即元素的插入在表頭、刪除在表尾進(jìn)行。下面采用順序存儲(chǔ)方式實(shí)現(xiàn)隊(duì)列,即利用一組地址連續(xù)的存儲(chǔ)單元存放隊(duì)列元素,同時(shí)通過(guò)模運(yùn)算將存儲(chǔ)空間看作一個(gè)環(huán)狀結(jié)構(gòu)(稱為循環(huán)隊(duì)列)。

設(shè)循環(huán)隊(duì)列的存儲(chǔ)空間容量為MAXQSIZE,并在其類型定義中設(shè)置base、rear和length三個(gè)域變量,其中,base為隊(duì)列空間的首地址,rear為隊(duì)尾元素的指針,length表示隊(duì)列的長(zhǎng)度。

#define MAXQSIZE 100

typedef struct {

QElemType *base; /* 循環(huán)隊(duì)列的存儲(chǔ)空間首地址 */

int rear; /* 隊(duì)尾元素索引 */

int length; /* 隊(duì)列的長(zhǎng)度 */

} SqQueue;

例如,容量為8的循環(huán)隊(duì)列如圖3-1所示,初始時(shí)創(chuàng)建的空隊(duì)列如圖3-1(a)所示,經(jīng)過(guò)一系列的入隊(duì)、出隊(duì)操作后,隊(duì)列的狀態(tài)如圖3-1(b)所示(隊(duì)列長(zhǎng)度為3)。

2.png

下面的C函數(shù)1、C函數(shù)2和C函數(shù)3用于實(shí)現(xiàn)隊(duì)列的創(chuàng)建、插入和刪除操作,請(qǐng)完善這些代碼。

【C函數(shù)1】創(chuàng)建一個(gè)空的循環(huán)隊(duì)列。

int InitQueue(SqQueue *Q)

/* 創(chuàng)建容量為MAXQSIZE的空隊(duì)列,若成功則返回1;否則返回0 */

{ Q->base=(QElemType *) malloc ( MAXQSIZE* (1) );

if (!Q->base) return 0;

Q->length=0;

Q->rear=0;

return 1;

} /* InitQueue */

【C函數(shù)2】元素插入循環(huán)隊(duì)列。

int EnQueue(SqQueue}Q, QElemType e) /* 元素e入隊(duì),若成功則返回1;否則返回0 */

{ if(Q->length>=MAXQSIZE) return 0;

Q->rear= (2) ;

Q->base[Q->rear]=e;

(3) ;

return 1;

} /* EnQueue */

【C函數(shù)3】元素出循環(huán)隊(duì)列。

int DeQueue (SqQueuea *Q, QElemType *e)

/* 若隊(duì)列不空,則刪除隊(duì)頭元素,由參數(shù)e帶回其值并返回1;否則返回0 */

{ if ( (4) ) return 0;

*e=Q->base[(Q->rear - Q->length+1+MAXQSIZE) %MAXQSIZE];

(5) ;

return 1;

} /* DeQueue */

●閱讀以下說(shuō)明和C函數(shù),填補(bǔ)代碼中的空缺(1)~(6),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

二叉樹(shù)的寬度定義為含有結(jié)點(diǎn)數(shù)最多的那一層上的結(jié)點(diǎn)數(shù)。函數(shù)GetWidth__(4)__用于求二叉樹(shù)的寬度。其思路是根據(jù)樹(shù)的高度設(shè)置一個(gè)數(shù)組counter[],counter[i]存放第i層上的結(jié)點(diǎn)數(shù),并按照層次順序來(lái)遍歷二叉樹(shù)中的結(jié)點(diǎn),在此過(guò)程中可獲得每個(gè)結(jié)點(diǎn)的層次值,最后從counter[]中取出最大的元素就是樹(shù)的寬度。

按照層次順序遍歷二叉樹(shù)的實(shí)現(xiàn)方法是借助一個(gè)隊(duì)列,按訪問(wèn)結(jié)點(diǎn)的先后順序來(lái)記錄結(jié)點(diǎn),離根結(jié)點(diǎn)越近的結(jié)點(diǎn)越先進(jìn)入隊(duì)列,具體處理過(guò)程為:先令根結(jié)點(diǎn)及其層次號(hào)(為1)進(jìn)入初始為空的隊(duì)列,然后在隊(duì)列非空的情況下,取出隊(duì)頭所指示的結(jié)點(diǎn)及其層次號(hào),然后將該結(jié)點(diǎn)的左予樹(shù)根結(jié)點(diǎn)及層次號(hào)入隊(duì)列(若左子樹(shù)存在),其次將該結(jié)點(diǎn)的右子樹(shù)根結(jié)點(diǎn)及層次號(hào)入隊(duì)列(若右子樹(shù)存在),然后再取隊(duì)頭,重復(fù)該過(guò)程直至完成遍歷。

設(shè)二叉樹(shù)采用二叉鏈表存儲(chǔ),結(jié)點(diǎn)類型定義如下:

typedef struct BTNode {

TElemType data;

struct BTNode *left, *right;

} BTNode, *BiTree;

隊(duì)列元素的類型定義如下:

typedef struct {

BTNode *ptr;

int LevelNumber;

} QElemType;

GetWidth__(5)__函數(shù)中用到的函數(shù)原型如下所述,隊(duì)列的類型名為QUEUE:


3.png


【C函數(shù)】

int GetWidth(BiTree root)

{

QUEUE Q;

QElemType a, b;

int width, height=GetHeight(root);

int i, *counter=(int *) calloc (height+1, sizeof(int));

if ( (1) ) return -1; /* 申請(qǐng)空間失敗 */

if ( !root ) return 0; /* 空樹(shù)的寬度為0 */

if ( (2) ) return -1; /* 初始化隊(duì)列失敗時(shí)返回 */

(4)A.ptr=root;

(5)A.LevelNumber=1;

if (!EnQueue ( &Q, a)) return -1; /* 元素入隊(duì)列操作失敗時(shí)返回 */

while (!isEmpty (Q)) {

if( (3) )return-1; /* 出隊(duì)列操作失敗時(shí)返回*/

counter[b.LevelNumber]++; /* 對(duì)層號(hào)為b.LevelNumber的結(jié)點(diǎn)計(jì)數(shù) */

if(b.ptr->left){ */ 若左子樹(shù)存在,則左子樹(shù)根結(jié)點(diǎn)及其層次號(hào)入隊(duì) */

(6)A.ptr=bptr->left;

(7)A.LevelNumber= (4) ;

if ( !EnQueue (&Q, a)) return -1;

}

if(b.ptr->right){ /* 若右子樹(shù)存在,則右子樹(shù)根結(jié)點(diǎn)及其層次號(hào)入隊(duì) */

(8)A.ptr = b.ptr->right;

(9)A.LeveINumber= (5) ;

if ( !EnQueue (&Q, a)) return -1;

}

}

width=counter [1] ;

for (i=1; i< height +1; i++) /* 求counter[]中的最大值 */

if ( (6) ) width=counter[i];

free(counter);

return width;

}

●閱讀下列說(shuō)明、C++代碼和運(yùn)行結(jié)果,填補(bǔ)代碼中的空缺(1)~(6),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

很多依托撲克牌進(jìn)行的游戲都要先洗牌。下面的C++程序運(yùn)行時(shí)先生成一副撲克牌,洗牌后再按順序打印每張牌的點(diǎn)數(shù)和花色。

【C++代碼】

#include

#include

#include

#include

#include

using namespace std;

const string Rank[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//撲克牌點(diǎn)數(shù)

const string Suits[4]={"SPADES","HEARTS","DIAMONDS","CLUBS"};//撲克牌花色

class Card {

private:

int rank;

int suit;

public:

Card(){}

~Card(){}

Card(int rank, int suit) { (1) rank=rank; (2) suit=suit;}

int getRank() {

return rank;

}

int getSuit() {

return suit;

}

void printCard() {

cout << '(' << Rank[rank] << "," << Suits[suit] << ")";

}

};

class DeckOfCardsts {

private:

Card deck[52];

public:

DeckOfCards() { //初始化牌桌并進(jìn)行洗牌

for (int i=0; i<52; i++) { //用Card對(duì)象填充牌桌

(3) =Card(i%13, i%4);

}

srand((unsigned) time(0)); //設(shè)置隨機(jī)數(shù)種子

std::random_shuffle(&deck[0], &deck[51]);//洗牌

}

~DeckOfCards() {

}

void printCards() {

for ( int i=0; i<52; i++ ){

(4) printCard() ;

if ((i+1)%4==0) cout<

else cout << "\t";

}

}

};

int main(){

DeckOfCards * d = (5) ; //生成一個(gè)牌桌

(6) ; //打印一副撲克牌中每張牌的點(diǎn)數(shù)和花色

delete d;

return 0;

}

●閱讀以下說(shuō)明和Java程序,填補(bǔ)代碼中的空缺(1)~(6),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。

【說(shuō)明】

很多依托撲克牌進(jìn)行的游戲都要先洗牌。下面的Java代碼運(yùn)行時(shí)先生成一副撲克牌,洗牌后再按順序打印每張牌的點(diǎn)數(shù)和花色。

【Java代碼】

import iav

(6)A.util.List;

import jav

(7)A.util.Arrays;

import jav

(8)A.util.Collections;

class Card { //撲克牌類

public static enum Face { Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jacky, Queen, King ); //枚舉牌點(diǎn)

public static enum Suit(Clubs, Diamonds, Hearts, Spades}; //枚舉花色

private final Face face;

private final Suit suit;

public Card( Face face, Suit suit ) {

(1) face=face;

(2) suit=suit;

}

public Face getFace() { return face; }

public Suit getSuit() { return suit; }

public String getCard() { //返回String來(lái)表示一張牌

return String.format( "%s, %s", face, suit );

}

}

//牌桌類

class DeckOfCards {

private List< Card > list; //聲明List以存儲(chǔ)牌

public DeckOfCards() { //初始化牌桌并進(jìn)行洗牌

Card[] deck=new Card[52];

int count=0; //牌數(shù)

//用Card對(duì)象填充牌桌

for ( Card.Suit suit:Card.Suit.values() ) {

for ( Card Face face:Card.Face.values() ) {

(3) =new Card( face, suit);

}

}

list= Arrays.asList( deck );

Collections.shuffle( list ); //洗牌

}

public void printCards ()

{

//按4列顯示52張牌

for ( int i=0; i

System.out.printf( "%-19s%s", list. (4) ,((i+1)%4==0)?"\n":"" );

}

}

public class Dealer {

public static void main( String[] args ) {

DeckOfCards player= (5) ;

(6) printCards();

}

}

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!

軟考備考資料免費(fèi)領(lǐng)取

去領(lǐng)取

!
咨詢?cè)诰€老師!