c语言编程 设计一个计算器

要求:1、能时间加减乘除的混合运算
2、能计算三角函数,反三角函数
3、log、ln、次幂、开方的计算
4、要求对数据范围的输入有判断,比如除数不能为零,根号下不能为负数,如果数据输入不在正确的范围内需要函数判断,且输出你所输入的数据有误

第1个回答  2012-07-02
只能给你一个思路,首先你要确定你做的交互界面是什么样的,比如画出来的对话框,还是使用命令行的输入;主要的工作量在解析用户的输入上,比如 输入 (1+3)*5, 网上有一大堆这样解析的方式;其他实现log 开方等,有math lib 可以调用,不够用的可以自己补充,也可以上网上找现成的code。
希望对你有帮助。
第2个回答  2012-07-10
#include "std_lib_facilities.h"
#include "math.h"
class Token {
public:
char kind; // what kind of token
double value; // for numbers: a value
Token(char ch) // make a Token from a char
:kind(ch), value(0) { }
Token(char ch, double val) // make a Token from a char and a double
:kind(ch), value(val) { }
};
//------------------------------------------------------------------------------
class Token_stream {
public:
Token_stream(); // make a Token_stream that reads from cin
Token get(); // get a Token (get() is defined elsewhere)
void putback(Token t); // put a Token back
private:
bool full; // is there a Token in the buffer?
Token buffer; // here is where we keep a Token put back using putback()
};
//------------------------------------------------------------------------------
Token_stream::Token_stream()
:full(false), buffer(0) // no Token in buffer
{
}
//------------------------------------------------------------------------------

void Token_stream::putback(Token t)
{
if (full) error("putback() into a full buffer");
buffer = t; // copy t to buffer
full = true; // buffer is now full
}
//------------------------------------------------------------------------------
Token Token_stream::get()
{
if (full) { // do we already have a Token ready?
// remove token from buffer
full=false;
return buffer;
}
char ch;
cin >> ch;
switch (ch) {
case ';':
case 'q':
case '(': case ')': case '+': case '-': case '*': case '/': case '^':case '!':case '%':
return Token(ch);
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch);
double val;
cin >> val;
return Token('8',val);
}
default:
error("Bad token");
}
}
//------------------------------------------------------------------------------
Token_stream ts;
//------------------------------------------------------------------------------
double expression();
//------------------------------------------------------------------------------
// deal with numbers and parentheses
double primary()
{
Token t = ts.get();
switch (t.kind) {
case '+':return primary();
case '-':return -primary();
case '(':
{
double d = expression();
t = ts.get();
if (t.kind != ')') error("')' expected");
return d;
}
case '8':
return t.value;
default:
error("primary expected");
}
}
//------------------------------------------------------------------------------

double term()
{
double left = primary();
Token t = ts.get();
while(true) {
switch (t.kind) {
case '^':
{
double lefttemp;
lefttemp=left;
left=pow(lefttemp,primary());
t = ts.get();
break;
}
case '!':
{
double v = 1;
for(double i=left;i>0;i--)
v=v*i;
left = v;
t = ts.get();
break;
}
case '*':
left *= primary();
t = ts.get();
break;
case '/':
{
double d = primary();
if (d == 0) error("divide by zero");
left /= d;
t = ts.get();
break;
}
default:
ts.putback(t); // put t back into the token stream
return left;
}
}
}
//------------------------------------------------------------------------------
// deal with + and -
double expression()
{
double left = term();
Token t = ts.get();
while(true) {
switch(t.kind) {
case '+':
left += term();
t = ts.get();
break;
case '-':
left -= term();
t = ts.get();
break;
default:
ts.putback(t);
return left;
}
}
}
//------------------------------------------------------------------------------
int main(){
try
{
double val = 0;
while (cin) {
Token t = ts.get();
if (t.kind == 'q') break;
if (t.kind == ';')
cout << "=" << val << '\n';
else
ts.putback(t);
val = expression();
}
}
catch (exception& e) {
cerr << "error: " << e.what() << '\n';
return 1;
}
catch (...) {
cerr << "Oops: unknown exception!\n";
return 2;
}
}
//------------------------------------------------------------------------------

仅供参考~本回答被提问者采纳

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

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

c语言加减乘除设计;大神改下要求写一个简单的计算器,输入一个数学表达式...
首先,初始化两个数组:一个用于存储输入的符号,另一个用于存放数字。同时,定义一个栈来保存数字。每当从输入中读取到一个数字,就将其压入栈中。对于每个符号,根据其类型(加、减、乘、除),从栈中弹出相应的数字进行计算,并将结果压回栈中。如此循环,直至处理完所有输入。具体实现时,记得对...

用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语言实现一个计算器?
1、首先打开DEV C++软件,点击“新建源代码”,在编辑页面输入以下代码。2、因为题目要求我们先输入一个整数,所以在定义变量时,就应该将其定义为整数型,注意,在输入,输出函数中,整数型对应的是“%d”。3、接下来就要对输入的整数进行判断,在C语言中,if是判断语句,所以用它来对整数进行判断。if...

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

用c语言编写一个计算器。
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

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

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("结果...

相似回答