帮忙改进四则运算 算法
我写的四则运算程序,请帮忙改进一下,添加更多的功能,或优化程序代码:
[/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; }]