c语言编写简单的科学计算器

不是太复杂的,只要能计算多项式,中间有括号就优先计算括号里的,乘法优先级比加号高就行。
不用科学计算器 能实现加减程序的多项式运算就行。

/*/////////////////////////////////////////////////////////////
* 功能:实现一个计算器程序
* 作者:
* 时间:
*////////////////////////////////////////////////////////////*/

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <cstring>
using namespace std;

enum types { DELIMITER = 1, VARIABLE, NUMBER};//定义枚举类型把DELIMITER初试化为1后面
//的相应的是前面值+1

class Info
{
public:
void displayInfo();
};

class parser
{
char *exp_ptr; // 定义一个指向表达式的指针
char token[80]; // 存储表达式中的字符变量
char tok_type; // 存储具体是什么类型
void eval_exp2(double &result);
void eval_exp3(double &result);
void eval_exp4(double &result);
void eval_exp5(double &result);
void eval_exp6(double &result);
void atom(double &result);
void get_token();
void serror(int error);
int isdelim(char c);
public:
parser();//类的构照函数
double eval_exp(char *exp);
};

void Info::displayInfo()
{
cout<<"==============================================================\n";
cout<<"====================这是一个计算器程序========================\n";
cout<<"==============================================================\n";
cout<<"* 说明:可以进行+ - * \ % ^ 操作您还可以用括号输入您的表达式 *\n";
cout<<"* 您输入表达式不需要输=号 例:您可输入(6+7)*5\\7+4 然后回车 *\n";
cout<<"==============================================================\n\n";
cout << "\t\t输入点号(.)回车,结束程序运行\n\n";
}

// 类构造函数的具体实现
parser::parser()
{
exp_ptr = NULL;//把exp_ptr的指针初始化为空
}

// 方法eval_exp的具体实现过程
double parser::eval_exp(char *exp)
{
double result;

exp_ptr = exp;//把传递过来的参数exp赋给exp_ptr

get_token();
if(!*token)
{
serror(2); //输出没有任何表达式的错误信息
return 0.0;
}
eval_exp2(result);
if(*token) serror(0); // last token must be null
return result;
}

// 两个变量字符是加或者减操作
void parser::eval_exp2(double &result)
{
register char op;
double temp;

eval_exp3(result);
while((op = *token) == '+' || op == '-')
{
get_token();
eval_exp3(temp);
switch(op)
{
case '-':
result = result - temp;
break;
case '+':
result = result + temp;
break;
}
}
}

// 两个变量是乘或者除操作 或者是取余
void parser::eval_exp3(double &result)
{
register char op;
double temp;

eval_exp4(result);
while((op = *token) == '*' || op == '/' || op == '%')
{
get_token();
eval_exp4(temp);
switch(op)
{
case '*':
result = result * temp;
break;
case '/':
result = result / temp;
break;
case '%':
result = (int) result % (int) temp;
break;
}
}
}

// 进行^运算
void parser::eval_exp4(double &result)
{
double temp, ex;
register int t;

eval_exp5(result);
if(*token== '^')
{
get_token();
eval_exp4(temp);
ex = result;
if(temp==0.0)
{
result = 1.0;
return;
}
for(t=(int)temp-1; t>0; --t) result = result * (double)ex;
}
}

void parser::eval_exp5(double &result)
{
register char op;

op = 0;
if((tok_type == DELIMITER) && *token=='+' || *token == '-')
{
op = *token;
get_token();
}
eval_exp6(result);
if(op=='-') result = -result;
}

// 进行有括号的算法
void parser::eval_exp6(double &result)
{
if((*token == '('))
{
get_token();
eval_exp2(result);
if(*token != ')')
serror(1);
get_token();
}
else atom(result);
}

// 取得数值
void parser::atom(double &result)
{
switch(tok_type)
{
case NUMBER:
result = atof(token);
get_token();
return;
default:
serror(0);
}
}

// 输出出错信息.
void parser::serror(int error)
{
static char *e[]=
{
"语法错误",
"不对称的括号",
"您没有输入任何的表达式!"
};
cout << e[error] << endl;
}

// 取得下一个token值
void parser::get_token()
{
register char *temp;

tok_type = 0;
temp = token;
*temp = '\0';

if(!*exp_ptr) return; // 如果到表达式末尾则返回

while(isspace(*exp_ptr)) ++exp_ptr; //

if(strchr("+-*/%^=()", *exp_ptr))
{ //用strchr函数在字符串"+-*/%^=()"中查找*exp_ptr指向的字符所在位置,判断返回值(非0为真就执行)以便是否执行以下语句
tok_type = DELIMITER;//把tok_type置为DELIMITER
// advance to next char
*temp++ = *exp_ptr++;
}
else if(isalpha(*exp_ptr))
{
while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++; //isdelim判断是否是分隔符,当*exp_ptr指向的字符不为分隔符时把值负给*temp
tok_type = VARIABLE;//把tok_type置为VARIABLE
}
else if(isdigit(*exp_ptr))
{ // isdigit判断*exp_ptr指向的字符是否为数字
while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;
tok_type = NUMBER;
}

*temp = '\0';
}

// isdelim函数的具体实现,如果参数是一个分割符则返回真
int parser::isdelim(char c)
{
if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)//把"+-/*%^=()09\r定义非分隔符
return 1;
return 0;
}
int main()
{
char expstr[80];
Info prgInfo;
parser ob; // 创建一个parser类型的实例
prgInfo.displayInfo();

for(;;)
{
cout << "请输入你要计算的表达式: ";
cin.getline(expstr, 79);//读入表达式到名为expstr的数组中,数组大小为79
if(*expstr=='.') break;
cout << "计数的结果是: " << ob.eval_exp(expstr) << "\n\n";
};

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-10
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main()
{
int i,j,k,len,result=0;
char str[200],str1[10],ch;

printf("请输入加减运算多项式:\n");
gets(str);

len=strlen(str);
j=0;
for(i=0; i<len; i++)
{
if(str[i]!=' ')
{
str[j]=str[i];
j=j+1;
}
}
str[j]='\0';
k=0;
ch=0;
for(i=0; i<j; i++)
{
if(str[i]!='+' && str[i]!='-')
{
str1[k++]=str[i];
}
else
{
str1[k]=0;
if(ch=='+') result+=atoi(str1);
else if(ch=='-') result-=atoi(str1);
else result=atoi(str1);
ch=str[i];
k=0;
}
}
if(k>0)
{
str1[k]=0;
if(ch=='+') result+=atoi(str1);
else if(ch=='-') result-=atoi(str1);
else result=atoi(str1);
}
printf("%s=%d\n",str,result);
}

用c语言设计一个简单的加减乘除计算器
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File。2、输入预处理命令和主函数:#include \/*函数头:输入输出头文件*\/,void main()\/*空类型:主函数*\/。3、定义变量:int a,b,d; \/*定义变量的数据类型为整型*\/,char c;\/*定义变量的数据类型为字符型*\/。4、输入四则运算式:pri...

用c语言程序设计一个简单计算器,求其源代码
char str1[] = "1230.456+-789*\/知消扒Qc=^%";char cnum[5], str2[20] = "", c;int x, y, x0, y0, i, j, v, m, n, act, flag = 1;\/* Function prototypes *\/ void drawboder(void);void initialize(void);void computer(void);void changetextstyle(int font, int di...

用C语言实现一个简单的计算器,要求有面积和体积输出。
c = a * b; \/\/ 计算面积 d = 2 * (a + b); \/\/ 计算周长 printf("面积 S=%.2f,体积 V=%.2f\\n", c, d); \/\/ 输出面积和周长 return 0;} ```

C语言计算器 功能要求: 可以输入0-9数字、小数点、正负数 可以进行加 ...
下面是使用 C 语言设计简易科学计算器的示例代码:include <stdio.h> include <stdlib.h> include <math.h> int main(){ char op;double num1, num2;printf("请输入数学表达式(如:1 + 2):");scanf("%lf %c %lf", &num1, &op, &num2);switch (op){ case '+':printf("结果...

如何用C语言编写一个简单的计算器?
1、首先在打开的C语言软件窗口中,在Main函数的上方,写上阶乘函数的框架,如下图所示。2、然后定义一个变量【result】,如下图所示。3、然后输入if判断语句,就可以写下程序的关键语句,如下图所示。4、接下来就可以调用输出,如下图所示。5、最后点击运行,如下图所示,就可以运行测试。

怎么用C语言编写计算器程序?
><\/<\/<\/#include <stdio.h><\/int main() {<\/ char operator;<\/ double num1, num2, result;<\/ printf("欢迎来到C语言计算器!请输入运算符 (+, -, *, \/): ");<\/ scanf("%c", &operator);<\/ printf("请输入两个数字: ");<\/ scanf("%lf %lf", &num1...

用c语言 编写计算器程序
1、首先我们需要在Dev C++软件中创建一个C语言项目,项目类型选择控制台程序,如下图所示 2、接下来我们在项目下面新建C语言文件,如下图所示 3、然后我们在C文件中写入计算器逻辑代码,主要是让用户输入计算方式,然后程序自动计算,如下图所示 4、接下来我们点击运行菜单,选择下拉菜单中的运行选项,如...

如何用c语言编写一个简易计算器??
include<stdio.h> int main(){ int i;for(i=0;i<26;i++)printf("%c ",i+'A');for(i=0;i<26;i++)printf("%c ",i+'a');return 0;}

用C语言怎么写出一个计算器?
清楚算法就可以很快写出:(1)只需输入2个变量n和sum,且sum=n+sum.(2)确定n的范围为n<=100 (3)循环体为 for(n=1;n<=100;n++)sum+=n;(4)根据C语言编辑规则写出程序 用for循环求:include<stdio.h> int main(void){ int n,sum=0;for(n=1;n<=100;n++)sum+=n;printf("1...

用C语言编写一个简单的计算器1
scanf( "%c", &ch ); switch( ch ) { case '+':ret = num1 + num2;break;case '-':ret = num1 - num2;break;case '*':ret = num1 * num2;break;case '\/':ret = num1 \/ num2;break;default:break;} printf( "结果:%.2lf\\n", ret ); return 0;} 写个简单易懂的...

相似回答