编写函数atof(),能把输入的字符串转换成浮点数。要求能处理科学计算表达式,如:
编写函数atof(),能把输入的字符串转换成浮点数。要求能处理科学计算表达式,如:“123.45e-5”详细一点,最好经过TC软件验证过的,就是TC的,不是VC什么的,要...
编写函数atof(),能把输入的字符串转换成浮点数。要求能处理科学计算表达式,如:
“123.45e-5”
详细一点,最好经过TC软件验证过的,就是TC的,不是VC什么的,要验证正确的!!!而且123.45e-5不过是一个例子,没有必要专门写出,最好有一个函数输入这一类的数~谢啦 展开
“123.45e-5”
详细一点,最好经过TC软件验证过的,就是TC的,不是VC什么的,要验证正确的!!!而且123.45e-5不过是一个例子,没有必要专门写出,最好有一个函数输入这一类的数~谢啦 展开
2008-05-07
展开全部
#include <stdio.h>
float atof(char *c)
{
float f;
sscanf(c,"%f",&f);
return f;
}
int main(void)
{
char a[]="123.45e-5";
float b=atof(a);
printf("%f",b);
}
******************************************
//---------------------------------------------------------------------------
#include <stdio.h>
float atof(char *c)
{
float f=0,t=0,te=1;
int i,op=1,eop=0,ep=0,cf=0;;
for (i = 0; c[i]; i++) {
if (c[i]=='.') {
op=0;
}
if (c[i]=='e'||c[i]=='E') {
eop=1;
op=2;
}
if (eop&&c[i]=='-') {
cf=1;
}
else if (eop&&c[i]=='+') {
cf=0;
}
if (op==1&&c[i]>='0'&&c[i]<='9') {
f=f*10+(c[i]-'0');
}
else if(!op&&c[i]>='0'&&c[i]<='9'){
te*=10;
t=t*10+c[i]-'0';
}
else if (eop&&c[i]>='0'&&c[i]<='9') {
ep=ep*10+c[i]-'0';
}
}
f=f+t/te;
te=1;
for (i = 0; i<ep; i++) {
te*=10;
}
if (cf) {
return f/te;
}
else return f*te;
}
int main(void)
{
float f=0;
char a[]="123.45e-5";
f=atof(a);
return 0;
}
//---------------------------------------------------------------------------
********************************************
float atof(char *c)
{
float f=0,t=0,te=1;
int i,op=1,eop=0,ep=0,cf=0;;
for (i = 0; c[i]; i++) {
if (c[i]=='.') {
op=0;
}
if (c[i]=='e'||c[i]=='E') {
eop=1;
op=2;
}
if (eop&&c[i]=='-') {
cf=1;
}
else if (eop&&c[i]=='+') {
cf=0;
}
if (op==1&&c[i]>='0'&&c[i]<='9') {
f=f*10+(c[i]-'0');
}
else if(!op&&c[i]>='0'&&c[i]<='9'){
te*=10;
t=t*10+c[i]-'0';
}
else if (eop&&c[i]>='0'&&c[i]<='9') {
ep=ep*10+c[i]-'0';
}
}
f=f+t/te;
te=1;
for (i = 0; i<ep; i++) {
te*=10;
}
if (cf) {
return f/te;
}
else return f*te;
}
这个函数就是啊,之所以放在一个完整的程序中,只为了显示它的作用,并不是说只能转换"123.45e-5"这一个,难倒你看不出来这一点吗?
上面这个函数没有使用任何标准库函数,所以显得有些复杂,下面这个使用在stdio.h中声明的标准库函数sscanf(),因而很简单:
#include <stdio.h>
float atof(char *c)
{
float f;
sscanf(c,"%f",&f);
return f;
}
这两个函数的参数都是要转换的字符串,返回值是转换后的浮点数。
float atof(char *c)
{
float f;
sscanf(c,"%f",&f);
return f;
}
int main(void)
{
char a[]="123.45e-5";
float b=atof(a);
printf("%f",b);
}
******************************************
//---------------------------------------------------------------------------
#include <stdio.h>
float atof(char *c)
{
float f=0,t=0,te=1;
int i,op=1,eop=0,ep=0,cf=0;;
for (i = 0; c[i]; i++) {
if (c[i]=='.') {
op=0;
}
if (c[i]=='e'||c[i]=='E') {
eop=1;
op=2;
}
if (eop&&c[i]=='-') {
cf=1;
}
else if (eop&&c[i]=='+') {
cf=0;
}
if (op==1&&c[i]>='0'&&c[i]<='9') {
f=f*10+(c[i]-'0');
}
else if(!op&&c[i]>='0'&&c[i]<='9'){
te*=10;
t=t*10+c[i]-'0';
}
else if (eop&&c[i]>='0'&&c[i]<='9') {
ep=ep*10+c[i]-'0';
}
}
f=f+t/te;
te=1;
for (i = 0; i<ep; i++) {
te*=10;
}
if (cf) {
return f/te;
}
else return f*te;
}
int main(void)
{
float f=0;
char a[]="123.45e-5";
f=atof(a);
return 0;
}
//---------------------------------------------------------------------------
********************************************
float atof(char *c)
{
float f=0,t=0,te=1;
int i,op=1,eop=0,ep=0,cf=0;;
for (i = 0; c[i]; i++) {
if (c[i]=='.') {
op=0;
}
if (c[i]=='e'||c[i]=='E') {
eop=1;
op=2;
}
if (eop&&c[i]=='-') {
cf=1;
}
else if (eop&&c[i]=='+') {
cf=0;
}
if (op==1&&c[i]>='0'&&c[i]<='9') {
f=f*10+(c[i]-'0');
}
else if(!op&&c[i]>='0'&&c[i]<='9'){
te*=10;
t=t*10+c[i]-'0';
}
else if (eop&&c[i]>='0'&&c[i]<='9') {
ep=ep*10+c[i]-'0';
}
}
f=f+t/te;
te=1;
for (i = 0; i<ep; i++) {
te*=10;
}
if (cf) {
return f/te;
}
else return f*te;
}
这个函数就是啊,之所以放在一个完整的程序中,只为了显示它的作用,并不是说只能转换"123.45e-5"这一个,难倒你看不出来这一点吗?
上面这个函数没有使用任何标准库函数,所以显得有些复杂,下面这个使用在stdio.h中声明的标准库函数sscanf(),因而很简单:
#include <stdio.h>
float atof(char *c)
{
float f;
sscanf(c,"%f",&f);
return f;
}
这两个函数的参数都是要转换的字符串,返回值是转换后的浮点数。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询