目录

  • 1 计算机概述
    • 1.1 计算机简介
    • 1.2 计算机系统
    • 1.3 数值在计算机中的表示
  • 2 C语言概述
    • 2.1 C语言发展及特点
    • 2.2 C语言程序的运行步骤和开发环境
    • 2.3 简单的C语言程序
  • 3 C语言基础
    • 3.1 变量、常量及数据类型
    • 3.2 运算符和表达式
    • 3.3 输入、输出
  • 4 选择结构
    • 4.1 计算机编程和算法
    • 4.2 if语句
    • 4.3 if嵌套和if多分支
    • 4.4 switch语句
  • 5 循环结构
    • 5.1 while语句和do...while语句
    • 5.2 for语句
    • 5.3 break语句和continue语句
    • 5.4 goto语句构成的循环
    • 5.5 嵌套循环结构
    • 5.6 程序设计举例
  • 6 函数
    • 6.1 函数的定义与调用
    • 6.2 函数的嵌套调用和递归调用
    • 6.3 作用域和生命周期
    • 6.4 章节小结与测试
  • 7 数组
    • 7.1 一维数组及应用
    • 7.2 二维数组及应用
    • 7.3 字符数组
    • 7.4 数组作为函数参数
    • 7.5 章节小结与测试
  • 8 指针
    • 8.1 指针变量
    • 8.2 指针与数组
    • 8.3 指针的多种形态
  • 9 字符串
    • 9.1 字符串概念及输入输出
    • 9.2 字符串函数
    • 9.3 指针与字符串
    • 9.4 章节小结与测试
  • 10 编译预处理
    • 10.1 宏定义
    • 10.2 文件包含
    • 10.3 条件编译
  • 11 结构体、共用体和用户定义类型
    • 11.1 结构体类型变量
    • 11.2 结构体类型数组与指针
    • 11.3 结构体与函数
    • 11.4 用指针处理链表
    • 11.5 共用体
  • 12 位运算
    • 12.1 位运算的概念和运算规则
  • 13 文件
    • 13.1 C文件概述
    • 13.2 文件的打开与关闭
    • 13.3 文件读写
    • 13.4 位置指针的定位
函数的定义与调用

学习目标:

  了解模块化程序设计的思想

  掌握函数的定义、调用及原型说明的基本方法

重点:

  函数的定义方法

  函数的调用方法

难点:

函数参数传递与返回值

形参、实参的使用


引言:

一个较大的程序:可由若干程序模块组成,每一模块用来实现一个特定的功能。

               ——用子程序可实现该模块功能。

               ——在C语言中:子程序称为:子函数

C程序中:可由一个主函数和若干个函数构成。

             分为标准库函数用户自定义函数

函数的作用:减少重复编写程序段的工作量。

标准库函数       C语言预先编写的一系列常用函数(系统提供)

                  Turbo C 的标准库——包含400多个常用函数

用户自定义函数:

                  一般自定义函数和自定义函数库(用户先已编好的)


一、函数的定义

1.函数定义的语法格式

格式: 类型定义符  函数名(形式参数表列)

            {  函数体  }

说明:1)类型定义符:函数返回值的数据类型

                 a) int , char , float , double 默认int

                 b) 函数无数据返回,使用 void 作类型定义符

         2)函数名:函数的名称(用户取的:合法的标识符)

         3)形式参数表列:函数调用时传递信息的通道

            有两种表示方法 a)(参数说明 形式参数)

                                             b) (形式参数)             

                                                   参数说明


例:  float  add( float x , float y )        float add( x , y )

         {  x=x+y;                                   {  float x , y ;

            return (x) ;                                  x=x+y ; 

         }                                                    return (x);

                                                             }     

              a)                                                   b)


2.函数的返回值

l   一般通过函数中的return语句获得。

l   如果不需要返回值,可以不要return语句。

为了明确表示“不带回值”,应该使用“void”定义“无类型” 

例:     main ( )      /*(打印平方表)*/

        { void  prin ( int x ) ;

         int  i ;

          for ( i=1 ; i<=10 ; i++) prin ( i ) ;

        }

         void prin ( x )

        { int  x ;

         printf(“%d\t%d\n”,x,x*x);

        }


二、函数的调用

在一个主调函数调用一个子函数时,须把主调函数的参数传递给子函数,称该参数为“实际参数”。

实参可以是常量、变量、表达式 ,形参只能是变量   

实参应和形参类型相同或相容 

1.函数调用的语法格式

格式: 函数名(实参表列)

调用的过程:

        1)通过函数名,找到定义的函数

        2)将实际参数传递给被调函数的形式参数

           实际参数与形式参数一一对应,既一一传递数据

例: main ( )

         {  int  i=2, p;

            p=f(i, ++i) ;   // ff(3, 3) 许多C版本是按自右而左的顺序求值

            printf ( “%d” , p );

          }

            int  f(int a , b)

            {  int  c;

               if (a>b) c=1;

               else if (a= =b)  c=0;

               else c= -1;

               return( c );

            }        运行结果:0

 注意:(1)应避免这种情况的产生,可写为:

          自左而右顺序                 自右而左顺序

           j=i;                                        j=++i;

           k=++i;                                  p=f(j, j);

           p=f(j, k);

            (2)printf(“ %d, %d ”,i, i++); 中同样存在

            当:i=3 结果为:   43   


2.函数调用的几种方式

函数语句        把函数调用作为一个语句,即单独一个语句行。

           不要求函数带回值,只要求函数完成一定操作。

        即:printstar( );

函数表达式    函数出现在一个表达式中,要求函数带回一个确定的值以参加表达式的运算。

        即:c=2*max( a, b );

函数参数        函数调用作为一个函数的实参;

                        即:m=max( a, max( b, c) )


三、函数的原型说明


作用:在函数使用前对函数的特征进行说明的语句。(用户自定义函数)


l  对已定义的函数的返回值进行类型说明。


l  告诉系统在本函数中将要用到的函数是什么类型。


l  C语言规定以下几种情况可以不使用函数说明


a)函数的值(函数的返回值)是整型或字符型(系统自动按整说明)


                  b)如果函数定义在调用函数之前,可以不必加以说明


在函数说明和函数定义中,要注意:


            a)类型定义、函数名要相同


            b)形式参数标识符可以不相同,在函数说明中还可以省略


例:main ( )


    {


       double abc ( int x , float y ) ;        /*函数说明*/


       /*double  abc ( int , float ) ; */         /*也正确*/


/*double  abc ( int a , float b) ; */    /*正确*/


       ---


    }


    double abc ( int a , float b )   /*函数定义  a,bx,y不同*/


{


       函数体


    }