


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 返回非整型值的函数到目前为止,我们所讨论的函数都是不返回任何值(void)或只返回int类型值的函数。假如某个函数必须返回其它类型的值,该怎么办呢?许多数值函数(如sqrt、sin 与cos等函数)返回的是double 类型的值,某些专用函数则返回其它类型的值。我们通过函数atof(s)来说明函数返回非整型值的方法。该函数把字符串s 转换为相应的双精度浮点数。atof 函数是atoi 函数的扩展,第2 章与第3 章已讨论了atoi 函数的几_个版本。atof 函数需要处理可选的符号和小数点,并要考虑可能缺少整数部分或小数部分的情况。我们这里编写的版本并不是一个高质量的输入转换函数,它占用了过多的空间。标准库中包含类似功能的atof函数,在头文件中声明。首先,由于atof函数的返回值类型不是int,因此该函数必须声明返回值的类型。返回值的类型名应放在函数名字之前,如下所示:#include /* atof: convert string s to double */double atof(char s)double val, power;int i, sign;for (i = 0; isspace(si); i+) /* skip white space */;sign = (si = -) ? -1 : 1;if (si = + | si = -)i+;for (val = 0.0; isdigit(si); i+)val = 10.0 * val + (si - 0);if (si = .)i+;for (power = 1.0; isdigit(si); i+) val = 10.0 * val + (si - 0);power *= 10;return sign * val / power;其次,调用函数必须知道atof函数返回的是非整型值,这一点也是很重要的。为了达到该目的,一种方法是在调用函数中显式声明atof函数。下面所示的基本计算器程序(仅适用于支票簿计算)中有类似的声明。该程序在每行中读取一个数(数的前面可能有正负号),并对它们求和,在每次输入完成后把这些数的累计总和打印出来:#include #define MAXLINE 100/* rudimentary calculator */main()double sum, atof(char );char lineMAXLINE;int getline(char line, int max);sum = 0;while (getline(line, MAXLINE) 0)printf(t%gn, sum += atof(line);return 0;其中,声明语句double sum, atof(char );表明sum 是一个double 类型的变量,atof 函数带有个char类型的参数,且返回一个double类型的值。函数 atof的声明与定义必须一致。如果atof函数与调用它的主函数main放在同一源文件中,并且类型不一致,编译器就会检测到该错误。但是,如果atof函数是单独编译的(这种可能性更大),这种不匹配的错误就无法检测出来,atof 函数将返回double 类型的值,而main函数却将返回值按照int类型处理,最后的结果值毫无意义。根据前面有关函数的声明如何与定义保持一致的讨论,发生不匹配现象似乎很令人吃惊。其中的一个原因是,如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,例如:sum += atof(line)如果先前没有声明过的一个名字出现在某个表达式中,并且其后紧跟一个左圆括号,那么上下文就会认为该名字是一个函数名字,该函数的返回值将被假定为int 类型,但上下文并不对其参数作任何假设。并且,如果函数声明中不包含参数,例如:double atof();那么编译程序也不会对函数atof的参数作任何假设,并会关闭所有的参数检查。对空参数表的这种特殊处理是为了使新的编译器能编译比较老的C 语言程序。不过,在新编写的程序中这么做是不提倡的。如果函数带有参数,则要声明它们;如果没有参数,则使用void进行声明。在正确进行声明的函数atof的基础上,我们可以利用它编写出函数atoi(将字符串转换为int类型):/* atoi: convert string s to integer using atof */int atoi(char s)double atof(char s);return (int) atof(s);请注意其中的声明和return语句的结构。在下列形式的return语句中:return(表达式);其中,表达式的值在返回之前将被转换为函数的类型。因为函数atoi的返回值为int类型,所以,return 语句中的atof 函数的double 类型值将被自动转换为int 类型值。但是,这种操作可能会丢失信息,某些编译器可能会对此给出警告信息。在该函数中,由于采用了类型转
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CNHAW 0010.1-2022激光角膜屈光手术技术规范第1部分:准分子激光角膜屈光手术
- 2025年电子设备行业可穿戴设备市场前景分析报告
- 2025年区块链金融行业技术应用与市场前景研究报告
- 2025年科技行业区块链应用前景研究报告
- 2025年医疗美容行业美容器械市场前景展望报告
- 2025年电子科技行业发展前景与趋势预测报告
- 2025年金融科技在区块链应用中的前景分析报告
- 北京市2025北京怀柔区事业单位招聘95人笔试历年参考题库附带答案详解
- 临汾市2025山西临汾市浮山县招聘事业单位人员90人笔试历年参考题库附带答案详解
- 2025辽宁鞍山市台安绿洁创能生态科技有限公司招聘6人笔试参考题库附带答案详解
- 云南学法减分题库及答案
- 幼儿园大班数学活动《4的分解与组合》课件
- 江苏省制造业领域人工智能技术应用场景参考指引2025年版
- 三级医师查房制度考试题(含答案)
- 文旅公司考试试题及答案
- 2025至2030年中国公立医院行业发展监测及市场发展潜力预测报告
- 2025年全国翻译专业资格(水平)考试土耳其语三级笔译试卷
- 人工智能技术在网络安全威胁检测中的应用
- 2025内蒙古民族大学招聘管理助理、教学助理50人笔试模拟试题及答案解析
- 2025年麻醉、第一类精神药品管理培训考核试题及答案(护士卷)
- 胃肠镜报告的解读
评论
0/150
提交评论