作业帮 > 综合 > 作业

编写一个程序实现求解任意算术表达式的值

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/23 19:30:59
编写一个程序实现求解任意算术表达式的值
#include
#include
#include
#include
#include
#include
int Check_bracket(char *p_str);
int Get_SubString(char *p_substr, const char *p_str, int *p_bpos, int *p_length);
int Calc_SubExpr(char *p_result, const char *p_expr);
void Insert_SubExpr(char *p_str, const char *p_result, int p_bpos, int p_length);
int Change_StrToFloat(float *p_fdata, char *p_operator, const char *p_result, int *p_num);
int main( int argc, char *argv[])
{
int i;
int j;
int i_sts;
int i_sts1;
int i_sts2;
int i_pos;
int i_length;
char i_expr[256];
char i_subexpr[128];
char i_rusult[128];



while (1){
i = 0;
j = 0;
i_sts = 0;
i_sts1 = 0;
i_sts2 = 0;
i_pos = 0;
i_length = 0;
memset(i_expr, 0x00, sizeof(i_expr));
memset(i_subexpr, 0x00, sizeof(i_subexpr));
memset(i_rusult, 0x00, sizeof(i_rusult));
/* */

printf("please intput the expression > ");
gets( i_expr );

if(memcmp(i_expr,"exit",sizeof("exit"))==0) break;
/* */
while ( i_sts == 0 )
{
memset(i_subexpr, 0x00, sizeof(i_subexpr));
memset(i_rusult, 0x00, sizeof(i_rusult));
i_sts = Check_bracket( i_expr );
if( i_sts == -1 )
{
printf("This is not a expression\n");
break;
}
else if (i_sts == 2)
{
i_sts2 = Calc_SubExpr(i_rusult, i_expr);
if (i_sts2 != 0)
{
printf("This is not a expression\n");
break;
}
break;
}
else if (i_sts == 1)
{
printf("This is not a expression\n");
break;
}
i_sts1 = Get_SubString(i_subexpr, i_expr, &i_pos, &i_length);
if (i_sts1 == 0)
{
i_sts2 = Calc_SubExpr(i_rusult, i_subexpr);
if (i_sts2 != 0)
{
printf("This is not a expression\n");
break;
}
Insert_SubExpr(i_expr, i_rusult, i_pos, i_length);
}

}


puts( i_rusult );
}
return 0;
}
//
int Change_StrToFloat(float *p_fdata, char *p_operator, const char *p_result, int *p_num)
{
float i_temp;
int i;
int j;
int k;
int m;
int sts;
char data[128];

i = 0;
j = 0;
k = 0;
m = 0;
i_temp = 0;
sts = 0;
memset(data, 0x00, sizeof(data));

for(i=0; p_result[i] != '\0'; i++)
{
if ((p_result[0] == '.') || (p_result[0] == '+')
|| (p_result[0] == '*') || (p_result[0] == '/'))
{
return -1;
}


switch( p_result[i] ) {
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case '0' :
data[j++] = p_result[i];
break;
case '.' :
if( ( (p_result[i+1] == '+') || (p_result[i+1] == '-')
|| (p_result[i+1] == '*') || (p_result[i+1] == '/')
|| (p_result[i+1] == '.') || (p_result[i+1] == (char)0))
&& (sts = 1 ))
{
return -1;
}
data[j++] = p_result[i];
sts = 1;
break;
case '+' :
case '-' :
case '*' :
case '/' :
if( (p_result[i+1] == '+') || ( (p_result[i+1] == '-') && ( (p_result[i+2] == '+') || (p_result[i+2] == '-' )
|| (p_result[i+2] == '*') || (p_result[i+2] == '/' )
|| (p_result[i+2] == '.') || (p_result[i+2] == (char)0)))
|| (p_result[i+1] == '*') || (p_result[i+1] == '/')
|| (p_result[i+1] == '.') || (p_result[i+1] == (char)0))
{
return -1;
}
i_temp = (float)atof(data);
p_fdata[k++] = i_temp;
p_operator[m++] = p_result[i];
j = 0;
memset(data, 0x00, sizeof(data));
sts = 0;
break;
default:
break;
}
}
i_temp = (float)atof(data);
p_fdata[k] = i_temp;
*p_num = m;
return 0;
}
求n次多项式的任意阶导数的表达式,编写一个实现求多项式导数的程序. 算术表达式的求解 给定一个算术表达式,通过程序求出最后的结果 利用栈求表达式的值要求完成以下功能:编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值. 编写一个程序,可以计算算术表达式的值,对非法表达式要给出提示,并要求重新输入正确的表达式.(正确的表达式范例:123+4 编写一个程序,可以计算算术表达式的值,对非法表达式要给出提示,并要求重新输入正确的表达式. 编写一个程序,可以计算算术表达式的值,对非法表达式要给出提示,并要求重新输入正确的表达式 请编写程序实现任意数学表达式求值计算器功能!高手帮忙 设计一个程序实现两个任意长的整数(包括正数和负数)、任意精度实数的算术运算. 10.试编写程序,对任意输入的一个算术表达式,将式中的数字和运算符分成两类(一类是数字,一类是运算符) 试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现. 算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为 算术表达式求值算法?用C语言版 编写一个表达式求值演算的 算法程序 要求:使用栈,需要将算法的过程显示出来 ,输入一连串