函数题:atof函数的实现
本题要求实现一个函数,将一组数字型字符串,转换成double型的浮点数。
### 函数接口定义:
c++
函数接口如下:
double myatof(char s[]);
其中s[ ]是输入的数字型字符串,函数返回一个double类型的浮点数。
### 裁判测试程序样例:
c++
主函数中通过键盘输入一组字符串,调用myatof函数进行转换并打印输出 。
#include "stdio.h"
#define N 20
double myatof(char s[]);
int main()
{
double num;
char s[N];
while(1)
{
scanf("%s",s);
if (s[0]=='q') break;
num=myatof(s);
printf("%f\n",num);
}
return 0;
}
/* 请在这里填写答案 */
### 输入样例1:
输入多个数字型的字符串,每个字符串之间换行符隔开。字符串可能包括空格符、正负符号、小数点以及其它非数字字符。
对输入的字符串进行转换时,首先跳过行首的空格字符,直到遇上数字、小数点或正负符号才开始做转换,而再遇到其它非数字字符时或字符串结束时才结束转换,并将结果返回。
当输入字符'q'时,程序结束。
例如:
in
6.348
-2.98
.525
q
### 输出样例1:
double型浮点数,显示小数点后六位。
当为正数时,浮点数第一位不显示'+'。
当为负数时,浮点数第一位显示'-'.
如:
out
6.348000
-2.980000
0.525000
### 输入样例2:
in
+5.e56
122w26.69
-1.52.3
q
### 输出样例2:
out
5.000000
122.000000
-1.520000
答案:若无答案欢迎评论
double myatof(char s[])
{
double val=0.0,power=1.0;
int i,sign=1;
for(i=0;s[i]==' ';i++)
;
if(s[i]=='+'||s[i]=='-')
{
sign=(s[i]=='-')?-1:1;
i++;
}
for(;(s[i]>='0' && s[i]<='9');i++)
val=val*10+(s[i]-'0');
if(s[i]=='.')
{
i++;
for(;s[i]>='0' && s[i]<='9';i++)
{
val=val*10+(s[i]-'0');
power=power*10;
}
}
if(val==0) sign=1;
return sign*val/power;
}
### 函数接口定义:
c++
函数接口如下:
double myatof(char s[]);
其中s[ ]是输入的数字型字符串,函数返回一个double类型的浮点数。
### 裁判测试程序样例:
c++
主函数中通过键盘输入一组字符串,调用myatof函数进行转换并打印输出 。
#include "stdio.h"
#define N 20
double myatof(char s[]);
int main()
{
double num;
char s[N];
while(1)
{
scanf("%s",s);
if (s[0]=='q') break;
num=myatof(s);
printf("%f\n",num);
}
return 0;
}
/* 请在这里填写答案 */
### 输入样例1:
输入多个数字型的字符串,每个字符串之间换行符隔开。字符串可能包括空格符、正负符号、小数点以及其它非数字字符。
对输入的字符串进行转换时,首先跳过行首的空格字符,直到遇上数字、小数点或正负符号才开始做转换,而再遇到其它非数字字符时或字符串结束时才结束转换,并将结果返回。
当输入字符'q'时,程序结束。
例如:
in
6.348
-2.98
.525
q
### 输出样例1:
double型浮点数,显示小数点后六位。
当为正数时,浮点数第一位不显示'+'。
当为负数时,浮点数第一位显示'-'.
如:
out
6.348000
-2.980000
0.525000
### 输入样例2:
in
+5.e56
122w26.69
-1.52.3
q
### 输出样例2:
out
5.000000
122.000000
-1.520000
答案:若无答案欢迎评论
double myatof(char s[])
{
double val=0.0,power=1.0;
int i,sign=1;
for(i=0;s[i]==' ';i++)
;
if(s[i]=='+'||s[i]=='-')
{
sign=(s[i]=='-')?-1:1;
i++;
}
for(;(s[i]>='0' && s[i]<='9');i++)
val=val*10+(s[i]-'0');
if(s[i]=='.')
{
i++;
for(;s[i]>='0' && s[i]<='9';i++)
{
val=val*10+(s[i]-'0');
power=power*10;
}
}
if(val==0) sign=1;
return sign*val/power;
}