帮忙改进四则运算 算法
我写的四则运算程序,请帮忙改进一下,添加更多的功能,或优化
程序代码:[/code[code]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
while(1)
{
char sc[222]={0};
char *ps=sc;
char bijiao[5]={'+','-','*','/'};
//功能2
int n[222]={0};//存放数字
unsigned int i,j,k;
char stemp[222]={0};//存放字符数字
//3
char s[222]={0};//存放 +,-,*,/
//读取表达式字串存放sc[222]数组里
while(1)
{
*ps=getchar();
if (*ps=='\n')
{
*ps='\0'; //*ps=0;
break;
}
ps++;
}
//测试打印表达式
printf("%s \n",sc);
//分离出数字和运算符 分别保存int n[222],char s[222]
//--------------------------------------
//分离数字
//指针ps指向表达头部
ps=sc;
j=0;
k=0;
for(i=0;i<=strlen(sc);i++)
{ //"888+333*777"
if (isalnum(*ps))
{
stemp[j]=*ps;
j++;
}else
{
//如果+,-,*,/,\0
stemp[j]='\0';
n[k]=atoi(stemp);
k++;
j=0; //下标归零
}
ps++;//指向sc数的下一字符
}
//测试一下 n[222]
for (i=0;i<=k-1;i++)
{
printf("%d ",n[i]);
}
printf("\n");
//---------------------------------------------
//分离提取 运算符
ps= sc;
j=0;
for(i=0;i<=strlen( sc);i++)
{ //"888+333*777"
if (isalnum(*ps))
{
}else
{
//如果+,-,*,/,\0
s[j]=*ps;
j++;
}
ps++;//指向sc数的下一字符
}
printf("\n");
for (i=0;i<=strlen(s);i++)
{
printf("%c ",s[i]);
}
printf("\n");
//功能3--------------------------------------------------------------------------
//n[222],s[222]
//键盘输入错误检查
if(isalnum(sc[0])==0) //检查第一个字符是否为数字
{printf("输入错误");
goto shuru;//跳到输入端,重新输入
}
for(i=0;i<strlen(s);i++) //检查s[]中是否都是四则运算符
{ int w=1;
for(j=0;j<strlen(bijiao);j++)
if(s[i]==bijiao[j])
w=0 ;
if(w==1)
{
printf("输入错误");
goto shuru;//跳到输入端,重新输入
}
}
while(1)
{
for (i=0;i<=strlen(s);i++)
{
//*,/
if (s[i]=='*'||s[i]=='/')
{
if (s[i]=='*')
{
n[i+1]=n[i]*n[i+1];
}
else
{
n[i+1]=n[i]/n[i+1];
}
//数据前移一位
for (j=i;j<=strlen(s)+1;j++)
{
n[j]=n[j+1];
s[j]=s[j+1];
}
break;
}
}
//打印出当前一步计算结果 的表达式
for (i=0;i<=strlen(s);i++)
{
printf("%d%c",n[i],s[i]);
}
printf("\n");
//退出条件
j=1;
for (i=0;i<=strlen(s);i++)
{
if (s[i]=='*'||s[i]=='/')
{
j=0;//表示继续循环
}
}
if (j)
{
break;//如果j==1退出while 1
}
}//end while 1
//进行 加减运算
while(2)
{
for (i=0;i<=strlen(s);i++)
{
if (s[i]=='+')
{
n[i+1]=n[i]+n[i+1];
}else if (s[i]=='-')
{
n[i+1]=n[i]-n[i+1];
}
//数据前移一位
for (j=i;j<=strlen(s)+1;j++)
{
n[j]=n[j+1];
s[j]=s[j+1];
}
break;
}
//break; while2 结束条件
//退出条件
j=1;
for (i=0;i<=strlen(s);i++)
{
if (s[i]=='+'||s[i]=='-')
{
j=0;//表示继续循环
}
}
//打印出当前一步计算结果 的表达式
for (i=0;i<=strlen(s);i++)
{
printf("%d%c",n[i],s[i]);
}
printf("\n");
if (j)
{
break;//如果j==1退出while 1
}
}
//
//打印最终结果
printf("\n %s=%d \n",sc,n[0]);
shuru:
printf("\n请继续输入字串");
}//死循环
getchar();
getchar();
return 0;
}]









