C语言高手,我要用c编写个小程序。可以实现的功能是:四则运算还有无数的括号,只要输入数字就可以算出结 用C语言编写带括号的四则运算

作者&投稿:悟码 (若有异议请与网页底部的电邮联系)
#include<iostream>
using namespace std;
class calculator
{
public:
char token;
int exp( void );
int term( void );
int factor( void );
void match( char expectedToken );
void error( void );
};
int calculator::exp(void)
{
int temp = term(); /*计算比加减运算优先级别高的部分*/
while (( token == '+' ) || ( token == '-' ))
switch ( token )
{
case '+':
match('+'); /*加法*/
temp += term();
break;
case '-':
match('-');
temp -= term(); /*减法*/
break;
}
return temp;
}
int calculator::term( void )
{
int div; /*除数*/
int temp = factor(); /*计算比乘除运算优先级别高的部分*/
while (( token == '*' ) || ( token == '/' ))
switch ( token )
{
case '*':
match('*'); /*乘法*/
temp *= factor();
break;
case '/':
match('/'); /*除法*/
div = factor();
if ( div == 0 ) /*需要判断除数是否为0*/
{
fprintf(stderr, "除数为0.\n" );
exit(1);
}
temp /= div;
break;
}
return temp;
}

int calculator::factor( void )
{
int temp;
if ( token == '(' ) /*带有括号的运算*/
{
match( '(' );
temp = exp();
match(')');
}

else if ( isalnum(token)) //实际的数字
{
ungetc( token, stdin ); //将读入的字符退还给输入流
scanf( "%d", &temp ); //读出数字
token = getchar(); //读出当前的标志
}
else error(); //不是括号也不是数字
return temp;
}

void calculator::match( char expectedToken ) //对当前的标志进行匹配
{
if ( token == expectedToken ) token = getchar(); //匹配成功,获取下一个标志
else error(); //匹配不成功,报告错误
}

void calculator::error( void ) //报告出错信息的函数
{
cout<< "输入有错误"<<endl;
exit( 1 );
}

int main ()
{
cout<<"================================================================\n";
cout<<"* 递归实现的四则运算表达式求值程序 *\n";
cout<<"****************************************************************\n";
cout<<"使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n";
cout<<"*****************************************************************\n\n";
int result; //运算的结果
cout<<"请输入表达式: ";
calculator c1;
c1.token = getchar(); //载入第一个符号
result = c1.exp(); //进行计算
if ( c1.token == '\n' ) // 是否一行结束
cout<< " >> 表达式的计算结果为 : "<<result<<endl;
else c1.error(); //出现了例外的字符
return 0;
}

不过是C++的,差不多了。
直接输入算式就可以给出结果,在gcc3.4.5下编译通过,vc我没有试过

你说的那不就是计算器吗?

你说的是固定格式还是要输入数字和括号?
固定数字容易,输入带括号繁一些,但也能做

这个要用栈 挺难写的……

用C实现一个四则运算程序~

可以根据式子生成一棵树,优先级越高的运算符越接近leaf节点,然后计算就可以了

such as:1+2*3
+
/ \
1 *
/ \
2 3

#include
#include "windows.h"
main()
{
char Exp[1024]={0},Oper[100]={0};
int Num[200]={0},Expi=0,Operi=0,Numi=0;
boolean isnum=FALSE;
printf("input a Expression:");
scanf("%s",Exp);
while(Exp[Expi]!='\0')
{
switch(Exp[Expi]) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
Num[Numi]=Num[Numi]*10+Exp[Expi]-'0';
isnum=TRUE;
break;
}

case '+':
case '-':
{
if(isnum) //又录入一个新数据
{
Numi++;
isnum=FALSE;
}
while(Operi!=0&&Oper[Operi-1]!='(')
{
if(Operi<1||Numi<2)
{
printf("Expression is error!
");
exit(0);
}
switch(Oper[Operi-1]) {
case '+':
Num[Numi-2]=Num[Numi-2]+Num[Numi-1];
Num[Numi-1]=0;
Numi--;
Oper[Operi-1]='\0';
Operi--;
break;
case '-':
Num[Numi-2]=Num[Numi-2]-Num[Numi-1];
Num[Numi-1]=0;
Numi--;
Oper[Operi-1]='\0';
Operi--;
break;
case '*':
Num[Numi-2]=Num[Numi-2]*Num[Numi-1];
Num[Numi-1]=0;
Numi--;
Oper[Operi-1]='\0';
Operi--;
break;
case '/':
Num[Numi-2]=Num[Numi-2]/Num[Numi-1];
Num[Numi-1]=0;
Numi--;
Oper[Operi-1]='\0';
Operi--;
break;
}
}
Oper[Operi]=Exp[Expi];
Operi++;
break;
}

怎么用c语言编写一个小程序?
答:1、首先打开DEV C++软件,点击“新建源代码”,在编辑页面输入以下代码。2、因为题目要求我们先输入一个整数,所以在定义变量时,就应该将其定义为整数型,注意,在输入,输出函数中,整数型对应的是“%d”。3、接下来就要对输入的整数进行判断,在C语言中,if是判断语句,所以用它来对整数进行判断。if...

C语言高手,我要用c编写个小程序。可以实现的功能是:四则运算还有无数...
答:if ( token == expectedToken ) token = getchar(); //匹配成功,获取下一个标志 else error(); //匹配不成功,报告错误 } void calculator::error( void ) //报告出错信息的函数 { cout<< "输入有错误"<<endl;exit( 1 );

用C语言编写一个简单的图书管理小程序
答:源代码如下:include<iostream> include<iomanip> include<string> include<fstream> include<stdio.h> using namespace std;const int maxb=10000; //最多的图书 class book//图书类 { int tag; //删除标记1:已删0:未删 int number; //isbn书号 char name[20]; ...

c语言能写出什么样有意思的小程序?
答:让机箱唱歌(不是音响哦,也不是耳麦) 原理就是调用Beep函数,控制时长。以下代码在vc++ 2008编译通过 // beep.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"include "windows.h"define ONE_BEEP 600 define HALF_BEEP 300#define NOTE_1 440 define NOTE_2 495 defin...

如何用C语言编写一个可以自动运行某些程序的小程序?
答:include<windows.h> include<stdio.h> pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")void main(){ system("title 源世界整理");int x,y;while(1){x=rand()%801;y=rand()%601;SetCursorPos(x,y);} return ;} ...

用C语言写个程序,输入一个hello就能出来一个?
答:1、点击确定即可,创建出一个helloworld.c的小程序,然后我们就可以编写我们的Hello World小程序了。此时就需要我们的VC++ 6.0来编译此程序,编译无错误才运行此程序,编译按钮和运行按钮如下图的红色箭头处:2、或者可以点击组建工具栏下的编译菜单项,然后再点击执行菜单项,也有快捷键,按Ctrl+F7编译...

编写一个C语言小程序
答:程序一 include<stdio.h> void main(){ char c;int en = 0, space = 0, num = 0, other = 0;do { scanf("%c", &c);if (c >= '0' && c <= '9')num++;else if (c == ' ')space++;else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')en++...

求c语言大佬帮助!帮我写个小程序,谢谢
答:int n);//在屏幕上输出数组各元素的值(逗号分隔)#define N (10)int main(){ int a[N],b[N],c[N*2],i; srand(time(NULL)); Init(a,N); Print(a,N); Short(a,N); Print(a,N); Init(b,N); Print(b,N); Short(...

谁能用C语言帮我写几个小程序 急求
答:int main(){ int max(int x,int y,int z);int a,b,c,d;scanf("%d%d%d",&a,&b,&c); //scanf%d间不能有逗号,后面是输入的地址因此得加& d=max(a,b,c); //输入的是abc,不是x,y,z//x,y,z是形参a,b,c是实参 printf("max=%d",d);//不是print是printf return 0;} in...

求一个用C语言编写的小游戏代码
答:/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++6.0、turbo………)上都能运行,你还可以进一步改进。这是一个类似贪吃蛇的小游戏。祝你好运*//*贪吃蛇*/#include<stdio.h>#include#include<conio.h>#include<stdlib.h>int head=3 ,tail=0;in...