|
/*************************************************
名称:计算器程序日期:2015年月1月11号
编写:扫帚菜(大鹤)
内容:通过此程序,实现简单的四则运算
**************************************************/
#include "stdio.h"
#include "stdlib.h"
float get_num(char **);
int main()
{
char a[80];
int sign = 1;/*正负号的标志*/
float result = 0;
char *p;
clrscr();
gets(a); /*由此输入字符*/
p=a;
if(*p=='-') /*如果第一个字符为'-'号则标志为负*/
{
sign=-1;
p++; /*指向下一个字符*/
}
while(*p!=0)
{
float m;
m=sign*get_num(&p);/*m被赋值为字符串的第一个数*/
while(*p=='*'||*p=='/')/*如果字符为'*'或'/'则一直进行*/
{
if(*p=='*')
{
p++;
m*=get_num(&p);
}
else
{
int div;
p++;
div=get_num(&p);
if(div==0)
{
printf("个驴!除数怎么为0?疯了吧~~~\n");
exit(1);
}
else
m/=div;
}
}
if(*p!='+'&&*p!='-'&&*p!=0)
{
printf("哈哈,非法字符=非法同居: %c\n",*p);
exit(0);
}
result+=m;
if(*p=='+')
{
sign=1;
p++;
}
else if(*p=='-')
{
sign=-1;
p++;
}
else
break;
}
printf("The result is %f\n", result);
getch();
return 0;
}
/*****************************************************
以下函数为计算函数,涉及较多指针和二级指针的知识,为C程
序比较难的部分,不做过多注释,因为只会越注越乱看不懂可
以问我,在下虽然是个菜鸟,但在这个程序上还得算是个老鸟
******************************************************/
float get_num(char **p)
{
float n =0, m = 10;
if(**p!='.'&&(**p<'0'||**p>'9'))
{
printf("不长脑子。乱输什么?运算符后面不是数行吧\n");
exit(1);
}
while(**p>='0'&&**p<='9')
{
n=n*10+**p-48;
(*p)++;
}
if(**p=='.')
{
(*p)++;
while(**p>='0' &&**p<='9')
{
n+=(**p-48)/m;
(*p)++;
m*=10;
}
}
return n;
}
|
|