目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
章节知识点小结


知识点

精讲文档

第八章

函数

8.1 函数定义的一般形式

函数分类

1.从用户使用的角度分类

1)标准函数(库函数):

2)用户自定义函数:

2 .从函数形式分类

1)无参函数

2)有参函数

函数定义

格式:

类型说明符 函数名(形参表列)

{

  函数内的局部变量类型声明部分;

  执行语句部分;

函数说明部分

函数说明部分包括:

函数类型

函数名

l   形式参数

函数体

函数体包括:

l   声明部分

l   语句部分

8.2 函数参数和函数的值

 

形式参数

形式参数:简称形参,是指定义函数时,函数名后面括弧中的变量,此部分参数在定义函数时没有实际数值,只是形式上的参数而已。

实际参数

实际参数:简称实参,在调用函数时,函数名后括弧中的参数已有确定的值,所以称为实参。

参数传递

函数调用时将实参值一一传送给形参。

注意:

l   在发生函数调用时,函数的形参被临时分配内存单元。

调用结束,形参单元被释放

如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值

函数返回值

返回函数值语句的一般形式:

        return (表达式)  

函数返回值类型

函数返回值类型说明:

1C语言规定,凡未加类型说明的函数,其值的类型一律以整型处理。

2return中表达式类型要求和函数值的类型一致,否则以函数类型为准

3)为了明确表示不带回值,可以使用“void”定义无类型空类型

8.3函数的调用

 

函数调用

函数调用的三种方式:

(1) 函数语句:将函数调用作为一条语句,函数不带返回值,只完成某项功能操作。如:print_star();

(2) 函数表达式:函数出现在一个表达式中,函数带回一个确定值以参加表达式的运算。如:c2*max (a,b);

(3) 函数参数:函数调用作为一个函数的实参。如:       m=max(a,max(b,c));

函数声明

如果被调用函数的位置出现在主调用函数的后面,应在主调用函数中对被调用函数作声明。

声明的作用:把函数名、函数参数的个数和参数类型这些信息通知编译系统,以便对被调用函数的编译检查。

函数的声明格式:

在函数定义的第一行后面加一个分号。

如: float add(float x, float y);

函数原型

函数原型:把函数定义的首行称为函数原型。

8.4 函数的嵌套调用

嵌套调用

一个函数在调用另一个函数的过程中,另一个函数又调用另外一个函数,这种现象称数的嵌套调用。

8.5局部变量和全局变量

变量作用域

变量作用域即变量的有效范围,可以分为局部变量和全局变量。

局部变量

局部变量:在函数体内说明的变量,其作用范围被限制在该函数之内,并且只从其说明处之后有效。

全局变量

全局变量:在函数定义之外说明的变量称为全局变量(外部)变量。全局变量作用范围比局部变量大,从说明该变量处起,之后所有的函数都可以使用它。即有效范围为从定义变量的位置开始到本源文件结束。

8.6 变量的存储类型

变量存储类型

从变量值存在的时间(即生存期)观察,可分为两种不同的存储变量:静态存储变量和动态存储变量。

自动变量

自动变量定义格式:

auto   类型名   变量名

说明:存储在动态存储区中,主要是指函数的动态局部变量和形式参数。auto可省略。

静态变量

定义格式:

       static  类型名变量名

说明:静态变量存储在静态数据区,在其所在的函数和程序中是永久变量。

寄存器变量

定义格式:

       register  类型名  变量名

外部变量

格式:

       extern  类型名变量名

8.7 函数的递归调用

递归调用

在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

递归函数

递归问题求解一般需要满足以下三个条件:

1)原问题能够向另一个相对更简单的问题转化。

2)转化后的问题和原来问题求解类似。

3)转化能够有一个终止的条件。

题目:采用递归法求n的阶层。

•      解题思路:

n = (n-1)!×n

(n-1)=(n-2)!×(n-1)

2!=1! ×1

1=1

递归函数如下:

long  fac(int n)

{  long f;

  if(n==1) f=1;

  else  f=fac(n-1)*n;           

   printf("\n return:n=%d f=%ld",n,f);

  return(f);

}