我对编程非常陌生,我很难理解这个程序。作业要求计算总账单(给定账单金额、税费百分比和小费百分比),然后将其除以计算某人的一半账单。以下代码是正确的并产生了预期的结果,我只是无法理解它是如何工作的。
函数“float half(浮动账单、浮动税费、浮动小费)”(half1)用于计算账单的一半。我知道它从“half(bill_amount,tax_percent,tip_percent)”(half2)中提取值。然而,我很难理解它是如何工作的。
如果 half2 在主函数中位于 half1 之前,如何从 half2 中提取数字?
任何帮助都会很棒。谢谢!
// Calculate your half of a restaurant bill
// Data types, operations, type casting, return value
#include <cs50.h>
#include <stdio.h>
float half(float bill, float tax, float tip);
int main(void)
{
float bill_amount = get_float("Bill before tax and tip: ");
float tax_percent = get_float("Sale Tax Percent: ");
float tip_percent = get_float("Tip percent: ");
printf("You will owe $%.2f each!\n", half(bill_amount, tax_percent, tip_percent));
}
// TODO: Complete the function
float half(float bill, float tax, float tip)
{
float total_amount = bill + (bill * (tax / 100));
total_amount += total_amount * (tip / 100);
return total_amount / 2.0;
}
单词 half 第一次出现在顶部,就在包含语句的下方,是函数 declaration (1)。所有这一切应该做的,就是告诉编译器,嘿,不要惊慌,会有一个名为 half 的函数,返回一个浮点数并接受 3 个浮点参数。 当程序在主函数末尾的 printf 语句中第二次出现 half 时,编译器知道会发生什么。这里所做的称为函数call。您可以说,您的程序正在使用该函数。因此它告诉计算机实际执行您在half中定义的例程。为了能够做到这一点,该函数必须在它上面声明,它就是这样的(参见(1))。所以我们在这里很好。
第三次出现half,就在TODO 的下方,是函数definition。你可以说这是实际的函数(不是很准确,但目前已经足够接近了:))。调用该函数时要执行的操作的例程写在这里。每次调用 half 时,都会执行花括号之间的代码,参数变量填充函数调用中分配给它们的值(括号中的值)。
因此,函数定义从某个地方提取值,而不是函数调用告诉计算机执行函数代码,同时用调用的值替换参数变量。想象一下,您在一家餐厅担任服务员,您来到厨房,呼叫厨师来烹饪顾客点的菜,如下所示:
cook(chickenburger, large fries)
。
厨师可以具有如下所示的烹饪功能:
dishes cook(char *order1, char *order2) {
// magical kitchen stuff
// ...
return cooked_dishes;
}
这有一点帮助吗?祝 CS50 玩得开心!