2019年上半年程序員考試應(yīng)用技術(shù)下午真題_第1頁(yè)
2019年上半年程序員考試應(yīng)用技術(shù)下午真題_第2頁(yè)
2019年上半年程序員考試應(yīng)用技術(shù)下午真題_第3頁(yè)
2019年上半年程序員考試應(yīng)用技術(shù)下午真題_第4頁(yè)
2019年上半年程序員考試應(yīng)用技術(shù)下午真題_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2019年上半年程序員考試應(yīng)用技術(shù)下午真題(總分:95.00,做題時(shí)間:150分鐘)一、案例分析題(總題數(shù):6,分?jǐn)?shù):95.00)1.【說(shuō)明】

如果n位數(shù)(n≥2)是回文數(shù)(從左到右讀與從右到左讀所得結(jié)果一致),且前半部分的數(shù)字遞增(非減)、后半部分的數(shù)字將遞減(非增),則稱該數(shù)為拱形回文數(shù)。例如,12235753221就是一個(gè)拱形回文數(shù)。顯然,拱形回文數(shù)中不含數(shù)字0。

下面的流程圖用于判斷給定的n位數(shù)(各位數(shù)字依次存放在數(shù)組的各個(gè)元素A[i]中,i=1,2,...,n)是不是拱形回文數(shù)。流程圖中,變量T動(dòng)態(tài)地存放當(dāng)前位之前一位的數(shù)字。當(dāng)n是奇數(shù)時(shí),還需要特別注意中間一位數(shù)字的處理。

【流程圖】

注1:“循環(huán)開(kāi)始”框內(nèi)給出循環(huán)控制變量的初值、終值和增值(默認(rèn)為1),格式為:循環(huán)控制變量=初值,終值[,增值]

注2:函數(shù)int(x)為取x的整數(shù)部分,即不超過(guò)x的最大整數(shù)。閱讀上述說(shuō)明和流程圖,填寫流程圖中的空缺,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):20.00)__________________________________________________________________________________________

正確答案:((1)n-i+1

(2)T&&A[i]!=0或T&&A[i]>0

(3)T

(4)n

(5)T或A[n/2]或A[(n-1)/2])解析:1)跟A[i]對(duì)稱的后半部分元素下標(biāo)是n-i+1;

2)T動(dòng)態(tài)地存放當(dāng)前位之前一位的數(shù)字,所以這里A[i]大于前一項(xiàng)T值。且在拱形回文數(shù)中,不含數(shù)字0,所以再加上一個(gè)條件A[i]!=0

3)比較完后,將A[i]值賦給T,T進(jìn)行動(dòng)態(tài)地存放當(dāng)前位之前一位的數(shù)字。

4、5)判斷元素個(gè)數(shù)是偶數(shù)還是奇數(shù),如果是奇數(shù),則還需要進(jìn)行判斷最中間的元素,所以4空這里填n,5空填的是為奇數(shù)個(gè)時(shí)最中間元素的前一項(xiàng)元素的表示。2.【說(shuō)明】

函數(shù)bubbleSort(intarr[],intn,int(*compare)(int,int))的功能是根據(jù)調(diào)用時(shí)傳遞的比較函數(shù)compare對(duì)數(shù)組arr的前n個(gè)元素進(jìn)行排序。

【C代碼】

#defineswap(a,b){a=a^b;b=a^b;a=a^b;}//交換a與b的值

intless(intx,inty)

{

return((x<y)?1:0);

}

intlarger(intx,inty)

{

return((x>y)?1:0);

}

voidbubbleSort(intarr[],intn,int(*compare)(int,int))

{inti,j;

intswapped=1;

for(i=0;swapped;i++){

swapped=0;

for(j=0;j<n-l-i;j++)

if(compare(arr[j+1],arr[j])){

swap(arr[j+1],arr[j]);

swapped=1;

}

}

}

閱讀以下說(shuō)明和C代碼,回答問(wèn)題,將解答寫入答題紙的對(duì)應(yīng)欄內(nèi)。

設(shè)有如下數(shù)組定義:

intdata1[]={4,2,6,3,1};

intdata2[]={4,2,6,3,1};

intdata3[]={4,2,6,3,1};

請(qǐng)分別給出下面的函數(shù)調(diào)用執(zhí)行后,數(shù)組data1、data2和data3各自的元素序列。

(1)bubbleSort(data1,5,less);

(2)bubbleSort(data2,5,larger);

(3)bubbleSort(data3,3,larger);(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1){1,2,3,4,6}

(2){6,4,3,2,1}

(3){6,4,2,3,1})解析:swap函數(shù)是將兩元素值進(jìn)行相互交換。

less函數(shù)是判斷x和y的關(guān)系,如果x

large函數(shù)是判斷x和y的關(guān)系,如果x>y,則函數(shù)值為真。

在bubbleSort函數(shù)中,第二個(gè)參數(shù)表示進(jìn)行比較元素的個(gè)數(shù),第三個(gè)參數(shù)表示進(jìn)行排序的方式,如果傳入less函數(shù),則是從小到大排序;如果傳入large函數(shù),則是從大到小排序。3.【說(shuō)明】

某市根據(jù)每天早上5點(diǎn)測(cè)得的霧霾指數(shù)(pm2.5值)決定是否對(duì)車輛進(jìn)行限行。規(guī)則如下:

(1)限行時(shí)間為周內(nèi)(即周一到周五),周六周日不限行;

(2)根據(jù)車牌號(hào)的尾號(hào)(最后1位數(shù)字)設(shè)置限行車輛(車牌號(hào)由英文字母和十進(jìn)制數(shù)字構(gòu)成,長(zhǎng)度為6位,至少包含1位數(shù)字);

(3)霧霾指數(shù)低于200時(shí),不限行;

(4)霧霾指數(shù)在區(qū)間[200,400)時(shí),周內(nèi)每天限行兩個(gè)尾號(hào)的汽車:周一限行1和6,周二限行2和7,周三限行3和8,周四限行4和9,周五限行5和0,即尾號(hào)除以5的余數(shù)相同者在同一天限行;

(5)霧霾指數(shù)大于等于400時(shí),周內(nèi)每天限行五個(gè)尾號(hào)的汽車:周一、周三和周五限行1,3,5,7,9,周二和周四限行0,2,4,6,8,即尾號(hào)除以2的余數(shù)相同者在同一天限行;

下面程序運(yùn)行時(shí),輸入霧霾指數(shù)、星期(數(shù)字1表示星期一,數(shù)字2表示星期二,...,數(shù)字7表示星期日)和車牌號(hào),輸出該車牌號(hào)是否限行的信息。

【C代碼】

#include

#definePM25_L1200

#definePM25_L2400

typedefenum{YES,NO}MARKTAG;

intisDigit(charch)

{//判斷ch是否為十進(jìn)制數(shù)字字符,是則返回1,否則返回0

return(ch>='0'&&ch<='9');

}

voidprt_msg(char*msg,MARKTAGflag)

{

if(flag==YES)

printf("%s:trafficrestrictions\n",msg);

else

printf("%s:free\n",msg);

}

intisMatched(intweekday,intt,intd)//判斷是否符合限行規(guī)則,是則返回1,否則返回0

{return(weekday%d==t%d);}

voidproc(intpm25,intweekday,char*licence)

{

inti,lastd;

if(weekday==6||weekday==7||(1))

prt_msg(licence,NO);

else{

for(i=5;i>=0;i--)

if(isDigit(licence[i])){

lastd=(2);//獲取車牌號(hào)的尾號(hào)

break;

}

if(pm25>=PM25_L2){//限行5個(gè)尾號(hào)的汽車

if(isMatched((3)))

prt_msg(licence,YES);

else

prt_msg(licence,NO);

}

else{//限行2個(gè)尾號(hào)的汽車

if(isMatched((4)))

prt_msg(licence,YES);

else

prt_msg(licence,NO);

}

}

}

intmain()

{

intweekday=0,pm25=0;

charlicence[7];

scanf("%d%d%s’’,&pm25,&weekday,licence);

//輸入數(shù)據(jù)的有效性檢測(cè)略,下面假設(shè)輸入數(shù)據(jù)有效、正確

proc((5));

return0;

}閱讀上述說(shuō)明和C代碼,填寫程序中的空缺,將解答寫入答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1)pm25<200或pm

(2)licence[i]-‘0’

(3)weekday,lastd,2或lastd,weekday,2

(4)weekday,lastd,5或lastd,weekday,5

(5)pm25,weekday,licence或pm25,weekday,&licence[0])解析:(1)表示什么時(shí)候不限行,按照題意,周六周日不限行,霧霾指數(shù)低于200以下也不限行;所以這里填pm25<200或pm;

(2)該處獲取車牌號(hào)的尾號(hào),從后向前依次查找,只要找到一個(gè)數(shù)字字符就結(jié)束,并將這個(gè)數(shù)字字符轉(zhuǎn)化為數(shù)字賦值給lastd,所以填的是licence[i]-‘0’,這里有同學(xué)可能會(huì)直接寫licence[i],注意字符‘0’的ASCII碼對(duì)應(yīng)的是48;

(3)此處填的是當(dāng)霧霾指數(shù)大于等于400時(shí),周內(nèi)每天限行五個(gè)尾號(hào)的汽車,算法是尾號(hào)除以2的余數(shù)相同者在同一天限行,這里是尾號(hào)lastd和weekday和2進(jìn)行分別取余,得到值相同的時(shí)候就是要限行,使用函數(shù)isMatched,填的是weekday,lastd,2;

(4)此處填的是當(dāng)霧霾指數(shù)小于400大于等于200時(shí),周內(nèi)每天限行兩個(gè)尾號(hào)的汽車,算法是尾號(hào)除以5的余數(shù)相同者在同一天限行,這里是尾號(hào)lastd和weekday和5進(jìn)行分別取余,得到值相同的時(shí)候就是要限行,使用函數(shù)isMatched,填的是weekday,lastd,5;

(5)此處填調(diào)用proc函數(shù)的實(shí)參,查看proc的函數(shù)定義部分,實(shí)參應(yīng)該填入pm25,weekday,licence。4.【說(shuō)明】

下面程序運(yùn)行時(shí),對(duì)輸入的表達(dá)式進(jìn)行計(jì)算并輸出計(jì)算結(jié)果。設(shè)表達(dá)式由兩個(gè)整數(shù)和一個(gè)運(yùn)算符(+或-)構(gòu)成,整數(shù)和運(yùn)算符之間以空格分隔,運(yùn)算符可以出現(xiàn)在兩個(gè)整數(shù)之前、之間或之后,整數(shù)不超過(guò)4位,輸入的兩個(gè)整數(shù)和運(yùn)算符都用字符串表示。

例如,輸入分別為“25+7”、“+257”、“257+”時(shí),輸出均為“25+7=32”。

【C代碼】

#include

intstr2int(char*s);//將數(shù)字字符串轉(zhuǎn)換為整數(shù)

intisOperator(char*str);//判斷字符串的開(kāi)頭字符是否為運(yùn)算符

voidcal(charop,chara[],charb[]);//將數(shù)字串轉(zhuǎn)化為對(duì)應(yīng)整數(shù)后進(jìn)行op所要求的計(jì)算

voidsolve(chara[],charb[],charc[]);

intmain()

{

chara[10],b[10],c[10];

scanf(’’%s%s%s’’,a,b,c);

//輸入數(shù)據(jù)的有效性檢測(cè)略,下面假設(shè)輸入數(shù)據(jù)有效、正確

Solve(a,b,c);

Return0;

}

intstr2int(char*s)

{

intval=0;

while(*s){

val=(1)+(*s-'0');//將數(shù)字字符串轉(zhuǎn)換為十進(jìn)制整數(shù)

(2);//令字符指針指向下一個(gè)數(shù)字字符

}

returnval;

}

intisOperator(char*str)

{

return(*str==‘+’||*str==‘-’);

}

voidcal(charop,chara[],charb[])

{

switch(op){

case‘+’:

printf(”%s+%s=%d”,a,b,str2int(a)+str2int(b));

break;

case‘-’:

printf("%s-%s=%d”,a,b,str2int(a)-str2int(b));

break;

}

}

voidsolve(chara[],charb[],charc[])

{//解析輸入的3個(gè)字符串,輸出表達(dá)式及計(jì)算結(jié)果

if(isOperator(a)){//運(yùn)算符在兩個(gè)整數(shù)之前

cal((3));

}

elseif(isOperator(b)){//運(yùn)算符在兩個(gè)整數(shù)之間

cal((4));

}

else{//運(yùn)算符在兩個(gè)整數(shù)之后

cal((5));

}

}閱讀上述說(shuō)明和C代碼,填寫程序中的空(1)~(5),將解答寫入答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1)val*10

(2)s++

(3)*a,b,c

(4)*b,a,c

(5)*c,a,b)解析:1、2空將數(shù)字字符串進(jìn)行全部轉(zhuǎn)化為數(shù)字,例如“1234”轉(zhuǎn)化為數(shù)字1234,分別用指針s依次取字符,val將數(shù)字保留,之前是’1’,val=1;然后s=’2’,val=12,然后s=’3’,val=123,然后s=’4’,val=1234,因此val=val*10+*s-‘0’。每次循環(huán)后s向后移動(dòng)一個(gè)。

3、4、5考查的都是函數(shù)調(diào)用的問(wèn)題,首先判斷運(yùn)算符的位置,用isOperator來(lái)進(jìn)行判定,如果字符串a(chǎn)就是運(yùn)算符,那么操作數(shù)就是b和c,調(diào)用cal函數(shù)進(jìn)行計(jì)算。實(shí)參傳遞的時(shí)候,第一個(gè)參數(shù)要傳遞字符,后面兩個(gè)參數(shù)傳遞字符數(shù)組或者字符指針,(3)填寫的是*a,b,c,依次類推,(4)答案是*b,a,c,(5)的答案是*c,a,b。5.【說(shuō)明】

現(xiàn)如今線下支付系統(tǒng)可以使用現(xiàn)金(Cash)、移動(dòng)支付、銀行卡(Card)(信用卡(CreditCard)和儲(chǔ)蓄卡(DebitCard))等多種支付方式(PaymentMethod)對(duì)物品(Item)賬單(Bill)進(jìn)行支付。圖5-1是某支付系統(tǒng)的簡(jiǎn)略類圖。

【Java代碼】

Importjava.util.ArrayList;

importjava.util.List;

interfacePaymentMethod{

public(1);

}

//Cash、DebitCard和Item實(shí)現(xiàn)略,Item中g(shù)etPrice()獲取當(dāng)前物品對(duì)象的價(jià)格

abstractclassCard(2){

privatefinalStringname,num;

publicCard(Stringname,Stringnum){=name;this.num=num;}

@Oveiride

publicStringtoString(){

returnString.format(“%scard[name=%s,num=%s]”,this.getType(),name,num);

}

@Override

publicvoidpay(intcents){

System.out.println(“Payed"+cents+“centsusing“+toString());

this.executeTransaction(cents);

}

protectedabstractStringgetType();

protectedabstractvoidexecuteTransaction(intcents);

}

classCreditCard(3){

publicCreditCard(Stringname,Stringnum){(4);}

@Override

protectedStringgetType(){return"CREDIT";}

@Override

protectedvoidexecuteTransaction(intcents){

System.out.println(cents+"paidusingCreditCard."’);

}

}

classBill{//包含所有購(gòu)買商品的賬單

privateList<Item>items=newArrayList<>();

publicvoidadd(Itemitem){items.add(item);}

publicintgetTotalPrice(){/*計(jì)算所有item的總價(jià)格,代碼略*/}

publicvoidpay(PaymentMethodpaymentMethod){//用指定的支付方式完成支付

(5)(getTotalPrice());

}

}

publicclassPaymentSystem{

publicvoidpay(){

Billbill=newBill();

Itemitem1=newItem("1234",10);Itemitem2=newItem("5678",40);

bill.add(item1);bill.add(item2);//將物品添加到賬單中

bill.pay(newCreditCard("LISI","98765432101"));//信用卡支付

}

publicstaticvoidmain(String[]args){

(6)=newPaymentSystem();

payment.pay();

}

}閱讀上述說(shuō)明和Java代碼,將應(yīng)填入(n)處的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。(分?jǐn)?shù):15.00)__________________________________________________________________________________________

正確答案:((1)voidpay(intcents)

(2)implementsPaymentMethod

(3)extendsCard

(4)super(name,num)

(5)paymentMethod.pay

(6)PaymentSystempayment)解析:aymentMethod是個(gè)接口,里面的方法在實(shí)現(xiàn)類當(dāng)中進(jìn)行具體實(shí)現(xiàn),實(shí)現(xiàn)類是Card和Cash,所以第二空填implements;PaymentMethod。在圖示中,PaymentMethod中有pay方法,且在實(shí)現(xiàn)類中Card也有pay方法,所以第一空填voidpay(intcents)。

第三空填CreditCard類與其他類的關(guān)系,可以發(fā)現(xiàn)它繼承了Card類,所以這里填:extendsCard;

第四空CreditCard內(nèi)有構(gòu)造方法,并將方法內(nèi)的參數(shù)傳遞給父類的私有成員,填:super(name,num);

第五空根據(jù)傳入的paymentMethod對(duì)象,進(jìn)行調(diào)用pay方法,傳入getTotalPrice()的值,所以這里填paymentMethod.pay;

利用語(yǔ)句PaymentSystempayment=newPaymentSystem()創(chuàng)建一個(gè)PaymentSystem類的對(duì)象,對(duì)象名為payment,然后下面開(kāi)始調(diào)用pay方法。6.【說(shuō)明】

現(xiàn)如今線下支付系統(tǒng)可以使用現(xiàn)金(Cash)、移動(dòng)支付、銀行卡(Card)(信用卡(CreditCard)和儲(chǔ)蓄卡(DebitCard))等多種支付方式(PaymentMethod)對(duì)物品(Item)賬單(Bill)進(jìn)行支付。圖6-1是某支付系統(tǒng)的簡(jiǎn)略類圖。

【C++代碼】

#include

#include〈vector〉

#include〈string〉

usingnamespacestd;

classPaymentMethod{

public:virtualvoidpay(intcents)=0;

};

//Cash、DebitCard和Item實(shí)現(xiàn)略,Item中g(shù)etPrice()獲取當(dāng)前物品對(duì)象的價(jià)格

classCard:publicPaymentMethod{

private:stringname,num;

public:

Card(stringname,stringnum){this->name=name;this->num=num;}

stringtoString(){

returnthis->getType()+"card[name="+name+",num="+num+"]";)

}

voidpay(intcents){

cout<<"Payed"<this->executeTransaction(cents);

}

protected:

virtualstringgetType()=0;

virtualvoid(1)=0:

};

classCreditCard(2){

public:

CreditCard(stringname,stringnum)(3){

}

protected:

stringgetType(){return"CREDIT";}

voidexecuteTransaction(intcents){

cout<}

};

classBill{//包含所有購(gòu)買商品的賬單

private:

vector<Item*>items;//包含物品的vector

public:

voidadd(Item*item){items.push_back(item);}

intgetTotalPrice(){/*計(jì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論