計算機軟考試題答案
試題一
閱讀下列程式說明和C程式,將應填入__(n)__處的字句寫在答題紙的對應欄內。
[程式8說明]
程式8用於計算某公司每個職工應繳納的個人所得稅額和全體職工繳納的個人所得稅總額。職工的當月收入(工資或薪金)透過鍵盤輸入,每次輸入一個職工的工號和工資(或薪金)。由於該公司的工資或薪金是不定時發放的,所以輸入過程中每個職工的收入會出現多次輸入,整個輸入以工號小於等於0結束。
假設個人所得稅法規定;個人收入所得,按月計稅,以每月收入總額減除免稅金額800元后的餘額作為該月的月應納稅所得額,適用稅率如下表所示。
級數 | 月應納稅所得額 | 適用稅率(%) |
1 2 3 4 5 6 7 8 9 | 不超過500元的部分 501元~2000元的部分 2001元~5000元的部分 5001元~20000元的部分 20001元~40000元的部分 40001元~60000元的部分 60001元~80000元的部分 80001元~100000元的部分 超過100000元的部分 | 5 10 15 20 25 30 35 40 45 |
上表表明,個人收入所得稅是按照超額累進的稅率來徵收的。
設一個人的月應納稅所得額為K(元),用下面的公式計算其應繳納的個人所得稅額S(元):
若0<k≤500,則s=k×5%;< p="">
若500<k≤2000,則s=500×5%+(k—500)×10%:< p="">
若2000<k≤5000,則s=500×5%+1500×10%+(k-2000)×15%:< p="">
若5000<k≤20000,則s=500×5%+1500×10%+3000×15%+(k-5000)×20%:< p="">
例如,某人某月工資總額為4100元,減去800元后,應納稅所得額為3300元,其應繳納的個人所得稅額為500*5%+1500*10%+1300*15%=370元。
[程式8]
#include #define MaxNum 50 #define BASE 800 /*免稅金額基數*/ int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,100000¨: int taxPrate[]={5,10,15,20,25,30,35,40,45): /*稅率表*/ typedef struct{ int ld; /*職工的工號*/ . long Salary; /*職工的工資*/ }Info; /* 查詢工號為Id的職工在陣列employee中的下標,返回值為0表示沒有 */ int find(int ld,Info employee[],int m){ int j; employee[0].Id=Id; for(j=m;__(1)__;j--); return j; } void main(void) { Info employeeCHaxNum+1]; long Wage; double sum s 0,K,S: int i,j,N=0,Code; scanf("M%ld",&Code,&Wage); /*讀入職工號、工資或薪金*/ while(Code>0) { i=find(Code,employee,N); if (i>0)employee[i].Salary += Wage: else{ __ (2)__; employee[N].Id=Code;employee[N].Salary=Wage; } scanf("%d%ld",&Code,&Wage): } for (i=1;i<=n;i++){ k="" if=""> 0) { for (j=1;j<=9;j++) if(__(4)__) /*月應納稅所得額超過第j級*/ S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100; else{ S=S+(__ (5)__)*taxPrate[j-1]/100;break;} } printf("職工%d應繳納的個人所得稅額:%10.21f ",employee[i].Id,S); sum += S; } printf("全體職工個人所得稅總額:%10,21f ",sum); }
試題二
閱讀下列函式說明和C函式,將應填入__(n)__處的字句寫在答題紙的對應欄內。
[函式2.1說明]
函式palindrome(chars[])的功能是:判斷字串s是否為迴文字串,若是,則返回0,否則返回-1。若一個字串順讀和倒讀都一樣時,稱該字串是迴文字串,例如:“LEVEL”是迴文字串,而“LEVAL”不是。
[函式2.1]
int palindrome(char S[]) { char *pi,*pj; pi=S;pj=s+strlen(S)-1: while ( pi<pj &&="" __(1)__){="" pi++;="" pj--;="" }="" if(__="" (2)__)return-1;="" else="" return="" 0;="" }<="" p="">
[函式2.2說明]
函式f(char *str,char del)的功能是;將非空字串str分割成若干個子字串並輸出,del表示分割時的標誌字元。
例如若str的值為“33123333435”,del的值為‘3’,呼叫此函式後,將輸出三個子字串,分別為“12”、“4”和“5”。
[函式2.2]
void f(char*str,char del) { int i,j,len; len = strlen(str); i = 0; while (i<len){ while (__(3)__) i++; ="" *忽略連續的標誌字元*="" ="" *尋找從str[i]開始直到標誌字元出現的一個子字串*="" j="i" +="" 1;="" while="" (str[j]="" !="del" &&="" str[j]="" )="" j++;="" __="" (4)__=""; ="" *給找到的字元序列置字串結束標誌*="" printf("="" %s ",&str[i]):="" ’="" (5)__;="" }="" }<="" p="">
試題三
以下是與Visual Basic開發應用有關的5個問題.對每一個問題,請將解答填入答題紙的對應欄內。
(1)在Visual Basic中,工程檔案、窗體檔案和標準模組檔案的副檔名是什麼?
請從下列選項中選擇:
prg、prj、exe、vbp、rom、frm、win、fra,std、bas、vbs、Vbm
(2)設某窗體上有一個命令按鈕,其名稱為 CmdSave,執行時該按鈕上顯示有“儲存(S)”字樣的資訊。為使熱鍵 ALT+S 與該命令按鈕相關聯,應該對按鈕 CmdSave 的 Caption屬性設定什麼樣的屬性值?
(3)設某視窗內有一個影象框 Image1,以及兩個命令按鈕“放大”和“縮小”。單擊“放大”按鈕就會使該影象框的長和寬都放大10%;單擊“縮小”按鈕就會使該影象框的長和寬都縮小10%(該影象框的左上角不動)。請分別寫出這兩個命令按鈕的.單擊事件過程中的程式程式碼。
(4)為使某個單選按鈕初始時預設被選中,在開發時應怎樣做?
(5)若有語句 Tmpval=MsgBox(非法操作!,ybOKCancel+vbCritical,"提示"),請簡要描述程式執行時彈出的訊息框的主要特徵。
試題四
閱讀以下說明和C程式碼,將應填入__(n)__處的字句寫在答題紙的對應欄內。
[說明]
函式 MultibaseOutput(long n,int B)的功能是:將一個無符號十進位制整數 n 轉換成 B(2≤B≤16)進位制數並輸出。該函式先將轉換過程中得到的各位數字入棧,轉換結束後再把 B 進位制數從棧中輸出。有關棧操作的諸函式功能見相應函式中的註釋。C程式碼中的符號常量及棧的型別定義如下:
#define KAXSIZE 32 typedef struct{ int *elem; /* 棧的儲存區 */ int max; /* 棧的容量,即找中最多能存放的元素個數 */ int top; /* 棧頂指標 */ }Stack; [C程式碼] int lnitStack(Stack *S,int n) /* 建立容量為n的空棧 */ { S->elem = (int *)matloc(n * sizeof(int)); if (S->elem == NULL) return -1; S->max = n;__(1)__= 0;return 0; } int Push(Stack*S,int item) /* 將整數item壓入棧頂 */ { if(S->top == S->max){ printf("Stack is full! ");return -1;} __(2)__;item;return 0; } int StackEmpty(Stack S){ return(!S.top) ? 1;0;) /* 判斷棧是否為空 */ int Pop(Stack*S) /* 棧頂元素出棧 */ { if (!S->top){ printf("Pop an empty stack! ");return -1;) return __(3)__; } void MultibaseOutput(long n,int B) { int m;Stack S; if (init Stack(&S,MAXSIZE)) { printf("Failure! ");return;} do { if (Push(&s,__(4)__)) { printf("Failure! ");return;} n = __(5)__: } while (n != 0); while (!StackEmpty(S)) { /* 輸出B進位制的數 */ m = Pop(&S); if (m < 10) printf("Kd",m); /* 小於10,輸出數字 */ else printf("%c,m + 55); /* 大於或等於10,輸出相應的字元 */ } printf(" "); }
試題五
閱讀以下應用說明及Visual Basic程式程式碼,將應填入__(n)__處的字句寫在答題紙的對應欄內。
[應用說明5.1]
本應用程式的窗體中有一個下拉式列表框(名稱為Combol)和兩個文字框(名稱分別為Txtl和Txt2)。執行時,使用者從Combol的列表中進行選擇,程式就會將選中條目的內容以及編號(從0開始)分別在文字框 Txt1 和 Txt2 中顯示出來。
[程式程式碼5.1]
Private Sub Combol_C1ick() Txtl.Text = Combol.__(1)__ Txt2.Text = Combol.__(2)__ End Sub
(注:可供(2)處選擇的選項:List,Index,Listlndex,ListCount,Number)
[應用說明5.2]
本應用程式的執行視窗如下圖所示:
當用戶在輸入框(名為Txtln)中輸入數值資料,並從下拉式列表框(名為CmbOp)中選擇所需的運算後,輸出框(名為TxtOut)中就會顯示運算的結果。使用者單擊“清除”按鈕(名為CmdClear)後,輸入框和輸出框都清空。
開發該應用的部分程式程式碼如下:
[程式程式碼5.2]
Private Sub CmbOp_Click() Dim DataIn As Double,DataOut as Double DataIn = __(3)__ Select Case __(4)__ Case "取整數部分" DataOut = Int(Dataln) Case "求平方根" If Dataln < O Then MsgBox$("負數不能開平方!") Else DataOut = Sqr(Dataln) End If Case "取絕對值" DataOut = Abs(Dataln) (TxtOut.Text = str$(DataOut) __5)__ End Sub
試題六
閱讀下列函式說明和 C 函式,將應填入__(n)__處的字句寫在答題紙的對應欄內。
[函式6說明]
函式DelAInsB(LinkedList La,LinkedList lb,int key1,int key2,int len)的功能是,將線性表A中關鍵碼為keyl的結點開始的len個結點,按原順序移至線性表B中關鍵碼為key2的結點之前,若移動成功,則返回0;否則返回-1。線性表的儲存結構為帶頭結點的單鏈表,La為表A的頭指標,Lb為表B的頭指標。單鏈表結點的型別定義為:
typedef struct node{ int key; struct node*next; }*Linkedhist;
[函式6]
int DelllnsB(LinkedLiSt La,LinkedList Lb,int keyl,int key2,int len) { LinkedList p,q,S,prep,pres; int k; if (!La->next || !Lb->next || len<=0) p="La-">next; prep = La; while (p && p->key != keyl){ /* 查詢表A中鍵值為key1的結點 */ prep = p; p = p->next; } if (!p) return -1; /* 表A中不存在鍵值為key1的結點 */ q = p; k = 1; while (q && __(1)__){ /* 在表A中找出待刪除的len個結點 */ __(2)__: k++; } if (!q) return -1; /* 表A中不存在要被刪除的len個結點 */ · S = Lb->next;__ (3)__; while (s && s->key != key2){ /* 查詢表B中鍵值為key2的結點 */ pres = s; s = s->next; } if (!s)return -1; /* 表B中不存在鍵值為key2的結點 */ __(4)__q->next; /* 將表A中的len個結點刪除 */ q->next:__(5)__ pres->next = p; /* 將len個結點移至表B */ return 0; }