《C程序设计语言》第二版练习4-2参考程序

//对atof函数进行扩展,使它能够处理形如123.45e-6的科学计数法,其中
//浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 1000
double atof(char s[]);
int getline(char s2[], int lim);
int main(void)
{
	char s1[SIZE];
	double result;
	while (getline(s1, SIZE) > 0)
	{
		result = atof(s1);
		printf("%lf\n", result);
	}
	system("pause");
	return 0;
}
int getline(char s2[], int lim)
{
	int i, c;
	for (i = 0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; i++)
	{
		s2[i] = c;
	}
	if (c == '\n')
	{
		s2[i++] = c;
	}
	s2[i] = '\0';
	return i;
}
double atof(char s[])
{
	double val, power, index;
	int i, sign, digit;
	int flag = 1;
	for (i = 0; isspace(s[i]); i++)
		;
	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.0*power;
	}
	if (s[i] == 'e' || s[i] == 'E')
	{
		i++;
	}
	if (s[i] == '-')
	{
		i++;
		flag = -1;
	}
	for (index = 1.0; isdigit(s[i]); i++)
	{
		for (digit = s[i] - '0'; digit > 0; digit--)
		{
			index = 10.0*index;
		}
	}
	if (flag > 0)
	{
		return  (sign*val / power) * index;
	}
	else
		return sign*val / power / index;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值