




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
初級程序員-2025年程序員模擬題1問答題(共5題,共5分)(1.)閱讀以下問題說明、C程序和函數(shù),將解答填入答題紙的對應欄內(nèi)。【問題1】分析下面的C程序,指出錯誤代碼((江南博哥)或運行異常代碼)所在的行號?!綜程序】【問題2】函數(shù)inputArr(inta[],intn)的功能是輸入一組整數(shù)(輸入0或輸入的整數(shù)個數(shù)達到n時結(jié)束)存入數(shù)組a,并返回實際輸入的整數(shù)個數(shù)。函數(shù)inputArr可以成功編譯。但測試函數(shù)調(diào)用inputArr后,發(fā)現(xiàn)運行結(jié)果不正確。請指出錯誤所在的代碼行號,并在不增加和刪除代碼行的情況下進行修改,寫出修改正確后的完整代碼行,使之符合上述設計意圖?!綜函數(shù)】正確答案:參考解析:【問題1】5,或arrChar="test"7,或*P='0';【問題2】【解析】本題考查C程序編寫和調(diào)試中常見錯誤的識別和改正?!締栴}1】在C語言中,指針表示內(nèi)存單元的地址,指針變量可用于存儲指針類型的值,即內(nèi)存單元的地址值。變量的值在程序運行過程中允許修改,而常量則不允許修改??梢粤钪羔樦赶蛞粋€變量或常量,但若指針指向一個常量,則不允許通過指針修改該常量。第5行代碼有錯,即對數(shù)組名arrChar的賦值處理是錯誤的。在C語言中,數(shù)組名是表示數(shù)組空間首地址的指針常量,程序中不允許對常量賦值。第7行代碼有錯,在第6行中,通過p="testing"使指針變量指向了一個字符串常量,此后可以再令指針p指向其他字符或字符串,但不能通過指針修改字符串常量的內(nèi)容?!締栴}2】該函數(shù)中出現(xiàn)的錯誤是編寫C程序時的常見錯誤。scanf是C標準庫函數(shù)中的格式化輸入函數(shù),其原型如下:intscanf(char*format,...);使用時,第一個實參是格式控制串,之后的實參是地址1,地址2,…在本題中,要求以十進制整數(shù)格式輸入一個整數(shù)并存入a[k],數(shù)組元素a[k]實質(zhì)上一個整型變量,必須用"&"求得a[k]的地址作為實參調(diào)用scanf函數(shù),因此,第4行出錯,正確代碼應為"scanf("%d&a[k]);"。C程序中將相等運算符"="誤用為賦值運算符"="也是常見的一個錯誤,由于"="也是合法的運算符并且C語言中用0和非0來表示邏輯假和邏輯真,因此在應產(chǎn)生邏輯值的地方產(chǎn)生了其他數(shù)值也可以,因此該錯誤通常只能用人工檢查和排除。第6行的正確代碼應為"if(k==n)break;"。在該程序中,結(jié)束循環(huán)的一個條件是k等于n,另一個條件是輸入的整數(shù)為0。另外,do-whi1e的循環(huán)條件為真(非0)時要繼續(xù)循環(huán),因此,循環(huán)條件應該是判斷輸入的值不等于0。觀察循環(huán)體中與數(shù)組元素有關的部分,如下所示:scanf("%d",&a[k]);(2.)閱讀以下Java代碼,填充(1)~(5)的空缺,將解答填入答題紙的對應欄內(nèi)?!菊f明】進行兩個整數(shù)之間的比較,由考生通過輸入窗口分別輸入兩個整數(shù),程序比較出結(jié)果。例如:先后輸入的兩個數(shù)分別為25和36。比較結(jié)果顯示:25!=3625<3625<=36【Java代碼】importjavax.swing.JOptionPane;publicclassJava3{publicstaticvoidmain(Stringargs[]){String(1)//用戶輸入第1個字符串secondNuimber,//用戶輸入第2個字符串result;//包含輸出結(jié)果的字符串intnumber1,//比較的第1個數(shù)number2;//比較的第2個數(shù)//讀用戶輸入的第1個字符串firstNumber=JOptionPane(2)("Enterfirstinteger:");//讀用戶輸入的第2個字符串secondNumber=JOpttionPane.showlnputDialog("Entersecondinteger:");//將字符串類型轉(zhuǎn)換成整數(shù)類型number1=Integer.(3)(firstNumber);number2=Integer.parselnt(secondNumber);result="";if((4))result=number1+"=="+number2;if(number1!=number2)result=number1+"!=”"+number2;if(number1<number2)result=result+"\n"+number1+"<"+number2;if(numbe1>number2)result=result+"\n"+number1+">"+number2;if(number1<=number2)result=result+"\n"+number1+"<="+number2;if(number1>=number2)result=result+"\n"+number1+">="+number2;//顯示結(jié)果JOptionPane.(5)(null,result,"ComparisonResults",JOptionPane.INFORMATION_MESSAGE.;//程序正常退出System.exit(0);}}正確答案:參考解析:(1)firstNumber(2)showInputDialog(3)parseInt(4)number1==number2(5)showMessageDialog【解析】試題要求由考生通過輸入窗口分別輸入兩個整數(shù),比較其大小并輸出結(jié)果。下面來分析程序代碼,程序中定義了一個類Java3,在這個類中實現(xiàn)題目要求的功能。第1空所在代碼行的注釋是用戶輸入第1個字符串,但這在程序的開始,沒有進行輸入操作,應該是聲明一個字符串型變量用來存放用戶輸入的第1個字符串,而在這個空的前面有一個關鍵字String用來表明所聲明的變量是字符串型的,結(jié)合后面的程序,我們知道用來存放輸入的第1個字符串的變量是firstNumber,因此,此空答案為“firstNumber。根據(jù)注釋,第2空所在代碼行的作用是讀用戶輸入的第1個字符串,而實現(xiàn)這個功能的是JOptionPane包中的showInputDialog()函數(shù),結(jié)合后面的程序,我們不難找出此空的答案為“showlnputDialog”。再根據(jù)注釋,我們知道第3空所在代碼行的作用是將第1個字符串類型的內(nèi)容轉(zhuǎn)換成整數(shù)類型,在Java中,一般通過類型對象的parseInt()方法,結(jié)合后面的程序,我們也不難找出此空的答案為“parseInt”。第4空是條件判斷語句中的條件,根據(jù)整個程序,我們不難發(fā)現(xiàn)變量result中存放的是要輸出的結(jié)果,而語句result=number1+"=="+number2是將number1=number2這樣一個結(jié)果存放到result中,那么只有當number1等于number2時,才輸出這個結(jié)果,因此,第4空的作用應該是確定number1等于number2。所以,此空答案為“number1==number2”。第5空在注釋顯示結(jié)果下面,從上面的程序中我們知道,變量result中存放的是要輸出的結(jié)果,根據(jù)下面的程序,很明顯是要調(diào)用包JOptionPane中的某個方法來實現(xiàn)輸出。此方法應該是showMessageDialog(),因此,此空答案為“showMessageDialog”。(3.)閱讀以下說明和C函數(shù),填充(1)~(5)的空缺,將解答填入答題紙的對應欄內(nèi)?!菊f明】編寫程序,對于從鍵盤輸入的3個實數(shù)a、b、c,計算實系數(shù)一元二次方程的根并輸出所求的根?!竞瘮?shù)】#include<stdio.h>#include<stdlib.h>#include<math.h>Main(){floata,b,c,delta,x1,x2;printf("Entera,b,c");scanf("%f%f%f",&a,&b,&c));if((1))if((2))printf("Inputerror!\n");elseprintf("Thesinglerootis%f\n",(3));else{delta=b*b-4*a*c;if((4)){x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("x1=%8.2f\nx2=%8.2f\n",x1,x2,);}elseif(delta==0)printf("x1=x2=%8.2f\n",(5));else{Printf("z2=%8.2f+%8.2f*i\n",-b/(2*a),sqrt(-delta)/)(2*abs(a)));Printf("z2=%8.2f-%8.2f*i\n",-b/(2*a),sqrt(-delta)/(2*abs(a)));}}}正確答案:參考解析:(1)a==0(2)b==0(3)-c/b(4)delta>0(或b*b-4*a*c>0)(5)-b/(2*a)(或-b/2/a)【解析】對于如何求出一元二次方程的根,是解決這個題目的關鍵。首先我們來回憶一下數(shù)學中求一元二次方程根的方法。在數(shù)學中求一元二次方程根的步驟如下。第一步是確定方程是否為一元二次方程,這需要判斷二次方系數(shù)和一次方系數(shù)是否為0,如果都為0,則方程有錯。如果只是二次方系數(shù)為零,則方程為一元一次方程,方程有一個解。第二步是用Δ=b*b-4*a*c與0的關系來判斷解的個數(shù),如果Δ>0,方程有2個不同的解;如果Δ=0,方程有一個解;而Δ<0時,方程無解。第三步才是求解。現(xiàn)在我們來看主函數(shù),在主函數(shù)中,首先聲明了一些實數(shù)變量,其中變量a、b、c分別存放我們從鍵盤輸入的3個實數(shù),而detal中存放的是Δ的值,x1、x2中存放方程根的值。接下來是從鍵盤輸入3個值,作為一元二次方程的系數(shù),在對一元二次方程求解以前我們需要考慮系數(shù)值為0的情況,因此,第1空應該填“a==0”,第2空應該填“b==0”。在a等于0而b不等于0的情況下,方程為一元一次方程,可以直接用-c/b求得其解,第3空明顯是要輸出這個解。再往下看,程序計算了Δ的值,那么接下來應該是判斷Δ與0的關系了,從程序中可以看出,方程在第4空的條件下有兩個解,那么第4空應該填“delta>0”。而第5空是在delta=0的條件下方程的解,因此第5空應該填“-b/(2*a)”。(4.)閱讀說明和流程圖,填補流程圖中的空缺(1)?(5),將答案填入答題紙對應欄內(nèi)?!菊f明】本流程圖用于計算菲波那契數(shù)列{a1=1,a2=1,…,an=an-1+an-2!n=3,4,…}的前n項(n>=2)之和S。例如,菲波那契數(shù)列前6項之和為20。計算過程中,當前項之前的兩項分別動態(tài)地保存在變量A和B中?!玖鞒虉D】正確答案:參考解析:(1)2或A+B(2)n(3)A+B(4)B-A(5)S+B【解析】菲波那契數(shù)列的特點是首2項都是1,從第3項開始,每一項都是前兩項之和。該數(shù)列的前幾項為1,1,2,3,5,8,…。在流程圖中,送初始值1—A,2—B后,顯然前2項的和S應等于2,所以(1)處應填2(或A+B)。此時2→i(i表示動態(tài)的項編號),說明已經(jīng)計算出前2項之和。接著判斷循環(huán)的結(jié)束條件。顯然當i=n時表示已經(jīng)計算出前n項之和,循環(huán)可以結(jié)束了。因此(2)處填n。判斷框中用“>”或“≥”的效果是一樣的,因為隨著i的逐步增1,只要有i=n結(jié)束條件就不會遇到i>n的情況。不過編程的習慣使循環(huán)結(jié)束條件擴大些,以防止邏輯出錯時繼續(xù)循環(huán)。接下來i+1→i表示數(shù)列當前項的編號增1,繼續(xù)往下計算。原來的前兩項值(分別在變量A和B中)將變更成新的前兩項再放到變量A和B中。首先可以用A+B—B實現(xiàn)(原A)+(原B)—(新B),因此(3)處填A+B。為了填新A值(原來的B值),不能用B—A,因為變量B的內(nèi)容已經(jīng)改變?yōu)椋ㄔ瑼)+(原B),而B-A正是((原A)+(原B))-(原A)=(原B),因此可以用B-A—A來實現(xiàn)新A的賦值。這樣,(4)處填B-A。最后應是前n項和值的累加(比原來的S值增加了新B值),所以(5)處應填S+B。填完各個空后,最好再用具體的數(shù)值來模擬流程圖走幾個循環(huán)檢查所填的結(jié)果(這是防止邏輯上出錯的好辦法)。(5.)閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應欄內(nèi)。【說明】模式匹配是指給定主串t和子串s,在主串t中尋找子串s的過程,其中s稱為模式。如果匹配成功,返回s在t中的位置,否則返回-1。KMP算法用next數(shù)組對匹配過程進行了優(yōu)化。KMP算法的偽代碼描述如下:1.在串t和串s中,分別設比較的起始下標i=j=0。2.如果串t和串s都還有字符,則循環(huán)執(zhí)行下列操作:(1)如果j=-l或者t[i]=s[j],則將i和j分別加1,繼續(xù)比較t和s的下一個字符;(2)否則,將j向右滑動到next[j]的位置,即j=next[j]。3.如果s中所有字符均已比較完畢,則返回匹配的起始位置(從1開始);否則返回-1。其中,next數(shù)組根據(jù)子串s求解。求解next數(shù)組的代碼已由get_next函數(shù)給出?!綜代碼】(1)常量和變量說明t,s:長度為lt和ls的字符串next:next數(shù)組,長度為ls(2)C程序#include<stdio.h>#include<stdlib.h>#include<string.h>/*求next[]的值*/voidget_next(int*next,char*s,intls){inti=0,j=-1;next[0]=-1;/*初始化next[0]*/while(i<ls){/*還有字符*/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- IT技術支持與維護服務協(xié)議規(guī)本
- 個人圖書出版合同
- 專業(yè)軟件安裝與維護協(xié)議
- 軟件定制化開發(fā)合同協(xié)議
- 轉(zhuǎn)讓棋牌茶室協(xié)議書范本
- 郵輪乘務員派遣合同協(xié)議
- 造紙配件采購合同協(xié)議
- 路牙石訂購合同協(xié)議
- 進修賠款協(xié)議書模板
- 進口國際貿(mào)易合同協(xié)議
- 兒童支氣管哮喘診斷與防治指南解讀(2025年)課件
- 腫瘤專科進修匯報護理
- 第2課 《 手繪線條圖像-物象的多視角表達》(教學設計)-2023-2024學年人美版初中美術八年級下冊
- 腎上腺皮質(zhì)功能減退護理
- 村干部筆試題庫及答案
- 高低壓柜常見故障及檢修培訓
- 供應商分級制度
- 第7課《我們有新玩法》第2課時《我們一起來創(chuàng)造》課件 道德與法治二年級下冊 統(tǒng)編版
- 廠房拆除及重建施工合同協(xié)議
- 安全色與安全標識
- 智能監(jiān)測與控制系統(tǒng)-深度研究
評論
0/150
提交評論