Oct
26

个人工资所得税的计算(switch)

上个月已经用if语句做过这道题,今天要用刚学的switch语句实现,中午牺牲午睡的时间跑去图书馆完成了.本以为上次用if语句做出这道题后,这次用switch-case语句也应该没问题,结果却花费了我不少时间才完成.看来军训回来后头脑变钝了好多:P
大致思路和if语句差不多,我认为用switch-case语句做这道题有两个关键也是难点,一是switch后面的整型表达式该如何表达,二是case后面的常量表达式又该如何安排.我再次仔细阅读了原题,根据它的分段标准及规律,才有了上面的安排.我发现有一点要注意,与上次嵌套选择语句不同,在if语句中,Income不必多次赋值,而这次是多分支选择语句,在switch-case语句中,由于每个case都是相对独立的,所以在每个case中的复合语句的Income都要重新赋值.

还有,上次在if语句中我将收入Income定义为浮点型,这次注意到了switch后面只能跟整型表达式,所以我将Income定义为整型,然后,Tax也下意识的定义为整型,问题出来了,结果运行时,得出的答案有些是正确的,有些比正确答案少1,后来才发现是Tax的类型问题,原来它应该被定义为浮点型.
最后改正完调试运行时,输入20000以内数字得出的结果均正确,不过我不明白,根据上面这段代码,当输入40000时,40000-1600=38400>0,而38400/500>76应该列入default范围内,因此应该可以算出结果,为什么显示的结果为No Tax呢?想了大半天,我才猛地想起老师曾经讲过,有符号整常数的范围是-32768~+32767,由于iIncome=iIncome-1600,所以iIncome的最大值应该是32767+1600=34367,据此我初步得出一个结论:当输入大于34367的整数时,也就是输入大于等于34368的整数时,显示的结果就为No Tax,于是我测试了一下,果真如此.但是当我把这段代码去掉getch();这一行后放到VC++下面执行时,并无此问题......
[updated]后来请教sic研发部的戴师兄才知道,编译器不同,int代表的值也不同,在Win-TC下,int的值只有两个字节,而在VC++下,int的值是4个字节,所以范围就更广了.

#include <stdio.h>
void main()
{
    int iIncome = 0;
    float fTax = 0.0;
    scanf("%d",&iIncome);
    iIncome = iIncome - 1600;
    if (iIncome > 0)
    {
        switch (iIncome / 500)
        {
            case 0:
                fTax = 0.05 * iIncome;
                break;
            case 1:
            case 2:
            case 3:
                iIncome = iIncome - 500;
                fTax = 0.05 * 500 + 0.10 * iIncome;
                break;
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                iIncome = iIncome - 500 - 1500;
                fTax = 0.05 * 500 + 0.10 * 1500 + 0.15 * iIncome;
                break;
            default:
                iIncome = iIncome - 500 - 1500 - 3000;
                fTax = 0.05 * 500 + 0.10 * 1500 + 0.15 * 3000 + 0.20 * iIncome;
        }
        printf("Tax is %-4.2f",fTax);
    }
    else
    {
        printf("No Tax");
    }
    getch();
}

...
阅读全文
Oct
25

李开复给中国学生的第四封信:大学四年应是这样度过(节选)

这“第四封信”是写给那些希望早些从懵懂中清醒过来的大学生,那些从未贪睡并希望把握自己的前途和命运的大学生以及那些即将迈进大学门槛的未来大学生们的。
大学是人一生中最为关键的阶段。从入学的第一天起,你就应当对大学四年有一个正确的认识和规划。为了在学习中享受到最大的快乐,为了在毕业时找到自己最喜爱的工作,每一个刚进入大学校园的人都应当掌握七项学习:学习自修之道、基础知识、实践贯通、兴趣培养、积极主动、掌控时间、为人处事。只要做好了这七点,大学生临到毕业时的最大收获就绝不会是“对什么都没有的忍耐和适应”,而应当是“对什么都可以有的自信和渴望”。只要做好了这七点,你就能成为一个有潜力、有思想、有价值、有前途的快乐的毕业生。
                                                                                                                        大学:人生的关键
大学是人生的关键阶段。这是因为,进入大学是你终于放下高考的重担,第一次开始追逐自己的理想、兴趣。这是你离开家庭生活,第一次独立参与团体和社会生活。这是你不再单纯地学习或背诵书本上的理论知识,第一次有机会在学习理论的同时亲身实践。这是你第一次不再由父母安排生活和学习中的一切,而是有足够的自由处置生活和学习中遇到的各类问题,支配所有属于自己的时间。
大学是人生的关键阶段。这是因为,这是你一生中最后一次有机会系统性地接受教育。这是你最后一次能够全心建立你的知识基础。这可能是你最后一次可以将大段时间用于学习的人生阶段,也可能是最后一次可以拥有较高的可塑性、集中精力充实自我的成长历程。这也许是你最后一次能在相对宽容的,可以置身其中学习为人处世之道的理想环境。
大学是人生的关键阶段。在这个阶段里,所有大学生都应当认真把握每一个“第一次”,让它们成为未来人生道路的基石;在这个阶段里,所有大学生也要珍惜每一个“最后一次”,不要让自己在不远的将来追悔莫及。在大学四年里,大家应该努力为自己编织生活梦想,明确奋斗方向,奠定事业基础。
大学四年每个人都只有一次,大学四年应这样度过……

   自修之道:从举一反三到无师自通

   基础知识:数学、英语、计算机、互联网

   实践贯通:“做过的才真正明白”

   培养兴趣:开拓视野,立定志向

   积极主动:果断负责,创造机遇

   掌控时间:事分轻重缓急,人应自控自觉

   为人处事:培养友情,参与群体

踏入大学校门时,你还是一个忙碌的、青涩的、被动的、为分数读书的、被家庭保护着的中学毕业生。
就读大学时,你应当掌握七项学习,学好自修之道、基础知识、实践贯通、兴趣培养、积极主动、掌控时间、为人处事。
经过大学四年,你会从思考中确立自我,从学习中寻求真理,从独立中体验自主,从计划中把握时间,从交流中锻炼表达,从交友中品味成熟,从实践中赢得价值,从兴趣中攫取快乐,从追求中获得力量。
离开大学时,只要做到了这些,你最大的收获将是“对什么都可以拥有的自信和渴望”。你就能成为一个有潜力、有思想、有价值、有前途的中国未来的主人翁。

...
阅读全文
Oct
24

[分享]高质量C++/C 编程指南

与目前和我一样在学习程序设计基础的所有同志分享一本好书,这是我前几天向曾在华为工作的池老师索取企业编程规范时给我推荐的.据他介绍,这本书对C语言编程新手或老手都很有帮助,我大致看了一下,毕竟还是个新手,有很多地方看不懂,不过看懂的地方我都觉得很有用,因此拿来与大家分享.

        点击下载

...
阅读全文
Oct
24

备案审核通过

细心的你是否已经发现首页底部中间位置多了一个备案号?是的,这个Blog备案成功了.早在8月29日我就申请了备案,9月15日才通过审核,它并没有通过任何形式通知我,我是昨天上去看才知道早在一个多月前就已经通过审核了.于是赶紧把证书上传,给首页底部中间位置添加一行字,开博至今,终于成为一个合法Blogger,特地小喜一下.

...
阅读全文
Oct
22

生如夏花,我回来了

 昨天中午平安回到家,告别了为期14天的牢狱式军训生活,经过教官魔鬼式的训练,我整个人脱胎换骨,仿佛获得了重生,人生观、价值观和世界观发生了微妙的变化!Just a joke:-D

军训开始之初,觉得是梦靥的开始,可到最后才发现,过程往往是痛苦的,结果却是快乐的,这14天每天早晨6点就爬起来,集合后围着操场跑5圈,然后开始训练,7点20分就开饭,在此特地说一下,那里的饭菜还算可以,至少可以填饱肚子.之后就站军姿-__-,接着是漫长的训练,中午12点开饭,吃完就午休,至下午3点,在学校都没睡这么长时间,怎一个爽字了得!睡醒站完军姿后又是漫长的训练.晚上6点开饭,7点开始训练直到9点半,前两天的体能训练差点没把我整死,第二天爬楼梯腿酸得不得了...就这样,14天就冥冥地度过了...

想起心理学家William·James在一百多年前写下的一句话:一刻刻一天天看似一切如故,静若止水,然而一年年的光阴却何以能加速流逝呢?现在才明白14天可以如此漫长,也可以如此短暂,经过这次军训,我皮肤黑了,体重轻了,但是和同学之间的距离近了.这14天吸的尘几乎相当于我去年全年吸的尘,可是我的身体变得更强壮了,用我们教官的话说就是:赚到了!

千言万语尽在不言中,总之,我回来了,回到了这个花花绿绿的现实世界当中.

...
阅读全文
Oct
7

[公告]暂停更新两周

明天开始参加为期14天的军训,在此期间暂停更新Blog,与各位朋友小别数日,到时再见,See You~
阅读全文
Oct
6

Happy Birthday

It's my 19-age birthday today.Happy birthday to myself.
P.S. Guestbook and comment are available now.I am awfully looking forward to your leaving words.

...
阅读全文
Oct
5

[Funny]惠普手机广告

        一段有趣的惠普手机广告,看懂了吗?

 

...
阅读全文
Oct
5

Paul Wall And Chamillionaire - What Would U Do Feat. Monetana

早期Chamillionaire与Paul Wall合作的一首作品,非常喜欢,词曲都不错,其中那句Live your life don’t let your life live you, just keep on moving更是给我留下深刻的印象.
……
阅读全文
Oct
5

密码输入程序

书上的一道练习:写出完整的程序,实现:输入密码,如果等于8848,则显示"Loading...",并退出循环;否则显示"Input again!".如果输入超过3次,则退出循环并结束程序.要求密码用ikeyword输入,用icount记录输入次数.
这主要考查循环语句的使用,非常简单,不过我只能写出while循环和do-while循环,for语句到现在还没想出来,哪位高手能指点一下呢?

while循环:
#include <stdio.h>
void main()
{
    int ikeyword=0,icount=0;
    printf("Please input the keyword!\n");
    scanf("%d",&ikeyword);
    while (ikeyword!=8848)
    {
        icount=icount+1;
        if (icount>=3)
        {
            break;
        }
        printf("Input again!\n");
        scanf("%d",&ikeyword);
    }
    if (ikeyword==8848)
    {
        printf("Loading...");
    }
    getch();
}

do-while循环:
#include <stdio.h>
void main()
{
    int ikeyword=0,icount=0;
    printf("Please input the keyword!\n");
    do
    {
        if (icount!=0)
        {
            printf("Input again!\n");
        }
            scanf("%d",&ikeyword);
            icount=icount+1;
        if (icount>=3)
        {
            break;
        }
    }
    while (ikeyword!=8848);
    if (ikeyword==8848)
    {
        printf("Loading...");
    }
    getch();
}

...
阅读全文
分页:«12»