• 一个实用的税收程序


    程序目标

      这个程序由C Primer Plus(Fifth Edition)中的一道练习引出。

      

    我们的目标是制作一个界面友好且安全性高(防止错误输入)的程序。按照书上的要求,我们拟定伪代码:

    主体:

      DO循环{

        提示输入等级类型

        判断:类型。如果不正确,置标记为0

        提示输入金额

        判断:金额。如果不正确,置标记为0{

          类型1:调用函数输出税额

          类型2:调用函数输出税额

          类型3:调用函数输出税额

          类型4:调用函数输出税额

        }

        缓冲区调整

      }循环继续条件(标记)

    输出税额的函数:

      如果:金额在规定以下

        返回:金额 * 0.15

      否则

        返回:规定 * 0.15 + (金额 - 规定) * 0.28

      为了使界面更美观,我们采用制表符来提示用户输入,并采用无缓冲输入达到一定的效果,详细请看程序代码。

    程序代码

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <conio.h>
     4 
     5 /*
     6     本程序依照1988年的United States Federal Tax Schedule
     7     该计划分为四个标准征税:
     8     单身 17850
     9     户主 23900
    10     已婚共有 29750
    11     已婚离异 14875
    12     每一种等级在其范围内征收15%的税,超过部分按28%计算
    13 */
    14 
    15 #define ALONE 17850.0 
    16 #define FAM_MAN 23900.0
    17 #define MA_TOG 29750.0
    18 #define MA_SE 14875.0
    19 
    20 double calc(double money, double base);
    21 
    22 int main(int argc, char * argv[]){
    23     char type;
    24     double money;
    25     int flag = 1; //循环标记
    26 
    27     do{
    28         printf("┌─────────────┐
    "
    29                "│请选择纳税人身份:        │
    "
    30                "│a.单身          b.户主    │
    "
    31                "│c.已婚共有      d.已婚离异│
    "
    32                "│输入其它内容退出          │
    "
    33                "└─────────────┘
    "
    34                "  User#[ ]");
    35         //下面的getche是有回显无缓冲输入,函数原形在conio.h中
    36         if( ( type = getche() ) != 'a' && type != 'b' && type != 'c' && type != 'd'){
    37             flag = 0;
    38             printf("
    已退出!
    ");
    39             break;
    40         }
    41 
    42         printf("
    请输入纳税人财产总额:$[          ]");
    43         if( scanf("%lf",&money) ){
    44             switch(type){
    45             case 'a':
    46                 printf("这位纳税人需要缴纳 $%g 的税款
    
    ",calc(money, ALONE) );
    47                 break;
    48             case 'b':
    49                 printf("这位纳税人需要缴纳 $%g 的税款
    
    ",calc(money, FAM_MAN) );
    50                 break;
    51             case 'c':
    52                 printf("这位纳税人需要缴纳 $%g 的税款
    
    ",calc(money, MA_TOG) );
    53                 break;
    54             case 'd':
    55                 printf("这位纳税人需要缴纳 $%g 的税款
    
    ",calc(money, MA_SE) );
    56                 break;
    57             }
    58         }
    59         else{
    60             flag = 0;
    61             printf("数据错误!
    ");
    62         }
    63         while(getchar() != '
    '); //调整读取缓冲区
    64 
    65     }while(flag);
    66 
    67     printf("
    谢谢使用
    ");
    68     getch();
    69 
    70     return 0;
    71 }
    72 
    73 double calc(double money, double base){
    74     return (money < base) ? (money * 0.15) : (base * 0.15 + (money - base) * 0.28);
    75     //这个函数返回正确的税额,?:运算符简洁,这里提供一个记忆技巧:
    76     //是真的吗 ? 是 : 不是
    77 }

    部分代码显示纠错:

    运行结果

  • 相关阅读:
    区间dp_学习笔记
    状态压缩dp_学习笔记
    第十一届蓝桥杯C/C++ J题网络分析(带权并查集水题)
    状态机dp学习笔记_AcWing
    洛谷P4052 [JSOI2007]文本生成器(AC自动机+DP)
    洛谷P5840 [COCI2015]Divljak (AC自动机+fail树上dfs序+树上差分线段树维护)
    洛谷P3401 [USACO12JAN]Video Game G(AC自动机+记忆化搜索)
    HDU3613 Best Reward (exKMP/manacher)
    洛谷P2375 [NOI2014]动物园(KMP+倍增优化)
    ICPC2017南宁站题解(A,E,F,H,I,J,L,M)
  • 原文地址:https://www.cnblogs.com/mrblug/p/5751274.html
Copyright © 2020-2023  润新知