《高级语言程序设计(Ⅱ)》课程实验教学大纲
课程编号:19031003
课程总学时:64 实验学时:24
课程总学分:3.5
适用专业:网络工程、软件工程、物联网工程、数据科学与大数据技术
一、本课程实验的主要目的与任务
实验目的:通过C程序设计实验培养学生对学习程序设计的兴趣,加深对讲授内容的理解,使学生全面了解 C 语言的特点,熟练掌握C 语言程序设计的基本方法和编程技巧。
实验任务:学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。
二、本课程实验项目
序号 |
实验项目名称 |
学时 |
类型 |
必做/选做 |
所需主要设备 |
1 |
函数 |
6 |
设计性 |
必做 |
PC机及C实验环境 |
2 |
指针 |
6 |
设计性 |
必做 |
PC机及C实验环境 |
3 |
结构体与其他构造类型 |
6 |
设计性 |
必做 |
PC机及C实验环境 |
4 |
文件 |
4 |
设计性 |
必做 |
PC机及C实验环境 |
5 |
综合实例 |
2 |
设计性 |
必做 |
PC机及C实验环境 |
三、各实验项目主要实验内容和基本要求
各实验项目的主要内容和基本要求见附录。
四、实验成绩考核与评定办法
学生应做好实验准备,认真完成每个实验,按时完成实验报告。任课教师应认真批改实验报告并给出实验报告成绩。
五、主要参考书目
1、《C程序设计案例教程》,钟家民;清华大学出版社,2018年6月
2、《C程序设计(第四版)学习辅导》,谭浩强;清华大学出版社,2010年6月
3、《C程序设计(第四版)》,谭浩强;清华大学出版社,2010年6月
4、《C语言程序设计》,姬秀荔;清华大学出版社,2012年2月
5、《深入体验C语言项目开发)》,薛小龙;清华大学出版社,2011年7月
6、 http://acm.nyist.net/,南阳理工学院ACM在线评测系统
7、《机试考点 百签题解)》,郎六琪;吉林大学出版社,2012年4月
六、本大纲说明
本课程大纲是动态的,在实验过程中,可根据学生的程度适当调整实验的内容和时间。
撰写人: 审定人:钟家民
批准人: 执行时间:
实验1 函数
1.实验目的
(1)掌握自定义函数的一般结构及定义函数的方法。
(2)掌握形参、实参、函数原型等重要概念。
(3)掌握函数声明、函数调用的一般方法。
2.实验内容
(1)求三角形面积函数。编写一个求任意三角形面积的函数,并在主函数中调用它,计算任意三角形的面积。
编程提示:
设三角形边长为a、b、c,面积area的算法是

显然,要计算三角形面积,需要用到3个参数,面积函数的返回值的数据类型应为实型。
尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。
#include<math.h>
#include<stdio.h>
float area(float,float,float); /*计算三角形面积的函数原型声明*/
void main()
{
float a,b,c;
printf("请输入三角形的3个边长值:\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0)
printf("Area=%-7.2f\n",area(a,b,c));
else
printf("输入的三边不能构成三角形");
}
/*计算任意三角形面积的函数*/
float area(float a,float b,float c)
{
float s,area_s;
s=(a+b+c)/2.0;
area_s=sqrt(s*(s-a)*(s-b)*(s-c));
return(area_s);
}
(2)把猴子吃桃问题写成一个函数,使它能够求得指定一天开始时的桃子数。
编程提示:猴子吃桃问题的函数只需一个int型形参,用指定的那一个天数作实参进行调用,函数的返回值为所求的桃子数。
#include<stdio.h>
int monkey(int); /*函数原型声明*/
void main()
{
int day;
printf("求第几天开始时的桃子数?\n");
do
{
scanf("%d",&day);
if(day<1 || day>10)
continue;
else
break;
}while(1);
printf("total:%d\n",monkey(day));
}
/*以下是求桃子数的函数*/
int monkey(int k)
{
int i,m,n;
for(n=1,i=1;i<=10-k;i++)
{
m=2*n+2;
n=m;
}
return(n);
}
(3)用递归函数求解Fibonacci数列问题。在主函数中调用求Fibonacci数的函数,输出Fibonacci 数列中任意项的数值。
Fibonacci数列第n(n≥1)个数的递归表示如下:

由此可得到求Fibonacci数列第n个数的递归函数。
(4)编写一个用选择法对一维数组升序排序的函数,并在主函数中调用该排序函数,实现对任意20个整数的排序。
编程提示:这是一维数组作函数参数的问题。
① 设计一个对一维数组的前n个数用选择法进行排序的函数select( )。select( )函数有两个形参,一个是一维数组形参,一是排序元素数形参。select( )函数不需要返回值,函数类型说明为void型。
② 在进行函数调用时。实参和形参要按照参数的意义在位置上对应一致。
3.实验要求
(1)掌握定义函数的方法。
(2)掌握实参和形参的对应关系。
(3)掌握函数的嵌套调用和递归调用的方法。
(4)掌握全局变量和局部变量的概念和用法。
4.实验器材
(1)PC机
(2)C实验环境
实验2 指针
1.实验目的
(1)掌握指针的概念,会定义并使用指针变量。
(2)学会使用数组的指针和指向数组的指针变量。
(3)学会使用字符串的指针和指向字符串的指针变量。
(4)学会使用指向函数的指针变量。
2.实验内容
(1)求三个整数中较大者。
编程提示:本质上是两个数的比较。三个数比较时,a和b比较,a和c比较,b和c比较。
#include <stdio.h>
void swap(int *pt1, int *pt2)
{
int temp;
temp=*pt1; /* 换*pt1和*pt2变量的值 */
*pt1=*pt2;
*pt2=temp;
}
void exchange(int *q1, int *q2, int *q3) /* 定义将3个变量的值交换的函数 */
{
if(*q1<*q2) swap(q1,q2); /* 如果a<b,交换a和b的值 */
if(*q1<*q3) swap(q1,q3); /* 如果a<c,交换a和c的值 */
if(*q2<*q3) swap(q2,q3); /* 如果b<c,交换b和c的值 */
}
int main()
{
int a,b,c,*p1,*p2,*p3;
printf("please enter three numbers:");
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("The order is:%d,%d,%d\n",a,b,c);
return 0;
}
(2)将10个整数按由大到小排序输出。
编程提示:利用冒泡法排序。
#include <stdio.h>
void sort(int *x,int n) /* 定义sort函数,x是指针变量 */
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
if(x[j]>x[j+1])
{
t=*(x+j);
*(x+j)=*(x+j+1);
*(x+j+1)=t;
}
}
}
int main()
{
int i,*p,a[10];
p=a; /* 指针变量p指向a[0] */
printf("输入10整数:");
for(i=0;i<10;i++)
scanf("%d",p++); /* 输入10个整数,p++指针下移 */
p=a; /* 指针变量p重新指向a[0] */
sort(p,10); /* 调用sort函数 */
printf("按由小到大的排序:");
for(p=a,i=0;i<10;i++)
printf("%d ",*p++); /* 输出排序后的10个数组元素,先执行*p,再执行p++ */
printf("\n");
return 0;
}
(3)输入一行字符,编写函数,分别统计其中的大写字母、小写字母、空格、数字和其它字符的个数。
编程提示:利用if的第三种形式,判断各字符并进行计数。
(4)编写函数,将一个5×5矩阵的最大值放在中心,四角按从左到右,从上到下的顺序存放最小值。
编程提示:利用打擂台法求最大值和最小值。
(5)编写函数,求字符串的长度。
编程提示:在遍历字符串时,进行计数,直到遇到’\0’结束。
(6)输入10个整数进行排序并输出,其中用函数指针编写一个通用的排序函数,如果输入1,程序实现数据按升序排序;如果输入2,程序实现数据按降序。
编程提示:定义ascend函数,按升序排序;定义descend函数,按降序排序;定义sort函数,实现排序的算法,根据实参,确定指向函数的指针变量调用ascend函数还是descend函数。
3.实验要求
(1)掌握指针的概念,会定义和使用指针变量。
(2)学会使用数组的指针和指向数组的指针变量。
(3)学会使用字符串的指针和指向字符串的指针变量。
4.实验器材
(1)PC机
(2)C实验环境
实验3 结构体与其他构造类型
1.实验目的
(1)掌握结构体变量的定义和引用。
(2)掌握结构体数组和结构体指针的使用。
(3)培养使用结构体解决实际问题的能力。
2.实验内容
(1)编写程序,在主函数中输入年月日,利用days函数计算该天是本年中的第几天。定义一个结构体变量(包括年、月、日)。
编程提示:声明结构体类型struct y_m_d,成员为year、month、day。根据题目,需要考虑闰年的情况,判断闰年的条件为year%4==0 && year%100!=0 || year%4==0。
#include <stdio.h>
struct y_m_d
{
int year;
int month;
int day;
} date;
int days(int year,int month,int day)
{
int day_sum,i;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
day_sum=0;
for (i=1;i<month;i++)
day_sum+=day_tab[i];
day_sum+=day;
if ((year%4==0 && year%100!=0 || year%4==0) && month>=3)
day_sum+=1;
return(day_sum);
}
int main()
{
int day_sum;
printf("input year,month,day: ");
scanf("%d,%d,%d",&date. year,&date.month,&date.day);
day_sum=days(date.year,date.month,date.day);
printf("%d月%d日是这一年的第%d天!\n",date.month,date.day,day_sum);
return 0;
}
(2)有5名学生的信息(包括学号、姓名和成绩),编写函数实现按成绩由高到低的顺序输出学生的信息。
编程提示:定义结构体数组并初始化,利用选择法对各元素中的成绩进行排序,同类的结构体变量允许整体赋值,因此借助中间变量temp,实现结构体数组中各元素之间的交换。也可以编写程序通过键盘输入学生的信息。
#include <stdio.h>
#define N 5
struct Student /* 声明结构体类型struct Student */
{
int num;
char name[20];
float score;
};
void sort(struct Student stud[],int n)
{
struct Student temp;
int i,j,k;
for(i=0;i<n-1;i++) /* 选择法 */
{
k=i;
for(j=i+1;j<N;j++)
if(stud[j].score>stud[k].score)
k=j;
if(k!=i)
{
temp=stud[k];
stud[k]=stud[i];
stud[i]=temp;
}
}
}
int main()
{
struct Student stud[N]={{10001,"zhang",91},{10002,"wang",92},
{10003,"sun",85}, {10004,"zhao",90.5},
{10005,"kong",90}};
/* 定义结构体变量temp,用作交换时的临时变量 */
int i;
printf("成绩由高到低:\n");
sort(stud,N);
for(i=0;i<N;i++)
printf("%5d %-10s%6.1f\n",stud[i].num,stud[i].name,stud[i].score);
return 0;
}
(3)编写一个程序,输入若干人员的姓名及电话号码(11位),以字符’#’表示结束输入。然后输入姓名,查找该人的电话号码。
编程提示:
声明结构体类型
struct Telephone
{
char name[10];
char telno[12];
};
然后定义结构体数组,输入姓名和电话。查找电话号码时,需要用字符串函数strcmp()进行字符串的比较。
(4) 13 个人围成一个圈,从第一个人开始顺序报数1,2,3,4……,凡是报到n者退出圈子。找出最后留在圈子中的人是原来的几号。要求用链表实现。
编程提示:
声明结构体类型并定义结构体数组。
struct Person
{
int num;
int nextp;
} link[N+1];
3.实验要求
(1)掌握结构体类型变量定义方法。
(2)掌握结构体类型数组的定义和使用。
4.实验器材
(1)PC机
(2)C实验环境
实验4 文件
1.实验目的
(1)掌握文件以及缓冲文件系统、文件指针的概念。
(2)学会使用文件打开、关闭、读、写等文件操作函数。
(3)掌握对文件进行字符/写、块读/写的方法。
(4)巩固“文件”教学单元的知识。
2.实验内容
(1)显示文本文件的内容。打开记事本,输入123456789,然后保存在C盘的根目录,文件名为string.txt,编写程序将该文件的内容显示出来。
编程提示:
① 只显示文件内容,即为读文件,应以“r”方式将string.txt文件打开。
② 用feof()函数判断文件结束状态。
#include<stdio.h>
#include <stdlib.h>
void main()
{
FILE * fp;
char ch;
if((fp=fopen("c:\\string.txt","r"))==NULL)
{
printf("cannot open source file.\n");
exit(1);
}
while(! feof(fp))
{
ch =fgetc(fp);
putchar(ch);
}
fclose(fp);
}
程序调试
① 建立string.txt文本文件。
② 运行程序,察看并分析程序的运行结果。
③ 删除string.txt文本文件后,运行程序,察看并分析程序的运行结果。
(2)文件复制。编写一个文本文件复制函数,并在主函数main()中调用它,将实验内容1中建立的文本文件string.txt复制到文件backup.txt中。
编程提示:
① 文件复制需要对两个文件进行操作,源文件用“r”方式打开,目标文件用“w”方式打开。
② 文件复制函数copy()使用两个字符型指针参数,调用时实参使用文件名字符串,或者是存储文件名的字符串变量。
③ 文件复制的方法:从源文件中逐个读出字符,并立刻把读出的一个字符写入到目标文件中。
#include<stdio.h>
#include <stdlib.h>
void copy(char * ,char *);
void main()
{
char * source="c:\\tring.txt";
char * target="c:\\backup.txt";
copy(source ,target);
}
void copy(char * source,char * target)
{
FILE * fp_s, *fp_t;
if((fp_s=fopen(source, "r"))==NULL) /*以读方式打开源文件*/
{
printf("不能打开源文件.\n");
exit(1);
}
if((fp_t=fopen(target, "w"))==NULL) /*以写方式打开目标文件*/
{
printf("不能打开目标文件.\n");
exit(1);
}
while(! feof(fp_s))
fputc(fgetc(fp_s),fp_t);
printf("文件复制完成.\n");
fclose(fp_s);
fclose(fp_t);
}
程序调试
运行程序后,用文本编辑软件打开backup.txt文件察看结果。也可以使用文本文件显示程序察看结果。
(3)用文件储存学生数据。有5个学生,每个学生有3门课的成绩,从键盘输入数据(包括学号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。(习题15.7)
设5名学生的学号、姓名和3门课成绩如下:
99101 Wang 89 98 67
99103 Li 60 80 90
99106 Fun 75 91 99
99110 Ling 80 50 62
99113 Yuan 58 68 71
编程提示:
该问题有两个主要步骤:
① 定义结构体数组,将输入数据首先存储到结构体数组中。
② 将结构体数组中的数据读出来,以块写入的方式写到指定的文件中。
#include <stdio.h>
#define N 5
struct student /*定义学生结构体数据类型*/
{
char num[10];
char name[8];
int score[3];
float ave;
};
void main()
{
struct student stu[5];
int i,j;
FILE * fp;
float sum;
for(i=0;i<N;i++)
{
printf("Enter num: ");
scanf("%s",stu[i].num); /*输入学生的学号*/
printf("Enter name: ");
scanf("%s",stu[i].name); /*输入学生的姓名*/
sum=0;
for(j=0;j<3;j++) /*输入学生的3门课的成绩*/
{
printf("Enter score%d: ",j+1);
scanf("%d",&stu[i].score[j]); /*计算总成绩*/
sum=sum+stu[i].score[j];
getchar();
}
stu[i].ave=sum/3.0; /*计算平均成绩*/
}
printf("\n");
if((fp=fopen("stud","w"))==NULL)
{
printf("Can not open this file.\n");
exit(1);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(struct student),1,fp); /*向文件写数据*/
fclose(fp);
if ((fp=fopen("stud","r"))==NULL)
{
printf("Can not open this file.\n");
exit(0);
}
for(i=0;i<N;i++) /*将文件中的数据读出并显示出来*/
{
fread(&stu[i],sizeof(struct student),1,fp);
printf("%s %s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%d",stu[i].score[j]);
printf("%f\n",stu[i].ave);
}
fclose(fp);
}
程序调试
① 为了观察文件的存储操作是否正确,在调试程序时应增加显示存储文件的程序代码。也可以单独编写程序,显示存储文件。
② 在参考程序中,在写文件时使用的是“w”操作方式,显示文件时重新用“r”方式打开。请修改程序,使用一种文件操作方式,写完之后,再从头显示文件内容。
3.实验要求
(1)掌握文件和文件指针的概念。
(2)学会打开文件、关闭文件的操作。
(3)学会对数据文件进行顺序读写和随机读写。
4.实验器材
(1)PC机
(2)C实验环境
实验5 综合实例
下面我们以《通讯录管理程序》为例,按照上述的6个步骤讲解较大程序设计的基本过程。
一、题目的内容要求
通讯录管理程序课程设计的内容要求如下:
综合运用C语言程序设计课程的主要知识,设计一个用于通讯录管理的程序,设计指标由程序的功能要求和技术要求具体说明。
1.功能要求
通讯录管理程序至少应具有如下功能:
(1)能通过键盘向通讯录输入数据。要求随时都能使用该项功能实现记录输人,一次可以输入一条记录,也可以输入多条记录。所谓一条记录,是指通讯录中一个人员的完整信息。
(2)能显示通讯录存储的记录信息,在显示时能提供下列显示方式:
按自然顺序显示。即按照向通讯录输入数据时各条记录的先后顺序,显示通讯录中已有的记录信息。
按照一定的排序顺序显示通讯录信息。排序顺序有多种,如按姓名排序、按年龄排序、按所在城市排序、按所在单位排序等,具体使用的排序顺序由设计者确定,但至少要包括上述两种排序方式。
(3)能查询通讯录信息。要求至少提供两种查询方式,如按姓名查询、按所在城市查询等,任何一种查询都要有明确的查询结果。
(4)能对通讯录存储的信息进行修改。要求至少提供两种修改方式,如按照姓名修改、按照通讯录记录序号修改。记录序号是通讯录记录的自然顺序编号。
(5)能对通讯录的信息进行删除。要求删除时以记录为单位,既能一次删除一条记录,也能一次删除多条记录。
(6)通讯录管理结束后,能够正常退出通讯录管理程序。
2.技术要求
(1)每个通讯录记录至少包括如下信息:姓名、电话、所在城市、所在单位、年龄、备注等。
(2)通讯录信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。
(3)对于通讯录功能中的数据输入、显示、查询、修改、删除等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。
(4)以菜单方式实现功能选择控制。
(5)本通讯录管理程序能够实现100条记录的管理。
二、 程序的功能设计
根据题目的功能要求,设计通讯录管理程序的功能如图10-1所示。
各功能的具体说明如下:
1.通讯录信息录入
(1)通过显示信息项目,逐项输入通讯录的记录信息。
(2)每次输入记录后,通过询问的方式决定是否继续进行记录输入,因此,使用该功能既可录入一条记录,也可连续录入多条记录。
(3)每次录入记录之前,显示通讯录中已有的记录数。
2.通讯录信息显示
(1)按自然顺序显示,即以通讯录文件中的记录顺序为序,逐个对文件记录进行显示。
(2)按排序顺序显示,即对通讯录中的记录进行排序后,再按照排序结果显示出来。但不管使用何种排序算法,排序显示不能改变通讯录记录的物理顺序。
(3)当通讯录信息较多时,实行分屏显示,每屏最多显示20条记录信息。
(4)显示记录时,对每一条记录增加与显示顺序一致的序号。
3.通讯录信息查询
(1)提供按姓名查询和按家庭地址查询两种查询方式。
(2)查找成功后显示每一条符合条件记录的完整信息,当一屏不能完成显示时,实行分屏显示,每屏最多显示20条符合条件的记录。当找不到符合条件记录时,给出相应的提示信息。
4.通讯录信息修改
(1)按照指定的记录序号,对通讯录记录进行修改。首先显示指定记录的当前数据,然后通过重新输入该记录数据的方法,完成数据修改操作。
图5-1 通讯录管理程序功能图
(2)为方便确认记录序号,该功能项同时提供通讯录记录的浏览功能。
5.通讯录信息删除
(1)提供按姓名删除和按序号删除两种方式,当找到指定记录时,进行删除操作。找不到指定记录时,给出相应的提示信息。
(2)所有的删除均为物理删除,即将指定的记录从通讯录文件中彻底清除掉。
6.建立通讯录文件
第一次使用通讯录管理程序时,用于建立存储通讯录信息的文件。
三、 程序的数据设计
每个通讯录记录由多个不同的数据项构成,是一个结构体数据,因此需要定义结构体数据类型。根据题目要求,确定每个记录包括的数据项为:姓名、电话、家庭住址、所在单位、年龄、备注等。据此定义如下结构体数据类型:
struct record
{
char name[15]; /*姓名*/
char birth[10]; /*生日*/
char tele[12]; /*电话*/
char addr[30]; /*家庭地址*/
char units[30]; /*工作单位*/
char note[50]; /*备注*/
};
考虑到struct record是通讯录管理程序中的通用数据类型,将在多个函数中使用,故将其在头文件中定义。使用文件address.txt存储数据类型为struct record的通讯录数据。
四、 程序的函数设计
1.函数功能描述
(1)main()函数
通讯录管理程序主函数,实现程序功能的主菜单显示,通过各功能函数的调用,实现整个程序的功能控制。
(2)append()函数
函数原型为void append(),是输入数据函数,它实现通讯录数据的键盘输入。
(3)display()函数
函数原型为void display(),是显示通讯录信息的主控函数,它实现显示功能的菜单显示,并进行不同显示功能的函数调用,以实现程序的显示功能。
(4)locate()函数
函数原型为void locate(),是查询通讯录信息的主控函数,它显示查询功能的菜单,并根据查询要求进行相应的函数调用,以实现程序的查询功能。
(5)modify()函数
函数原型为void modify(),是修改通讯录信息的主控函数,它显示修改功能的菜单,并进行相应的函数调用,以实现程序的修改功能。
(6)dele()函数
函数原型为void dele(),是删除通讯录记录的主控函数,它显示删除功能的菜单,并根据删除要求,进行相应的函数调用,以实现程序的删除功能。
(7)disp_arr()函数
函数原型为void disp_arr(struct record[ ],int),功能是显示struct record型结构体数组的全部数据,其第二个参数是结构体数组的长度。这里的结构体数组对应于存储通讯录文件address.txt的数据,数组长度对应于通讯录文件的记录数。
(8)disp_row()函数
函数原型为void disp_row(struct record),功能是显示一个struct record型结构体数据,disp_arr()函数进行数组输出时,每一个数组元素都调用disp_row() 函数实现输出。
(9)sort()函数
函数原型为void sort(struct record[ ],int),是排序的主控函数,它显示排序功能的菜单,并根据显示的排序要求,进行相应的函数调用,以实现程序的排序显示功能。
(10)sort_name()函数
函数原型为void sort_name(struct record[ ],int),功能是对struct record型结构体数组实现按姓名排序操作。
(11)sort_addr()函数
函数原型为void sort_addr(struct record[ ],int),功能是对struct record型结构体数组实现按家庭地址排序操作。
(12)modi_seq()函数
函数原型为void modi_seq(struct record[ ],int),功能是对struct record型结构体数组实现按序号修改操作。
(13)dele_name()函数
函数原型为void dele_name(struct record[ ],int *),功能是对struct record型结构体数组实现按姓名删除操作。
(14)dele_sequ()函数
函数原型为void dele_sequ(struct record[ ],int *),功能是对struct record型结构体数组实现按序号删除操作。
(15)disp_str()函数
函数原型为disp_str(char,int),功能是输出n个字符,用于菜单的字符显示,每一个有菜单显示功能的函数都调用该函数。
(16)disp_table()函数
函数原型为void disp_table(),功能是显示一行表头,用于输出记录时的标题显示。
(17)creat()函数
函数原型为void creat(),功能是建立存储通讯录信息的文件address.txt。
2.函数的直接调用关系
(1)main()函数直接调用的函数:disp_str()函数、append()函数、display()函数、locate()函数、modify()函数、dele()函数。
(2)append()函数直接调用的函数:无。
(3)display()函数直接调用的函数:disp_str()函数、disp_arr()函数、sort()函数。
(4)locate()函数直接调用的函数:disp_str()函数、disp_row()函数。
(5)modify()函数直接调用的函数:disp_str()函数、modi_seq()函数。
(6)dele()函数直接调用的函数:disp_str()函数、dele_name()函数、dele_sequ()函数。
(7)disp_arr()函数直接调用的函数:disp_row()函数、disp_table()函数。
(8)sort()函数直接调用的函数:disp_str()函数、sort_name()函数、sort_city()函数。
(9)sort_name()函数直接调用的函数:disp_arr()函数。
(10)sort_addr()函数直接调用的函数:disp_arr()函数。
(11)modi_seq()函数直接调用的函数:disp_row()函数。
(12)dele_name()函数直接调用的函数:disp_table()函数、disp_row()函数。
(13)dele_sequ()函数直接调用的函数:disp_table()函数、disp_row()函数。
(14)creat()函数直接调用的函数:无。