一起答
主观

阅读下列程序说明和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≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;

 ...

 例如,某人某月收入总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。

 【程序】

 #include<stdio.h>

 #define MaxNum 50

 #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 ld;  /*职工的工号*/

   long Salary; /*职工的工资*/

 } Info;

 /*查找工号为ld的职工在数组employee中的下标,返回值为0表示没有*/

 int find (int ld ,Info employee[], int m) {

   int j;

   employee[0].>

   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 %Id",&Code,&Wage);

    while(Code>0){

      i=find (Code, empolyee, N );

      if(i>0)employee [i]. Salary+=Wage;

      else{(2);

        employee[N]. Salary =Wage;

      }

      scanf("%d %Id", &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);

 }

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷3》
参考答案
查看试卷详情
相关试题
  1. 阅读以下说明和Java代码,将解答写入对应栏内。

    【说明】

     下面的程序是从命令行输入3个数传递到public static void main(String args[])方法中 (如java IsTriangle 3 4 5),并判断这3个数能否构成三角形的3条边,并显示相应的结果。请在程序的每条横线处填入适当的语句,使程序的功能完整。

     注意:请勿改动main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。

     public class IsTriangle{

       public static void main( String args[ ]){

        int a[] =new (1) [args.(2)];

        for(int i=0;i<3;(3))

          {

           a[i]=(4) 

          }

          if((5))

           System. out. println(a[0] +","+a[1] +","+a[2]"能构成三角形的3条边");

          else

           System. out. println(a[0] +","+a[1] +","+a[2]"不能构成三角形的3条边);

       }

     }

  2. 阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。

    【说明】

     已知窗体上有两个名为cmdGene和cmdSort的命令按钮。单击cmdCene按钮时,随机产生10个[1,100]范围内的整数并将它们放在数组intA中;单击cmdSort按钮时,用选择法排序这10个数并输出。

     【程序代码】

     Dim intA(1 To 10)As integer

       Private Sub cmdGene_Click( )

       Dim intl As Integer

       Randomize

       For intl = 1 To 10

         intA(intl) =(1) 

       Next intl

     End Sub

     Private Sub cmdSort_Click( )

       Dim intl, intJ,intMin, intTemp As Integer

       For intl = 1 To 9

         intMin = intA(intl)

         For intJ=(2) To 10

           If intA(intJ) < intMin Then

             Temp = intA(intJ)

             intA(intJ)=(3) 

             intMin = intTemp

           End If

         Next intJ

          (4) 

          (5) 

         For intl = 1 To 10

           Print Str(intA(intl))+" ";

         Next intl

       Next lntl

       Print

     End Sub

  3. 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    【说明】

     设计一个类模板SamPle用于对一个有序数组采用二分法查找元素下标。

     【C++程序】

     #include < iostream. h >

     #define Max 100       //最多元素个数

     template < class T >

     class Sample

     {

       T A[Max]:        //存放有序数序

       int n:          //实际元素个数

       public

       Sample( ) { }      //默认构造函数

       Sample(T a[] ,int i);  //初始化构造函数

       int seek(T c);

       void disp( )

       {

         for(int i=0;i <n;i ++)

         cout<<A[i] <<" ";

         cout<<endl:

       } }  template < class T >

     Sample <T>: :Sample(T a[ ],int i)

     {

       n=i:

       for( intj =0;j < i;j ++ )

        (1);

     }

     template < class T >

     int Sample < T >:: seek( T c)

     {

       int low =0,high = n-1 ,mid;

       while((2))

       {

         mid = (low + high)/2;

         if((3))

           return mid;

         else if( (4) )

           low=mid+|;

         else

            (5);

       }

       return-1;

     }

     void main( )

     {

       char a[ ] ="acegkmpwxz";

       Sample < char > s(a, 1);

       cout<<"元素序列:" ;s. disp( );

       cout<<"元素'g'的下标:"<<s. seek('g') <<endl;

     }

  4. 阅读下列函举说明和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,DaleType 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,BinTtneNode*T2)的功能是递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时,才被认为相等。

     已知二叉树中的结点类型BinTreeNode定义为:

      struct BinTreeNode {

       char data;

       BinTreeNode * left, * right;

     };

      其中dau为结点值域,leR和risht分别为指向左、右子女结点的指针域,

     【函数4.2】

      int BTreeEqual(BinTreeNode * T1, BinTreeNode * T2)

     {

       if(Ti == NULL && T2 == NULL)return 1  /*若两棵树均为空,则相等*/

       else if((4))return 0;   /*若一棵为空一棵不为空,则不等*/

       else if((5)) return 1;  /*若根结点值相等并且左、右子树*/

                    /*也相等,则两棵树相等,否则不等*/

       else return 0;  

     }

  5. 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。

    【说明】

     下面的程序功能的功能是以行为单位对字符串按下面的条件进行排序。排序条件为:从字符串中间一分为二,右边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上

     例如:位置: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<stdio.h>

     #include<siring.h>

     #include<conio.h>

     char dat[20] [80];

     void jsSort()

     {

       int i,j,k,strl;

       char ch;

       for(i=0;i<20;i++)

         strl=strlen(date[i]);

         for(j=(1);j<strl;j++) /*对后半部分的字符串进行排序*/

         for(k=j+1;k<strl;k++)

        if( (2) )

        {

          ch=dat[i] [j];

          dot[i] [j]=dat[i] [k];

          dat[i] [k]=ch;

        }

        for(j=0; (3) j++)  /*前后两部分进行交换*/

        {

          ch = date [i] [j];

          dote [i] [j] = date [i] [(strl+1)/2+j];

          dat [i] [(strl+1)/2+j]=ch;

        }

       }

     }

     void main()

     {

       reodDat();

       isSort();

       writeDot();

     }

     readDat ()

     {

       FILE * in;

       int i=0;

       char * p;

        (4);

       while(i<20 && fgets(dat[i],80,in)!=NULL)

     {

       p = strchr(date [i],"\n");

          if(p) *p=0;

          i++;

     }

     fclose (in);

     }

     writeDat()

     {

       FILE * out;

       int i;

       clrscr ();

       ut = fopen("out. dat" ,"W");

       for(i=0;i<20;i++)

       {

         printf("%s\n",dar[i]);

         printf ((5));

       }

       fclose (out);

     }

  6. 阅读下列程序说明和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≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;

     ...

     例如,某人某月收入总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。

     【程序】

     #include<stdio.h>

     #define MaxNum 50

     #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 ld;  /*职工的工号*/

       long Salary; /*职工的工资*/

     } Info;

     /*查找工号为ld的职工在数组employee中的下标,返回值为0表示没有*/

     int find (int ld ,Info employee[], int m) {

       int j;

       employee[0].>

       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 %Id",&Code,&Wage);

        while(Code>0){

          i=find (Code, empolyee, N );

          if(i>0)employee [i]. Salary+=Wage;

          else{(2);

            employee[N]. Salary =Wage;

          }

          scanf("%d %Id", &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);

     }

  7. 阅读下列说明和流程图,将应填入(n)的字句写在对应栏内。

     【说明】

     下列流程图(如图4所示)用泰勒(Taylor)展开式

     sinx=x-x3/3!+x5/5!-x7/7!+…+(-1)n×x2n+1/(2n+1)!+…

     【流程图】

    计算并打印sinx的近似值。其中用ε(>0)表示误差要求。