




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、新编c语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: 7.6 库函数简介库函数简介 7.6.1 getchar函数、getch函数和getche函数 7.6.2 rand函数、srand函数和time函数 7.6.3 字符串处理函数u7.7 7.7 综合实例综合实例函数库u函数库是函数库是c c语言必不可少的补充,常用的有标准输入输语言必不可少的补充,常用的有标准输入输出库(出库(stdio.hstdio.h)、数学函数库()、数学函数库(math.hmath.h)、标准库()、标准库(stdlib.hstdlib.h)、日期时间库()、
2、日期时间库(time.htime.h)、字符函数库()、字符函数库(ctype.hctype.h)和字符串处理库()和字符串处理库(string.hstring.h)等。)等。u使用库函数,既可以提高编程效率,又可以提高程序的使用库函数,既可以提高编程效率,又可以提高程序的可靠性。函数库的详细介绍可参考有关资料,本节仅介绍可靠性。函数库的详细介绍可参考有关资料,本节仅介绍几个常用的库函数。几个常用的库函数。7.6.1 getchar函数、getch函数和getche函数ugetchar函数在stdio.h中声明,getch函数和getche函数在conio.h(控制台输入输出)中声明。getc
3、har函数与getch函数及getche函数功能相似,它们可简单地理解为返回用户输入字符的ascii码。u不同之处在于:getchar函数使用输入缓冲区,而getch函数和getche函数不使用。u使用缓冲区时?u不使用时?例7-28 getch函数、getche函数和getchar函数的区别例7-29回车键的返回值u键盘上的回车键相当于两键盘上的回车键相当于两个字符,把当前位置移到本个字符,把当前位置移到本行开头的回车符行开头的回车符(r)和新起和新起一行并把当前位置移到新行一行并把当前位置移到新行开头的换行符开头的换行符(n)。输入回。输入回车键时,车键时,getchargetchar函数
4、和函数和getchgetch函数会返回什么字符函数会返回什么字符呢?例呢?例7-297-29可以提供一个参可以提供一个参考答案。考答案。return7.6.2 rand函数、srand函数和time函数 urandrand函数和函数和srandsrand函数在函数在stdlib.hstdlib.h中声明。中声明。randrand函数的功函数的功能是返回一个能是返回一个0 0到到randmaxrandmax之间的随机数。之间的随机数。randmaxrandmax为为stdlib.hstdlib.h中定义的符号常量,中定义的符号常量,vc6.0vc6.0中它的值为中它的值为3276732767。v
5、c6.0vc6.0中中randrand函数所用的算法与例函数所用的算法与例7-167-16相同。相同。urandrand函数在使用时有何问题?函数在使用时有何问题?函数rand的问题?问题的解决?usrandsrand函数的头部为函数的头部为void srand (unsigned int seed)void srand (unsigned int seed)。调用。调用srandsrand函数可以改变函数可以改变randrand函数的种子,从而使函数的种子,从而使randrand函数可以产生不同的随机序列。由函数可以产生不同的随机序列。由randrand函数的算法可知,函数的算法可知,在多次
6、调用在多次调用randrand函数产生随机序列之前,仅需调用函数产生随机序列之前,仅需调用srandsrand函数几次函数几次? ?“真正”的随机序列u一次。一次。u虽然虽然srandsrand函数可以使函数可以使randrand函数产生不同的随机序列,函数产生不同的随机序列,但是希望每次执行程序都会得不同的随机序列还并非易事但是希望每次执行程序都会得不同的随机序列还并非易事,如何用同一条函数调用语句给,如何用同一条函数调用语句给randrand函数设置不同的种子函数设置不同的种子?srand(?);srand(?);“真正”的随机序列utimetime函数可以解决这个问题。函数可以解决这个问
7、题。timetime函数在函数在time.htime.h中声明中声明,它返回从公元,它返回从公元19701970年年1 1月月1 1日日0 0时时0 0分分0 0秒起到现在(计算秒起到现在(计算机当前的系统时间)所经过的秒数。它常用的调用形式为机当前的系统时间)所经过的秒数。它常用的调用形式为time(null)time(null),其中,其中nullnull为为stdio.hstdio.h中定义的一个值为中定义的一个值为0 0的符的符号常量。号常量。u程序总是在不同的时刻运行,因此,程序总是在不同的时刻运行,因此,time(null)time(null)的返回的返回值在每次程序运行时都不相同
8、,把它作为值在每次程序运行时都不相同,把它作为randrand函数的种子函数的种子,就可以保证,就可以保证randrand函数在每次程序运行时产生不同的随机函数在每次程序运行时产生不同的随机序列。序列。 srand (time(null);srand (time(null);例7-30 不重复的随机序列return7.6.3 7.6.3 字符串处理函数字符串处理函数u字符串处理函数用来处理字符串,常用的有字符串处理函数用来处理字符串,常用的有strcatstrcat函数函数、strcpystrcpy函数、函数、strncpystrncpy函数、函数、strcmpstrcmp函数和函数和strl
9、enstrlen函数函数等,它们都在等,它们都在 string.hstring.h中声明。中声明。u字符串常存储于字符数组中,因此下面在分析字符串处字符串常存储于字符数组中,因此下面在分析字符串处理函数时用字符数组代替字符串,这里的字符数组实际上理函数时用字符数组代替字符串,这里的字符数组实际上为存储在其中的字符串。为存储在其中的字符串。u如:如: strcat(strcat(字符数组字符数组1 1,字符数组,字符数组2)2)strcat函数u的一般形式为:的一般形式为:strcat(strcat(字符数组字符数组1 1,字符数组,字符数组2)2)ustrcatstrcat(string ca
10、tenate string catenate 字符串连接)函数的作用是字符串连接)函数的作用是把字符数组把字符数组2 2中的字符串中的字符串2 2复制并连接到字符数组复制并连接到字符数组1 1中字符中字符串串1 1的后面,最终,字符数组的后面,最终,字符数组1 1中的字符串由字符串中的字符串由字符串1 1和字和字符串符串2 2连接而成,而字符数组连接而成,而字符数组2 2中的字符串不变。中的字符串不变。u注意:注意:u字符数组字符数组1 1必须能容纳新的字符串,否则使用该函数的必须能容纳新的字符串,否则使用该函数的程序将出现问题。程序将出现问题。例7-31 strcat函数的使用strcpyu
11、函数的一般形式为:函数的一般形式为:strcpy(strcpy(字符数组字符数组1 1,字符数组,字符数组2)2)ustrcpystrcpy(string copy string copy 字符串拷贝)函数的功能是将字字符串拷贝)函数的功能是将字符数组符数组2 2中的字符串中的字符串2 2拷贝到字符数组拷贝到字符数组1 1中,最终,两个数中,最终,两个数组中的字符串均为字符串组中的字符串均为字符串2 2。u此函数同样要求字符数组此函数同样要求字符数组1 1能容纳新的字符串。如有能容纳新的字符串。如有char str111=i love c!,str2=hehe;char str111=i lo
12、ve c!,str2=hehe;,当执,当执行完行完strcpy(str1,str2)strcpy(str1,str2)后,字符数组后,字符数组str1str1的变化如图的变化如图7-97-9所示。所示。注意 u不能用字符串常量给字符数组赋值,也不能用一个字符不能用字符串常量给字符数组赋值,也不能用一个字符数组给另一个字符数组赋值,如语句数组给另一个字符数组赋值,如语句str1str1= come on! ;或或str1=str2;str1=str2;都是错误的。都是错误的。u字符串的赋值操作需用字符串的赋值操作需用strcpystrcpy函数,正确的作法为:函数,正确的作法为:strcpy(
13、str1, come on! );strcpy(str1, come on! );或或strcpy(str1,str2);strcpy(str1,str2);。u可以用字符串常量初始化字符数组,可以用字符串常量初始化字符数组,u如语句如语句char str1char str1= come on! ;strncpy函数u的一般形式为:的一般形式为:strncpy(strncpy(字符数组字符数组1, 1, 字符数组字符数组2, n)2, n)ustrncpystrncpy函数的功能是把字符数组函数的功能是把字符数组2 2中所含字符串中所含字符串2 2的前的前n n个个字符复制到字符数组字符复制到
14、字符数组1 1的起始部分。特别注意:该函数不会在的起始部分。特别注意:该函数不会在复制的字符后加复制的字符后加00字符,但是字符串字符,但是字符串2 2的长度小于的长度小于n n时,会时,会以以0 0 字符填充字符数组字符填充字符数组1 1直到复制完直到复制完n n个字符。此函数要求个字符。此函数要求字符数组字符数组1 1的长度至少为的长度至少为n n。u如有如有char str111=i love c! , str2=hehe;char str111=i love c! , str2=hehe;,则执行完语句则执行完语句strncpy(str1, str2, 2);strncpy(str1,
15、 str2, 2);后,后,u字符数组字符数组str1str1中的字符串为中的字符串为helove c! helove c! 。strncpy函数u如果执行了语句如果执行了语句strncpy(str1,str2,7)strncpy(str1,str2,7);则字符数组;则字符数组str2str2中的字符串为中的字符串为hehehehe,其状态如图,其状态如图7-117-11所示。所示。strcmp函数u的一般形式为的一般形式为:strcmp(:strcmp(字符数组字符数组1,1,字符数组字符数组2)2)ustrcmp(string compare strcmp(string compare
16、字符串比较字符串比较) )函数的功能为比函数的功能为比较两个字符数组中所含字符串的大小,如果字符数组较两个字符数组中所含字符串的大小,如果字符数组1 1中中的字符串大于字符数组的字符串大于字符数组2 2中的字符串则返回一个正整数;中的字符串则返回一个正整数;如果等于,则返回如果等于,则返回0 0;如果小于,则返回一个负整数;如果小于,则返回一个负整数, ,具体具体的返回值可参考例的返回值可参考例6-136-13。该函数常用的方式为;。该函数常用的方式为;uif(strcmp(str1, str2) 0)if(strcmp(str1, str2) 0)printf(%sprintf(%s大于大于
17、%sn,str1,str2);%sn,str1,str2);strlen函数u的一般形式为:的一般形式为:strlen(strlen(字符数组字符数组) )ustrlenstrlen(string lengthstring length字符串长度)函数的功能是测字符串长度)函数的功能是测试字符数组中字符串的长度,它返回有效长度而非实际长试字符数组中字符串的长度,它返回有效长度而非实际长度,即不计算末尾字符度,即不计算末尾字符00。如。如strlen(china)strlen(china)的值为的值为5 5,而,而sizeof(china)sizeof(china)的值为的值为6 6。retur
18、n7.7 7.7 综合实例综合实例u例例7-32 7-32 确定公元确定公元y y年年m m月月d d日是星期几。日是星期几。u分析:分析:u已知公元已知公元1 1年年1 1月月1 1日是星期一,则再过日是星期一,则再过7 7天、天、1414天天7 7* *n n天后仍是星期一,因此只要求出公元天后仍是星期一,因此只要求出公元1 1年年1 1月月1 1日到日到公元公元y y年年m m月月d d日有多少天,设有日有多少天,设有x x天,再计算天,再计算x%7x%7的值,若的值,若结果是结果是0 0,则公元,则公元y y年年m m月月d d日为星期天,否则结果为几,公日为星期天,否则结果为几,公元
19、元y y年年m m月月d d日就是星期几。如公元日就是星期几。如公元1 1年年1 1月月1 1日到公元日到公元1 1年年1 1月月2020日有日有2020天,则天,则1 1年年1 1月月2020日为星期(日为星期(20%7=20%7=)6 6 。例7-32确定公元y年m月d日是星期几u算法如下:算法如下:u第一步,请用户输入年(第一步,请用户输入年(yearyear), ,月(月(monthmonth), ,日(日(dayday););u第二步,判断第二步,判断yearyear年年monthmonth月月dayday日的合法性;日的合法性;u第三步,求出从第三步,求出从1 1年年1 1月月1
20、1日到(日到(year-1year-1)年)年1212月月3131日有多少天日有多少天;u第四步,求出从第四步,求出从yearyear年年1 1月月1 1日到日到yearyear年年monthmonth月月dayday日有多少天日有多少天;u第五步,把第三步和第四步求出的天数累加起来,累加和与第五步,把第三步和第四步求出的天数累加起来,累加和与7 7进行模运算,并根据运算结果判断出进行模运算,并根据运算结果判断出yearyear年年monthmonth月月dayday日为星期日为星期几。几。u设首部为设首部为int check(int yint check(int y,int mint m,i
21、nt d)int d)的的checkcheck函函数可以检测出日期数据的合法性,如果数可以检测出日期数据的合法性,如果y y年年m m月月d d日是合法日是合法的日期的日期checkcheck函数返回函数返回1 1,否则返回,否则返回0 0。u设首部为设首部为int daysofyears(int year)int daysofyears(int year)的的daysofyearsdaysofyears函函数可以返回数可以返回1 1年年1 1月月1 1日至日至yearyear年年1212月月3131日有多少天。日有多少天。u设首部为设首部为int daysofthisyear(int yint daysofthisyear(int y,int mint m,int d)int d)的的daysofthisyeard
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西户籍管理办法
- 限额以下管理办法
- 院落规划管理办法
- 电厂招投标管理办法
- 中学少先队管理办法
- 《报废车管理办法》
- 煤矿充填队管理办法
- 中小幼安全管理办法
- 丽水市归集管理办法
- 梨园路摊位管理办法
- 专业汽车维修工2024年OBD培训
- Python快速编程入门(第3版) 课件 第5章 组合数据类型
- 医院培训课件:《直肠癌中医护理查房》
- 脑梗死临床路径表单
- 定制化服务趋势分析
- 代持股权协议书模板电子版
- 专题16 全等三角形中手拉手模型综合应用(解析版)
- 国家基本公共卫生服务项目之健康教育
- DL∕ T 1166-2012 大型发电机励磁系统现场试验导则
- 公务员职业道德建设和素质能力提升培训课件(共37张)
- JGJ3-2010 高层建筑混凝土结构技术规程
评论
0/150
提交评论