入门C语言只需一个星期(星期五)

点击上方"蓝字"关注我们

01、函数声明和定义

int main() {  printf("Hello World!");  return 0;}函数由两部分组成​void myFunction() { // 声明 declaration  // 函数体(要执行的代码)(definition)}Declaration 声明函数名称、返回类型和参数 (如果有)Definition 函数体 (要执行的代码)// 函数声明void myFunction();// 主要方法int main() {  myFunction(); // --> 调用函数  return 0;}void myFunction() {// 函数定义  printf("晚上好!");}

02、调用函数

// 创建函数void myFunction() {  printf("晚上好!");}int main() {  myFunction();  // 调用函数  myFunction();  // 可以被多次调用  return 0;}// 输出 -> "晚上好!"// 输出 -> "晚上好!"

03、函数参数

void myFunction(char name[]) {  printf("Hello %s\n", name);}int main() {  myFunction("Liam");  myFunction("Jenny");  return 0;}// Hello Liam// Hello Jenny

04、多个参数

void myFunction(char name[], int age) {  printf("你好 %s 你 %d 岁了。\n",name,age);}int main() {  myFunction("Liam", 3);  myFunction("Jenny", 14);  return 0;}// 你好 Liam 你 3 岁了。// 你好 Jenny 你 14 岁了。

05、返回值

int myFunction(int x) {  return 5 + x;}​int main() {  printf("结果: %d", myFunction(3));  return 0;}// 输出 8 (5 + 3)两个参数​int myFunction(int x, int y) {  return x + y;}​int main() {  printf("结果: %d", myFunction(5, 3));  // 将结果存储在变量中  int result = myFunction(5, 3);  printf("结果 = %d", result);  return 0;}// 结果: 8 (5 + 3)// 结果 = 8 (5 + 3)

06、递归示例

int sum(int k);int main() {  int result = sum(10);  printf("%d", result);  return 0;}​int sum(int k) {  if (k > 0) {    return k + sum(k - 1);  } else {    return 0;  }}

07、数学函数

#include <math.h>printf("%f", sqrt(16));   // 平方根printf("%f", ceil(1.4));  // 四舍五入 (入)printf("%f", floor(1.4)); // 四舍五入 (舍)printf("%f", pow(4, 3));  // x(4)的y(3)次方
  • abs(x) 绝对值

  • acos(x) 反余弦值

  • asin(x) 反正弦值

  • atan(x) 反正切

  • cbrt(x) 立方根

  • cos(x) 余弦

  • exp(x) Ex 的值

  • sin(x) x 的正弦值

  • tan(x) 角度的正切

总结

知识回顾

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 入门C语言只需一个星期(星期一) |
| 入门C语言只需一个星期(星期二) |
| 入门C语言只需一个星期(星期三) |
| 入门C语言只需一个星期(星期四) |

#include<stdio.h>​// 静态函数(static function)static void static_func() {    printf("这是一个静态函数。");}​// 常量函数(const function)const void const_func() {    printf("这是一个常量函数。");}​// 内联函数(inline function)inline void inline_func() {    printf("这是一个内联函数。");}​int main() {    static_func();    const_func();    inline_func();    return 0;}
  1. 静态函数(static function):使用 static 关键字修饰的函数,其作用范围仅限于定义它的源文件。这意味着在其他源文件中无法访问这个函数。静态函数在内存中只有一份副本,不会被多个源文件中的同名函数所干扰。

  2. 常量函数(const function):使用 const 关键字修饰的函数,表示该函数不会修改任何外部变量的值。这有助于提高代码的可读性和安全性。但是,这并不意味着函数内部不能调用其他非const函数。

  3. 内联函数(inline function):使用 inline 关键字修饰的函数,编译器会尽量将函数调用替换为函数体的代码,以减少函数调用的开销。内联函数通常用于简单的函数,以提高程序的执行效率。需要注意的是,编译器并不一定会将内联函数真正地内联,它会根据实际情况决定是否进行内联优化。

指针函数举例

假设我们有一个函数 `add`,它接受两个整数作为参数并返回它们的和。我们可以定义一个指针函数 `create_add_func`,它返回一个指向 `add` 函数的指针。这样,我们就可以在运行时动态地创建指向 `add` 函数的指针。

```c#include<iostream>​​int add(int a, int b) {    return a + b;}​​// 定义一个指针函数,它返回一个指向 add 函数的指针typedef int (*AddFuncPtr)(int, int);​​AddFuncPtr create_add_func() {    return add;}​​int main() {    AddFuncPtr add_func_ptr = create_add_func();    int result = add_func_ptr(3, 4);    std::cout << "Result: "<< result<< std::endl; // 输出:Result: 7    return 0;}```

在上面的代码中,我们首先定义了一个名为 `add` 的函数,它接受两个整数作为参数并返回它们的和。然后,我们定义了一个名为 `create_add_func` 的指针函数,它返回一个指向 `add` 函数的指针。在 `main` 函数中,我们调用 `create_add_func` 函数来获取指向 `add` 函数的指针,并使用该指针调用 `add` 函数来计算 3 和 4 的和。

函数指针举例

假设我们有一个函数 `print_sum`,它接受两个整数作为参数并打印它们的和。我们可以定义一个函数指针变量 `sum_func`,并将 `print_sum` 函数的地址赋值给它。这样,我们就可以通过 `sum_func` 调用 `print_sum` 函数。

```c#include<iostream>​​void print_sum(int a, int b) {    std::cout << a << " + " << b << " = " << a + b<< std::endl;}​

// 定义一个函数指针类型,它指向一个接受两个整数并打印它们的和的函数typedef void (*SumFuncPtr)(int, int);​​int main() {    SumFuncPtr sum_func = print_sum;    sum_func(3, 4); // 输出:3 + 4 = 7    return 0;}```

在上面的代码中,我们首先定义了一个名为 `print_sum` 的函数,它接受两个整数作为参数并打印它们的和。然后,我们定义了一个名为 `sum_func` 的函数指针变量,并将 `print_sum` 函数的地址赋值给它。在 `main` 函数中,我们通过 `sum_func` 调用 `print_sum` 函数来打印 3 和 4 的和。

故我在

点击下方卡片 关注我

↓↓↓

Qt历险记

一名技术分享师,分享方向:->Qt(C/C++、linux、STM32、MySql/Sqlite3、TCP/UDP),设计方面->Ai、PS、visio、AD、Protues。

相关推荐
就爱学编程2 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
学术头条7 分钟前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
Schwertlilien40 分钟前
图像处理-Ch4-频率域处理
算法
北国无红豆43 分钟前
【CAN总线】STM32的CAN外设
c语言·stm32·嵌入式硬件
IT猿手1 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法
__lost1 小时前
MATLAB直接推导函数的导函数和积分形式(具体方法和用例)
数学·算法·matlab·微积分·高等数学
单片机学习之路1 小时前
【C语言】结构
c语言·开发语言·stm32·单片机·51单片机
thesky1234561 小时前
活着就好20241224
学习·算法
ALISHENGYA1 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战项目二)
数据结构·c++·算法
guogaocai1231 小时前
连续自成核退火热分级(SSA)技术表征共聚聚丙烯(PP)分子链结构
算法