目录

  • 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 章节知识点小结
函数定义

当程序实现的功能较为复杂时,可提取程序中的某些功能,模块化为一个函数,通过函数的调用执行某个功能,如此将一个冗杂的程序分化开来,可使程序的结构更为清晰……………

  从本质意义上来说,函数就是用来完成一定的功能的。所谓函数名就是给该功能起一个名字,如果该功能是用来实现数学运算的,就是数学函数。

2       例如:想输出以下的结果,用函数调用实现

      ******************

        How do you do!

      ******************

        How do you do!

      ******************

解题思路:题中“*”号输出3行,文字输出两行,显然不必重复写这段代码,用一个函数print_star来实现输出一行“*”号的功能。再写一个print_message函数来输出中间一行文字信息,用主函数分别调用这两个函数即可。

编写程序:

#include< stdio.h>

 

int main()

{

     void print_star();         //声明print_star函数

     void print_message();      //声明print_ message函数

     print_star();              //调用print_star函数

     print_message();           //print_message函数

     print_star();              //调用print_star函数

     print_message();           //print_message函数

     print_star();              //调用print_star函数

     return 0;

}

 

void print_star()               //定义print_star函数

{

     printf(“******************\n”);    //输出一行*号

}

 

void print_message()           //定义print_message函数

{

     printf(“How do you do!\n”);   //输出一行文字信息

}

 

运行结果:

    ******************

        How do you do!

        ******************

1 函数的分类

C语言中,函数可以按如下方法进行分类:

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

⑴标准函数(库函数):它是系统提供的,用户不必自己定义,可直接使用它们。如sin()、fabs()、sqrt() 函数等,但必须在本文件模块的开头写上:

           #include <math.h>

⑵用户自定义函数:是用户为了特定的目的需要自己专门去写的函数。

2)  从函数形式分类

⑴无参函数:函数名后面的括号中无没有另何参数(相当是自变量),如上述的printstar(),调用该函数时也就不必给具体的实际参数.

⑵有参函数:函数名后面的括号中有参数(可以一个或多个),如上述的max(intx,int y),调用该函数就要相应地给出具体的实际参数,如求max(3,5)。

2 函数的定义形式

任何函数都是由函数说明部分和函数体组成的,函数的说明部分通常由函数类型(即函数结果值的类型)、函数名、形式参数(包括名字和类型)等三部分组成;而函数体则是函数的主体,主要是由该函数内的局部变量的类型声明和执行语句组成,用来完成具体的功能操作。

1)  无参函数的定义

格式:

类型名 函数名()

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

 执行语句部分;

}

如:

void printstar(  )

{

printf (" * * * * * ");

}

此类函数主要是为了完成某项功能而设,不需要带回返回值,所以也不需要函数的具体类型说明符。

2) 有参函数

格式:

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

   {

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

 执行语句部分;

    }

【例1】定义一个求两个数最大值的函数。

 int  max (int x, int y )

 {

   int  z;

   if(x>y) z=x;

   else z=y;

   return(z);

 }

本函数的值由变量z返回给函数调用处。

 

3) 空函数

格式:

类型说明符 函数名()

   {

 …

空函数什么也不做,也没任何实际作用。其主要作用表现在进行大的软件开发时,用空函数表示此处还有功能没有写完,等以后扩充函数功能时再作补充,这样人们可以集中精力,先解决主要问题,等有时间再陆续补充,且程序的可读性强、易于扩充。

说明:

(1) 函数的类型可以是任何合法的数据类型说明符,用于确定函数值的类型。

(2) 函数名可以是任何合法的标识符(字母、下划线和数字)。

(3) C程序是由一个或多个函数组成的,但仅能有一个主函数。

(4) C程序是main ( )开始,调用其他函数后该程序返回 main ( )。

(5) 所有函数地位平等,可相互调用,但不可调用 main ( )。