C Day 25

给操作取个名字,
让结果回到调用处

今天进入 C 函数入门。从调用一个输出提示的函数开始,再让两个整数进入函数、把计算结果返回,最后独立完成求较大值的练习。

课前复习:输入地址与初始化位置

正确补上 scanf_s 输入数组元素所需的 &,并说明交换标记需要每轮清零、比较计数需要全程累计。最小值题知道用首元素初始化,但变量名拼写有误,也漏答了从下标 1 开始比较,随后完成讲解订正。

定义函数,再调用它

在 main 前定义 show_message。前面的 void 表示不返回值,括号里的 void 表示不接收参数。函数体保存要执行的操作,定义本身不会让其中的 printf 自动运行。

day25.c · 无参数、无返回值函数
void show_message(void)
{
    printf("正在学习 C 语言函数\n");
}

在 main 中连续执行两次 show_message();,提示便输出两次。最初把“两次调用”理解成了“定义两遍”,澄清后能够正确预测:保留定义、删除调用时,只输出 main 中的开始与结束提示。

实际运行验证了两次调用,程序正常退出,代码为 0。同一个 C 文件中不能重复定义同一个函数,但可以多次调用它。

整数参数与返回值:追踪数据的去向

day25.c · 求和函数
int add(int first, int second)
{
    int sum = first + second;
    return sum;
}

// main 中的调用与输出
int result = add(8, 5);
printf("计算结果 = %d\n", result);

函数名前的 int 表示返回整数;first 和 second 是接收数据的形参,调用中的 8 和 5 是实参。每个形参都要写出自己的类型。

先看右侧:add(8, 5) 把 8 传给 first,把 5 传给 second,计算出 13;return 把 13 送回调用处,再由左侧的 result 接收。

参数与结果预测全部正确,实际输出“计算结果 = 13”,退出代码为 0。return 负责向程序返回结果,屏幕上的显示由 printf 完成。

独立练习:返回两个整数中的较大值

独立编写 get_max,用三个分支处理第一个数较大、第二个数较大和两数相等。每条路线都有返回值;函数内部负责比较,main 用 max_value 接收返回值并输出。

day25.c · 独立函数,排版整理
int get_max(int first, int second)
{
    if (first > second)
    {
        return first;
    }
    else if (second > first)
    {
        return second;
    }
    else
    {
        return first;
    }
}

先预测,再验证三条路线

get_max(9, 4)    → 较大值 = 9
get_max(-8, -3)  → 较大值 = -3
get_max(5, 5)    → 较大值 = 5

三项预测全部正确,三次实际运行也一致,退出代码均为 0。负数比较和相等情况都通过验证,最终文件保留 get_max(5, 5) 的调用。

最后确认:return 回到哪里

最后三题全部答对:区分两个 void 的含义;说明实参分别进入 first、second,返回值保存到 max_value;理解 return 结束整个本次函数调用,而不会把 main 一起结束,程序回到调用处继续执行。

下一课学习局部变量与作用域、整数参数按值传递,观察修改形参时调用者变量是否变化,再练习通过返回值更新变量。