`
carolaif
  • 浏览: 70610 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

C程序设计语言(第二版) 4-2

阅读更多

4-2  对atof函数进行扩充,使它可以处理123.45e-6的科学表示法。其中,浮点数后面可能会紧跟一个e或者E以及一个指数(可能有正负号)

 

#include <ctype.h>  
#include <stdio.h>

#define MAXLINE 100
int getline(char line[], int max);

double atof(char s[])
{	int i;
	double val;
	double power;
	int sign;//用于标记+ - 号
	int flag=-1;//标记指数的正负
	int zhsh;//指数
	double powerzh;
	for(i=0;isspace(s[i]);i++)
		;
	if(s[i]=='-')
	{
		sign=-1;
		i++;
	}
	else if(s[i]=='+')
	{
		sign=1;
		i++;
	}
	else
	{
		sign=1;
	}
		
	for(val=0.0;isdigit(s[i]);i++)
	{
		val= val*10 + ( s[i]-'0');
	}

	if(s[i]=='.')
		i++;
	for(power=1.0;isdigit(s[i]);i++)
	{
		val = val*10 + (s[i]-'0');
		power = power*10;
	}

	val= sign*val/power;

	if(s[i]=='e'||s[i]=='E')
		i++;

	if(isdigit(s[i]))
		flag=1;
	else if (s[i]=='+')
	{
		flag=1;
		i++;
	}
	else if (s[i]=='-')
	{
		flag=-1;
		i++;
	}

	zhsh=s[i]-'0';////////////////☆☆☆
	powerzh=1.0;
	for(int count =0; count<zhsh;count++)
		powerzh = 10* powerzh;

	if(flag==1)
		val = val*powerzh;
	else if(flag==-1)
		val = 1.0*val/powerzh;

	return val;

}

/* getline:  get line into s, return length */
int getline(char s[], int lim)
{
	int c, i;
	i = 0;
	while (--lim > 0 && (c=getchar()) != EOF && c != '\n')
		s[i++] = c;
	s[i] = '\0';
	return i;
}

int 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;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics