【C语言自学】第五章函数

第五章函数

5.1函数的定义

牢记函数定义三要素

  • 函数名(必须体现函数功能)
  • 参数列表y=x+1
  • 返回值y(函数调用时就是调用返回值,返回值既可以是表达式也可以是参数)return y;或者return x+1;

5.2无参函数的定义和调用

5.3有参函数的定义和调用

①一个返回值,两个个参数

②一个返回值,三个参数

5.4函数一些的用法

①定义空函数,在函数设计中是为了占坑使用的

②函数可以用作表达式,调用的是函数返回值

比如:h=add(x,y,z)

  • 函数还可以用作其他函数调用的参数,也是运用的返回值

比如:printf(“h=%d”,add(x,y,z));

5.5函数形参与实参的区别

在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,在发生函数调用时,函数add的形参才被临时分配内存单元。

实参与形参的名字可以相同也可以不相同,两者的值相同,实参对应的值传递给形参。

通过return语句将函数值带回主调函数,应当注意返回值的类型与函数类型一致,如add函数为int型,返回值是变量

编程案例:输入两个整数,要求输出两者中的较大值,用函数实现

这个案例中运用了三目运算符(条件运算符)

它的格式为:  表达式1?表达式2:表达式3

先求解表达式1,

若其值为真(非0)则将表达式2的值作为整个表达式的取值,

否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

例如:

1、max=(a>b)?a:b

就是将a和b二者中较大的一个赋给max。

2、min=(a<b)?a:b

就是将a和b二者中较小的一个赋给min。

5.6函数的嵌套

编程案例,输入四个数a,b,c,d,函数的方式输出最大值

注意:在函数嵌套时,getfromtwo要先在getfromfour前面定义好,不然编译的时候会报警。

5.7函数的递归

   函数的递归等于函数自己嵌套自己,直接上案例分析

求:用函数递归求n阶乘?

这个案例对于大于16的数,运用了exit函数,

   Exit是C语言中的一个终止函数。 它位于库函数<stdlib.h>中。

在C语言的main函数中我们通常使用return (0);这样的方式返回一个值。但这是限定在非void情况下的,也就是非void main()这样的形式。

exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。

exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。在整个程序中,只要调用 exit ,就结束。

但在如果把exit用在main内的时候,无论main是否定义成void返回的值都是有效的,并且exit不需要考虑类型,exit⑴等价于return ⑴。

5.8数组作为函数的参数

    数组作为函数的参数传递时,它传递的是数组的首地址,而不是数组本身包含的数值。传递时是将数组的首地址传给相应的参数,接受数组的参数要么一个数组,要么是指针类型的变量。

举例说明:

输出结果为:

下面引用一个博主对数组作为函数参数调用时的解释

在函数需要将数组作为参数传入时,数组是传址调用,即将数组作为实参时,传入的其实是数组的首地址,实质上是一个指针。

在定义函数时可以定义一个指针,然后去调用数组,此时在函数内部的操作会直接修改数组的实际对应元素。因为传输进函数的数组的本质就是数组的首元素地址,函数内部按照地址去修改当然相当于直接操作数组。

在需要一个函数返回数据时也可以用定义指针,然后传入数组,将需要传回的数据放进数组内,在函数结束调用后,去相应的数组内取回数据。

但是需要注意的是,数组传入函数时只有当传入的是一个数组名时才是传址调用,如果给定下标的话就是一个标量,

例如定义一个数组int num[20]。当传入num[0]、num[1]或其他下标时,传入的就是一个标量,而非一个传址调用了,此时如果有需要依然传入地址,

例如想将数据放入数组,但是想从第二个元素位开始,就需要加一个取址符 “&” ,即&num[2],此时会将num[2]的地址传入,在写入数据时,也会从num[2],开始。

注意:

如果定义一个数组,元素只有一个下标,即类似于int num_ine[1],此时直接传入函数,也是标量传入,而非传址调用。

在需要将数组传入函数,但是不想数组被改变时,可以使用const 关键字修饰,即函数形参定义为int const num[],此时数组num会被声明为常量,即不可改变。

原文链接:数组做函数参数时的使用_一叶知秋@qqy的博客-CSDN博客_数组作为参数传入函数的到底是什么

一维数组作为函数参数,实操案例

有两个班的学生,分别是10个人和5个人,分别求这两个班学生的平均分

注意:数组在形参中的书写方式,带类型符,带中括号,但中括号内可以不用限制范围,因为在形参中,一维数组传递地址,不需要限制范围

5.9二维数组作为函数参数

二维数组作为实参时,要定义限制列数的范围。

例如,在实参中定义数组int a[8][10],

则在形参中的正确定义是int a[][10]或者int a[8][10]

实操案例:

有一个3x4的矩阵,初始化并输出,然后求最大值。

5.10全局变量

对于全局变量的定义,如下图所示

全局变量的定义比较简单,直接上练习题

班上有10个同学,封装一个函数,调用函数获得班级的最高分,最低分,平均分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Only Only Me

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

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

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

打赏作者

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

抵扣说明:

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

余额充值