c语言 简易计算器

    xiaoxiao2021-11-08  68

    应度友邀请,用c写了个简易的命令行计算器,其功能大致如下:

    设计简单的计算器,允许用户输入简单表达式(一元运算和二元运算表达式,以=结尾),输出计算结果,并等待用户继续输入,直到用户输入字符q。 输入输出举例 : 输入:10^2= // 求幂运算,指数必须整数 输出:100 输入:5!= //阶乘运算 输出:120 输入:9$= //判断是否平方数 输出:YES 输入:25+4+2= //累加,运算数个数不限 输出:31 输入:3&61&5&9= //求最大值,运算数个数不限 输出:61 输入:35% //奇数分解运算,将该数分解为3个素数 输出:35=3+3+29 输入:3+6%8= //不允许出现以上运算法则之外的表达式 输出:运算符非法,+只支持连用! 输入:10%= 输出:运算数非法,%只支持奇数! 输入:q 输出:谢谢使用!

    #include <stdio.h> #include<math.h> int isprime(int n){ //是否素数 int i; for(i=2;i<n/2+1;i++) if(n%i==0)return 0; return 1; } int prime(int n,int a[]){ //把n分解成3个素数 if(n%2==0)return 0; for(a[0]=3;a[0]<n;a[0]++) for(a[1]=a[0];a[1]<n;a[1]++) for(a[2]=a[1];a[2]<n;a[2]++) if(isprime(a[0])&&isprime(a[1])&&isprime(a[2])&&n==a[0]+a[1]+a[2]) return 1; } int jisuan(int a,char c,int b){ //返回加减乘除幂的结果 switch(c){ case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; // case '^':return pow(a,b); } } void ptferr(int c){ //输出错误信息 switch(c){ case '%':printf("运算数非法,%c只支持奇数!\n",c);break; case '+': case '-': case '*': case '/':printf("运算符非法,%c只支持连用!\n",c);break; default: printf("error input:%c\n",c); } } int ispfs(int res){ //判断是否平方数 int i; for(i=1;i<=(res+1)/2;i++) if(i*i==res)return 1; return 0; } long leiji(int res){ //阶乘运算 int i;long s=1; for(i=1;i<=res;i++) s*=i; return s; } void ptfres(int c,int res){ //输出计算结果 if(!c)printf("%d\n",res); else{ int a[3];prime(res,a); switch(c){ case '%':printf("%d=%d+%d+%d\n",res,a[0],a[1],a[2]);break; case '$':printf("%s\n",ispfs(res)?"YES":"NO");break; case '!':printf("%ld\n",leiji(res));break; } } } int main(){ int status=0,err=0,m=0,res=0,newline=1; char c,first; while((c=getchar())!='q'){ //当输入为'q'时退出 if(c>='0'&&c<='9'){ if(newline)res=res*10+c-'0'; else m=m*10+c-'0'; }else if('%'==c||'$'==c||'!'==c){/ if(newline){ if(0==res%2&&'%'==c)err=c; else status=c; newline=0; first=c; }else err=first; } else if('+'==c||'-'==c||'*'==c||'/'==c||'^'==c){ if(newline){ newline=0; first=c; }else if(first!=c){ err=first; }else{ res=jisuan(res,c,m); m=0; } }else if('='==c){ if(!err&&!status) res=jisuan(res,first,m); }else if('\n'==c){ if(err) ptferr(err); else ptfres(status,res); newline=1; status=res=m=0; }else if('q'!=c){ err=c; } } printf("谢谢使用!\n"); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-678119.html

    最新回复(0)