你好, 欢迎｡
我想为您提供一个解决方案, 以解决我们计算周薪的难题｡
所以我将在这里提供一个很好的演示｡
打开代码块,
关闭当前打开的项目, 然后打开并为此应用程序创建一个新项目｡
我将创建一个控制台应用程序, 所以我将使用c｡
而我打算以此名计算周薪｡
所以我要吃我的主菜｡
c文件, 这将给予我一些很好的起点｡
但是在这个解决方案中, 我将做一些事情, 它们可能会有点不同｡
但它会向你介绍一些概念｡
我们会讨论它们, 但是我们会在这个程序中用到很多常量,
主要是工资率和税率｡
我将使用一些我们还没见过的东西, 叫做define｡
它是一个预处理器指令, 用于创建常量｡
所以我们知道它是预处理器指令的方法是我们有一个磅符号｡
所以我会磅来定义｡ 这是一种创建常量的方法｡
我将为程序中的所有数据创建5个常量｡
我们的工资率是12｡ 00.
define的工作方式是使用defined关键字,
跟在磅后面, 然后通常提供一个名称, 通常都是大写字母.
这是标准惯例, 然后是空格, 然后是值.
这里没有等号赋值｡ 这实际上是创造了一个常量变量｡
所以我们要为工资率创建一个, 税率为300｡
实际上我们会说税率为150或300及以下的税率是0｡
15.
你会注意到, 你赋值的数据可以是浮点数, 整数,
你甚至可以赋值字符串. 这里的数据类型无关紧要｡
税率为150时可以为0｡
20. 我通常在文件顶部的main之外进行定义｡
另外, 不要忘记在顶部和整个源代码中添加注释｡
然后我会为剩下的部分创建一个最后的税率也就是0.
25.
我最不想做的就是为我的加班时间创建一个常数, 只需要调用加班时间,
比如40｡
这只是表示我们要检查是否大于40｡
在变量中使用幻数从来都不是一个好主意, 因为现在如果有什么变化, 比如说加班时间变成了45,
我只需要在一个位置上改变它｡
我的程序也会以同样的方式运行｡
如果我没有这个常数, 而在比较或变量中使用了一个幻数, 我就必须在使用40的地方改变它.
所以要养成使用常数的习惯, 而不要使用所谓的幻数｡
我还喜欢在main的顶部声明我的变量｡
这些是我们主函数的局部变量｡
所以我想放一个注释声明变量｡
我需要的变量都是本地的, 我将创建一个整数, 表示小时数,
我将把它初始化为0｡
小时数将由用户输入, 然后我将创建一些双精度值, 这些值将作为输出显示, 主要是工资总额,
我将其初始化为0. 0, 因为它是双精度型｡
然后是税, 我也要初始化为0｡
0以分号结尾, 别忘了分号后再净付｡
因为这是我想要的3个输出｡
所以我将在顶部创建3个输出以及输入小时数｡
我首先要做的是获取输入, 我将告诉用户输入一些内容｡
我会说输入请输入本周工作的小时数, 放一个冒号, 一个小空格和一个分号｡
然后我将使用scanf函数获取输入｡
我只想说scanf｡ 我想读一个整数｡ 所以我会说% d｡
我会用逗号分隔, 然后用小时分隔, 因为它不是字符串或字符,
所以我必须在前面加上[&]号, 然后用分号结尾.
这是要读｡ 在这一点上,
我应该做是我应该测试, 工作是一小块, 不断测试
如果我继续编写代码试图编译, 我可能在任何地方都有问题, 在小范围内工作｡
但我知道这是可行的｡ 接下来我将演示如何做到这一点｡
就像我说的, 我要做的第一件事是计算总工资｡
在这里的逻辑中, 我们需要一个if语句｡
基本上, 如果时数大于40,
则需要有加班费率｡
我要做的是,
如果小时数小于等于40, 那么我所要做的就是很容易地创建我的计算, 因为它只是工资乘以小时数｡
第24行有if关键字, 还有hours｡
我们在做比较｡ 我们用的是关系运算符小于等于｡ 如果我们的值小于或等于4,
我们就不用括号了, 因为我们只需要一条语句｡
我们只说毛工资｡
我们要设置一个变量, 它等于小时数乘以我们的常数, 工资率, 就这样.
如果它大于或等于40, 我们就想做别的事情｡
如果条件的结果为false, 我们需要一个else, 这里就是使用else的地方｡ else在它的块中有多行,
所以我用了一个括号, 它从第27行开始,
起始括号是29, 结尾是.
括号不匹配或没有括号是编译器可能发现的常见错误｡
所以一定要把括号对上｡ IDE非常有用, 因为它突出显示了这些属性｡
如果您有多个括号, 您可以随时转到另一个括号｡
如果你转到下括号, 它会突出显示, 告诉你开始括号在哪里｡
在这条带子上,
如果大于40, 首先,
我想把我的总工资设为40乘以工资率, 因为前40个小时是12美元一小时｡
之后的一切都将是更多的｡
我将创建一个局部变量,
称为加班费, 并将其设置为小时数减去40.
所以如果我输入40, 这里就是5｡
一旦我有了这些小时数, 我想把它乘以工资率, 也就是12美元一小时, 但我想加上1｡
5美元,
也就是18美元一小时, 然后我用分号结束｡
在这一点上, 我的加班费将是5乘以18, 90美元,
如果我输入45作为一个用户｡
然后前40个小时就是40乘以12, 也就是我们说的570
40乘以12就是480｡
现在我们要做的最后一件事是我们要把总工资加到加班费上｡
所以我可能会用一个比毛工资更好的名字, 因为我们还没有我们的宽限工资｡
但我将使用一个很好的小运算符, 赋值运算符加上等于, 它将用于计算加班费｡
这就是说, 总工资等于总工资加上加班费｡
但我们用的是速记符号｡
所以现在我们有了总工资, 我们的总工资已经完成了｡
所以我们会继续测试, 打印出总工资, 并确保它是正确的｡
但既然我知道这是可行的, 我将继续下一步｡
下一步是计算税款｡
所以要计算税收, 记住, 我们必须根据你赚多少钱来做某些事情｡
所以我们得看看总工资｡
所以如果总工资低于或等于300, 我们就要做点什么｡
如果工资总额是300和450, 我们就要做点什么｡
如果它大于450, 我们就采取别的措施｡
这里会有一些重复的代码｡
因为我们只是在演示if语句｡
你也许可以把它写得更清楚一点｡
但我要先检查第一个条件如果总工资小于或等于300.
在这种情况下, 计算税收就很容易了｡
税收就是总收入乘以税率300｡
300美元的税率是300美元以上的任何东西, 另一个是15%的税率, 我想是的｡
如果你的收入少于或等于300, 我们就这么做｡
同样, 您应该注意到的另一件事是缩进｡
当你有代码块的时候, 即使我只有一条语句, 我也会在那里放一个括号.
然后我指出了我的区块, 这样更容易阅读, 别忘了新行的缩进｡
通常您希望使用空格而不是制表符, 但这是另一个问题｡
现在它也可以是其他东西｡
所以在第34行我们问了一个问题,
如果总工资小于或等于300, 在第36行做一些事情｡
我们使用if关键字, 将条件布尔表达式放在括号内｡
但如果不是300或更少, 那我们就想做点别的｡
具体来说, 如果总工资大于300, 那么这里我用了一个逻辑运算符和, 这里我问了两个问题｡
如果总工资大于300且小于等于450, 则我想做其他事情｡
这就是说如果我的总收入在300到450之间｡
如果在300到450之间, 我首先要像以前一样计算我的税金｡
对于前300年, 我想乘以300年的税率｡
因为前300个国家是按这个税率征税的｡
对于其他金额,
我想把税率定为150, 也就是20%｡
首先, 我得找出我们在300美元上赚了多少, 但我可以在一行中完成｡
我将计算税收加等于,
这就是说税收等于税收, 这是税率的300倍, 税收加一些东西｡
我想在第40行的第一笔税款上加上,
我想加上额外的金额, 这就是总工资减去300, 我已经确定我不会超过450
所以工资总额减去300倍的税率为150｡
看看我做了什么｡
如果我在第38行赚了300到450之间的钱, 那么我想得到前300的税, 这是税率300的300倍,
我想把它加到我的总工资超过税率150的300倍的多少｡
现在我们已经满足了两个条件, 最后一个条件是我们要检查是否超过450.
所以基本上, 如果总工资大于450, 我们就可以有一个else,
或者只是一个else｡
但为了清楚起见我会在这里加上else
if, 我会说else总薪酬大于450.
我其实不需要这么做因为我可以只写else而不写if, 但我想演示一下else
if.
在本例中, 我确实要计算前300个的税, 所以我可以在这里复制代码｡
我还要计算150的税金,
所以我会对下一个150做一个加等于, 也就是300到450｡
所以这将是150乘以税率150｡
我最不想做的就是对剩下的部分按一定的税率征税｡
所以这里我要说税加等于, 再加等于是税加｡
这里我会说总收入减去450因为我不想把税收加到总收入上, 只加450以上的部分.
我想乘以税率等于rest, 这是我们上面定义的常数｡
就是这样｡ 我已经算完税了｡
同样, 您需要在每一步之后测试它, 以确保它是正确编译和测试｡
但你会注意到缩进｡ 这很容易阅读｡ 我在做评论, 所有这些｡
我最不想做的就是计算净工资｡
这会很简单因为净工资等于总工资减去税收, 非常简单.
然后显示输出｡
并记住要求是显示总工资､ 税金和净工资｡
所以我们可以在这里使用printf｡
为了提高效率, 我将把它复制并粘贴进去, 这样就不会占用太多时间｡
有时候我复制粘贴的时候, 学生们会生气,
他们说在编程中不应该复制粘贴｡ 嗯, 在某种程度上确实如此｡
如果您复制并粘贴某些内容, 且完全理解代码, 则效率会更高｡
复制和粘贴的问题是很多开发人员都在复制和粘贴,
他们不知道代码是如何工作的, 然后他们就希望它能工作｡
但在本例中, 我知道打印输出语句是如何工作的, 我只想向您展示这里发生了什么｡
这样我就不用等在键盘上打字浪费时间了｡
在第54行, 我们将显示总工资｡
这是个花车｡ 我们知道如何显示变量值｡
唯一奇怪的是我将输出格式化为2个小数点, 所以您应该注意到%｡
2f, 然后反斜杠n是换码序列的换行符｡
所以我把所有的内容都格式化为2个小数点, 因为当我们显示货币时, 我们有美分,
我们没有美分的百分比｡
然后我以同样的格式显示了税金和净工资｡
那里真不错｡
同样, 你应该注意到这个程序中的缩进｡
它很容易阅读｡ 我在顶部使用常量变量｡
我正在初始化变量｡ 我为什么要申报？
一切都很好很整洁 我在提供意见｡
我在写一堆if else语句｡
希望这一切都清楚了｡ 逻辑并不是很坚韧遵循,
但是当你确实有源代码的时候, 因为你可以下载它, 这样你就可以更多地分析它｡
但是让我们看看在编译时会发生什么, 比如让我们确保没有任何错误｡
当我构建它说我有一个警告未使用｡
看起来像这里｡
我遗漏了一些东西, 期望在括号前有一个分号, 这没有意义｡
我遗漏了一些东西, 括号前应该有分号,
这没有意义｡ 所以我想我错过的是, 好吧,
我不能有其他的｡ 它必须是其他的如果,
这没有意义, 我忘了如果｡ 所以如果｡
这里有一个else, 下面有一个else if.
这说不通啊 你不能有一个else然后又有一个else if｡
现在让我们看看这里发生了什么｡
现在我得到0个错误和0个警告｡
让我们运行这个和我的病毒扫描程序｡
当我运行这个程序的时候, 它首先会说请输入本周工作的小时数.
我将输入高于45的值, 因此它显示了超时｡
我觉得是45或者比40高4｡ 45, 它说我赚了570美元, 这是正确的,
因为｡
40美元以下的每小时12美元, 我们计算是400和80美元｡
然后这5个小时是18美元一小时, 也就是90加480等于570｡
这周的税金是105美元, 净收入是465美元｡
漂亮的偶数 您可以检查这些计算以确保它们是正确｡
你可以试着运行很多很多次, 看到不同的数据输出｡
让我们用小于40的东西来运行它｡
我这周加班30个小时, 就没有加班费了｡ 它就是30乘以12等于360｡
对于前300年, 我将按15%的税率纳税｡
那就是45美元, 然后对于这60美元, 我将按20%的税率纳税,
那就是12美元｡
所以45加12, 57看起来是正确的｡
这周的净工资是303360减去57
所以看起来效果不错｡
您需要用大于450的收益来进一步测试｡
测试中的另一个重要的事情是你想测试所有的边界｡
您不只是想提供一个测试｡ 一切正常｡
您需要提供好案例和坏案例｡
所以在这个例子中, 我们有很多不同的案例, 我们有一个案例,
你做了超过40小时｡
所以你有加班费｡
我们有一个案件, 你的收入是300或更少, 一个案件,
当你的收入是300至450和一个案件, 当你的收入大于450｡
因此, 对于这个程序, 你应该至少运行4个测试用例或5个测试用例,
这取决于你是否真的想计算超时时间｡
你可能会侥幸逃脱4例,
因为你可能会得到不到300美元, 低于加班费｡
但你真正想测试的是加班费, 然后是3个税率｡
我希望这对你有帮助｡ 我希望你能完全理解我所展示的｡
我希望你能理解if语句的所有内容, 以及我如何使代码可读并使用有意义的名称｡
-谢谢—谢谢