第4章常用标准库函数第4章常用标准库函数4.1输出函数4.2输入函数4.3字符串函数4.3数学函数4.5应用举例库函数C编译系统为方便用户使用而提供的已经编写好的公共函数。C标准库函数大致分为以下几类:输入输出函数、数学函数、字符串函数、目录函数、分类函数、诊断函数、时间日期函数、其它函数。在C语言中要使用库函数,应当使用编译预处理命令“#include”把与该库函数相关的头文件包含进来注意1.格式输出函数格式输出函数printf()格式:printf(“格式控制”[,输出表列])功能:产生格式化输出,按格式控制所指格式将输出表列的值输出到标准输出设备。【说明】(1)格式控制,用于说明输出的数据类型及格式。格式控制是用双引号括起来的字符串,由格式说明符和普通字符两部分组成。格式说明符由“%”和格式字符组成。(2)输出表列是与格式控制中说明的控制格式相对应的要输出的数据表。(3)原则上,输出表列中变量的个数与类型应与格式说明中指定的数据的个数和类型一致,且从左到右一一对应。例如:printf(“x=%d,y=%c”,x,y)格式控制输出表列4.1输出函数常用printf函数格式字符表格式字符意义d,i按带符号十进制整数输出(正数不输出符号)u按无符号十进制整数输出o按无符号八进制整数输出(不输出前导符o)x,X按无符号十六进制整数输出(不输出前导符ox)c按字符型输出,只输出一个字符s按字符串输出f按浮点型小数输出,隐含输出6位小数e,E按科学计数法输出,数字部分的小数部分为6位g,G按e和f格式中较短的一种输出表4.1printf函数格式字符printf函数格式字符常用的修饰符如表4.2(其中w、n均代表一个正整数)。表4.2printf函数修饰符修饰符意义0ww为输出宽度,不足w时,左补零如:%05d-ww为输出宽度,不足w时,右补空格如:%-5d+ww为输出宽度,不足w时,左补空格如:%+5d#使八进制、十六进制输出带前导符:o、ox或oX。如:%#o、%#xw,nw为输出宽度,n为小数位数或输出的字符个数。不够规定宽度,左补空格,超过规定宽度,按实际长度输出。如:%6.2f;%4.9sl可加在格式字符d,u,o,x前面作前缀,输出long或double型时使用,如:%ldprintf函数格式字符【例4.3】体会printf函数的功能。#includestdio.hvoidmain(){inta=123,b=-3721;floatx=123.456;printf(a=%d,b=%d\n,a,b);printf(a=%o,b=%x\n,a,a);printf(a=%#o,b=%#x\n,a,a);printf(a=%4da=%04da=%-4d\n,a,a,a);printf(b=%7db=%07db=%-9db=%2d\n,b,b,b,b);printf(a=%8ld,b=%8ld\n,a,b);printf(a=%-8ld,b=%-8ld\n,a,b);printf(%3s,%7.2s,%.4s,%-5.3s\n,sun,sun,sun,sun);printf(%f,%e,%g\n,x,x,x);printf(%10.3e,%010.1e,%012.5e\n,x,x,x);}2、字符输出函数putchar()格式:putchar(ch);功能:向终端输出一个字符。【说明】(1)参数ch可以是字符型变量、整型变量、字符常量或整型常量(要求在0-255范围内)。(2)函数返回值为输出字符。(3)putchar函数也可以输出转义字符。#includestdio.hvoidmain(){chara,b,c;inti,j,k;a='s';putchar(a);putchar('\n');/*换行*/putchar('s');putchar('\n');/*换行*/i=115;putchar(i);putchar('\n');/*换行*/putchar(115);putchar(10);/*换行*/}【例4.1】体会字符输出函数的功能。3、字符串输出函数puts()格式:puts(str)功能:从str指定的地址开始,依次将存储单元中的字符串输出到显示器,直至遇到字符串结束标志为止。【注意】(1)若字符串中包含转义字符,则按转义后的结果输出。(2)输出时自动把‘\0’转换为‘\n’后输出(自动换行)。【例4.5】体会字符串输出函数的功能。#includestdio.hvoidmain(){chars[]=good\nsun\tday;puts(s);}1)格式输入函数scanf()格式:intscanf(“格式控制”,地址表列)功能:执行格式化输入,从标准输入设备上按格式控制所指格式,输入数据给输入表列所指向的单元。【说明】(1)格式控制的含义同printf函数(2)输入表列只能采用“地址表列”(3)在执行数据输入时,以一个或多个空格、回车键、或跳格键(Tab)作为分隔符。(4)输入格式中,除格式说明符之外的普通字符应原样输入。(5)输入实型数据时,不能规定精度。4.2输入函数scanf函数格式字符表4.3scanf函数格式字符格式字符意义d,i输入有符号的十进制整数u输入无符号的十进制整数o输入无符号的八进制整数x,X输入无符号的十六进制整数c输入一个字符s输入一个字符串,输入的字符串的头,尾和中间都不能有空格。f输入一个小数形式的浮点数,可用小数或指数形式输入e,E输入一个指数形式的浮点数,可用小数或指数形式输入【注意】(1)在scanf中应使用变量的地址。(2)选择合适的输入分隔符。(3)可以指定输入数据的宽度,系统自动截取。(4)在用“%c”输入字符时,空格和“转义字符”都作为有效字符输入,不需要用空格作间隔。(5)“%*”一般用于在利用现成的数据输入时,“跳过”某些数据。(6)输入数据时不能规定精度。(7)在输入数据时,遇到以下情况该数据认为结束:空格、回车、跳格键(Tab)、宽度结束、非法输入。【例4.4】体会格式输入输出函数的功能。#includestdio.hvoidmain(){inta;charc;scanf(%d,&a);scanf(%c,&c);printf(a=%d,a);printf(c=%c,c);}2)字符输入函数getchar()格式:getchar();功能:从键盘输入中得到一个字符,该函数没有参数。【说明】(1)函数返回值为输入字符的ASCII码值。(2)getchar函数的值可以赋给一个字符变量或整型变量,也可以不赋给任何变量。(3)不同的字符输入方法对结果的影响不同。【例4.2】体会字符输入函数的功能。#includestdio.hvoidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);}3)字符串输入函数gets()格式:gets(str)功能:从键盘输入一个字符串(该字符串中可以包含空格),直至遇到回车符为止,并将该字符串存放到由str所指定的数组中(或内存区域)。【说明】输入字符串时以回车作为输入结束标志。【例4.6】体会字符串输入函数的功能。#includestdio.hvoidmain(){chars[10];gets(s);puts(s);}1字符串连接函数strcat()函数格式:char*strcat(char*str1,char*str2)功能:将以str2为首地址的字符串连接到str1串的后面,且从str1串的’\0’所在单元连接起,即自动覆盖了str1串的结束标志’\0’。【说明】(1)参数str2既可以为字符数组名、指向字符数组的指针变量,也可以为字符串常量。(2)str1必须有足够的空间来存储连接结果,以确保两个字符串连接后不出现超界现象。(3)连接时取消str1后的‘\0’,只在连接后的新串尾部加‘\0’。(4)该函数的返回值为str1串的首地址。4.3字符串函数【例4.7】利用strcat函数实现字符串的连接。#includestring.h#includestdio.hvoidmain(){chars1[15]=hello,s2[10]=world;strcat(s1,s2);puts(s1);puts(s2);strcat(s1,good);puts(s1);}2字符串复制函数strcpy()函数格式:char*strcpy(char*str1,char*str2)功能:将字符串str2复制到字符串str1后,返回指向str1的指针。【说明】(1)参数str2既可以为字符数组名、指向字符数组的指针变量,也可以为字符串常量。(2)str1串所在的字符数组要留有足够的空间,以确保复制字符串后不出现超界现象。(3)复制后str1原来内容被覆盖。【注意】不能如此复制字符串:charstr1[]=“abc”;charstr2[]=str1;【例4.8】利用strcpy函数实现字符串的复制。#includestring.h#includestdio.hvoidmain(){chars1[20]=helloworld,s2[10]=good;strcpy(s1,s2);puts(s1);puts(s2);strcpy(s1,welcome);puts(s1);}3字符串比较函数strcmp()函数格式:intstrcmp(char*str1,char*str2);功能:比较两个字符串的大小。【说明】(1)两个参数str1和str2既可以为字符数组名、指向字符数组的指针变量,也可以为字符串常量。(2)两个字符串进行比较不能直接用关系运算符进行比较,必须用strcmp函数进行比较(3)字符串之间比较的规则(4)两个字符串比较结果的函数返回值等于第一个不同字符的ASCII码之差。【注意】对两个字符串比较,不能写成如下形式:if(str1==str2)或if(str1str2)或if(str1str2)【例4.9】利用strcmp函数实现字符串的比较。#includestring.h#includestdio.hvoidmain(){chars1[]=ABC,s2[]=ABD;intn;n=strcmp(s1,s2);printf(n=%d\n,n);n=strcmp(s2,s1);printf(n=%d\n,n);}4求字符串长度函数strlen()函数格式:unsignedintstrlen(char*str)功能:求字符串str的实际长度(从首地址到‘\0’之间的字符个数,不包含’\0’),并将其作为函数值返回。【说明】参数str可以是字符数组、字符指针或串常量。【例4.10】利用strlen函数求字符串的长度。#includestring.h#includestdio.hvoidmain(){chars1[]=good\tbetter\tbest\n;chars2[]=ab\105;puts(s1);puts(s2);printf(%d\n,strlen(s1));printf(%d\n,strlen(s2));printf(%d\n,strlen(hello));printf(%d\n,strlen(world));}5strlwr函数函数格式:char*strlwr(char*str);功能:把字符串中的所有字母都变成小写。【说明】(1)参数str可以是字符数组、字符指针或串常量。(2)运行该函数后参数str的内容改变。(3)函数返回值为字符串的首地址。【例4.11】体会strlwr函数的功能。#includestring.h#includestdio.hvoidmain(){chars1[]=GOOD\tBetteR\tBesT\n;chars2[]=AB\105;puts(s1);puts(s2);strlwr(s1);strlwr(s2);puts(s1);puts(s