●試題一
閱讀下列說明和流程圖,將應(yīng)填入(n)的語句寫在答題紙的對應(yīng)欄內(nèi)。
【流程圖】
圖1
下面的流程圖描述了對16位二進(jìn)制整數(shù)求補(bǔ)的算法。計算過程是:從二進(jìn)制數(shù)的低位(最右位)開始,依次向高位逐位查看,直到首次遇到"1"時,停止查看。然后,對該"1"位左面的更高位(如果有的話),逐位求反,所得的結(jié)果就是對原二進(jìn)制數(shù)求補(bǔ)的結(jié)果。
例如:對二進(jìn)制整數(shù)10111001 10101000求補(bǔ)的結(jié)果是01000110 01011000。
設(shè)16位二進(jìn)制整數(shù)中的各位,從低位到高位,依次存放在整型數(shù)組BIT的BIT[1]~BIT[16]中。例如,二進(jìn)制整數(shù)10111001 10101000存放在數(shù)組BIT后,就有BIT1[1]=0,BIT[2]=0,……,BIT[15]=0,BIT[16]=1。
流程圖(如圖1所示)中 (1) 處按"循環(huán)變量名:循環(huán)初值,增量,循環(huán)終值"格式描述。若流程圖中存在空操作,則用NOP表示。
●試題二
閱讀下列程序說明和C程序,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
程序8用于計算某公司每個職工應(yīng)繳納的個人所得稅額和全體職工繳納的個人所得稅總額,職工的當(dāng)月收入(工資或薪金)通過鍵盤輸入,每次輸入一個職工的工號和工資(或薪金)。由于該公司的工資或薪金是不定時發(fā)放的,所以輸入過程中每個職工的收入會出現(xiàn)多次輸入,整個輸入以工號小于等于0結(jié)束。
假設(shè)個人所得稅法規(guī)定:個人收入所得,按月計稅,以每月收入總額減除免稅金額800元后的余額作為該月的月應(yīng)納稅所得額。適用稅率如表2所示。
上表表明,個人收入所得稅是按照超額累進(jìn)的稅率來征收的。
設(shè)一個人的月應(yīng)納稅所得額為K(元),用下面的公式計算其應(yīng)繳納的個人所得稅額S(元);
若0<K≤500,則S=K×5%;
若500<K≤2000,則S=500×5%+(K-500)×10%;
若2000<K≤5000,則S=500×5%+1500×10%+(K-2000)×15%;
若5000<K≤20 000,則S=500×5%+1500×10%+3000×15%+(K-5000)×20%;
…
例如,某人某月收入總額為4100元,減去800元后,應(yīng)納稅所得額為3300元,其應(yīng)繳納的個人所得稅額為500*5%+1500*10%+1300*15%=370元。
【程序】
# include
# define MaxNum50
# 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,40,45};/*稅率表*/
typedef struct{
int Id;/*職工的工號*/
long Salary;/*職工的工資*/
}Info;
/*查找工號為Id的職工在數(shù)組employee中的下標(biāo),返回值為0表示沒有*/
int find (int Id ,Info employee[],int m){
int j;
employee[0].Id=Id;
for(j=m; (1) ;j--);
return j;
}
void main(void)
{Info employee[MaxNum+1];
long Wage;
double sum=0,K,S;
int i,j,N=0,Code;
scanf(″%d %ld″,&Code,&Wage);/*讀入職工號、工資或薪金*/
while(Code>0){
i=find(Code,empolyee,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= (3) ;/*計算月應(yīng)納稅所得額*/
S=0;/*月應(yīng)納稅額賦初值*/
if(K>0){
for(j=1;j<=9;j++)
if (4) /*月應(yīng)納稅所得額超過第j級*/
S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;
else{S=S+ (5) *taxPrate[j-1]/100;break;}
}
printf(″職工%d應(yīng)繳納的個人所得稅額:%10.21f\n″,employee[i].Id,S);
sum+=S;
}
printf(″全體職工個人所得稅總額:%10.21f\n″,sum);
}
●試題三 ●試題四
閱讀下列程序說明和C代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
下面的程序功能的功能是以行為單位對字符串按下面的條件進(jìn)行排序。排序條件為:從字符串中間一分為二,右邊部分按字符的ASCⅡ值降序排序,排序后左邊部分與右邊部分進(jìn)行交換。如果原字符串長度為奇數(shù),則最中間的字符不參加排序,字符仍放在原位置上
例如:位置:0 1 2 3 4 5 6 7
源字符串:h g f e a b c d
則處理后字符串:d c b a h g f e
函數(shù)ReadDat()實現(xiàn)從文件in.dat中讀取數(shù)據(jù)(每行字符串長度均小于80),函數(shù)WriteDat()把結(jié)果dat輸出到文件out.dat中。
【程序】
#include
#include
#include
char dat[20][80];
void jsSort()
{
int i,j,k,strl;
char ch;
for(i=0;i<20;i++)
{
strl=strlen(dat[i]);
for(j= (1) ;j
for(k=j+1;k<strl;k++)
if( (2) )
{
ch=dat[i][j];
dat[i][j]=dat[i][k];
dat[i][k]=ch;
}
for(j=0; (3) j++)/*前后兩部分進(jìn)行交換*/
{
ch=dat[i][j];
dat[i][j]=dat[i][(strl+1)/2+j];
dat[i][(strl+1)/2+j]=ch;
}
}
}
void main()
{
readDat();
jsSort();
writeDat();
}
readDat()
{
FILE*in;
int i=0;
char*p;
(4) ;
while(i<20 && fgets(dat[i],80,in)!=NULL)
{
p=strchr(dat[i],"\n");
if(p)*p=0;
i++;
}
fclose(in);
}
writeDat()
{
FILE*out;
int i;
clrscr();
out=fopen("out.dat","W");
for(i=0;i<20;i++)
{
printf("%s\n",dat[i]);
printf( (5) );
}
fclose(out);
}
閱讀下列函數(shù)說明和C代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明4.1】
假設(shè)兩個隊列共享一個循環(huán)向量空間(如圖1-2所示),其類型Queue2定義如下:
typedef struct{
DateType data [MaxSize];
int front[2],rear[2];
}Queue2;
對于i=0或1,front[i]和rear[i]分別為第i個隊列的頭指針和尾指針。函數(shù)EnQueue(Queue2*Q,int i,DateType x)的功能是實現(xiàn)第i個隊列的入隊操作。
【函數(shù)4.1】
int EnQueue(Queue2*Q,int i,DateType x)
{∥若第i個隊列不滿,則元素x入隊列,并返回1;否則,返回0
if(i<0‖i>1)return 0;
if(Q->rear[i]==Q->front[ (1) ]
return 0;
Q->data[ (2) ]=x;
Q->rear[i]=[ (3) ];
return 1;
}
【說明4.2】
函數(shù)BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)的功能是遞歸法判斷兩棵二叉樹是否相等,若相等則返回1,否則返回0。函數(shù)中參數(shù)T1和T2分別為指向這兩棵二叉樹根結(jié)點的指針。當(dāng)兩棵樹的結(jié)構(gòu)完全相同,并且對應(yīng)結(jié)點的值也相同時才被認(rèn)為相等。
已知二叉樹中的結(jié)點類型BinTreeNode定義為:
struct BinTreeNode{
char data;
BinTreeNode*left,*right;
};
其中data為結(jié)點值域,left和right分別為指向左、右子女結(jié)點的指針域,
【函數(shù)4.2】
int BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)
{
if(T1==NULL && T2==NULL)return 1;∥若兩棵樹均為空,則相等
else if( (4) )return 0;∥若一棵為空一棵不為空,則不等
else if( (5) )return 1;∥若根結(jié)點值相等并且左、右子樹
∥也相等,則兩棵樹相等,否則不等
else return 0;
}
●試題五
閱讀以下應(yīng)用說明及Visual Basic程序代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【應(yīng)用說明5.1】
本應(yīng)用程序的窗體中有一個下拉式列表框(名稱為Combo1)和兩個文本框(名稱分別為Txt1和Txt2)。運(yùn)行時,用戶從Combol的列表中進(jìn)行選擇,程序就會將選中條目的內(nèi)容以及編號(從0開始)分別在文本框Txt1和Txt2中顯示出來。
【程序代碼5.1】
Private Sub Combol_Click()
Txt1.Text=Combol. (1)
Txt2.Text=Combol. (2)
End Sub
(注:可供 (2) 處選擇的選項:List,Index,ListIndex,ListCount,Number)
【應(yīng)用說明5.2】
本應(yīng)用程序的運(yùn)行窗口如圖2所示。
當(dāng)用戶在輸入框(名為TxtIn)中輸入數(shù)值數(shù)據(jù),并從下拉式列表框(名為CmbOp)中選擇所需的運(yùn)算后。輸出框(名為TxtOut)中就會顯示運(yùn)算的結(jié)果。用戶單擊"清除"按鈕(名為CmdClear)后,輸入框和輸出框都清空。
開發(fā)該應(yīng)用的部分程序代碼如下:
【程序代碼5.2】
Private Sub CmbOp_Click()
Dim DataIn As Double,DataOut as Double
DataIn= (3)
Select Case (4)
Case ″取整數(shù)部分″
DataOut=Int(DataIn)
Case ″求平方根″
If DataIn<0 Then
MagBox ″負(fù)數(shù)不能開平方!″
Else
DataOut=Sqr(DataIn)
End If
Case ″取絕對值″
DataOut=Abs(DataIn)
(5)
TxtOut.Text=str$(DataOut)
End Sub