版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2017年上半年程序員考試程序員應(yīng)用技術(shù)下午真題一、案例分析題1.試題一
閱讀下列說明和流程圖,填補流程圖中的空缺,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
設(shè)有二維整數(shù)數(shù)組(矩陣)A[1:m,1:n],其每行元素從左到右是遞增的,每列元素從上到下是遞增的。以下流程圖旨在該矩陣中需找與給定整數(shù)X相等的數(shù)。如果找不到則輸出“false”;只要找到一個(可能有多個)就輸出“True”以及該元素的下標(biāo)i和j(注意數(shù)組元素的下標(biāo)從1開始)。
例如,在如下矩陣中查找整數(shù)8,則輸出偉:True,4,1
2469
45910
671012
891113
流程圖中采用的算法如下:從矩陣的右上角元素開始,按照一定的路線逐個取元素與給定整數(shù)X進行比較(必要時向左走一步或向下走一步取下一個元素),直到找到相等的數(shù)或超出矩陣范圍(找不到)。
【流程圖】
該算法的時間復(fù)雜數(shù)是(
)
供選擇答案:A.O(1)B.O(m+n)C.O(m*n)D,O(m2+n2)__________________________________________________________________________________________
正確答案:((1)n
(2)j-1→j
(3)i+1→I
(4)j
(5)C)讀題,可以看出元素查找的過程為從右上角開始,往右或者往下進行查找。因此,初始值i=1,j=n。
如果查找值小于右上角值,則往右移動一位再進行比較。所以,第二空填j-1→j。
接下來是判斷什么時候跳出循環(huán)。此時,終止循環(huán)的條件是:j=0,也就是其從最右端移到了最左端。
再看X<A[i,j]不成立時,執(zhí)行流程的右枝。此時,也就是說第一行的最大值都小于查找值,因此需往下移動一行。所以第三空填i+1→I。2.試題二
閱讀下列說明和C函數(shù),填補函數(shù)中的空缺,將解答填入答案紙的對應(yīng)欄目內(nèi)。
【說明】
函數(shù)isLegal(char*ipaddr)的功能是判斷以點分十進制數(shù)表示的IPV4地址是否合法。參數(shù)ipadddr給出表示IPV4地址的字符串的首地址,串中僅含數(shù)字字符和“.”。若IPV4地址合法則返回1,否則返回0。判定為合法的條件是:每個十進制數(shù)的值位于整數(shù)區(qū)間[0,255],兩個相鄰的樹之間用“.”分隔,共4個數(shù)、3個“.”。例如,192.168.0.15、1.0.0.1是合法的,192.168.1.256、1.1..1是不合法的。
【函數(shù)】
intisLegal(char*ipaddr)
{
intflag;
intcurVal;//curVal表示分析出的一個十進制數(shù)
intdecNum=0,dotNum=0;//decNum用于記錄十進制數(shù)的個數(shù)
//dotNum用戶記錄點的個數(shù)
char*p=(1);
for(;*p;p++){
curVal=0;flag=0;
while(isdigit(*p)){//判斷是否為數(shù)字字符
curVal=(2)+*p-’0’;
(3)
flag=1;
}
if(curVal>255){
return0;
}
if(flag){
(4)
}
if(*p=’.’){
dotNum++;
}
}
if((5)){
return1;
}
return0;
}__________________________________________________________________________________________
正確答案:((1)ipaddr
(2)curval*10
(3)p++
(4)decNum++
(5)decNum==4&&dotNum==3)此題判斷IPV4地址是否合法,主要是判斷其每個十進制數(shù)的大小和總個數(shù)以及“.”個數(shù)來進行判別。
首先用isdigital函數(shù)判斷是否為十進制數(shù),是則保留值。指針移到地址的下一個字符。
每找到一個十進制數(shù)都需要和前一次找到的值進行組合,即前一次的結(jié)果要乘以10。
每找完一個完整數(shù)字和“.”都需要記錄,所以要有decNum++和dotNum++。
最后,如果IP地址正確,則返回1。即:decNum=4和dotNum=3時成立。3.試題三
閱讀下列說明和C函數(shù),填補C函數(shù)中的空缺,將解答填入答案紙的對應(yīng)欄目內(nèi)。
【說明】
字符串是程序中常見的一種處理對象,在字符串中進行子串的定位、插入和刪除是常見的運算。
設(shè)存儲字符串時不設(shè)置結(jié)束標(biāo)志,而是另行說明串的長度,因此串類型定義如下:
Typedefstruct
{
Char*str//字符串存儲空間的起始地址
intlehgth//字符串長
intcapacity//存儲空間的容量
}SString;
【函數(shù)1說明】
函數(shù)indexStr(S,T,pos)的功能是:在S所表示的字符串中,從下標(biāo)pos開始查找T所表示字符串首次出現(xiàn)的位置。方法是:第一趟從S中下標(biāo)為pos、T中下標(biāo)偉0的字符開始,從左往右逐個對于來比較S和T的字符,直到遇到不同的字符或者到達T的末尾。若到達T的末尾,則本趟匹配的起始下標(biāo)pos為T出現(xiàn)的位置,結(jié)束查找;若遇到了不同的字符,則本趟匹配失效。下一趟從S中下標(biāo)pos+1處的字符開始,重復(fù)以上過程。
若在S中找到T,則返回其首次出現(xiàn)的位置,否則返回-1。
例如,若S中的字符串偉″studentsents″,T中的字符串偉″ent″,pos=0,則T在S中首次出現(xiàn)的位置為4。
【C函數(shù)1】
intindexStr(SStringS,SStringT,intpos)
{
inti,j:
i(S.length<1||S.length
return-1;
for(i=pos,j=0;i
if(S.str[i]==T.str[j])
{
i++;j++;
}
else{
i=(
);j=0
}
}
if(
)returni-T.length;
return-1;
}
【函數(shù)2說明】
函數(shù)eraseS位(S,T}的功能是刪除字符串S中所有與T相同的子串,其處理過程為:首先從字符串S的第一個字符(下標(biāo)為0)開始查找子串T,若找到(得到子串在S中的起始位置),則將串S中子串T之后的所有字符向前移動,將子串T覆蓋,從而將其刪除,然后重新開始查找下一個子串T,若找到就用后面的宇符序列進行覆蓋,重復(fù)上述過程,直到將S中所有的子串T刪除。
例如,若字符串S為“12ab345abab678”、T為“ab”。第一次找到"ab"時(位置為(2),將"345abab678"前移,S中的串改為"12345abab678",第二次找到"ab"時(位置為5);將ab678前移,S中的串改為"12345ab678",第三次找到"ab"時(位置為5);
將“678‘前移,S中的串改為"12345678"。
【C函數(shù)2】
VoideraseStr(SString*S,SStringT)
{
inti;
intpos;
if(S->length<||T.length<1||S->length
return;
Pos=0
for(;;)
{
//調(diào)用indexStr在S所表示串的pos開始查找T的位置
Pos=indexStr(
);
if(pos=-1)//S所表示串中不存在子串T
return;
for(i=pos+T.length;ilength;i++)//通過覆蓋來刪除自串T
S->str[(
)]=S->str[i];
S->length=(
);//更新S所表示串的長度
}
}__________________________________________________________________________________________
正確答案:((1)i+1
(2)j==T.length
(3)S,T,pos
(4)i-T.length
(5)S->length-T.length)函數(shù)1為字符串匹配,算法為:先判斷字符串S和T的長度,如果為空則不用循環(huán),另外,如果字符串S的長度<字符串T的長度,那字符串S中也不能含有字符串T,也無需進行匹配。
那當(dāng)上述情況都不存在時,即需要進行循環(huán)。即從S的第一個字符開始,與T的第一個字符進行比較,如果相等,則S的第二個字符和T的第二字符進行比較,再相等就再往后移動一位進行比較,依次直到字符串T的結(jié)尾,也就是說j=T,.length。
當(dāng)某一個字符與T的字符不相等時,那么字符串S就往下移一位,再次進行與T的第一個字符進行比較,此時j恢復(fù)初始值,j=0。
函數(shù)2為字符串的刪除運算。首先,要調(diào)用函數(shù)indexStr,需要三個參數(shù),字符串S、字符串T和pos。然后刪除的字符串的位置為刪除初始點的位置到其位置點+字符串T的長度,并將后面的字符串前移。而刪除T字符串后,字符串S的總長度變化,需減去字符串T的長度。4.試題四
閱讀以下說明和C函數(shù),填補函數(shù)中的空缺,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
簡單隊列是符合先進先出規(guī)則的數(shù)據(jù)結(jié)構(gòu),下面用不含有頭結(jié)點的單向循環(huán)鏈表表示簡單隊列。
函數(shù)enqueue(queue*q,KeyTypenew_elem)的功能是將元素new_elem加入隊尾。
函數(shù)Dnqueue(queue*q,KeyType*elem)的功能使將非空隊列的隊頭元素出隊(從列隊中刪除),并通過參數(shù)帶回剛出隊的元素。
用單向循環(huán)鏈表表示的隊列如圖4-1所示
圖4-1單向循環(huán)鏈表表示的隊列示意圖
隊列及鏈表結(jié)點等相關(guān)類型定義如下:
enum{errOr,OK};
typedef
int
KeyType;
typedef
struct
qNode{
KeyTypedata;
Struct
qNode*next;
}qNode,*Linkqueue;Typedef
struct
{
int
size;
Link;queuerear;
}queue;【C函數(shù)】
intenqueue(queue*q,KeyTypenew_elem)
{
//元素new_elem入隊列
qNode*p;
P=(qNode*)malloc(sizeof(qNode));
if(!p)
returnerrOr;
P->data=new_elem;
if(q->rear)
{
P->next=q->rear->next;
(
);
}
else
P->next=p;
(
);
q->size++;
returnOK;
}
intDequeue(queue*q,KeyType*elem)
{//出隊列
qNode*p;
if(0==q->size)//是空隊列
returnerrOr;
P=()(
);//令p指向隊頭元素結(jié)點
*elem=p->data;
q->rear->next=(
);//將隊列元素結(jié)點從鏈表中去除
if((
))//被刪除的隊頭結(jié)點是隊列中唯一結(jié)點
q->rear=NULL//變成空隊列
free(p);
q->size--;
returnOK;
}__________________________________________________________________________________________
正確答案:((1)Q→rear→next=p
(2)Q→rear=p
(3)Q→rear→next
(4)p→next
(5)Q→rear==p或Q→rear→next==p→next或Q→size==1)本題考察C語言指針與鏈表的知識,為入隊列和刪除隊列問題。
對于入隊列,那么當(dāng)隊列Q不為空時,P的隊尾t要指向原Q的隊尾指向的元素,即:P->next=Q->rear->next,Q的隊尾要指向p,即:Q→rear→next=p。當(dāng)隊列Q為空時,插入p元素,則p的隊尾指向p自身,即:p→next=p,且整個隊列Q的隊尾也是p,即:Q→rear=p。
對于隊列刪除元素p,先判斷Q是否為空,為空隊列則返回ERROR;
If(0==q->size)//是空隊列ReturnERROR;
另p指向隊頭元素結(jié)點,隊頭元素結(jié)點可用Q→rear→next表示。此時,p轉(zhuǎn)化為頭結(jié)點,p出列,則需要Q的隊尾指向p的下一個元素,因此第4空填:p→next。
最后,判斷被刪除的隊頭結(jié)點是否是隊列中的唯一結(jié)點,可采用:Q→rear==p或Q→rear→next==p→next或Q→size==1等表示方法。5.試題五
閱讀以下說明和Java程序,填補代碼中的空缺,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
以下Jave代碼實現(xiàn)一個簡單客戶關(guān)系管理系統(tǒng)(CrM)中通過工廠(Customerrfactory)對象來創(chuàng)建客戶(Customer)對象的功能??蛻舴譃閯?chuàng)建成功的客戶(realCustomer)和空客戶(NullCustomer)。空客戶對象是當(dāng)不滿足特定條件時創(chuàng)建或獲取的對象。類間關(guān)系如圖5-1所示。
圖5-1
【Java代碼】
AbstractclassCustomer{
ProtectedStringname;
()booleanisNil()
()StringgetName();
}
ClassrealCustomer()Customer{
PublicrealCustomer(Stringname){
returnfalse;
}
}
ClassNullCustomer()Customer{
PublicStringgetName()﹛{return″NotAvailableinCustomerDatabase″;
}
PublicbooleanisNil(){
returntrue;
}
}
classCustomerfactory{
publicString[]names={"rob","Joe","Julie"};
publicCustomergetCustomer(Stringname){
for(inti=0;i<names.length;i++){
if(names[i].())
{
returnnewrealCusωmer(name);
}
}
return()
}
}
PublicclassCrM﹛
PublicviodgetCustomer()﹛
Customerfactory()
Customercustomer1-cf.getCustomer(″rob″);
Customercustomer2=cf.getCustomer(″rob″);
Customercustomer3=cf.getCustomer(″Julie″);
Customercustomer4=cf.getCustomer(″Laura″);
System.out.println(″customer1.getName());
System.out.println(″customer2getName());
System.out.println(″customer3.getName());
System.out.println(″customer4.getName());
}
Publicstaticviodmain(String[]arge)﹛
CrMcrm=newCrM();
Crm,getCustomer();
}
}
/*程序輸出為:
Customer
rob
NotAvailableinCustomerDatabase
Julie
NotAvailableinCustomerDatable
*/
intmain()
{
CrM*crs=newCrM();
Crs->getCustomer();
Crs->getCustomer();
Deletecrs;
return();
}
/*程序輸出為:
Customer
rob
NotAvailableiniCustomerDatabase
Julie
NotAvailableinCustomerDatabase__________________________________________________________________________________________
正確答案:(1)publicabstract
2)publicabstract
3)extends
4)extends
5)equals(name)
6)newNullCustomer()
7)cf=NewCustomerFactory();)本題考察Java程序設(shè)計客戶關(guān)系管理系統(tǒng)。
1)publicabstract定義可訪問方法
2)publicabstract
3)extends繼承Customer類
4)extends
5)equals(name)判斷名字是否在數(shù)組集合內(nèi)
6)newNullCustomer()當(dāng)不滿足條件時創(chuàng)建一個空對象
7)cf=NewCustomerFactory();實例化對象cf6.試題六
閱讀下列說明和C++代碼,填補代碼中的空缺,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
以下C++代碼實現(xiàn)一個簡單客戶關(guān)系管理系統(tǒng)(CrM)中通過工廠(Customerfactory)對象來創(chuàng)建客戶(Customer)對象的功能。客戶分為創(chuàng)建成功的客戶(realCustomer)和空客戶(NullCustomer)??湛蛻魧ο笫钱?dāng)不滿足特定條件時創(chuàng)建或獲取的對象。類間關(guān)系如圖6-1所示。
圖6-1
【C++代碼】
#include
#include
usingnamespacestd;
classCustomer{
protected:
stringname;
public:
(1)bollisNil()=0;
(2)stringgetName()=0;
};
classrealCustomer(3){
public:
realCustomer(stringname){this->name=name;
}
boolisNil(){returnfalse;
}
stringgetName(){returnname;
}
}
;
classNullCustomer(4){
public:
boolisNil(){returntrue;
}
stringgetName(){return〝NotAvailableinCustomerDatabase〞;
}
}
;
classCustomerfactory{
public:
stringnames[3]={〝rob〞,〝Joe〞,〝Julie〞
}
;
public:
Customer*getCustomer(stringname){
for(inti=0;i<3;i++){
if(names[i].(5)){
returnnewrealCustomer(name);
}
}
return(6);
}
}
;
classCrM{
public:
voidgetCustomer(){
Customerfactory*(7);
Custome
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校園安全隱患大排查大整治百日攻堅專項行動實施方案
- 2025年北京協(xié)和醫(yī)院變態(tài)(過敏)反應(yīng)科合同制科研助理招聘備考題庫及完整答案詳解1套
- 2025青島衛(wèi)生人才教育培訓(xùn)平臺公需科目試題及答案
- 2025年綿陽市公安局安州區(qū)分局公開招聘警務(wù)輔助人員的備考題庫及參考答案詳解一套
- 廣東2025年民生銀行汕頭分行社會招聘備考題庫有答案詳解
- 藥明合聯(lián)ADC浪潮高壁壘CDMO迎來戰(zhàn)略機遇期首次覆蓋給予“買入”評級
- java課程設(shè)計數(shù)據(jù)庫
- 2025 九年級語文下冊小說情節(jié)高潮分析課件
- 中共東莞市委外事工作委員會辦公室2025年公開招聘編外聘用人員備考題庫及參考答案詳解一套
- 2025年全球鋰電池銅箔行業(yè)競爭格局報告
- 【數(shù) 學(xué)】2025-2026學(xué)年北師大版數(shù)學(xué)七年級上冊期末練習(xí)(一)
- (一診)成都市2023級高三高中畢業(yè)班第一次診斷性檢測英語試卷(含官方答案)
- 2026年哈爾濱鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫帶答案
- 珠海市紀(jì)委監(jiān)委公開招聘所屬事業(yè)單位工作人員12人考試題庫附答案
- 月子會所的禮儀培訓(xùn)課件
- 學(xué)堂在線 雨課堂 學(xué)堂云 積極心理學(xué)(上)厚德載物篇 章節(jié)測試答案
- 中國法律史-第二次平時作業(yè)-國開-參考資料
- GB/T 39167-2020電阻點焊及凸焊接頭的拉伸剪切試驗方法
- GB/T 17648-1998絕緣液體局部放電起始電壓測定試驗程序
- 拉絲機培訓(xùn)第四版課件
- DB33∕T 1222-2020 新建住宅小區(qū)生活垃圾分類設(shè)施設(shè)置標(biāo)準(zhǔn)
評論
0/150
提交評論