[2022年计算机软件水平考试报名]2016年计算机软件水平考试程序员练习试题1

副标题:2016年计算机软件水平考试程序员练习试题1

时间:2023-02-23 15:49:01 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

●试题一
阅读下列说明和流程图,将应填入(n)的语句写在答题纸的对应栏内。


【流程图】

图1
下面的流程图描述了对16位二进制整数求补的算法。计算过程是:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到"1"时,停止查看。然后,对该"1"位左面的更高位(如果有的话),逐位求反,所得的结果就是对原二进制数求补的结果。
例如:对二进制整数10111001 10101000求补的结果是01000110 01011000。
设16位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的BIT[1]~BIT[16]中。例如,二进制整数10111001 10101000存放在数组BIT后,就有BIT1[1]=0,BIT[2]=0,……,BIT[15]=0,BIT[16]=1。
流程图(如图1所示)中 (1) 处按"循环变量名:循环初值,增量,循环终值"格式描述。若流程图中存在空操作,则用NOP表示。

●试题二
阅读下列程序说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。
假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额。适用税率如表2所示。




上表表明,个人收入所得税是按照超额累进的税率来征收的。
设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额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元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。
【程序】
# include
# define MaxNum50
# define BASE 800/*免税金额基数*/
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的职工在数组employee中的下标,返回值为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) ;/*计算月应纳税所得额*/
S=0;/*月应纳税额赋初值*/
if(K>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\n″,employee[i].Id,S);
sum+=S;
}
printf(″全体职工个人所得税总额:%10.21f\n″,sum);
}




●试题三
阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
下面的程序功能的功能是以行为单位对字符串按下面的条件进行排序。排序条件为:从字符串中间一分为二,右边部分按字符的ASCⅡ值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上
例如:位置:0 1 2 3 4 5 6 7
源字符串:h g f e a b c d
则处理后字符串:d c b a h g f e
函数ReadDat()实现从文件in.dat中读取数据(每行字符串长度均小于80),函数WriteDat()把结果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) ;jfor(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++)/*前后两部分进行交换*/
{
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);
}





●试题四
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明4.1】
假设两个队列共享一个循环向量空间(如图1-2所示),其类型Queue2定义如下:
typedef struct{
DateType data [MaxSize];
int front[2],rear[2];
}Queue2;
对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。函数EnQueue(Queue2*Q,int i,DateType x)的功能是实现第i个队列的入队操作。
【函数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】
函数BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)的功能是递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时才被认为相等。
已知二叉树中的结点类型BinTreeNode定义为:
struct BinTreeNode{
char data;
BinTreeNode*left,*right;
};
其中data为结点值域,left和right分别为指向左、右子女结点的指针域,
【函数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;∥若根结点值相等并且左、右子树
∥也相等,则两棵树相等,否则不等
else return 0;
}

●试题五
阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【应用说明5.1】
本应用程序的窗体中有一个下拉式列表框(名称为Combo1)和两个文本框(名称分别为Txt1和Txt2)。运行时,用户从Combol的列表中进行选择,程序就会将选中条目的内容以及编号(从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)
【应用说明5.2】
本应用程序的运行窗口如图2所示。




当用户在输入框(名为TxtIn)中输入数值数据,并从下拉式列表框(名为CmbOp)中选择所需的运算后。输出框(名为TxtOut)中就会显示运算的结果。用户单击"清除"按钮(名为CmdClear)后,输入框和输出框都清空。
开发该应用的部分程序代码如下:


【程序代码5.2】
Private Sub CmbOp_Click()
Dim DataIn As Double,DataOut as Double
DataIn= (3)
Select Case (4)
Case ″取整数部分″
DataOut=Int(DataIn)
Case ″求平方根″
If DataIn<0 Then
MagBox ″负数不能开平方!″
Else
DataOut=Sqr(DataIn)
End If
Case ″取绝对值″
DataOut=Abs(DataIn)
(5)
TxtOut.Text=str$(DataOut)
End Sub

2016年计算机软件水平考试程序员练习试题1.doc

本文来源:https://www.wddqw.com/fN2x.html