内容正文:
项目九 函数及结构体──简易通讯录
学习目标
了解函数的概念。
掌握函数定义与说明的方法。
掌握函数调用中参数的传递方法。
掌握函数的调用方法。
熟悉插入、查找、删除、排序算法及应用。
继续熟悉和掌握数组的概念。
初识结构体。
每一个C语言程序都能划分为若干个函数模块。通过函数可以将一个复杂的大程序划分成较小的功能模块,既可以方便程序设计,又可以实现功能模块的重复使用。
本项目将重点介绍C语言函数的概念,以及如何定义和调用函数。另外项目还将简单介绍结构体类型的定义和使用,并以一个简单通讯录程序的设计说明函数以及结构体类型的具体使用方法。
项目九
函数及结构体──简易通讯录
项目九
函数及结构体──简易通讯录
任务一 了解函数
任务二 设计开始界面
任务三 设计通讯录数据结构
任务四 输入通讯录联系人信息
任务五 显示通讯录
任务六 按姓名对通讯录排序
任务七 实现按姓名查找
任务八 在通讯录中插入新记录
任务九 删除指定记录
任务十 程序的完整代码
任务一 了解函数
函数的概念
C语言是一种典型的结构化程序设计语言,函数就是C语言程序的基本构成单位。通常将一个功能较复杂或者规模较大的C语言程序划分为若干个函数模块,然后逐个对每个函数模块进行设计。
函数的意义
使得较复杂的程序结构和功能也能一目了然,便于阅读。
便于程序员分工编写和调试,可以将函数作为基本的开发和调试单位。
实现代码的可重用。
函数是一段完成特定功能的代码段,它可以包含变量定义语句和执行语句,能够按照给定的参数进行处理,并将处理结果返回。C语言程序中可以包含任意多个函数,它们的次序任意。但是“main()”函数是一个特殊的函数,所有的C语言程序都必须有且只有一个“main()”函数。并且程序一定是从“main()”函数开始执行,和“main()”函数的位置没有关系。
函数的定义和声明
类型标识符 函数名(形式参数列表)
{
声明语句
函数体
执行语句
}
例如:int max(int x,int y)
{
if(x>y) return x;
else return y;
}
① 类型标识符
一般称为函数的返回类型或者返回值类型。它可以是C语言内建类型或者自定义的数据类型,例如char,int…以及后面将会提到的结构体类型。如果没有数据需要返回,则将类型标识符作为“void”,例如“void print()”。这里“void”是关键字,表示不返回数据。
② 函数名
用来唯一标识一个函数的标识符,所以必须是合法标识符,并且在程序中不能有同名标识符与之冲突。上例中函数名为“max”。
③ 形式参数列表
传递给函数的参数的类型说明,位于函数名后面的括号中。多个参数用逗号间隔。例如max定义中的“int x”,“int y”。
④ 函数体
函数的主体部分。和main()函数类似,包括声明语句部分和执行语句部分。函数体用一对大括号括起来。
函数的主要功能是按照调用者要求完成特定的处理工作。如果将函数比作一个工厂,那么形式参数就是客户交给工厂的图纸、数据或者原材料,函数体就是工程车间和工序,而返回值就是工厂加工后返回给产品。这种类比关系可以用下图进行描述。
无参函数的一般形式为:
类型标识符 函数名()
{
声明语句
函数体
执行语句
}
如果函数定义在函数调用之前,那么程序不会出现编译错误。但是如果函数调用在前,而函数定义在后,那么应该在调用之间需要进行函数声明,否则会出错。函数声明的作用是说明函数的返回类型和参数列表。
函数声明的形式为:
类型标识符 函数名(形式参数列表);
关于函数声明的说明
函数声明中的形式参数列表可以省略形式参数名,而只声明形式参数类型。例如“max()”函数的声明也可以写成:
int max(int,int);
函数声明中的形式参数名可以与函数定义中的形式参数名不同。
使用库函数时,只要在文件头部包含了对应的头文件,就可以在程序调用该库函数,不需要自己编写函数定义。
对于普通函数,只声明不定义会造成链接错误。
函数的参数
参数有形式参数和实际参数两种形式。
函数定义中函数名后面括号中的变量就是形式参数(简称形参),如上例函数定义“int max(int x,int y);”中的“x”和“y”。
函数调用语句中函数名后面括号中的变量称为实际参数(简称实参),如上例函数调用语句“c=max(a,b);”中的“a”和“b”。
形参名是被调函数给传递数据命名的代号,当函数没有执行时,这些代号不对应存储单元,当然也就没有值。而实参才是要处理的数据本身。
函数的返回值
函数执行后,将计算或处理的结果通过r