【编程语言 · C语言 · 函数】

C函数

函数是C编程的核心,用于完成一系列子任务的程序解决方案。
至此,你已经知道每个C程序都包含一个main()函数。并且您熟悉printf()函数。

你也可以创建自己的函数。


函数的特点:
•是执行特定任务的代码块
•可重用
•使程序易于测试
•可以在不更改调用程序的情况下进行修改

main()分解为子任务,即使是简单的程序也更易于理解用功能实现的
例如:

#include <stdio.h>



// 定义函数 square,用于计算一个数字的平方

int square(int num) {

  return num * num;

}



int main() {

  int x, result;

  

  x = 5;

  result = square(x); // 调用函数 square 计算 x 的平方

  printf("%d 的平方是 %d\n", x, result);

    

  return 0;

}

这段代码主要实现了以下功能:

  1. 引入头文件 stdio.h,其中包含了输入输出函数的定义。

  2. 定义了函数 square,用于计算一个数字的平方。

  3. main 函数中声明了变量 xresult

  4. x 赋值为 5。

  5. 调用函数 square,传入参数 x,并将返回值赋给变量 result

  6. 使用 printf 函数打印出结果,显示 x 的平方。

  7. 返回 0,表示程序成功执行并退出。

为了使用 square函数,我们需要对其进行声明。

函数的声明

函数的声明

声明通常出现在main()函数上方,并采用以下形式:

返回类型 函数名(参数);

当不需要函数返回值,可以将函数返回类型设置成 void 关键字。

例如,display_message该函数没有返回值:

void display_message();

【单选题】C程序必须至少具有一个名为main()的函数?

C函数

当声明中包含参数类型和名称时,该声明称为函数原型。

例如,square 函数原型出现在main()上方:

#include <stdio.h>

/* 声明*/
int square (int num); 

int main() {
  int x, result;
  
  x = 5;
  result = square(x);
  printf("%d squared is %d\n", x, result);
    
  return 0;
} 

这里square函数返回一个整数,并接受一个int类型的参数。

最后一步实际上是定义功能。

函数定义通常出现在main()函数之后。

#include <stdio.h>

/* 声明 */
int square (int num); 

int main() {
  int x, result;
  
  x = 5;
  result = square(x);
  printf("%d squared is %d\n", x, result);
    
  return 0;
}

/* 定义*/
int square (int num) {
  int y;

  y = num * num;

  return(y);
} 

如您所见,square函数计算并返回其参数的平方。

一个函数可以采用多个参数-在这种情况下,它们必须用逗号分隔。

return语句用于将值发送给调用的语句。

【选词填空】声明一个名为“ triple”的函数,该函数带有一个int参数并返回其值乘以3:

int triple ( num) {
  int y;
  y = num * 3;
   y;
}

echo

return

int

let

函数参数

在调用函数时, 大多数情况下,主调函数和被调函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。

默认情况下,参数按值传递,这意味着将数据副本提供给被调用函数的参数。

实际变量未传递到函数中,因此函数内修改参数的值不会更改到外部对应变量的值。

传递给函数的参数按位置与参数匹配。

因此,第一个参数传递给第一个参数,第二个参数传递给第二个参数,依此类推。

例如:

 

#include <stdio.h>

// 声明函数 sum_up,用于计算两个整数的和

int sum_up(int x, int y);

int main() {

  int x, y, result;

  

  x = 3;

  y = 12;

  result = sum_up(x, y); // 调用函数 sum_up 计算 x 和 y 的和

  printf("%d + %d = %d", x, y, result); // 打印计算结果

    

  return 0;

}

// 定义函数 sum_up,将两个整数相加并返回结果

int sum_up(int x, int y) {

  x += y; // 将 x 增加 y 的值

  return x; // 返回计算结果

}

这段代码实现了以下功能:

  1. 引入头文件 stdio.h,其中包含了输入输出函数的定义。

  2. 声明了函数 sum_up,用于计算两个整数的和。

  3. main 函数中声明了变量 xyresult

  4. x 赋值为 3,将 y 赋值为 12。

  5. 调用函数 sum_up,传入参数 xy,并将返回值赋给变量 result

  6. 使用 printf 函数打印出结果,显示 x + y = result 的形式。

  7. 返回 0,表示程序成功执行并退出。

函数 sum_up 的功能是将两个整数相加并返回结果。在函数体内,参数 x 的值增加了参数 y 的值,然后将结果返回。

程序输出为:3 + 12 = 15

x和y的值传递给sum_up。

注意,即使在sum_up中更改了参数x的值,也不会更改main()中参数x的值,因为仅将其值(副本)传递到了参数x中。

 函数声明中的参数是形式参数。

【选词填空】声明带有两个float参数的函数test():

void test( a float b);

,

int

;

float

变量作用域

变量作用所谓作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在所有代码文件中使用,有些变量只能在当前的文件中使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。

变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。

在函数内声明的变量是该代码块的局部变量,不能在函数外部引用。

在所有函数外部声明的变量是整个程序的全局变量。

例如,在程序顶部用#define声明的常量对整个程序可见。

以下程序同时使用局部变量和全局变量:

 

#include <stdio.h>

int global1 = 0; // 声明并初始化全局变量 global1

int main() {

  int local1, local2; // 声明局部变量 local1 和 local2

  

  local1 = 5; // 将 local1 赋值为 5

  local2 = 10; // 将 local2 赋值为 10

  global1 = local1 + local2; // 计算 local1 和 local2 的和,并将结果赋给 global1

  printf("%d \n", global1); // 打印 global1 的值,即 15

  

  return 0; // 返回 0,表示程序成功执行并退出

}

这段代码实现了以下功能:

  1. 引入头文件 stdio.h,其中包含了输入输出函数的定义。

  2. 声明并初始化全局变量 global1,初始值为 0。

  3. main 函数中声明了局部变量 local1local2

  4. local1 赋值为 5。

  5. local2 赋值为 10。

  6. local1local2 的和赋值给全局变量 global1

  7. 使用 printf 函数打印出全局变量 global1 的值,即 15。

  8. 返回 0,表示程序成功执行并退出。

当参数传递给函数参数时,参数充当局部变量。退出函数后,函数中的参数和任何局部变量都会被销毁。

请谨慎使用全局变量。在使用它们之前,应先对其进行初始化,以避免意外结果。

而且由于可以在程序中的任何地方更改它们,因此全局变量可能导致难以检测到错误(bug)。

【单选题】变量作用域指的是?

声明的函数数量。

程序中变量的有效范围。

程序中的变量数。

静态变量

静态变量具有局部作用域,但在退出函数时不会被破坏。因此,静态变量将在程序生命周期内保留其值,并且每次重新输入该函数时都可以访问该静态变量。

声明时会初始化静态变量,并且需要用前缀static修饰。

以下程序使用静态变量:

 

#include <stdio.h>

// 声明函数 say_hello,用于打印问候语

void say_hello();

int main() {

  int i;

  for (i = 0; i < 5; i++) {

    say_hello(); // 调用函数 say_hello

  }

   

  return 0;

}

// 定义函数 say_hello,用于打印问候语

void say_hello() {

  static int num_calls = 1; // 声明并初始化静态局部变量 num_calls

  printf("Hello number %d\n", num_calls); // 打印问候语及调用次数

  num_calls++; // 更新调用次数

}

这段代码实现了以下功能:

  1. 引入头文件 stdio.h,其中包含了输入输出函数的定义。

  2. 声明函数 say_hello,用于打印问候语。

  3. main 函数中声明变量 i,用于循环控制。

  4. 使用 for 循环,循环执行 5 次。

  5. 在循环内部,调用函数 say_hello

  6. 定义函数 say_hello,用于打印问候语。

  7. 声明并初始化静态局部变量 num_calls,初始值为 1。

  8. 使用 printf 函数打印问候语,并显示调用次数。

  9. 更新静态局部变量 num_calls 的值,增加调用次数。

  10. 循环结束后,返回 0,表示程序成功执行并退出。

函数 say_hello 打印一条问候语,并显示该函数被调用的次数。静态局部变量 num_calls 用于记录函数的调用次数,在每次调用函数时递增。

结果为:

Hello number 1
Hello number 2
Hello number 3
Hello number 4
Hello number 5

【选词填空】声明静态整数变量并将其初始化为值1:

 int var  1;

<<

=

static

statics

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟程序员__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值