C返回非整型值的函数.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C返回非整型值的函数

C 返回非整型值的函数 到目前为止,我们所讨论的函数都是不返回任何值(void)或只返回int类型值的函数。 假如某个函数必须返回其它类型的值,该怎么办呢?许多数值函数(如sqrt、sin 与cos 等函数)返回的是double 类型的值,某些专用函数则返回其它类型的值。我们通过函数 atof(s)来说明函数返回非整型值的方法。该函数把字符串s 转换为相应的双精度浮点数。 atof 函数是atoi 函数的扩展,第2 章与第3 章已讨论了atoi 函数的几___________个版本。atof 函 数需要处理可选的符号和小数点,并要考虑可能缺少整数部分或小数部分的情况。我们这里 编写的版本并不是一个高质量的输入转换函数,它占用了过多的空间。标准库中包含类似功 能的atof函数,在头文件stdlib.h中声明。 首先,由于atof函数的返回值类型不是int,因此该函数必须声明返回值的类型。返回 值的类型名应放在函数名字之前,如下所示: #include ctype.h /* atof: convert string s to double */ double atof(char s[]) { double val, power; int i, sign; for (i = 0; isspace(s[i]); i++) /* skip white space */ ; sign = (s[i] == -) ? -1 : 1; if (s[i] == + || s[i] == -) i++; for (val = 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - 0); if (s[i] == .) i++; for (power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val + (s[i] - 0); power *= 10; } return sign * val / power; } 其次,调用函数必须知道atof函数返回的是非整型值,这一点也是很重要的。为了达到 该目的,一种方法是在调用函数中显式声明atof函数。下面所示的基本计算器程序(仅适用 于支票簿计算)中有类似的声明。该程序在每行中读取一个数(数的前面可能有正负号),并 对它们求和,在每次输入完成后把这些数的累计总和打印出来: #include stdio.h #define MAXLINE 100 /* rudimentary calculator */ main() { double sum, atof(char []); char line[MAXLINE]; int getline(char line[], int max); sum = 0; while (getline(line, MAXLINE) 0) printf(\t%g\n, 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(ch

文档评论(0)

178****9325 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档