#include <stdio.h>
#include <conio.h>
int char_Int(char); /*把单字符型转换成整*/
long long_Int(int); /*传入位数返回对应位数的单位大小
例如: long_Int(3) 返回 100*/
double double_Int(int); /*传入小数点位数返回对应小数点位数的单位大小
例如: long_Int(3) 返回 0.001*/
double string_Double(char *); /*将字符串转换成 double 型*/
long string_Long(char *); /*将字符串转换成 long 型*/
void OutputResult(char *); /*显示结果*/
int main(void)
{
char getCharacter; /*临时存放从控制台得到的字符*/
char saveCharacter[50]; /*存放整个输入的字符*/
int i=0;
clrscr(); /*清屏*/
while(1)
{
getCharacter=getch(); /*从控制台得到一个字符
但不显示出来*/
/*合符条件的字符*/
if((getCharacter>='0' && getCharacter<='9')
|| getCharacter=='.'
|| getCharacter=='+'
|| getCharacter=='-'
|| getCharacter=='*'
|| getCharacter=='/'
|| getCharacter==' ')
{
/*保存字符*/
saveCharacter[i]=getCharacter;
/*显示输入的字符*/
printf("%c",getCharacter);
/*当前下标加一*/
i++;
}
else if(getCharacter==13) /*回车*/
{
/*在字符数组最后加上'\0'
以便识别*/
saveCharacter[i]='\0';
/*显示结果*/
OutputResult(saveCharacter);
}
else if(getCharacter==8) /*BackSpace键*/
{
/*清除前一个字符*/
printf("\b \b");
/*当前下标减一*/
i--;
}
else if(getCharacter=='c' || getCharacter=='C')
{
i=0;
clrscr();
}
else if(getCharacter=='e' || getCharacter=='E')
{
break;
}
else /*其它输入*/
continue;
}
}
void OutputResult(char *saveCharacter)
{
char tempString[20]; /*临时用的字符数组*/
int i=0;
int j=0;
double numFirst1=0; /*存放第一个double型操作数*/
long numFirst2=0; /*存放第一个long型操作数*/
double numSecond1=0; /*存放第二个double型操作数*/
long numSecond2=0; /*存放第二个long型操作数*/
double resultDouble=0; /*存放一个double型的结果数*/
long resultLong=0; /*存放一个long型的结果数*/
int FloatFlag=0; /*标记操作数中是否有浮点数*/
char operatorChar='\0'; /*存放操作符*/
for(j=0;;j++)
{
if(saveCharacter[j]==' '
|| saveCharacter[j]=='+'
|| saveCharacter[j]=='-'
|| saveCharacter[j]=='*'
|| saveCharacter[j]=='/'
)
{
tempString[j]='\0';
break;
}
else
{
tempString[j]=saveCharacter[j];
if(tempString[j]=='.')
FloatFlag=1;
}
if(j>=20)
{
clrscr();
printf("Data is too large!");
break;
}
}
if(FloatFlag==1)
numFirst1=string_Double(tempString);
else
{numFirst2=string_Long(tempString); printf("OK");}
i=0;
for(FloatFlag=0;saveCharacter[j]!='\0';j++)
{
if((saveCharacter[j]>='0' && saveCharacter[j]<='9')
|| saveCharacter[j]=='.')
{
tempString[i]=saveCharacter[j];
if(saveCharacter[j]=='.')
FloatFlag=1;
i++;
}
else if(saveCharacter[j]=='+'
|| saveCharacter[j]=='-'
|| saveCharacter[j]=='*'
|| saveCharacter[j]=='/')
{
operatorChar=saveCharacter[j];
}
}
tempString[i]='\0';
if(FloatFlag==1)
numSecond1=string_Double(tempString);
else
numSecond2=string_Long(tempString);
if(operatorChar=='+')
if(numFirst1==0)
{
if(numSecond1==0)
resultLong=numFirst2+numSecond2;
else
resultDouble=numFirst2+numSecond1;
}
else
{
if(numSecond1==0)
resultDouble=numFirst1+numSecond2;
else
resultDouble=numFirst1+numSecond1;
}
else if(operatorChar=='-')
if(numFirst1==0)
{
if(numSecond1==0)
resultLong=numFirst2-numSecond2;
else
resultDouble=numFirst2-numSecond1;
}
else
{
if(numSecond1==0)
resultDouble=numFirst1-numSecond2;
else
resultDouble=numFirst1-numSecond1;
}
else if(operatorChar=='*')
if(numFirst1==0)
{
if(numSecond1==0)
resultLong=numFirst2*numSecond2;
else
resultDouble=numFirst2*numSecond1;
}
else
{
if(numSecond1==0)
resultDouble=numFirst1*numSecond2;
else
resultDouble=numFirst1*numSecond1;
}
else if(operatorChar=='/')
if(numFirst1==0)
{
if(numSecond1==0)
{
numSecond1=numSecond2;
resultDouble=numFirst2/numSecond1;
}
else
resultDouble=numFirst2/numSecond1;
}
else
{
if(numSecond1==0)
resultDouble=numFirst1/numSecond2;
else
resultDouble=numFirst1/numSecond1;
}
clrscr();
if(resultDouble==0)
printf("%ld",resultLong);
else
printf("%f",resultDouble);
}
long string_Long(char *string)
{
int i;
int j;
long temp=0;
for(i=0;string[i]!='\0';i++) ;
for(j=0;string[j]!='\0';j++,i--)
{
temp+=char_Int(string[j])*(long_Int(i));
}
return temp;
}
double string_Double(char *string)
{
int i;
int j;
int k=1;
double temp=0;
for(i=0;string[i]!='.';i++) ;
for(j=0;string[j]!='\0';j++)
{
if(i!=0)
{
temp+=char_Int(string[j])*(long_Int(i));
i--;
}
else if(string[j]!='.')
{
temp+=char_Int(string[j])*(double_Int(k));
k++;
}
}
return temp;
}
double double_Int(int INT)
{
if(INT==0)
return 1.0;
else if(INT==1)
return 1.0/10.0;
else if(INT==2)
return 1.0/100.0;
else if(INT==3)
return 1.0/1000.0;
else if(INT==4)
return 1.0/10000.0;
else if(INT==5)
return 1.0/100000.0;
else if(INT==6)
return 1.0/1000000.0;
else if(INT==7)
return 1.0/10000000.0;
else if(INT==8)
return 1.0/100000000.0;
else if(INT==9)
return 1.0/1000000000.0;
}
int char_Int(char ch)
{
if(ch=='0')
return 0;
else if(ch=='1')
return 1;
else if(ch=='2')
return 2;
else if(ch=='3')
return 3;
else if(ch=='4')
return 4;
else if(ch=='5')
return 5;
else if(ch=='6')
return 6;
else if(ch=='7')
return 7;
else if(ch=='8')
return 8;
else if(ch=='9')
return 9;
}
long long_Int(int INT)
{
if(INT==0)
return 0;
else if(INT==1)
return 1;
else if(INT==2)
return 10;
else if(INT==3)
return 100;
else if(INT==4)
return 1000;
else if(INT==5)
return 10000;
else if(INT==6)
return 100000;
else if(INT==7)
return 1000000;
else if(INT==8)
return 10000000;
else if(INT==9)
return 100000000;
}
这个程序的第一个字符只能是数字,不能为'-' '+' '*' '/' ...
由于时间问题,没有去设计结果可利用的功能.