题目详情

阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

下面的程序代码根据某单位职工的月工资数据文件(名称为 Salary.dat,文本文件) ,通过调用函数 GetIncomeTax 计算出每位职工每月需缴纳的个人所得税额并以文件(名称为IncomeTax.dat ,文本文件)方式保存。

例如,有 4 个职工工资数据的 Salary.dat 内容如下,其中第一列为工号(整数),第2 列为月工资(实数)。

初级程序员,章节练习,基础复习,案例分析

相应地,计算所得 IncomeTax.dat 的内容如下所示,其中第 3 列为个人所得税额:

初级程序员,章节练习,基础复习,案例分析

针对工资薪金收入的个人所得税计算公式为:

个人所得税额=应纳税所得额×税率-速算扣除数

其中,应纳税所得额=月工资-三险一金-起征点

税率和速算扣除数分别与不同的应纳税所得额对应,如表 3-1 所示。

初级程序员,章节练习,基础复习,案例分析

设三险一金为月工资的 19%,起征点为3500元。

例如,某人月工资为 5800元,按规定 19%缴纳三险一金,那么:

其应纳税所得额 X=5800- 5800x19%-3500=1198 元,对应税率和速算扣除数分别

为 3%和 0 元,因此,其个人所得税额为 1198X3%-0=35.94 元。

【C 代码】

#include <stdio.h>

#define BASE 3500 //起征点

#define RATE 0.19 //三险一金比例

(1) ; //声明函数 GetlncomeTax

int main ( )

{

int id;

double salary;

FILE *fin,*fout;

fin = fopen("Salary.dat" ,"r");

if ( (2) ) return 0;

fout = fopen("IncomeTax.dat" ,"w");

if ( (3) ) return 0;

while (!feof(fin)) {

if (fscanf(fin,“%d%lf”, (4) )!=2) break;

fprintf(fout ,“%d\t%.2lf\t%.2lf\n”,id,salary, (5) ;

}

fclose(fin);

fclose(fout);

return 0;

}

double GetlncomeTax(double salary)

{

double yns_sd;

yns_sd = (6) - BASE; /*计算应纳税所得额*/

if (yns_sd<=0) return 0.0;

else if (yns_sd<=1500) return yns_sd*0.03;

else if (yns_sd<=4500) return yns_sd*0.1 - 105;

else if (yns_sd<=9000) return yns_sd*0.2 - 555;

else if (yns_sd<=35000) return yns_sd*0.25 - 1005;

else if (yns_sd<=55000) return yns_sd*0.3 - 2755;

else if (yns_sd<=80000) return yns_sd*0.35 - 5505;

return yns_sd*0.45 - 13505;

}

正确答案及解析

正确答案
解析

(1) double GetIncomeTax(double salary"或 double GetlncomeTax(double)

(2) !fin 或 fin==NULL 或 fin==0

(3) !fout 或fout==NULL 或fout==0

(4) &id,&salary

(5) GetIncomeTax(salary)

(6) salary *(l-RATE)或等价形式

注: RATE 可替换为 0.19

本题考查 C 语言程序设计基本技能。考生需认真阅读题目中的说明,以便理解问题并确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。

根据注释,空(1)处应填入 "double GetIncomeTax(double salary)" 或"double GetIncomeTax(double)",对函数GetIncomeTax 进行声明。

空 (2)、(3)处所在的代码是判断文件打开操作是否成功,因此应分别填入"!fin"、 "!fout"。

根据说明可知,变量 id 和 salary分别表示工号和月工资数。

空 (4)处所在语句为从文件中读取数据的操作,从 fscanf 的格式控制串可知读取的 两个数是整数和双精度浮点数,则输入表列的两个变量分别为接收整数值的变量 id 和接收整数值的变量 salary ,因此空(4) 应填入"&id,&salary"

空 (5)处所在代码向fout 关联的文件写入计算出的所得税额,显然需调用函数

GetlncomeTax 来计算,因此应填入" GetIncomeTax(salary)" 。

空 (6)处的代码计算应纳税所得额,根据说明中给出的计算公式及三险一金的计 算方法:

应纳税所得额=月工资-三险一金-起征点

空 (6) 处应填入" salary *(1-RATE) "。

你可能感兴趣的试题

单选题

一台主机的IP地址为202.123.25.36,掩码为255.255.254.0。如果该主机需要在该网络进行直接广播,那么它应该使用的目的地址为( )

  • A.202.123.25.0
  • B.202.123.25.255
  • C.202.123.24.0
  • D.202.123.24.255
查看答案
单选题

在计算机系统的日常维护工作中,应当注意硬盘工作时不能__(2)__。另外,需要防范病毒,而__(3)__是不会被病毒感觉的。

  • A.电子邮件
  • B.硬盘
  • C.U盘
  • D.ROM
查看答案
单选题

有 4 个 IP 地址:201.117.15.254、201.117.17.01、201.117.24.5 和 201.117.29.3,如果子网掩码为 255.255.248.0,则这 4 个地址分别属于3个子网;其中属于同一个子网的是()

  • A.201.117.15.254 和 201.117.17.01
  • B.201.117.17.01 和 201.117.24.5
  • C.201.117.15.254 和 201.117.29.3
  • D.201.117.24.5 和 201.117.29.3
查看答案
单选题

在异步通信中,每个字符包含1位起始位、7位数据位、1位奇偶位和1位终止位,每秒钟传送200个字符,采用4相位调制,则码元速率为()。

  • A.50波特
  • B.500波特
  • C.550波特
  • D.1000波特
查看答案
单选题

在 Windows 中,运行( )命令得到下图所示结果。以下关于该结果的叙述中,错误的是( )。

Pinging 59.74.111.8 with 32 bytes of data:

Reply from 59.74.111.8: bytes=32 time=3ms TTL=60

Reply from 59.74.111.8: bytes=32 time=5ms TTL=60

Reply from 59.74.111.8: bytes=32 time=3ms TTL=60

Reply from 59.74.111.8: bytes=32 time=5ms TTL=60

Ping statistics for 59.74.111.8:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 3ms, Maximum = 5ms, Average = 4ms

  • A.该命令使得本地主机向目标主机发送了 4 个数据包
  • B.本地主机成功收到了目标主机返回的 4 个数据包
  • C.本地主机与目标主机连接正常
  • D.该命令用于查看目标主机的 IP 地址
查看答案

相关题库更多 +