最全歷年程序員軟考考試下午真題合集_第1頁
最全歷年程序員軟考考試下午真題合集_第2頁
最全歷年程序員軟考考試下午真題合集_第3頁
最全歷年程序員軟考考試下午真題合集_第4頁
最全歷年程序員軟考考試下午真題合集_第5頁
已閱讀5頁,還剩316頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 WORD格式.可編輯 申明:此為2004上半年至今的所有程序員軟考下午試題真題并且每套后面均配有答案,接近30套,每年兩套。由于文件過大,拆成上午試題和下午試題,在百度文庫同樣可以搜索“最全歷年程序員軟考考試上午真題合集“。此外還有模擬試題提供,百度文庫搜索“最全程序員軟考考試上午模擬試題合集”和“最全程序員軟考考試下午模擬試題合集”。注:如果圖片顯示不全,適當(dāng)將圖片縮小即可。過來人總結(jié),多做做下午場試題,最好打印。上午場試題對著電腦即可,只要不是一點不懂基本上午場沒問題。初級程序員2004上半年下午試題1、試題1 閱讀下列說明、流程圖和算法,將應(yīng)填入_處。 流程圖說明 下面的流程圖用N-S

2、盒圖形式描述了數(shù)組A中的元素被劃分的過程。其劃分方法是:以數(shù)組中的第一個元素作為基準(zhǔn)數(shù),將小于基準(zhǔn)數(shù)的元素向低下標(biāo)端移動,大于基準(zhǔn)數(shù)的元素向高下標(biāo)端移動。當(dāng)劃分結(jié)束時,基準(zhǔn)數(shù)定位于Ai,并且數(shù)組中下標(biāo)小于i的元素的值均小于基準(zhǔn)數(shù),下標(biāo)大于i的元素的值均大于基準(zhǔn)數(shù)。設(shè)數(shù)組A的下界為low,上界為high,數(shù)組中的元素互不相同。例如,對數(shù)組(4,2,8,3,6),以4為基準(zhǔn)數(shù)的劃分過程如下: 流程圖 算法說明 將上述劃分的思想進一步用于被劃分出的數(shù)組的2部分,就可以對整個數(shù)組實現(xiàn)遞增排序。設(shè)函數(shù)int p(intA,int low,int high)實現(xiàn)了上述流程圖的劃分過程并返回基準(zhǔn)數(shù)在數(shù)組A中

3、的下標(biāo)。遞歸函數(shù)void sort(int A,int L,int H)的功能是實現(xiàn)數(shù)組A中元素的遞增排序。 算法 void sort(int A,int L,int H) if(LH) k=p(A,L,H); /*p()返回基準(zhǔn)數(shù)所在數(shù)組A中的下標(biāo) */ sort( (4) ); /*小于基準(zhǔn)數(shù)的元素排序 */ sort( (5) ); /*大于基準(zhǔn)數(shù)的元素排序 */ ; 2、試題2 閱讀下列函數(shù)說明和C函數(shù),將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 函數(shù)2.1說明 函數(shù)palindrome(char s)的功能是:判斷字符串s是否為回文字符串,若是,則返回0,否則返回-1。若一個字符串順讀

4、和倒讀都一樣,稱該字符串是回文字符串,例如,“LEVEL”是回文字符串,而“LEVAL”不是。 函數(shù)2.1 int palindrome(char s) char *pi, *pj; pi=s;pj=s+strlen(s)-1; while(pipj& (1) ) pi+;pj-; if( (2) ) return-1; else return 0; 函數(shù)2.2說明 函數(shù)f(char *str,char del)的功能是:將非空字符串str分割成若干個子字符串并輸出,del表示分割時的標(biāo)志字符。 例如,若str的值為“33123333435”,del的值為“3”,調(diào)用此函數(shù)后,將輸出3個子字符

5、串,分別為“12”,“4”和“5”。 函數(shù)2.2 void f(char *str,char del) int i,j,len; len=strlen(str); i=0; While(ilen) While( (3) )i+; /* 忽略連續(xù)的標(biāo)志字符 */ /* 尋找從stri開始直到標(biāo)志字符出現(xiàn)的一個子字符串 */ ji+1; while(strj!=del &strj!0)j+; (4) =0; /* 給找到的字符序列置字符串結(jié)束標(biāo)志 */ printf(%st,&stri); (5) ; 3、試題3 以下是與Visual Basic開發(fā)應(yīng)用有關(guān)的5個問題。對每個問題,請將答案填入答題

6、紙的對應(yīng)欄內(nèi)。 (1)在Visual Basic中,工程文件、窗體文件和標(biāo)準(zhǔn)模塊文件的擴展名是什么?從下列選項中選擇:prg,prj,exe,vbp,form,frm,win,fra,std,bas,vbs,vbm。 (2)設(shè)某窗體上有1個命令按鈕,其名稱為CmdSave,運行時該按鈕上顯示有“保存 (S)”字樣的信息。為使熱鍵Alt+S與該命令按鈕相關(guān)聯(lián),應(yīng)該對按鈕CmdSave的 Caption屬性設(shè)置什么樣的屬性值? (3)設(shè)某窗口內(nèi)有1個圖像框Imagel及2個命令按鈕“放大”和“縮小”。單擊“放大”按鈕就會使該圖像框的長和寬都放大10%;單擊“縮小”按鈕就會使該圖像框的長和寬都縮小1

7、0%(該圖像框的左上角不動)。分別寫出這2個命令按鈕的單擊事件過程中的程序代碼。 (4)為使某個單選按鈕初始時默認(rèn)被選中,在開發(fā)時應(yīng)怎樣做? (5)若有語句TmpvalMsgBox(“非法操作!”,vbOKCancel+vbCritical,“提示”),簡要描述程序運行時彈出的消息框的主要特征。4、試題4 閱讀以下說明和C程序代碼,將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 說明 函數(shù)MultibaseOutput(long n,intB.的功能是:將一個無符號十進制整數(shù)n轉(zhuǎn)換成 B(2B16)進制數(shù)并輸出。該函數(shù)先將轉(zhuǎn)換過程中得到的各位數(shù)字入棧,轉(zhuǎn)換結(jié)束后再把B進制數(shù)從棧中輸出。有關(guān)棧操作的諸

8、函數(shù)功能見相應(yīng)函數(shù)中的注釋。C代碼中的符號常量及棧的類型定義如下: # define MAXSIZE 32 typedef struct int * elem; /* 棧的存儲區(qū) */ int max; /* 棧的容量,即棧中最多能存放的元素個數(shù) */ int top; /* 棧頂指針 */ Stack; C代碼 int InitStack(Stack * S,int n) / * 創(chuàng)建容量為n的空棧 */ S-elem=(int *)malloc(n * sizeof(int); if(S-elem=NULL)return-1; S-max=n; (1) =O;return 0; int P

9、ush(Stack * S,int item) / * 將整數(shù)item壓入棧頂 * / if(S-top=S-max) printf(“Stack is full! n”);return-1; (2) =item;return 0; int StackEmpty(StackS) return (! S.top)? 1:0; / * 判斷棧是否為空 * / int Pop(Stack *S ) / * 棧頂元素出棧 * / if(! S-top)printf(“Pop an empty stack! n”);return-1; return (3) ; void MultibaseOutput(

10、long n,intB. int m;StackS; if (InitStack(&S,MAXSIZE.)printf(“Failure! n”);return; do if(Push(&S, (4) )printf(“Failure! n”);return; n= (5) ; while(n!=0); while(! StackEmpty(S) / * 輸出B進制的數(shù) * / m=Pop(&S); if(m10)printf(“%d”,m); / * 小于10,輸出數(shù)字 * / else printf(“%c”,m+55); / * 大于或等于10,輸出相應(yīng)的字符 * / printf(“n

11、”); 5、試題5 閱讀以下應(yīng)用說明及Visual Basic程序代碼,將應(yīng)真入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 應(yīng)用說明5.1 應(yīng)用程序的窗體中有1個下拉式列表框(名稱為Combol)和2個文本框(名稱分別為Txt1和Txt2)。運行時,用戶從Combo1的列表中進行選擇,程序就會將選中條目的內(nèi)容及編號(從0開始)分別在文本框Txt1和Txt2中顯示出來。 程序代碼5.1 Private Sub Combol_Click() Txt1,Text=Combol. (1) Txt2Text=Combol. (2) End Sub (注意:可供(2)處選擇的選項有List,Index,ListIn

12、dex,LisCount,Number) 應(yīng)用說明5.2 本應(yīng)用程序的運行窗口如圖2-1所示。 當(dāng)用戶在輸入框(名為TxtIn)中輸入數(shù)值數(shù)據(jù),并從下拉式列表框(名稱為CmbOp)中選擇所需的運算后,輸出框(名為TxtOut)中就會顯示運算的結(jié)果。用戶單擊“清除”按鈕(名為CmdClear)后,輸入框和輸出框都清空。 程序代碼5.2 Private Sub CmbOp_Click() Dim DataIn As Double,DataOut as Double DataIn (3) Select Case (4) Case“取整數(shù)部分” DataOut=Int(DataIn) Case“求平方

13、根” If DataIn0 Then MsgBox$(“負(fù)數(shù)不能開平方!” Else DataOut=Sqr(DataIn) End If Case“取絕對值” DataOut=Abs(DataIn) (5) TxtOut.Text=str$(DataOut) End Sub6、試題6 閱讀下列函數(shù)說明和C函數(shù),將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 函數(shù)6說明 函數(shù)DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:將線性表A中關(guān)鍵碼為key1的結(jié)點開始的len個結(jié)點,按原順序移至線性表B中關(guān)鍵碼為key

14、2的結(jié)點之前,若移動成功,則返回0;否則返回-1。線性表的存儲結(jié)構(gòu)為帶頭結(jié)點的單鏈表,La為表A的頭指針,Lb為表B的頭指針。單鏈表結(jié)點的類型定義為: typedef struct node int key; struct node * next; * LinkedList; 函數(shù)6 int DelA InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len) LinkedListp,q,s,prep,pres; int k; if(! La-next! Lb-next-nextlen0)return1; p=La-next;prep

15、=La; while(p&p-key!=key1) / * 查找表A中鍵值為key1的結(jié)點 * / prep=p;p=p-next; if(! p)return -1; / * 表A中不存在鍵值為key1的結(jié)點 * / qp;k=1; while(q& (1) ) / * 在表A中找出待刪除的len個結(jié)點 * / (2) ;k+; if(! q)return-1: / * 表A中不存在要被刪除的len個結(jié)點 * / s=Lb-next; (3) ; while(s s & s-key!=key2) / * 查找表B中鍵值為key2的結(jié)點 * / pres=s;s=s-next; if(! s)

16、return-1; / * 表B中不存在鍵值為key2的結(jié)點 * / (4) =q-next; / * 將表A中的len個結(jié)點刪除 * / q-next= (5) ; pres-next=p; / * 將len個結(jié)點移至表B * / return 0; 7、試題7 閱讀以下應(yīng)用說明、屬性設(shè)置及Visual Basic程序代碼,將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 應(yīng)用說明7 本應(yīng)用程序的運行窗口如圖2-5所示。 只要用戶單擊“閃爍”按鈕,文字“歡迎光臨”就會以0.3s消失、0.3s顯示反復(fù)進行閃爍;單擊“停止”按鈕,閃爍停止,恢復(fù)圖示的初態(tài)。 屬性設(shè)置7 程序代碼7 Private Sub

17、 CmdF C1ick() Timerl. (3) =True Label.Visible=False End Sub Private Sub Timerl_Timer() (4) =not Label.Visible End Sub Private Sub CmdT_Click() Timerl.Enabled= (5) Label.Vlsible=true End Sub8、試題8 閱讀下列程序說明和C程序,將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 程序8說明 程序用于計算某公司每個職工應(yīng)繳納的個人所得稅額和全體職工繳納的個人所得稅總額。職工的當(dāng)月收入(工資或薪金)通過鍵盤輸入,每次輸入一

18、個職工的工號和工資(或薪金)。由于該公司的工資或薪金是不定時發(fā)放的,所以輸入過程中每個職工的收入會出現(xiàn)多次輸入,整個輸入以工號小于等于。結(jié)束。 假設(shè)個人所得稅法規(guī)定:個人收入所得,按月計稅,以每月收入總額減除免稅金額800元后的余額作為該月的月應(yīng)納稅所得額。適用稅率如表2-1所示。 上表表明,個人收入所得稅是按照超額累計的稅率來征收的。 設(shè)一個人的月應(yīng)納稅所得額為K(元),用下面的公式計算其應(yīng)繳納的個人所得稅額S(元): 若0K500,則S=K5%; 若500K2000,則S=5005%+(K-500)10%; 若2000K5000,則S=5005%+150010%+(K-2000)15%;

19、若5000K20000,則S=5005%+150010%+300015%+(K-5000)20%, 例如,某人某月收入總額為4100元,減去800元后,應(yīng)納稅所得額為3300元,其應(yīng)繳納的個人所得稅額為5005%+150010%+130015%370元。 程序8 #includestdio.h #define MaxNum 50 #define BASE 800 / * 免稅金額基數(shù) * / int paylevel=0,500,2000,5000,20000,40000,60000,80000,100000,1000001; int taxPrate=5,10,15,20,25,30,35,

20、40,45; / * 稅率表 * / typedef struct int Id; / * 職工的工號 * / long Salary; / * 職工的工資 * / Info; / * 查找工號為Id的職工在數(shù)組employee中的下標(biāo),返回值為0表示沒有 * / int find(int Id,Info employee,iht m) int j; employeeO.Id=Id; for(j=m; (1) ;j-); return j; void main(vpid) Info employeeMaxNUm+1); long Wage; double sum=0,K,S; int i,j,

21、N=0,Code; scanf(“%d %Id”,&Code,&Wage); / * 讀入職工號、工資或薪金 * / while(Code0) i=find(Code,employee,N); if(i0)employeei.Salary+=Wage; else (2) employeeN.Id=Code;employeeN.Salary=Wage; scanf(“%d %”,&Code,&Wage); for(i=1;i=N;i+) K= (3) ; / * 計算月應(yīng)納稅所得額 * / S=0; / * 月應(yīng)納稅額賦初值 * / if(K0) for(j=1;j=9;j+) if( (4)

22、) / * 月應(yīng)納稅所得額超過第j級 * / S=S+(Paylevelj-paylevelj-1)*taxPratej-1/100; elseS=S+( (5) )*taxPratej-1/100;break; printf(“職工%d應(yīng)繳納的個人所得稅額:%10.2Ifn”,employeei.ld,S); sum+=S; printf(“全體職工個人所得稅總額:%10.2Ifn”,sum); 9、試題9 閱讀以下應(yīng)用說明及Visual Basic程序代碼,將應(yīng)填入_處的語句寫在答題紙的對應(yīng)欄內(nèi)。 應(yīng)用說明9 本應(yīng)用程序的運行窗口如圖2-6所示。 窗口中的3個文本框和2個按鈕,名稱分別為T

23、xt_salary,Txt_base,Txt_tax,Cmd compute和Cmd_quit。運行時,文本框Txt_base中存放的是免稅金額基數(shù)(應(yīng)扣除的基本費用)。當(dāng)用戶在文本框Txt_salary中輸入月收入(工資或薪金)并單擊“計算”按鈕 Cmd_compute后,Txt_tax框中就顯示計算所得的應(yīng)納稅額。文本框Txt_base和Txt_ tax在運行時不接受用戶輸入,Txt_base的內(nèi)容以灰色顯示。 個人工資(或薪金)所得稅是按照超額累進的稅率來征收的,其計算方法參考試題8。 程序代碼9 Option Base 0 Private Sub Cmd_compute_Click()

24、 Dim paylevel,taxPrate paylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,1000001) taxPrate=Array(5,10,15,20,25,30,35,40,45) K= (1) S=0 if(K0) Then For j=1 TO 9 If (2) Then S=S+(paylevel(j)-paylevel(j-1) * taxPrate(j-1)/100 Else S=S+( (3) ) * taxPrate(j-1)/100 Exit For End If Next j End I

25、f (4) =Str$(S) End Sub Private Sub Cmd_quit_Click() End End Sub Private Sub Form_Load() Txt_tax.Text=“” Txt_salary.Text=“” Txt_base.Text=800 Txt_tax.Locked=True Txt_base.Enabled= (5) End Sub答案:1、(1)j- (2)i+ (3)Aipivot或Ajpivot (4)A,L,k-1 (5)A,k+1,H解析 題目考查快速排序算法。 快速排序采用了一種分治的策略,通常稱為分治法。其基本思想是:將原問題分解為若

26、干個規(guī)模更小但結(jié)構(gòu)與原問題相似的子問題。遞歸地解這些子問題,然后將這些子問題的解組合為原問題的解。 快速排序的具體過程為: 第一步,在待排序的n個記錄中任取一個記錄,以該記錄的排序碼為基準(zhǔn),將所有記錄分成2組,第一組各記錄的排序碼都小于等于該排序碼,第二組各記錄的排序碼都大于該排序碼,并把該記錄排在這2組中間,這個過程稱為一次劃分。 第二步,采用同樣的方法,對劃分出來的2組元素分別進行快速排序,直到所有記錄都排到相應(yīng)的位置為止。 在進行一次劃分時,若選定以第一個元素為基準(zhǔn),就可將第一個元素備份在變量 pivot中,如圖中的第步所示。如此以來,基準(zhǔn)元素在數(shù)組中占據(jù)的位置就空閑出來了,因此下一步就

27、從后向前掃描,如圖中的第步所示,找到一個比基準(zhǔn)元素小的元素時為止,將其前移,如圖中的第步所示。然后再從前向后掃描,如圖中的第步所示,找到一個比基準(zhǔn)元素大的元素時為止,將其后移,如圖中的第步所示。這樣,從后向前掃描和從前向后掃描交替進行,直到掃描到同一個位置為止,如圖中的第步所示。 由題目中給出的流程圖可知,以第一個元素作為基準(zhǔn)數(shù),并將AloW備份至pivot,i用于從前向后掃描的位置指示器,其初值為low,j用于從后往前掃描的位置指示器,其初值為high。當(dāng)ij時進行循環(huán): (1)從后向前掃描數(shù)組A,在ij的情況下,如果被掃描的元素Ajpivot,就繼續(xù)向前掃描(j-),如果被掃描的元素Ajp

28、ivot就停止掃描,并將此元素的值賦給目前空閑著的Ai; (2)這時,再從前向后掃描,在ij的情況下,如果被掃描的元素Ajpivot,就繼續(xù)向后掃描(i+);如果被掃描的元素Ajpivot就停止掃描,并將此元素的值賦給目前空閑著的Aj; (3)這時,又接第(1)步,直到ij時退出循環(huán)。退出循環(huán)時,將pivot賦給當(dāng)前的A i(Aipivot)。 遞歸函數(shù)的目的是執(zhí)行一系列調(diào)用,直到到達某一點時遞歸終止。為了保證遞歸函數(shù)正常執(zhí)行,應(yīng)該遵守下面的規(guī)則: (1)每當(dāng)一個遞歸函數(shù)被調(diào)用時,程序首先應(yīng)該檢查一些基本的條件是否滿足,例如,某個參數(shù)的值等于零,如果是這種情形,函數(shù)應(yīng)停止遞歸。 (2)每次當(dāng)函

29、數(shù)被遞歸調(diào)用時,傳遞給函數(shù)一個或多個參數(shù),應(yīng)該以某種方式變得“更簡單”,即這些參數(shù)應(yīng)該逐漸靠近上述基本條件。例如,一個正整數(shù)在每次遞歸調(diào)用時會逐漸變小,以至最終其值到達零。 本題中,遞歸函數(shù)sort(int A,int L,int H)有3個參數(shù),分別表示數(shù)組A及其下界和上界。根據(jù)流程圖可知,這里的L相當(dāng)于流程圖中的i,這里的H相當(dāng)于流程圖中的j。因為p()返回基準(zhǔn)數(shù)所在數(shù)組A中的下標(biāo),也就是流程圖中最后的“Aipivot”中的i。 根據(jù)快速排序算法,在第一趟排序后找出了基準(zhǔn)數(shù)所在數(shù)組A中的下標(biāo),然后以該基準(zhǔn)數(shù)為界(基準(zhǔn)數(shù)在數(shù)組中的下標(biāo)為k),把數(shù)組A分成2組,分別是AL,.,k-1)和 Ak

30、+1,.,H,最后對這2組中的元素再使用同樣的方法進行快速排序。2、(1)*pi=*pj (2)pipj或 *pi != * pj,及其等價形式 (3)stri=del (4)strj (5)i=j+1解析 函數(shù)2.1 若一個字符串順讀和倒讀都一樣,稱該字符串是回文字符串。如果使用數(shù)組sn來存儲一個字符串,則根據(jù)這個定義,要判斷一個串是否是回文字符串,需要循環(huán)比較: (1)該字符串的第一個元素s0和最后一個元素sn-1比較,如果s0不等于 sn-1,則s不是回文字符串。 (2)如果s0等于sn-1,則第二個元素s1和倒數(shù)第二個元素sn-2比較,如果s1不等于sn-2,則s不是回文字符串。 (3

31、)依次類推,直到最中間的2個元素也比較完畢(如果s有偶數(shù)個元素),或者只剩下中間的1個元素(如果s有奇數(shù)個元素)。 當(dāng)上述循環(huán)結(jié)束時,如果最中間的元素沒有進行比較,就說明s不是回文字符串,如果進行了比較,則s是回文字符串。 在函數(shù)2.1中,pi和pj是2個指向字符的指針,程序首先將s的首地址賦給pi(即 pi=&a0),將元素sstrlen(s)-1)的地址賦給pj(即pj=&sstrlen(s)-1),當(dāng)pipj并且pi和pj所指向的字符相等時進行循環(huán):pi自增,pj自減。 退出循環(huán)后,如果pipj,則s是回文字符串(如果s有偶數(shù)個元素,則為pipj,如果 s有奇數(shù)個元素,則為pi=pj);

32、如果pipj,則s不是回文字符串。 函數(shù)2.2 由函數(shù)2.2說明可知,此函數(shù)對給定的字符串進行從左至右的掃描,找出不包含標(biāo)志字符的子字符串。 在函數(shù)2.2中,i的初值為0,len表示字符串的長度。當(dāng)ilen時進行循環(huán):如果當(dāng)前字符是標(biāo)志字符,則不做處理,繼續(xù)掃描以處理標(biāo)志字符連成一串的情況。當(dāng)退出該循環(huán)時,當(dāng)前字符stri不是標(biāo)志字符,這時開始尋找從stri開始,直到標(biāo)志字符出現(xiàn)的一個子字符串(i保持不變,用j標(biāo)記尋找的過程),給找到的字符序列置字符串結(jié)束標(biāo)志,以便于后面語句的輸出。 輸出語句結(jié)束后,就要繼續(xù)尋找后面的不包含標(biāo)志字符的子字符串,這時需要把指針 i移動j的后面,繼續(xù)掃描。3、(1

33、)工程文件擴展名為vbp,窗體文件擴展名為frm,標(biāo)準(zhǔn)模塊文件的擴展名為bas。 (2)按鈕CmdSave的Caption屬性可以這樣設(shè)置:保存(&S)。 (3)“放大”命令按鈕單擊事件過程程序代碼如下: Imagel.Width=Imagel.Width*1.1; Imagel.Height=Imagel.Height*1.1; “縮小”命令按鈕單擊事件過程程序代碼如下: Imagel.Height=Imagel.Height*0.9; Imagel.Width=Imagel.width*O.9; (4)將該單選按鈕的Value屬性值設(shè)置成True。 (5)消息框的標(biāo)題欄顯示“提示”;消息框

34、中有1個出錯標(biāo)記及2個命令按鈕,分別顯示“確定”和“取消”;消息框中顯示的信息為“非法操作!”。解析 (1)Visual Basic應(yīng)用程序可以用4種類型的文件保存。第一類是單獨的窗體文件,擴展名為FRM;第二類是公用的標(biāo)準(zhǔn)模塊文件,擴展名為BAS;第三類是類模塊文件,擴展名為CLS;第四類是工程文件,這種文件由若干個窗體和模塊組成,擴展名為VBP。 (2)對于任何一個控件,只要它有Caption屬性,就可以為其指定訪問鍵。對于一般控件(非菜單項),可以在設(shè)計階段通過屬性窗口在Caption屬性中加“&”設(shè)置訪問鍵。訪問鍵只能是一個字符,而且這個字符必須是鍵盤上的某個鍵,否則沒有實際意義。因此

35、,通常用鍵盤上存在的西文字符作為訪問鍵。如果用漢字作為菜單項或控件的標(biāo)題,則通常把訪問鍵放在標(biāo)題后面的括號中。 (3)對圖像框的“放大”和“縮小”,可以通過設(shè)置它的Height屬性和Width屬性而改變。 (4)為使一個單選按鈕初始時默認(rèn)被選中,一般是對它的Checked屬性進行設(shè)置,把該屬性標(biāo)記為True。 (5)MsgBox語句的形式為MsgBox Msg$,type%,title$,helpfile,context。Msg是一個字符串,其內(nèi)容在產(chǎn)生的對話框內(nèi)顯示;type是一個整數(shù)值或符號常量,用來控制在對話框內(nèi)顯示的按鈕、圖標(biāo)的種類和數(shù)量;title是一個字符串,用來顯示對話框的標(biāo)題。

36、4、(1)S-top (2)S-elemS-top+ (3)S-elem-S-top (4)n%B (5)n/B解析 對于一個棧,首先應(yīng)對它進行初始化,設(shè)置它的容量、棧頂?shù)?,一般?種做法: (1)top=0。在這種做法下,如果要進行入棧操作,則先將壓人棧的元素值賦給棧頂指針?biāo)赶虻膯卧?,然后棧頂指針?;如果要進行出棧操作,則將棧頂指針減1,然后將要出棧的元素彈出棧。 (2)top=-1。在這種做法下,如果要進行入棧操作,則首先將棧頂指針加1,然后把壓人棧的元素值賦給棧頂指針?biāo)赶虻膯卧蝗绻M行出棧操作,則首先將要出棧的元素彈出棧,然后再將棧頂指針減1。 顯然,在本題中使用的是第一種方法

37、。(1)空填寫S-top,使S-top0。這樣將整數(shù)item壓入棧頂?shù)恼Z句為SelemS-top+=item,即(2)空填寫 S-elemS-top+)。出棧操作是返回S-elem-S-top)t這是(3)空的答案。 將十進制數(shù)n轉(zhuǎn)換為二進制數(shù)時,把n除以2的余數(shù)壓入棧,而用n除以2的商代替 n,依次類推,直到n等于0為止。這時,再把棧中的值一一彈出,就可得到二進制數(shù)據(jù)。類似地,把十進制數(shù)n轉(zhuǎn)換成B進制數(shù)的過程也是如此,一般算法描述為(其中S為棧): do n%B入棧; n=n/B; while(n);5、(1)Text (2)ListIndex (3)Val(TxtIn.Text)或TxtI

38、n.Text (4)CmbOp.Text (5)End Select解析 組合框(Combo Box)是組合列表框和文本框的特性而成的控件。它的Text屬性值是用戶所選擇的項目的文本或直接從編輯區(qū)輸入的文本。它的ListIndex屬性值為選中條目的編號。 文本框的Text屬性用來設(shè)置本框中的顯示的內(nèi)容。 在VB中,情況語句的一般格式為: Select Case測試表達式 Case表達式表列1 語句塊1 Case表達式表列2 語句塊2 . Case Else 語句塊n End Select6、(1)klen (2)q=q-next (3)pres=Lb (4)prep-next (5)s或pre

39、s-next解析 本題是在鏈表插入和刪除單個結(jié)點的基礎(chǔ)上進行擴展,一次性插入多個結(jié)點和刪除多個結(jié)點其原理和插入、刪除一個結(jié)點的運算是一致的。首先在A鏈表中查找鍵值為key1的結(jié)點,使用了下列循環(huán): While(p&p-key!=key1) / * 查找表A中鍵值為key1的結(jié)點 * / Prep=p;p=p-next; 因此,當(dāng)找到鍵值為key1的結(jié)點時,p指向該結(jié)點,prep指向p的前驅(qū)。然后看在p的后面是否有l(wèi)en個結(jié)點,使用了下列語句: qp;k=1; while(q& (1) ) / * 在表A中找出待刪除的len個結(jié)點 * / (2) ;k+; 顯然,首先把q指向p,k為計數(shù)器,所以

40、該循環(huán)的結(jié)束條件有2個,一個是p的后面沒有 len個結(jié)點,這時q為空,所以(2)空應(yīng)填寫qq-next,使q的指針往后移動;另一個是 p的后面有l(wèi)en個結(jié)點,這時klen。所以(1)空應(yīng)填寫klen。 根據(jù)上面的語句,如果p的后面有l(wèi)en個結(jié)點,則q指向第len個結(jié)點。如圖2-2所示(虛線表示省略了中間若干個結(jié)點)。 同樣,在表B中查找鍵值為key2的結(jié)點,使用了下列循環(huán): s=Lb-next; (3) ; while(s&s-key!=key2) / * 查找表B中鍵值為key2的結(jié)點 * / pres=s;s=s-next; 首先,s指向第一個結(jié)點,然后進行循環(huán),循環(huán)的結(jié)束條件也是2個,要

41、么s為空(這時說明從頭到尾都沒有找到鍵值為key2的結(jié)點),要么找到了,s指向該結(jié)點,pres指向s的前驅(qū)。但是,如果第一個結(jié)點的鍵值就是key2的話,根據(jù)循環(huán)條件,循環(huán)中的語句不執(zhí)行,則pres沒有值,所以(3)空應(yīng)該填寫presLb,使pres始終指向s的前驅(qū)。如圖2-3所示 (虛線表示省略了中間若干個結(jié)點)。 最后將p到q的連續(xù)len個結(jié)點從A表中刪除,在B表中插入,如圖2-4所示。 程序中使用的語句如下: (4) =q-next; / * 將表A中的len個結(jié)點刪除 * / q-next= (5) ; pres-next=p; / * 將len個結(jié)點移至表B * / 要把p到q的連續(xù)l

42、en個結(jié)點從A表中刪除,就要把p的前驅(qū)(prep)的next指向q的next,因此,(4)空應(yīng)填寫prep-next。然后把q的next指向B表中s,把s的前驅(qū) (pres)的next指向p,所以,(5)空應(yīng)填寫s。7、(1)False (2)300 (3)Enabled (4)Label.Visible (5)False解析 在VB中,計時器控件主要有Name、Enabled和Interval等屬性。 Name屬性是該計時器的標(biāo)識符。 Enabled=true表示打開計時器,開始計時;Enabled=false表示關(guān)閉計時器,停止計時。 Interval屬性用來設(shè)置計時器事件之間的間隔,一般

43、以ms為單位,取值范圍為0 65535,因此其最大時間間隔不能超過65s。因為60000ms為1min,如果把Interval屬性設(shè)置為1000,則表明每秒鐘發(fā)生一個計時器事件。 本題要求0.3s閃爍一次,因此,應(yīng)該把Interval的屬性值設(shè)置為300。在窗體運行時,需要用戶單擊“閃爍”按鈕后才開始閃爍,所以初始化時,計時器的Enabled屬性值應(yīng)該為False。當(dāng)用戶單擊“閃爍”按鈕時,計時器的Enabled屬性值應(yīng)該為True。當(dāng)用戶單擊“停止”按鈕時,計時器的Enabled屬性值應(yīng)該為False。8、(1)employeej.Id!Id (2)n=n+1;或者n+;或者+n (3)em

44、ployeei.Salary-BASE;或者employeei.Salary-800 (4)kpaylevelj (5)k-paylevelj-1解析 第一個函數(shù)find(Id,employee,m),其功能為查找工號為Id的職工在數(shù)組employee中的下標(biāo),返回值為0表示沒有。 int find(int Id,Info employee,int m) int j; employee0.Id=Id; for(j=m; (1) ;j-); return j; 顯然,在函數(shù)find()中,首先把要查找的Id賦給數(shù)組的第一個元素,然后循環(huán)從最后一個元素開始查找,所以(1)空應(yīng)填寫循環(huán)結(jié)束的條件。可

45、能有2種情況,一是在某個記錄中找到了要查的Id(根據(jù)函數(shù)要求,這時要返回Id的職工在數(shù)組employee中的下標(biāo)),二是找遍整個數(shù)組都沒有找到Id(根據(jù)函數(shù)要求,這時要返回0),但在循環(huán)的前面已經(jīng)設(shè)置了哨兵“employee0.Id=Id”,所以,循環(huán)至多到j(luò)=0時就會退出。因此,(1)空應(yīng)填寫 employeej.Id !=Id。 然后再分析主函數(shù)的第一段程序。 Info employeeMaxNum+1; long wage; double sum=0,k,s; int i,j,n=0,code; seanf(“%d%Id”,&code,&wage); / * 讀入職工號、工資或薪金 *

46、/ while(codeO) i=find(code,employee,n); if(i0)employeei.Salary+=wage; else (2) ; Employeen.Id=code;employeen.Salary=wage seanf(“%d%Id”,&code,&wage); 這里用code代表職工號,wage代表工資。當(dāng)輸入一個職工的職工號和工資后,就調(diào)用find()函數(shù)查找該職工是否已經(jīng)在cmployee中,返回值要么是0(表示該職工的信息是第一次錄入,則需要在employee中增加一個元素,并把剛錄入的值記錄到該元素),要么大于0(表示該職工的信息已經(jīng)存入employee中,則需要累加該職工的工資收入)。所以,(2)空應(yīng)填寫n+。 當(dāng)錄入的code為一個負(fù)數(shù)時,上述循環(huán)結(jié)束,表示所有職工的數(shù)據(jù)都已經(jīng)錄入完畢。接下來開始計算所得稅。計算方法是:從employee中逐個取出職工工資數(shù)據(jù),按照給定的公式計算并輸出該職工的所得稅,同時進行累加,求出整個公司的所得稅。程序段如下: for(i=1;i=n;i+) k= (3) ; / * 計算月應(yīng)納稅所得額 * / s0; / * 月應(yīng)納稅額賦初值 * / if(

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論