




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2018上半年程序員考試真題及答案-下午卷試題一閱讀以下說(shuō)明和流程圖,填寫(xiě)流程圖中的空缺,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。【說(shuō)明】如果一個(gè)自然數(shù)N恰好等于它所有不同的真因子(即N的約數(shù)以及1,但不包括N)之和S,則稱該數(shù)為“完美數(shù)”。例如6123,28124714,所以6和28都是完美數(shù)。顯然,6是第1個(gè)(即最小的)完美數(shù)。下面流程圖的功能是求500以內(nèi)所有的完美數(shù)。【流程圖】循環(huán)開(kāi)始框中要注明:循環(huán)變量初始值,終值,步長(zhǎng),步長(zhǎng)為1時(shí)可以缺省。如果某自然數(shù)小于其所有真因子之和(例如2412346812),則稱該自然數(shù)為虧數(shù):如果某自然數(shù)大于其所有真因子之和(例如8124),則稱該自然數(shù)為贏數(shù)如果某
2、自然數(shù)等于從1開(kāi)始的若干個(gè)連續(xù)自然數(shù)之和(例如101234)則稱該自然數(shù)為三角形數(shù)數(shù)。據(jù)此定義,自然數(shù)496是( )。供選擇答案:(1)A.虧數(shù) B.贏數(shù) C.完美數(shù),非三角形數(shù) D.完美數(shù)和三角形數(shù)【答案】(1)2(2)N%K(3)S+K(4)S(5)D 【解析】 流程圖的功能是求500以內(nèi)所有的完美數(shù),N的值范圍是6500,因此N是需要判斷是否為完美數(shù),首先需要求出N的所有真因子,然后再判斷N和真因子之和是否相等,從流程圖可以看出S是保存真因子和的變量,K是保存真因子的變量,因此K的初始值是2,終值是N/2,因此第(1)空處填寫(xiě):2;判斷K是否為N的真因子,即判斷N%K(N除以K取余)是否
3、為0,第(2)空填寫(xiě):N%K;當(dāng)K為N的真因子時(shí),需要計(jì)算所有K的和,即S=S+K,第(3)空填寫(xiě):S+K;最后判斷N和S是否相等,第(4)空填寫(xiě):S。496的真因子有:1、2、4、8、16、31、62、124、248,1+2+4+8+16+31+62+124+248=496;因此496是完美數(shù),同時(shí)496=(1+2+3+4+30+31),因此496是完美數(shù)和三角形數(shù)。試題二閱讀以下說(shuō)明和C代碼,填寫(xiě)程序中的空(1)(5),將解答寫(xiě)入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】直接插入排序是一種簡(jiǎn)單的排序方法,具體做法是:在插入第i個(gè)關(guān)鍵碼時(shí),k1,k2,ki-1已經(jīng)排好序,這時(shí)將關(guān)鍵碼ki依次與關(guān)鍵碼ki-1
4、,ki-2,進(jìn)行比較,找到ki應(yīng)該插入的位置時(shí)停下來(lái),將插入位置及其后的關(guān)鍵碼依次向后移動(dòng),然后插入ki。例如,對(duì)17,392,68,36按升序作直接插入排序時(shí),過(guò)程如下:第1次:將392(i1)插入有序子序列17,得到17,392;第2次:將68(i2)插入有序子序列17,392,得到17,68,392;第3次:將36(i3)插入有序子序列17,68,392,得到17,36,68,392,完成排序。下面函數(shù) insertSort用直接插入排序?qū)φ麛?shù)序列進(jìn)行升序排列,在main函數(shù)中調(diào)用insertSort并輸出排序結(jié)果。 【C代碼】void insert Sort(int data,int
5、n)/*用直接插入排序法將data0 datan-1中的n個(gè)整數(shù)進(jìn)行升序排列*/ int i,j; int tmp; for(i=1; i=0 & dataj tmp;j) /查找插入位置并將元素后移 (2); (3)=tmp; /插入正確位置 /*if*/ /*for*/*insertSort*/int main() int *bp,*ep; int n,arr=17,392,68,36,291,776,843,255; n = sizeof(arr) / sizeof(int); insertSort(arr,n); bp=(4); ep = arr+n; for(;bpep; bp+)
6、/按升序輸出數(shù)組元素 printf(%dt,(5)); return 0;【答案】(1)datai-1(2)dataj+1=dataj(3)dataj+1(4)arr(5)*bp【解析】 直接插入排序法是將關(guān)鍵碼插入已經(jīng)排好的序列中,因此將datai插入序列data0datai-1中,此時(shí)序列data0datai-1已經(jīng)按照升序排列好,而datai應(yīng)插入位置前的數(shù)據(jù)應(yīng)該比datai小,而插入位置后的數(shù)據(jù)應(yīng)比datai大,在if語(yǔ)句中判斷datai=datai-1,則將datai插入到di-1后;若datai=0&datajtmp;j-)循環(huán),從datai-2開(kāi)始向前逐一比較,即j從i-2開(kāi)始向
7、0循環(huán),若datajtmp,則進(jìn)行for循環(huán),此時(shí)需要將dataj即datai-2的值后移,使得datai-1=datai-2,即dataj+1=dataj,然后j-,用tmp與dataj進(jìn)行比較,如果tmp dataj,則說(shuō)明tmp應(yīng)放在dataj之前,那么dataj需要繼續(xù)往后移動(dòng)。所以dataj+1= dataj。 當(dāng)該循環(huán)結(jié)束時(shí),此時(shí)有2種情況:(1)j=-1tmp;應(yīng)使得data0后移,即data1=data0,data0=tmp,因此第3空填寫(xiě)dataj+1;(2)dataj=tmp;此時(shí)需要將tmp插入到dataj后,即dataj+1=tmp。在main函數(shù)中調(diào)用insertSo
8、rt函數(shù)并輸出數(shù)組元素,在for(; bpep;bp+)中循環(huán)變量是bp,因此輸出的是bp指向的數(shù)組元素,即調(diào)用insertSort函數(shù)后返回的數(shù)組arr,因此bp=arr(bp是指針變量,數(shù)組名arr可以直接將數(shù)組地址傳遞給bp);在printf函數(shù)中輸出bp;因此printf(“%dn”,*bp)。試題三閱讀以下C代碼,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)?!綜代碼1】float adjustSalary(int service_year,int age,float salary) if( service_year 30 ) salary *= 1.2; else salary
9、*= 2.0; return salary;【C代碼2】void foo(int coin) switch (coin) case 1: printf(Centn); case 5: printf(Nicke1n);break; case 10: printf(Dimen); case 25: printf(Quartern); 【C代碼3】int getSum(int n)int t, i = 0, sum = 0;while ( i n ) scanf(%d, &t); if( t0 ) continue;sum += t; i+; return sum; 【問(wèn)題1】(3分)對(duì)于【C代碼1
10、】,寫(xiě)出下面的函數(shù)調(diào)用后x1、x2和x3的值。x1 = adjustSalary(1,25,9000.0);x2 = adjustSalary(8,32,7000.0);x3 = adjustSalary(5,41,5000.0); 【問(wèn)題2】(6分)(1)寫(xiě)出函數(shù)調(diào)用為foo(1)的輸出結(jié)果;(2)寫(xiě)出函數(shù)調(diào)用為foo(5)的輸出結(jié)果;(3)寫(xiě)出函數(shù)調(diào)用為foo(10)的輸出結(jié)果;(4)寫(xiě)出函數(shù)調(diào)用為foo(25)的輸出結(jié)果。 【問(wèn)題3】(6分)(1)簡(jiǎn)要說(shuō)明【C代碼3】中的函數(shù)getSum()的功能;(2)程序員小王將函數(shù)getSum改寫(xiě)后得到下面的函數(shù)getSum_v2(即用for語(yǔ)句來(lái)
11、描述循環(huán))。請(qǐng)問(wèn),getSum_v2的功能是否與【C代碼3】的getSum完全相同,若不同,請(qǐng)說(shuō)明原因。答案:【問(wèn)題1】(1)x1=9000.000000(2)x2=14000.000000(3)x3=6000.000000【解析】 對(duì)于x1,service_year=1,age=25,salary=9000.0,首先判斷service_year=5,因此再判斷age5,因此直接進(jìn)行else中的運(yùn)算,salary=7000.0*2.0=14000.0,由于salary為float類(lèi)型數(shù)據(jù),因此輸出為14000.000000。 對(duì)于x3,service_year=5,age=41,salary=
12、5000.0,首先判斷service_year30,進(jìn)行運(yùn)算salary=5000.0*1.2=6000.0,由于salary為float類(lèi)型數(shù)據(jù),因此輸出為6000.000000?!締?wèn)題2】(1)foo(1):Cent Nickel(2)foo(5):Nickel(3)foo(10):Dime Quarter(4)foo(25):Quarter【解析】foo(1):coin=1,執(zhí)行printf(“Centn”),輸出Cent并回車(chē),繼續(xù)執(zhí)行printf(“Nickeln”),輸出Nickel并回車(chē),再執(zhí)行break,結(jié)束foo函數(shù)。foo(5):coin=5,執(zhí)行printf(“Nicke
13、ln”),輸出Nickel并回車(chē),再執(zhí)行break,結(jié)束foo函數(shù)。foo(10):coin=10,執(zhí)行printf(“Dimen”),輸出Dime并回車(chē),繼續(xù)執(zhí)行printf(“Quartern”),輸出Quarter并回車(chē),結(jié)束foo函數(shù)。Foo(25):coin=25,執(zhí)行printf(“Quartern”),輸出Quarter并回車(chē),結(jié)束foo函數(shù)?!締?wèn)題3】(1)函數(shù)getSum()是求n個(gè)不小于0的整數(shù)之和。(2)函數(shù)getSum_v2的功能與函數(shù)getSum不同,getSum()是求n個(gè)不小于0的整數(shù)之和,計(jì)算和的數(shù)目總數(shù)是n個(gè),而getSum_v2是總共輸入了n個(gè)數(shù),這n個(gè)數(shù)種
14、有大于等于0,也有小于0的數(shù),最終只把大于等于0的數(shù)進(jìn)行求和,因此最終計(jì)算的和的個(gè)數(shù)有可能是小于n的。 【解析】(1)函數(shù)getSum()是求n個(gè)不小于0的整數(shù)之和。(2)函數(shù)getSum_v2的功能與函數(shù)getSum不同,原因:在getSum中,當(dāng)t0時(shí),繼續(xù)運(yùn)行scanf函數(shù)獲得t,而不會(huì)運(yùn)行i+運(yùn)算,i的值不會(huì)改變,最終會(huì)獲得n個(gè)不小于0的整數(shù)并求和;而在getSum_v2中,當(dāng)t0時(shí),首先進(jìn)行i+,再繼續(xù)scanf函數(shù),因此當(dāng)輸入的數(shù)出現(xiàn)負(fù)值時(shí),會(huì)導(dǎo)致最終運(yùn)算的值可能少于n個(gè)。試題四閱讀以下說(shuō)明和C代碼,填寫(xiě)代碼中的空(1)(6),將解答寫(xiě)入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】下面的C代碼在輸入
15、的100個(gè)英文單詞中找出最小單詞和最大單詞。約定每個(gè)單詞是僅由英文字母構(gòu)成的字符串,且都不超過(guò)20個(gè)字符。單詞的大小按照字典序定義。例如,單詞“entry”大于“enter”、“art”小于“ article”、“an”等于“An”。 【C代碼】#include #define NUMBER 100int isValid(const char *s1); /若字符串s1僅包含英文字母則返回1,否則返回0char toLower(char ch); /將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母int usr_strcmp(char *s1, char *s2); /比較字符串s1和s2,相等時(shí)返回0, /s1大則
16、返回正整數(shù),s1小則返回負(fù)整數(shù)void usr_strcpy(char *s1,const char *s2); /字符串s2拷貝給s1int main() char word32; char maxWord32=, minWord32 =; int numWord=0; while(num Word0) /調(diào)用usr_strcmp比較單詞 usr_strcpy(max Word, word); /用max Word記下最大單詞 else if((3)=a & *s=A & *s=A & ch=Z) ch=(4)+a; return ch; int usr_strcmp(char *s1,ch
17、ar *s2) /按字典序比較兩個(gè)英文單詞,若s1表示的單詞大,則返回正整數(shù), /若s1表示的單詞小,則返回負(fù)整數(shù);否則返回0 for(;(5);) if(toLower(*s1)=toLower(*s2) s1+,s2+; else break; return(toLower(*s1) - toLower(*s2);void usr_strcpy(char *s1,const char *s2) /將s2表示的字符串復(fù)制給s1 for(;(6);) *s1+= *s2+; *s1=0;【答案】(1)word(2)usr_strcmp(word, maxWord)(3)usr_strcmp(w
18、ord, minWord)(4)ch-A(5)*s1!=0&*s2!=0或*s1|*s2等價(jià)表示(6)*s2!=0或*s2等價(jià)表示【解析】(1)scanf函數(shù)是將輸入的數(shù)據(jù)賦值給相應(yīng)的變量,在格式字符串后需要取變量地址,即將數(shù)據(jù)賦值給相應(yīng)地址的變量,word是數(shù)組名,因此可以直接作為地址。(2)調(diào)用usr_strcmp比較單詞,當(dāng)usr_strcmp返回的值為正整數(shù)時(shí),調(diào)用usr_strcpy將word值賦值給maxWord,因此此處是比較word和maxWord,即usr_strcmp(word, maxWord)(3)調(diào)用usr_strcmp比較單詞,當(dāng)usr_strcmp返回的值為負(fù)整數(shù)
19、時(shí),調(diào)用usr_strcpy將word值賦值給minWord,因此此處是比較word和minWord,即usr_strcmp(word, minWord)(4)toLower函數(shù)是將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,if函數(shù)是判斷ch是否為大寫(xiě)字母,當(dāng)ch為大寫(xiě)的時(shí)候,將ch轉(zhuǎn)換為小寫(xiě),小寫(xiě)是在a的基礎(chǔ)上加上一個(gè)值得到,例如b=1+a,這個(gè)值便是大寫(xiě)字母和A之間的差值,即例子中1為B-A,因此此處填寫(xiě)ch-A(5)usr_strcmp是比較兩個(gè)英文單詞,是需要對(duì)s1和s2中的字符逐一比較,因此在for循環(huán)中進(jìn)行比較,for循環(huán)的判斷條件是s1和s2中的字符是否為0,因此此處填寫(xiě)*s1!=0&*s2!=0
20、(6)usr_strcpy是將s2復(fù)制給s1,是需要將s2中的字符逐一賦值給s1,因此在for循環(huán)中進(jìn)行賦值,for循環(huán)的判斷條件是s2中的字符是否為0,因此此處填寫(xiě)*s2!=0試題五閱讀以下說(shuō)明和Java程序,填寫(xiě)程序中的空(1)(6),將解答寫(xiě)入答題紙的對(duì)應(yīng)欄內(nèi)?!菊f(shuō)明】以下Java代碼實(shí)現(xiàn)一個(gè)簡(jiǎn)單繪圖工具,繪制不同形狀以及不同顏色的圖形。部分接口、類(lèi)及其關(guān)系如圖51所示。【Java代碼】interface DrawCircle /繪制圓形 public(1);class RedCircle implements DrawCircle /繪制紅色圓形 public void drawCir
21、cle(int radius,int x, int y) System.out.println(Drawing Circlered,radius: + radius + ,x: + x + ,y: +y+ ); class GreenCircle implements DrawCircle /繪制綠色圓形 public void drawCircle(int radius, int x, int y) System.out.println(Drawing Circlegreen,radius: +radius+ ,x: +x+ ,y: +y+ ); abstract class Shape /形狀 protected (2); public Shape(DrawCircle drawCircle) this.drawCircle = drawCircle; public abstract void draw();class Circle extends Shape /圓形 private int x,y,radius; public Circle(int x,int y,int radius,DrawCircle drawCircle
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強(qiáng)倉(cāng)庫(kù)節(jié)能減排措施的行動(dòng)方案計(jì)劃
- 交通樞紐安全管理辦法計(jì)劃
- 班級(jí)親子活動(dòng)的組織與方案設(shè)計(jì)計(jì)劃
- 化工行業(yè)品牌宣傳方案計(jì)劃
- 高中信息技術(shù) 信息價(jià)值的判斷教學(xué)實(shí)錄2 滬教版必修1
- 《托里縣上海梅蘭日蘭礦業(yè)有限公司新疆托里縣科克火熱金礦Ⅱ號(hào)礦段礦產(chǎn)資源開(kāi)發(fā)利用與生態(tài)保護(hù)修復(fù)方案》專家意見(jiàn)的認(rèn)定
- 七年級(jí)地理下冊(cè) 9.3 撒哈拉以南的非洲-黑種人的故鄉(xiāng)教學(xué)實(shí)錄 晉教版
- 化妝師職業(yè)知識(shí)培訓(xùn)課件
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)《語(yǔ)文園地八》精美課件
- 2025年江蘇貨運(yùn)資格證答題竅門(mén)
- 腸道菌群移植培訓(xùn)課件
- 人教版PEP六年級(jí)英語(yǔ)下冊(cè)課件unit1
- 2024年廣州市高三一模普通高中畢業(yè)班高三綜合測(cè)試一 歷史試卷
- 商業(yè)綜合體物業(yè)管理方案
- 北京社會(huì)管理職業(yè)學(xué)院?jiǎn)握小堵殬I(yè)技能測(cè)試》參考試題庫(kù)(含答案)
- 高低壓配電系統(tǒng)講解通用課件
- 民事糾紛與民事訴訟課件
- 垂直細(xì)分領(lǐng)域分析報(bào)告
- 電氣自動(dòng)化專業(yè)單招高職2024年技能考試題目及答案
- 舞臺(tái)彩繪妝面培訓(xùn)課件
- 【課件】問(wèn)題研究+汽車(chē)工業(yè)能否帶動(dòng)家鄉(xiāng)的發(fā)展高二地理人教版(2019)選擇性必修2
評(píng)論
0/150
提交評(píng)論