谭浩强《C++程序设计》课件_第4章

发布时间:2024-09-25

第4章 函数与预处理

4.1 概述一个较大的程序开发过程:为了便于规划、组织、 编程和调试,一般的做法是把一个大的程序划分为 若干个程序模块(即程序文件),每一个模块实现一 部分功能。不同的程序模块可以由不同的人来完成。 在程序进行编译时,以程序模块为编译单位,即分 别对每一个编译单位进行编译。如果发现错误,可 以在本程序模块范围内查错并改正。在分别通过编 译后,才进行连接,把各模块的目标文件以及系统 文件连接在一起形成可执行文件。

(1)无论把一个程序划分为多少个程序模块,只 能有一个main函数。程序总是从main函数开始执 行的。 (2)在程序运行过程中,由主函数调用其他函数, 其他函数也可以互相调用。 (3)一个C程序是由若干个函数组成的,C语言被 认为是面向函数的语言。 (4)C++面向过程的程序设计沿用了C语言使用函 数的方法。在C++面向对象的程序设计中,主函数 以外的函数大多是被封装在类中的。主函数或其他 函数可以通过类对象调用类中的函数。因此,读者 必须掌握函数的概念以及学会设计和使用函数。

程序的组织形式: 在实际应用的程序中,主函数写得很简单,它的作 用就是调用各个函数,程序各部分的功能全部都是 由各函数实现的。主函数相当于总调度,调动各函 数依次实现各项功能。 开发商和软件开发人员将一些常用的功能模块编写 成函数,放在函数库中供公共选用。程序开发人员 要善于利用库函数,以减少重复编写程序段的工作 量。

从用户使用的角度看,函数有两种: (1) 系统函数,即库函数。这是由编译系统提供的, 用户不必自己定义这些函数,可以直接使用它们。 (2) 用户自己定义的函数。用以解决用户的专门需 要。 从函数的形式看,函数分两类: (1) 无参函数。调用函数时不必给出参数。 (2) 有参函数。在调用函数时,要给出参数。在主 调函数和被调用函数之间有数据传递。

4.2函数定义的一般形式 一、无参函数 主调函数并不将数据传给被调函数。 无参函数主要用于完成某一操作。参数(多个) 函数值(唯一)

函数体 类型说明 函数名(void)不传递参数

{ 函数体 }

int main(void ) 两个被调函数 调用函数 { printstar ( ); 主要用于完成 print_message ( ); 调用函数 打印操作。 printstar( ); 调用函数 } 函数类型 函数名 函数体 void printstar (void ) { cout<<“* * * * * * * * * * *\n”; } void print_message (void) { cout<<“ How do you do! \n”; }

输出: * * * * * * * * * * * How do you do! ***********

二、有参函数

主调函数和被调函数之间有数据传递。主调函数可以将参数传递给被调函数

,被调函数

中的结果也可以带回主调函数。类型说明 函数名(形式参数列表说明 )

{ 函数体 }

函数类型

int max (int x,int y) { int z; 函数名 z=(x>y)? x : y ; 函数体 return z; 函数值 } 主调函数 int main (void ) 将实际值a,b传给 { int a,b,c; 被调函数的参数 x,y,计算后得到 cin>>a>>b; 调用函数 函数值z返回 c=max (a , b) ;实际参数

形参列表说明

cout<<“The max is”<< c<<endl;}

int max (int x,int y) { int z; z=(x>y)? x : y ; return z; } int main (void ) { int a,b,c;

x2

y3

z3

cin>>a>>b;c=max (a , b) ; }

2 a

3 b

3 c

cout<<“The max is”<< c<<endl;

4.3 函数参数和函数的值4.3.1 形式参数和实际参数在调用函数时,大多数情况下,函数是带参数的。 主调函数和被调用函数之间有数据传递关系。前面 已提到:在定义函数时函数名后面括号中的变量名 称为形式参数(formal parameter,简称形参), 在主调函数中调用一个函数时,函数名后面括号中 的参数(可以是一个表达式)称为实际参数(actual parameter,简称实参)。

例4.2 调用函数时的数据传递。#include <iostream> using namespace std; int max(int x,int y) {int z; z=x>y?x:y; return(z); } //定义有参函数max

int main( ) {int a,b,c; cout<<″please enter two integer numbers:″; cin>>a>>b; c=max(a,b); //调用max函数,给定实参为a,b。函数值赋给c cout<<″max=″<<c<<endl; return 0; }

运行情况如下: please enter two integer numbers:2 3↙ max=3

图4.2

有关形参与实参的说明: (1) 在定义函数时指定的形参,在未出现函数调用 时,它们并不占内存中的存储单元,因此称它们是 形式参数或虚拟参数,表示它们并不是实际存在的 数据,只有在发生函数调用时,函数max中的形参 才被分配内存单元,以便接收从实参传来的数据。 在调用结束后,形参所占的内存单元也被释放。 (2) 实参可以是常量、变量或表达式,如max(3, a+b);但要求a和b有确定的值。以便在调用函数时 将实参的值赋给形参。 (3) 在定义函数时,必须在函数首部指定形参的类 型(见例4.2程序第3行)。

(4) 实参与形参的类型应相同或赋值兼容。 (5) 实参变量对形参变量的数据传递是“值传递”, 即单向传递,只由实参传给形参,而不能由形参传 回来给实参。在调用函数时,编译系统临时给形参 分配存储单元。请注意: 实参单元与形参单元是 不同的单元。图4.3表示将实参a和b的值2和3传 递给对应的形参x和y。

图4.3

图4.4

调用结束后,形参单元被释放,实参单元仍保留并 维持原值。

谭浩强《C++程序设计》课件_第4章.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219