简易计算器
把输入的字符串数字和符号分离
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int i,j=0,k=0,l=0; char op[100];//符号字符串 char str[100];//所输入的字符串 char aq[100];//数字字符串 double num[100];//数字 double res=0;//结果 gets(str); for(i=0;str[i]!='\0';i++) { if(str[i]>='0'&&str[i]<='9'||str[i]=='.') { aq[j++]=str[i]; }//将输入的字符串中的数字提取出来 else { num[l++]=atof(aq);//数字存入double类型 memset(aq,0,sizeof(aq));//清空aq op[k++]=str[i];//符号存入op j=0; } } num[l++]=atof(aq); op[k]='\0'; puts(op); for(i=0;num[i]!='\0';i++) printf("%.2lf\t",num[i]); printf("\n");
再进行混合运算
for(i=0;op[i]!='\0';i++) { if(op[i]=='*') { for(j=i;op[j]!='\0';j++) op[j]=op[j+1];//符号递进 num[i]=num[i]*num[i+1]; for(j=i+1;num[j]!='\0';j++) num[j]=num[j+1];//数字递进 i--; //符号前进i要退一 }//乘法运算 if(op[i]=='/') { for(j=i;op[j]!='\0';j++) op[j]=op[j+1]; num[i]=num[i]/num[i+1]; for(j=i+1;num[j]!='\0';j++) num[j]=num[j+1]; i--; }//除法运算 } res=num[0]; for(i=0;op[i]!='\0';i++) { if(op[i]=='+') res=res+num[i+1]; if(op[i]=='-') res=res-num[i+1];//进行加减运算 } printf("%.2lf",res); return 0; }
完整代码
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int i,j=0,k=0,l=0; char op[100];//符号字符串 char str[100];//所输入的字符串 char aq[100];//数字字符串 double num[100];//数字 double res=0;//结果 gets(str); for(i=0;str[i]!='\0';i++) { if(str[i]>='0'&&str[i]<='9'||str[i]=='.') { aq[j++]=str[i]; }//将输入的字符串中的数字提取出来 else { num[l++]=atof(aq);//数字存入double类型 memset(aq,0,sizeof(aq));//清空aq op[k++]=str[i];//符号存入op j=0; } } num[l++]=atof(aq); op[k]='\0'; puts(op); for(i=0;num[i]!='\0';i++) printf("%.2lf\t",num[i]); printf("\n"); for(i=0;op[i]!='\0';i++) { if(op[i]=='*') { for(j=i;op[j]!='\0';j++) op[j]=op[j+1];//符号递进 num[i]=num[i]*num[i+1]; for(j=i+1;num[j]!='\0';j++) num[j]=num[j+1];//数字递进 i--; //符号前进i要退一 }//乘法运算 if(op[i]=='/') { for(j=i;op[j]!='\0';j++) op[j]=op[j+1]; num[i]=num[i]/num[i+1]; for(j=i+1;num[j]!='\0';j++) num[j]=num[j+1]; i--; }//除法运算 } res=num[0]; for(i=0;op[i]!='\0';i++) { if(op[i]=='+') res=res+num[i+1]; if(op[i]=='-') res=res-num[i+1];//进行加减运算 } printf("%.2lf",res); return 0; }
运行结果