c语言的程序 对实数进行四则运算的程序 要求计算顺序,先乘除,后加减,优先括号c语言的程序,做一个可以对实数进行四则运算的c语言的程序 比如输入1+2回车显示3,输入1+2*3回车显示7 输入(2.1+3
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 02:03:08
c语言的程序 对实数进行四则运算的程序 要求计算顺序,先乘除,后加减,优先括号c语言的程序,做一个可以对实数进行四则运算的c语言的程序 比如输入1+2回车显示3,输入1+2*3回车显示7 输入(2.1+3
c语言的程序 对实数进行四则运算的程序 要求计算顺序,先乘除,后加减,优先括号
c语言的程序,做一个可以对实数进行四则运算的c语言的程序 比如输入1+2回车显示3,输入1+2*3回车显示7 输入(2.1+3)*3.5回车显示17.85
c语言的程序 对实数进行四则运算的程序 要求计算顺序,先乘除,后加减,优先括号c语言的程序,做一个可以对实数进行四则运算的c语言的程序 比如输入1+2回车显示3,输入1+2*3回车显示7 输入(2.1+3
#include
#include
#include
#include
#define BUF_MAX 100
double handle(char *str) //处理没括号的
{
double res,*data=NULL,*data_old=NULL;
char *flag=NULL,*flag_old=NULL,*temp=str,*temp_old=str;
int n=0,m=0,i=0;
assert(NULL!=str);
while(*temp)
{
if(*temp==' ')
strcpy(temp,temp+1);
else
temp++;
}
temp=str;
while(*temp)
{
if(temp==temp_old && *temp=='-')
{
temp++;
continue;
}
else if (*temp=='+' || *temp=='-' ||*temp=='*' ||*temp=='/')
n++;
temp++;
}
flag_old=(char *)malloc(sizeof(char)*n);
if(NULL==flag_old)
{
perror("malloc fail!\n");
}
data_old=(double *)malloc(sizeof(double)*(n+1));
if(NULL==data_old)
{
perror("malloc fail!\n");
}
temp=str;
flag=flag_old;
data=data_old;
while(*temp!='\0')
{
if(temp==temp_old && *temp=='-')
{
temp++;
continue;
}
else if(*temp=='+' || *temp=='-' ||*temp=='*' ||*temp=='/')
{
*flag++=*temp;
*temp='\0';
*data++=atof(temp_old);
temp_old=temp+1;
}
temp++;
}
*data=atof(temp_old);
flag=flag_old;
data=data_old;
do
{
m=n;
for(i=0;i
/*******************************************************************************
** 程序名称:表达式计算器
** 程序描述:本程序能够进行只含有非负整数与+ - * /符号的表达式计算;并能够识别
** 错误的算式,给出警报。
**程序特色: 能够进行诸如2+3*...
全部展开
/*******************************************************************************
** 程序名称:表达式计算器
** 程序描述:本程序能够进行只含有非负整数与+ - * /符号的表达式计算;并能够识别
** 错误的算式,给出警报。
**程序特色: 能够进行诸如2+3*5-2*3*6和3-6*2/3的混合运算?
** 使用说明:输入你的算式,注意其中的每个数字不要超过10000,即最大数是999.
** 【C-Free编译通过】
** 程序作者:syrchina
** 最后修改:2009-5-1
*******************************************************************************/
#include "Stdio.h"
#include "Conio.h"
/*******************************************************************************
** 函数名称:calculate
** 函数描述:进行运算,并输出结果
** 输入参数:c[],length
** 输出参数:无
*******************************************************************************/
calculate(int c[],int length)
{
int i;
int error=0;
float result=0;
c[0]=1;
c[2]=10043;
c[length-2]=10045;
c[length-1]=1; /*初始化开头与结尾为加减法*/
/*进行运算*/
/*先乘除,后加减的运算顺序*/
/*将乘除转换为加法*/
for (i=0;i<=length;i++)
{
switch (c[i])
{
case 10042:
c[i+1]=c[i-1]*c[i+1];
c[i]=c[i-2];
c[i-2]=10043;
c[i-1]=0;
break;
case 10047:
c[i+1]=c[i-1]/c[i+1];
c[i]=c[i-2];
c[i-2]=10043;
c[i-1]=0;
break;
}
}
/*进行加减运算*/
result=result+c[0];
for (i=0;i<=length;i++)
{
switch (c[i])
{
case 10043:
result=result+c[i+1];
break;
case 10045:
result=result-c[i+1];
break;
}
/*防错:防止计算结果超过30000*/
if (result>30000)
{
printf("Sorry, the result is beyone my calculating ability.\n\n");
error=1;
break;
}
}
/*输出结果*/
if (error==0)
printf("\n The result is: %.2f\n\n",result);
}
/*******************************************************************************
** 函数名称:translate
** 函数描述:将字符串a[]转换为整型数组b[]中的数字
** 输入参数:无
** 输出参数:
*******************************************************************************/
int translate(char a[])
{
int b[20];
int c[20];
int i=0,k=0;
int length=0;
int error=0;
i=0;
k=0;
length=0;
error=0;
/*初始化b[],c[],全部归零*/
for (i=0;i<20;i++)
{
b[i]=0;
c[i]=0;
}
i=0;
while (a[i]!='\0')
{
switch (a[i]) /*字符串的提取与转换,提取为个位数字*/
{
case '0':
b[i]=a[i]-'0';
break;
case '1':
b[i]=a[i]-'0';
break;
case '2':
b[i]=a[i]-'0';
break;
case '3':
b[i]=a[i]-'0';
break;
case '4':
b[i]=a[i]-'0';
break;
case '5':
b[i]=a[i]-'0';
break;
case '6':
b[i]=a[i]-'0';
break;
case '7':
b[i]=a[i]-'0';
break;
case '8':
b[i]=a[i]-'0';
break;
case '9':
b[i]=a[i]-'0';
break;
case '+':
b[i]=a[i]+10000;
break;
case '-':
b[i]=a[i]+10000;
break;
case '*':
b[i]=a[i]+10000;
break;
case '/':
b[i]=a[i]+10000;
break;
default:
printf("Error, your input is not available.\n");
break;
}
i++;
}
length=i-1;
b[length+1]='\0';
/*防错:对最后一位是否为数字进行检查:*/
if (a[length]>'9'||a[length]<'0')
{
printf("Error, the last char is not a number.\n\n");
error=1;
}
/*防错:对最前一位是否为数字进行检查:*/
if (a[0]>'9'||a[0]<'0')
{
printf("Error, the first char is not a number.\n\n");
error=1;
}
/*数字重组:对上面提取的单个数字进行组合,使多位数复原*/
i=0;
k=3;
while (1)
{
if (b[i]>=0&&b[i]<=9) /*c[]存储复原后的多位数*/
{
c[k]=c[k]*10+b[i];
/*防错:防止单个数超过30000*/
if (c[k]>30000)
{
printf("Sorry, the number you input is too large, I can't calculate.\n\n");
error=1;
break;
}
}
if (i==length) break;
if ((b[i]==10043)||(b[i]==10045)||(b[i]==10042)||(b[i]==10047)) /*ASCII码+10000:+ →10043,- →10045,* →10042,/ →10047*/
{
k++; /*c[]标记运算符号 */
c[k]=b[i];
k++;
}
i++;
}
c[k+3]='\0';
calculate(c,k+3);
}
/*******************************************************************************
** 函数名称:main
** 函数描述:调用子函数实现表达式计算功能
** 输入参数:无
** 输出参数:无
*******************************************************************************/
main()
{
int i;
char a[20];
/*初始化a[],b[],c[],全部归零*/
for (i=0;i<20;i++)
{
a[i]=0;
}
while (1)
{
if (a[0]=='0'&&a[1]=='\0')/*当一行中只有0时,推出程序 */
{
printf("The program will exit...");
//sleep(2);
exit(0);
}
printf("******** Multi-function calculator *********\n");
printf(" For example you can input 2+3*5-2*3*6\n");
printf(" Every number should litter than 10000\n");
printf(" Please input a caluating line:\n ");
gets(a);
translate(a);
}
getch();
}
收起
我有呀,这个我写过,只需要一个switch开关语句就可以了
呵呵。这个不难,你百度一下,有很多的代码