




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2019年上半年程序員考試應(yīng)用技術(shù)下午真題(總分:95.00,做題時間:150分鐘)一、案例分析題(總題數(shù):6,分?jǐn)?shù):95.00)1.【說明】
如果n位數(shù)(n≥2)是回文數(shù)(從左到右讀與從右到左讀所得結(jié)果一致),且前半部分的數(shù)字遞增(非減)、后半部分的數(shù)字將遞減(非增),則稱該數(shù)為拱形回文數(shù)。例如,12235753221就是一個拱形回文數(shù)。顯然,拱形回文數(shù)中不含數(shù)字0。
下面的流程圖用于判斷給定的n位數(shù)(各位數(shù)字依次存放在數(shù)組的各個元素A[i]中,i=1,2,...,n)是不是拱形回文數(shù)。流程圖中,變量T動態(tài)地存放當(dāng)前位之前一位的數(shù)字。當(dāng)n是奇數(shù)時,還需要特別注意中間一位數(shù)字的處理。
【流程圖】
注1:“循環(huán)開始”框內(nèi)給出循環(huán)控制變量的初值、終值和增值(默認(rèn)為1),格式為:循環(huán)控制變量=初值,終值[,增值]
注2:函數(shù)int(x)為取x的整數(shù)部分,即不超過x的最大整數(shù)。閱讀上述說明和流程圖,填寫流程圖中的空缺,將解答填入答題紙的對應(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]對稱的后半部分元素下標(biāo)是n-i+1;
2)T動態(tài)地存放當(dāng)前位之前一位的數(shù)字,所以這里A[i]大于前一項T值。且在拱形回文數(shù)中,不含數(shù)字0,所以再加上一個條件A[i]!=0
3)比較完后,將A[i]值賦給T,T進(jìn)行動態(tài)地存放當(dāng)前位之前一位的數(shù)字。
4、5)判斷元素個數(shù)是偶數(shù)還是奇數(shù),如果是奇數(shù),則還需要進(jìn)行判斷最中間的元素,所以4空這里填n,5空填的是為奇數(shù)個時最中間元素的前一項元素的表示。2.【說明】
函數(shù)bubbleSort(intarr[],intn,int(*compare)(int,int))的功能是根據(jù)調(diào)用時傳遞的比較函數(shù)compare對數(shù)組arr的前n個元素進(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;
}
}
}
閱讀以下說明和C代碼,回答問題,將解答寫入答題紙的對應(yīng)欄內(nèi)。
設(shè)有如下數(shù)組定義:
intdata1[]={4,2,6,3,1};
intdata2[]={4,2,6,3,1};
intdata3[]={4,2,6,3,1};
請分別給出下面的函數(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ù)中,第二個參數(shù)表示進(jìn)行比較元素的個數(shù),第三個參數(shù)表示進(jìn)行排序的方式,如果傳入less函數(shù),則是從小到大排序;如果傳入large函數(shù),則是從大到小排序。3.【說明】
某市根據(jù)每天早上5點測得的霧霾指數(shù)(pm2.5值)決定是否對車輛進(jìn)行限行。規(guī)則如下:
(1)限行時間為周內(nèi)(即周一到周五),周六周日不限行;
(2)根據(jù)車牌號的尾號(最后1位數(shù)字)設(shè)置限行車輛(車牌號由英文字母和十進(jìn)制數(shù)字構(gòu)成,長度為6位,至少包含1位數(shù)字);
(3)霧霾指數(shù)低于200時,不限行;
(4)霧霾指數(shù)在區(qū)間[200,400)時,周內(nèi)每天限行兩個尾號的汽車:周一限行1和6,周二限行2和7,周三限行3和8,周四限行4和9,周五限行5和0,即尾號除以5的余數(shù)相同者在同一天限行;
(5)霧霾指數(shù)大于等于400時,周內(nèi)每天限行五個尾號的汽車:周一、周三和周五限行1,3,5,7,9,周二和周四限行0,2,4,6,8,即尾號除以2的余數(shù)相同者在同一天限行;
下面程序運行時,輸入霧霾指數(shù)、星期(數(shù)字1表示星期一,數(shù)字2表示星期二,...,數(shù)字7表示星期日)和車牌號,輸出該車牌號是否限行的信息。
【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);//獲取車牌號的尾號
break;
}
if(pm25>=PM25_L2){//限行5個尾號的汽車
if(isMatched((3)))
prt_msg(licence,YES);
else
prt_msg(licence,NO);
}
else{//限行2個尾號的汽車
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ù)的有效性檢測略,下面假設(shè)輸入數(shù)據(jù)有效、正確
proc((5));
return0;
}閱讀上述說明和C代碼,填寫程序中的空缺,將解答寫入答題紙的對應(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ù)低于200以下也不限行;所以這里填pm25<200或pm;
(2)該處獲取車牌號的尾號,從后向前依次查找,只要找到一個數(shù)字字符就結(jié)束,并將這個數(shù)字字符轉(zhuǎn)化為數(shù)字賦值給lastd,所以填的是licence[i]-‘0’,這里有同學(xué)可能會直接寫licence[i],注意字符‘0’的ASCII碼對應(yīng)的是48;
(3)此處填的是當(dāng)霧霾指數(shù)大于等于400時,周內(nèi)每天限行五個尾號的汽車,算法是尾號除以2的余數(shù)相同者在同一天限行,這里是尾號lastd和weekday和2進(jìn)行分別取余,得到值相同的時候就是要限行,使用函數(shù)isMatched,填的是weekday,lastd,2;
(4)此處填的是當(dāng)霧霾指數(shù)小于400大于等于200時,周內(nèi)每天限行兩個尾號的汽車,算法是尾號除以5的余數(shù)相同者在同一天限行,這里是尾號lastd和weekday和5進(jìn)行分別取余,得到值相同的時候就是要限行,使用函數(shù)isMatched,填的是weekday,lastd,5;
(5)此處填調(diào)用proc函數(shù)的實參,查看proc的函數(shù)定義部分,實參應(yīng)該填入pm25,weekday,licence。4.【說明】
下面程序運行時,對輸入的表達(dá)式進(jìn)行計算并輸出計算結(jié)果。設(shè)表達(dá)式由兩個整數(shù)和一個運算符(+或-)構(gòu)成,整數(shù)和運算符之間以空格分隔,運算符可以出現(xiàn)在兩個整數(shù)之前、之間或之后,整數(shù)不超過4位,輸入的兩個整數(shù)和運算符都用字符串表示。
例如,輸入分別為“25+7”、“+257”、“257+”時,輸出均為“25+7=32”。
【C代碼】
#include
intstr2int(char*s);//將數(shù)字字符串轉(zhuǎn)換為整數(shù)
intisOperator(char*str);//判斷字符串的開頭字符是否為運算符
voidcal(charop,chara[],charb[]);//將數(shù)字串轉(zhuǎn)化為對應(yīng)整數(shù)后進(jìn)行op所要求的計算
voidsolve(chara[],charb[],charc[]);
intmain()
{
chara[10],b[10],c[10];
scanf(’’%s%s%s’’,a,b,c);
//輸入數(shù)據(jù)的有效性檢測略,下面假設(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);//令字符指針指向下一個數(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個字符串,輸出表達(dá)式及計算結(jié)果
if(isOperator(a)){//運算符在兩個整數(shù)之前
cal((3));
}
elseif(isOperator(b)){//運算符在兩個整數(shù)之間
cal((4));
}
else{//運算符在兩個整數(shù)之后
cal((5));
}
}閱讀上述說明和C代碼,填寫程序中的空(1)~(5),將解答寫入答題紙的對應(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向后移動一個。
3、4、5考查的都是函數(shù)調(diào)用的問題,首先判斷運算符的位置,用isOperator來進(jìn)行判定,如果字符串a(chǎn)就是運算符,那么操作數(shù)就是b和c,調(diào)用cal函數(shù)進(jìn)行計算。實參傳遞的時候,第一個參數(shù)要傳遞字符,后面兩個參數(shù)傳遞字符數(shù)組或者字符指針,(3)填寫的是*a,b,c,依次類推,(4)答案是*b,a,c,(5)的答案是*c,a,b。5.【說明】
現(xiàn)如今線下支付系統(tǒng)可以使用現(xiàn)金(Cash)、移動支付、銀行卡(Card)(信用卡(CreditCard)和儲蓄卡(DebitCard))等多種支付方式(PaymentMethod)對物品(Item)賬單(Bill)進(jìn)行支付。圖5-1是某支付系統(tǒng)的簡略類圖。
【Java代碼】
Importjava.util.ArrayList;
importjava.util.List;
interfacePaymentMethod{
public(1);
}
//Cash、DebitCard和Item實現(xiàn)略,Item中g(shù)etPrice()獲取當(dāng)前物品對象的價格
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{//包含所有購買商品的賬單
privateList<Item>items=newArrayList<>();
publicvoidadd(Itemitem){items.add(item);}
publicintgetTotalPrice(){/*計算所有item的總價格,代碼略*/}
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();
}
}閱讀上述說明和Java代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(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是個接口,里面的方法在實現(xiàn)類當(dāng)中進(jìn)行具體實現(xiàn),實現(xiàn)類是Card和Cash,所以第二空填implements;PaymentMethod。在圖示中,PaymentMethod中有pay方法,且在實現(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對象,進(jìn)行調(diào)用pay方法,傳入getTotalPrice()的值,所以這里填paymentMethod.pay;
利用語句PaymentSystempayment=newPaymentSystem()創(chuàng)建一個PaymentSystem類的對象,對象名為payment,然后下面開始調(diào)用pay方法。6.【說明】
現(xiàn)如今線下支付系統(tǒng)可以使用現(xiàn)金(Cash)、移動支付、銀行卡(Card)(信用卡(CreditCard)和儲蓄卡(DebitCard))等多種支付方式(PaymentMethod)對物品(Item)賬單(Bill)進(jìn)行支付。圖6-1是某支付系統(tǒng)的簡略類圖。
【C++代碼】
#include
#include〈vector〉
#include〈string〉
usingnamespacestd;
classPaymentMethod{
public:virtualvoidpay(intcents)=0;
};
//Cash、DebitCard和Item實現(xiàn)略,Item中g(shù)etPrice()獲取當(dāng)前物品對象的價格
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{//包含所有購買商品的賬單
private:
vector<Item*>items;//包含物品的vector
public:
voidadd(Item*item){items.push_back(item);}
intgetTotalPrice(){/*計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國佛教協(xié)會和中國佛學(xué)院招聘筆試真題
- 包倉庫合同范本
- 保溫棉合同范本
- 2024年清遠(yuǎn)市英德市市區(qū)學(xué)校選調(diào)教師考試真題
- 鄉(xiāng)下老宅轉(zhuǎn)讓合同范本
- 包山正規(guī)合同范本
- 《三、應(yīng)用設(shè)計模板》教學(xué)設(shè)計 -2024-2025學(xué)年初中信息技術(shù)人教版七年級上冊
- 三層樓房施工合同范本
- Unit 8 Lesson 46 教學(xué)設(shè)計 - 2024-2025學(xué)年冀教版英語八年級下冊
- 第2單元 單元備課說明2024-2025學(xué)年新教材七年級語文上冊同步教學(xué)設(shè)計(統(tǒng)編版2024)河北專版
- 電梯維護(hù)保養(yǎng)規(guī)則(TSG T5002-2017)
- 義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)解讀與案例分析
- 體育概論課外體育活動
- 招商代理及商業(yè)運營服務(wù) 投標(biāo)方案(技術(shù)方案)
- 屋頂拆除方案
- 如何避免時間浪費
- 小學(xué)數(shù)學(xué)六年級解方程練習(xí)600題及答案
- IP地址介紹和子網(wǎng)劃分
- 架空絕緣配電線路設(shè)計規(guī)范
- 2023-2024學(xué)年北京重點大學(xué)附屬實驗中學(xué)八年級(下)開學(xué)數(shù)學(xué)試卷(含解析)
- 2024年新青島版(六三制)六年級下冊科學(xué)全冊知識點
評論
0/150
提交評論