C语言第二阶段总结——函数

博客首页链接:https://blog.csdn.net/weixin_44736475

函数

实验3正答率
在这里插入图片描述
chap5课前自测正答率
在这里插入图片描述

1、函数的声明

函数的声明格式

返回值类型  函数名 (参数1, 参数2, ...)

代码:

#include<stdio.h>
//函数的声明 ,不用实现 
int f(int m);
int main(){
    
    
	int sum = f(5);
	printf("%d",sum);
	return 0;
} 
//函数的定义(具体实现) 
int f(int m)
{
    
      
   int s=0;

   for(int i=0;i<=m;i++)
     s+=i;

   return s;
}

只要在main函数前面声明过一个函数,main函数就知道这个函数的存在,就可以调用这个函数。而且只要知道函数名、函数的返回值、函数接收多少个参数、每个参数是什么类型的,就能够调用这个函数了,因此,声明函数的时候可以省略参数名称。比如上面的sum函数声明可以写成这样:int f(int);

2、函数的定义

函数的定义格式

[返回值类型] 函数名(参数1,参数2...){
    
    
//函数体
}

函数的定义顺序是有讲究的,默认情况下,只有后面定义的函数才可以调用前面定义过的函数,如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明 。
函数可以没有参数,也可以有多个,多个参数之间由,分隔。如果返回值类型为void,可以不使用return语句,也可以使用return若使用必须为return ;,否则编译不通过。

pta易错题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析:
1-1:若返回值类型为void,可以省略return语句
1-2:若返回值类型为void,可以通过return ;返回主调函数。
1-4:若函数定义在调用函数前面,函数的声明可以省略。
2-2:函数的返回值类型是由函数定义是的返回值类型决定的。

扫描二维码关注公众号,回复: 12466631 查看本文章

3、函数的调用

函数调用的格式

函数名 (实际参数)
//实际参数可以是常量、变量和表达式

函数定义时,位于其首部的参数杯被称为形参,形参必须是变量,用于接受实参传递过来的值。
调用自定义函数时,程序中必须有与调用函数对应的函数定义。函数的调用过程为:首先从main函数开始执行,如果遇到某个函数调用时,转而执行相应的函数,该函数执行完后将返回主函数,然后再从原先暂停的位置继续执行。

pta易错题

在这里插入图片描述

分析:

  • 2-1:void无返回值,调用时传递的参数不能是临时定义的变量,形参和实参类型一般要对应(也可以向上转型(低类型转换为高类型),如int 向上转型为double,也可以是强制类型转换)。

4、局部变量和全局变量

变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。
局部变量是在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,函数的形参也是局部变量,也只能在函数内部使用。
全局变量是在函数外部定义的变量,它的作用范围是从定义开始到程序所在文件的结束。
不同作用域中,变量的名字可以相同。

例:全局变量t定义在函数f下面,作用范围为第7行到12行。
在这里插入图片描述

pta易错题

在这里插入图片描述
在这里插入图片描述

分析

  • 1-6:全局变量定义在函数外部,不一定要在第一个函数前面。
  • 1-7:全局变量与局部变量的作用范围不同,允许它们同名。
  • 2-3:这题正确率很低,错误的应该是b,实参和形参的类型不一定必须对应,因为存在强制类型转换,如int转换为long long。形参在调用时分配内存单元,调用结束后释放内存单元,形参的作用范围只能在函数内,而实参可能是主调函数中的变量,也有可能是全局变量,作用的范围不同,变量分配内存单元的时刻不同,所以实参和形参都为变量时,不可能占用同一内存。

5、静态局部变量和变量生存周期

静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数调用结束,也不会被系统回收,它的生存周期会持续到程序结束,所以含有静态局部变量的函数再次被调用时,静态局部变量会被重新激活,上一次调用后的值仍然保存着。

变量的生存周期书上p112页讲的很详细,若对这部分内容不清楚,可以看书。

pta易错题

在这里插入图片描述

在这里插入图片描述

分析:

  • 2-2:当程序执行f(5)时,初始i的值为0,经过for循环之后,i的值变成 了5,s的值为15,则调用f(5)时返回的结果为15,接下来程序执行f(3),由于i是静态局部变量,存储于进程的全局数据区,所以i未被销毁,执行f(3)时,i的值为5,m的值为3,执行for循环,由于5>3,不满足条件,跳出循环,最后返回0,故sum的最后值为15。
  • 1-4、1-5:静态局部变量没有赋初值,系统将自动赋0。自动变量若没有赋初值,则是随机值。

总结

根据做题情况来看,函数这部分错误率比较高的是选择题和判断题,部分同学可能对函数的执行过程、全局变量和局部变量的作用范围和变量生存周期这些不是很理解。函数这部分主要要掌握和理解函数的声明、定义、调用、执行过程、全局变量和局部变量的作用范围和变量生存周期(值传递和地址传递),要把概念理解透彻,做题才不容易出错,编程题要多练习。

猜你喜欢

转载自blog.csdn.net/weixin_44736475/article/details/110007820
今日推荐