c 返回非整型值的函数

c 返回非整型值的函数

ID:15787951

大小:28.50 KB

页数:3页

时间:2018-08-05

c  返回非整型值的函数_第1页
c  返回非整型值的函数_第2页
c  返回非整型值的函数_第3页
资源描述:

《c 返回非整型值的函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C返回非整型值的函数到目前为止,我们所讨论的函数都是不返回任何值(void)或只返回int类型值的函数。假如某个函数必须返回其它类型的值,该怎么办呢?许多数值函数(如sqrt、sin与cos等函数)返回的是double类型的值,某些专用函数则返回其它类型的值。我们通过函数atof(s)来说明函数返回非整型值的方法。该函数把字符串s转换为相应的双精度浮点数。atof函数是atoi函数的扩展,第2章与第3章已讨论了atoi函数的几___________个版本。atof函数需要处理可选的符号和小数点,并要考虑可能缺少整数部分或小数部分的情

2、况。我们这里编写的版本并不是一个高质量的输入转换函数,它占用了过多的空间。标准库中包含类似功能的atof函数,在头文件中声明。首先,由于atof函数的返回值类型不是int,因此该函数必须声明返回值的类型。返回值的类型名应放在函数名字之前,如下所示:#include/*atof:convertstringstodouble*/doubleatof(chars[]){doubleval,power;inti,sign;for(i=0;isspace(s[i]);i++)/*skipwhitespac

3、e*/;sign=(s[i]=='-')?-1:1;if(s[i]=='+'

4、

5、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;}returnsign*val/power;}其次,调用函数必须知道atof函数返回的是非整型值,这一点也是很重要的。为了达到该目的,一种方法是在调用函数

6、中显式声明atof函数。下面所示的基本计算器程序(仅适用于支票簿计算)中有类似的声明。该程序在每行中读取一个数(数的前面可能有正负号),并对它们求和,在每次输入完成后把这些数的累计总和打印出来:#include#defineMAXLINE100/*rudimentarycalculator*/main(){doublesum,atof(char[]);charline[MAXLINE];intgetline(charline[],intmax);sum=0;while(getline(line,MAXLINE)>0

7、)printf("t%g",sum+=atof(line));return0;}其中,声明语句doublesum,atof(char[]);表明sum是一个double类型的变量,atof函数带有个char[]类型的参数,且返回一个double类型的值。函数atof的声明与定义必须一致。如果atof函数与调用它的主函数main放在同一源文件中,并且类型不一致,编译器就会检测到该错误。但是,如果atof函数是单独编译的(这种可能性更大),这种不匹配的错误就无法检测出来,atof函数将返回double类型的值,而main函数却将返

8、回值按照int类型处理,最后的结果值毫无意义。根据前面有关函数的声明如何与定义保持一致的讨论,发生不匹配现象似乎很令人吃惊。其中的一个原因是,如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,例如:sum+=atof(line)如果先前没有声明过的一个名字出现在某个表达式中,并且其后紧跟一个左圆括号,那么上下文就会认为该名字是一个函数名字,该函数的返回值将被假定为int类型,但上下文并不对其参数作任何假设。并且,如果函数声明中不包含参数,例如:doubleatof();那么编译程序也不会对函数atof的参数作任何假设,并会

9、关闭所有的参数检查。对空参数表的这种特殊处理是为了使新的编译器能编译比较老的C语言程序。不过,在新编写的程序中这么做是不提倡的。如果函数带有参数,则要声明它们;如果没有参数,则使用void进行声明。在正确进行声明的函数atof的基础上,我们可以利用它编写出函数atoi(将字符串转换为int类型):/*atoi:convertstringstointegerusingatof*/intatoi(chars[]){doubleatof(chars[]);return(int)atof(s);}请注意其中的声明和return语句的结构。在

10、下列形式的return语句中:return(表达式);其中,表达式的值在返回之前将被转换为函数的类型。因为函数atoi的返回值为int类型,所以,return语句中的atof函数的double类型值将被自动转换为int类型值。但是,这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。