C语言·第七章函数.上-谭浩强

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

用函数模块化程序设计

一、函数的基本基本信息
在这里插入图片描述

  1. 为什么要用函数
    ❀❀❀为实现模块化程序设计
    模块化程序设计:事先编写好一些常用的函数来实现各种不同的功能,需要用时直接调用编写好的函数即可。
    ❀❀❀什么是函数?
    ❀函数:function 即使函数又是功能的意思。所以通俗的来说函数就是为实现一定的功能
    ❀函数分类:
    (1)用户的角度
    函数库:如<stdio.h><math.h>为系统提供
    自定义:用于解决用户专门需要的函数
    (2)函数的形式
    有参函数:在主函数中,通过参数向被调用函数传递参数–执行被调用函数,会返回一个函数值,供主调函数使用。
    无参函数:在主函数中,不向被调用函数传递参数–执行被调用函数,可以或者不返回一个函数值。
    ❀❀❀提前注意事项
    ❀一个C程序由一个或多个程序模块组成。一个程序模块作为一个源程序文件,一个源程序文件是一个编译单位。一个源程序文件由一个或多个函数以及其他有关内容(指令、数据声明与定义等)组成。
    所以,程序编译是以源程序文件为单位进行编译而不是函数为单位哦~
    ❀主函数与其他函数之间关系
    》所有函数都是平行的,定义函数时分别定义相互独立。
    》主函数可以调用其他函数,一个C程序的执行从主函数开始,又在主函数中结束整个程序的运行。
    》其他函数可以互相调用,不能调用主函数,主函数是被操作系统调用的。
    》同一个函数可以被一个或者多个函数调用多次
    在这里插入图片描述
  2. 怎么定义函数
    ❀❀❀为什么定义函数
    C语言要求必须“先定义,后使用”
    ❀❀❀函数的组成
    ❀函数的类型 :函数返回值的类型。如void int float
    ❀函数的名字:方便以后按名调用
    ❀函数的参数:参数的类型 参数的名字。以方便对调用函数传递数据
    ❀函数的功能:指定函数要完成什么操作
    ❀❀❀定义函数的方法
    ❀定义有参函数:函数类型 函数名称 (参数类型 参数名称)
    如int max(int x,int y) {函数体} //定义一个求两个数最大值的函数
    函数体包括声明部分和语句部分
    ❀定义无参函数:函数类型 函数名称 ()或者函数类型 函数名称 ( void)
    如int max() {函数体} 或者int max(void) {函数体}
    ❀定义空函数:void 函数名称 ()
    如void max() {函数体}
    在这里插入图片描述
  3. 对被调用函数的声明和函数原型
    ❀❀❀调用函数的条件
    ❀被调用函数已经定义或者为库函数
    ❀若调用库函数,需要在文件开头用#include<>指令调用有关库函数信息
    ❀若调用自定义函数,需要对主调用函数内 声明被调用函数
    ❀❀❀调用函数的声明
    ❀什么是声明
    声明的作用就是把函数名 参数类型 以及参数个数等信息通知编译系统,以便在遇到函数调用时,编译系统可以识别函数并检查是否合法。
    注意 :这里声明的作用未把函数类型添加进去
    ❀声明的形式
    1.有参函数:函数类型 函数名称 (参数类型 参数名称);
    2.无参函数:函数类型 函数名称 ();
    总之,声明形式:就是函数原型加分号
    ❀声明的注意事项
    1.声明有助于编译系统检查错误。
    当函数调用和函数声明不匹配时,就发出出错信息,属于语法错误。
    但是未声明发现错误时,较难发现并纠正错误
    2.函数声明参数名可以省略但是是形参的类型不可以省略
    即系统只关心和检查参数个数和参数类型,不必考虑参数名字
    3.如果在文件开头(即主调函数以及所有函数的外部),已经对调用函数声明,则在函数内部不必声明。

在这里插入图片描述
等一下~在休息之前,总结一些:
学了为什么使用函数 、 函数的定义 、函数的声明 。那么总结一下
函数的定义与声明的区别
函数的定义:指对函数功能的确立。包括函数类型、函数名称、函数参数(形参以及其类型)、函数体等。
函数的声明:是把函数的基本信息告诉编译器,以便在调用该函数时可以按此进行比照检查。包括函数类型、函数名称、函数参数(形参以及其类型)加上分号:,不包括函数体。
在这里插入图片描述
4. 函数的调用

- 调用函数

❀❀❀函数调用的形式
❀一般形式
调用函数名称 (实参列表) 如c=max(a,b);
注意:如果没有实参,则“实参列表”可以没有,但是不可以没有括号。
❀根据形式和位置,可分为三种函数调用方式
(1)函数调用语句
单独做一个语句
要求函数完成一定操作
如print_start();
(2)函数表达式
出现在另一个表达式中
要求函数带回一个确定的值以参加表达式的运算
如:sum=a+max(a,b);
(3)函数参数
出现在另一个函数调用时的参数
如:m=max(a,max(x,y))
注意:函数调用并非一定有分号,只有函数调用形式为函数调用语句时后需要加上分号。
❀❀❀函数调用过程中实参和形参的数据传递
❀注意事项
调用函数过程中发生的形参和实参的数据传递,称为“虚实结合”
实参可以是常量、变量或表达式
形参和实参的类型和个数必须相同 或赋值兼容(如 int - long int会进行不同类型的赋值规则转换)

❀❀❀函数调用的过程
❀步骤
1.定义函数:指定形参(这些形参在未出现函数调用时,不占内存中的存储单位)
2.主调函数:实参传递给形参(此时,形参有值)
3.定义函数:返回函数值(return();语句)
4.主调函数:调用结束(形参单元被释放,实参单元任然保留)
❀❀❀函数的返回值
❀定义
通过函数调用时函数得到一个确定的值,称为函数值(又称为函数的返回值)
❀函数返回值获得
return();语句或者return;语句
当有一个以上return语句,执行到哪个return语句,哪个return语句起作用。
❀函数值的类型
1、在定义函数时指定函数值类型,应该和return语句的表达式一致,若不一致则以函数类型为准。
2、通常情况下
int max(float x,float y) //函数值为整形
char max(float x,float y) //函数值为字符型
double max(float x,float y) //函数值为双精度型
3、不指定函数值类型
编译系统默认为int 型
❀对于不带回值得函数,应该定义函数为“void”类型(或称为空类型)

- 嵌套调用

  • ❀不可嵌套函数定义,但是可以嵌套函数调用
  • 如m=max(a,min(a,max(a,b)));
    

- 递归调用

 ❀在调用函数的过程中,直接或者间接的调用该函数本身
  • 如int f(int x)
        {
              int y,z;
              z=f(y);
              return (z);
        }
    

哈哈,关于C语言学完了,奖励我自己一下吧!
在这里插入图片描述上网查找一些事实例自检查吧在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值