c语言函数库第七章其它函数Word文档下载推荐.docx
- 文档编号:17350427
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:20.48KB
c语言函数库第七章其它函数Word文档下载推荐.docx
《c语言函数库第七章其它函数Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言函数库第七章其它函数Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
返回值:
无返回值。
例程如下:
利用abort函数终止一个程序
#include<
stdio.h>
intmain(void)
{
printf("
Callingabort()\n"
);
abort();
printf("
Istheprogrambeheld?
\n"
return0;
}
例程说明:
本例程调用abort函数实现了一个程序的终止。
实际上,该程序执行到abort语句处就被异常终止了,并没有执行后面两条语句。
本例程的运行结果为:
Callingabort()
Abnormalprogramtermination
注意:
由于abort函数是异常终止一个进程,因此系统会将一条终止信息“Abnormalprogramtermination”输出到stderr。
注册终止函数
intatexit(void*func)
注册终止函数。
其中参数func为指向函数的指针。
在程序正常终止时,系统会调用注册了的func函数。
注册成功返回0,否则返回非0。
利用函数atexit注册出口函数。
voidfun1(void)
Exitfunction#1called\n"
}
voidfun2(void)
Exitfunction#2called\n"
atexit(fun1);
atexit(fun2);
(1)首先,程序依次注册(登记)了两个出口函数fun1和fun2。
(2)当程序正常终止时,系统依次调用注册了的出口函数fun1和fun2。
Exitfunction#2called
Exitfunction#1called
1、最多可以用atexit函数注册(登记)32个出口函数。
2、调用出口函数时,按照先注册后调用,后注册先调用的原则。
因此本例程中先调用出口函数fun2,后调用出口函数fun1。
二分搜索函数
void*bsearch(constvoid*key,constvoid*base,size_t*nelem,size_twidth,int(*fcmp)(constvoid*,const*))
二分法查找。
参数key指向要查找的关键字的指针,base指向从小到大的次序存放元素的查找表,nelem指定查找表元素的个数,width指定查找表中每个元素的字节数,int(*fcmp)(constvoid*,const*)为由用户提供的比较函数。
如果没有找到匹配的值返回0,否则返回匹配项的指针。
用二分法在有序数列中查找元素。
intCMP(int*a,int*b)
{
if(*a<
*b)
return-1;
elseif(*a>
return1;
else
intmain(void)
intsearch[10]={1,3,6,7,10,11,13,19,28,56};
inta=13,*p,i;
/*对数组search进行二分搜索13*/
p=(int*)bsearch(&
a,search,10,sizeof(int),CMP);
Theelemsofthearrayare\n"
for(i=0;
i<
10;
i++)
%d"
search[i]);
/*显示元素13在原数组中的位置*/
if(p)
printf("
\nTheelem13islocatedat%dofthearray\n"
p-search+1);
printf(“\nSearchisfail!
!
\n”);
getchar();
(1)首先,初始化一个查找数组search,在这里,该数组一定是按照键值从小到大排列的。
(2)利用函数bsearch进行二分法搜索。
参数&
a为要查找的关键字的指针,要查找的关键字a为13;
参数search为查找表首地址;
10为查找表元素个数;
sizeof(int)为查找表中每个元素的字节数,大小为2个字节;
CMP为比较函数的指针。
(3)将查找后的结果(匹配项的指针)赋值给指针变量p。
(4)显示元素13在原数组中的位置(由指针p和数组首地址search确定)。
本例程的运行结果为:
Theelemsofthearrayare
1367101113192856
Theelem13islocatedat7ofthearray
1、关于用户提供的比较函数:
bsearch函数需要用户提供一个比较搜索函数,该函数由bsearch函数调用,并向该比较搜索函数传递两个指针参数a和b。
用户定义的比较函数必须在a<
b时返回-1,在a=b时返回0,在a>
b时返回1。
这里的大于、小于、等于,完全由用户来定义。
本例程中定义的大于、小于、等于就是数学上的大于、小于、等于。
2、二分法搜索简介:
二分法搜索又叫做折半搜索或折半查找。
它是一种经典的顺序文件查找算法,要求查找表按关键字有序排列(从小到大或从大到小,bsearch函数要求从小到大排列)。
其查找思想是:
逐渐缩小查找范围,直至得到查找结果。
查找过程为(以从小到大的序列为例):
将要查找的元素的关键字k与当前当前查找范围内位于居中的那个元素的关键字进行比较,若匹配,则查找成功,返回该元素的指针即可;
否则,若查找元素的关键字k小于当前查找范围内位于居中的那个元素的关键字,则到当前查找范围的前半部分重复上述查找过程,若查找元素的关键字k大于当前查找范围内位于居中的那个元素的关键字,则到当前查找范围的后半部分重复上述查找过程。
二分法搜索的查找效率较顺序搜索的查找效率要高许多,因此在进行顺序文件的搜索查找中是很实用的。
有关二分法搜索算法的详细讲述请参看数据结构、算法分析等书目。
分配主存储器函数
void*calloc(size_tnelem,size_tsize)
分配并刷新内存。
函数calloc有两个参数,第一个参数nelem指出要分配内存空间的项数;
第二个参数size表明每一项的字节数。
分配成功返回第一个分配字节的指针,否则返回NULL。
利用函数calloc动态分配内存空间
main()
inti,j,*p=NULL;
Pleaseenterthesizeforallocation\n"
scanf("
%d"
&
i);
p=(int*)calloc(i,sizeof(int));
{
Pleaseenter%ddatas\n"
i);
for(j=0;
j<
i;
j++)
p[j]);
}
else{
Allocationisfail\n"
Thedatasare\n"
p[j]);
(1)本例程首先通过终端输入要开辟内存空间的大小,将其保留在变量i中。
(2)通过函数calloc动态分配内存空间(由用户指定i),并将分配空间的首地址赋值给指针变量p。
(3)如果分配成功(即p不为NULL),向该内存空间写入数据。
(4)打印出刚才写入的数据。
Pleaseenterthesizeforalloc
3
Pleaseenter3datas
321
Thedatasare
本例程中分配内存空间时采用动态分配函数calloc,这样分配存储空间的方法同数组不同,可以由用户在程序中指定分配空间的大小,而不用像数组那样在程序编译前指定数组的大小。
正常终止进程函数
voidexit(intstatus)
正常终止一个进程。
参数status用来保存调用进程的出口状态,一般地,0表示正常退出,非0表示发生错误。
应用exit函数正常终止一个程序。
conio.h>
floata,b;
Entera\n"
%f"
a);
Enterb\n"
b);
if(b)
a/b=%f"
a/b);
Error:
Divideby0"
);
exit(0);
(1)首先程序提示输入两个数a和b,然后进行除法运算a/b。
(2)如果b不为0表明运算合法,输入a/b的结果。
(3)如果b为0,则运算不合法,于是在终端提示错误信息"
,并应用exit函数终止该程序。
Entera
Enterb
Divideby0
释放内存函数
voidfree(void*ptr)
释放已分配的块。
参数ptr为指向要释放的内存块的指针。
利用函数free释放内存空间。
char*p;
p=(char*)malloc(10*sizeof(char));
strcpy(p,"
Helloworld\n"
%s"
p);
free(p);
p=NULL;
(1)首先应用malloc函数在内存中分配一个10个字节大小的内存空间。
(2)将字符串"
复制到该内存空间中,并打印该字符串。
(3)释放掉p所指向的内存空间,将NULL赋值给p。
(4)显示p所指向的内容。
Helloworld
(null)
在使用完利用malloc或calloc函数分配的内存单元后,应该养成用free函数释放掉分配的内存单元的习惯。
特别是在开发一些大型系统时,这样会很节省资源。
获取环境变量
char*getenv(char*envvar)
获得环境字符串的首地址。
当envva所表示的环境变量存在时,返回其首地址;
否则返回NULL。
显示环境变量
char*s;
s=getenv("
COMSPEC"
Commandprocessor:
%s\n"
s);
(1)首先利用函数getenv获取名为COMSPEC的环境字符串的首地址。
(2)根据得到的环境字符串的首地址,显示该环境字符串。
C:
\WINDOWS\SYSTEM32\COMMAND.COM
C:
\WINDOWS\SYSTEM32\COMMAND.COM即为要得到的环境字符串。
动态分配内存函数
void*malloc(unsignedsize)
动态分配一块内存空间,size为指定的分配空间的大小(字节数)。
分配成功,则返回指向分配内存的指针,否则返回NULL。
利用函数malloc动态分配内存空间
char*str;
if((str=malloc(15))==NULL)
{
Notenoughmemorytoallocatebuffer\n"
exit
(1);
}
strcpy(str,"
HelloWorld!
"
Stringis%s\n"
str);
free(str);
(1)本例程首先利用函数malloc分配一个15个字节大小的内存空间,并将其首地址赋值给指针型变量str。
(2)如果分配成功,复制字符串"
到刚刚分配好的内存缓冲区中。
(3)在屏幕上打印该字符串。
StringisHelloWorld!
快速排序函数
voidqsort(void*base,intnelem,intwidth,int(*fcmp)(constvoid*,const*))
对记录进行从小到大的快速排序。
参数base指向存放待排序列的数组的首地址,nelem为数组中元素的个数,width为每个元素的字节数,int(*fcmp)(constvoid*,const*)为由用户提供的比较函数。
无
利用qsort函数对无序序列进行快速排序(从小到大排序)。
intsort[10]={3,2,6,12,1,7,-5,9,30,16};
inti;
\nThearraythatisbeforesort\n"
sort[i]);
qsort(sort,10,sizeof(int),CMP);
\nThearraythatisaftersort\n"
(1)首先初始化待排序列sort。
(2)显示最初数组sort中的元素排列情况。
(3)对数列sort进行快速排序,这里sort为数组sort的首地址;
10为数组sort的元素个数;
sizeof(int)为待排序列中每个元素的字节数,大小为2个字节;
CMP为用户定义的比较函数的指针。
(4)最后显示出排序后(从小到大排序)数组sort中的元素排列情况。
Thearraythatisbeforesort
3261217-593016
Thearraythatisaftersort
-5123679121630
qsort函数需要用户提供一个比较搜索函数。
该函数由qsort函数调用,并向该比较搜索函数传递两个指针参数a和b。
2、快速排序简介:
快速排序是一种经典的高效排序算法。
它是取待排序列中某个元素为基准,按照该元素值的大小将整个序列划分为左右两个子序列,其中左子序列的值小于或等于基准元素的值;
右子序列的值大于或等于基准元素的值。
然后分别对两个子序列重复上述排序过程,直至所有元素都排在相应位置为止。
有关快速排序算法的详细介绍,请参看数据结构、算法分析等书目。
重新分配主存函数
void*realloc(void*ptr,unsignednewsize)
重新分配内存空间。
第一个参数ptr为一个指针,它指向重新设定大小的块;
第二个参数newsize为重新分配内存的字节大小。
分配成功,则返回修改块的指针,否则返回NULL。
利用函数realloc重新分配内存空间
int*sqlist,i,len;
len=10;
sqlist=(int*)malloc(len*sizeof(int));
20;
if(i>
=len){
len=len*2;
sqlist=realloc(sqlist,len*sizeof(int));
sqlist[i]=i;
sqlist[i]);
(1)本例程首先分配一个只有10个整型数据大小的内存空间。
(2)然后通过程序向该数组输入20个整数。
在这里要加一个判断,即当输入的数据超过原来分配的内存空间的长度时,调用realloc函数将内存重新分配,大小为上一次长度的2倍。
这样第i次调用realloc函数时分配的内存长度为10*2i个整型变量长度。
(3)最后打印这20个整数。
012345678910111213141516171819
1、realloc函数的作用实际上分为两步,一是在内存中重新开辟指定大小空间;
二是将原内存空间的数据复制到新开辟的空间中(这是在新分配的内存比原内存大的情况下)。
2、如果新分配的内存比原内存小,则新分配的内存单元不被初始化。
3、realloc函数多用于动态顺序表这种数据结构的建立。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数库 第七 其它 函数