zoukankan      html  css  js  c++  java
  • 简单计算器 (c语言课程设计)

    可以实现简单的加减乘除四则运算

    #include<stdio.h>
    #include<string.h>
    #define MAX 10100
    int main()
    {
    	int j,i,s,t,top,wrong,a;
    	double n,m,sum;
    	char fu,kongge;
    	double zhan[MAX]; 
    	printf("-----------------------欢迎使用简单计算器-----------------------
    ");
    	printf("输入1 开始计算
    
    ");
    	printf("输入0 退出
    ");
    	scanf("%d",&a);
    	if(a==1)
    	{
    		printf("------请输入所要求的式子-----------------------
    ");
    	    printf("------每个数据之间用空格隔开,例如1 + 2 + 3----
    ");
    	    printf("------点击回车代表输入结束,并输出结果---------
    ");
    		while(scanf("%lf",&n)!=EOF)
    	    {
    	    	memset(zhan,0,sizeof(zhan));
    	    	kongge=getchar(); 
    		    top=0;
    		    zhan[top++]=n; 
    		    if(zhan[0]==0&&kongge=='
    ')
    		    {
    		    	printf("------------------------谢谢使用--------------------------------
    ");
    		    	break;
    		    }
    		    scanf("%c",&fu);
    		    kongge=getchar();wrong=0;
    		    while(scanf("%lf",&n)!=EOF)
    		    {	
    		        if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-')
    			    {
    			    	printf("您的输入有误,请重新输入
    ");
    			    	wrong=1;
    			    	break;
    			    }
    			    if(fu=='*')          //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去
                    {                     //将得到的结果存入栈中
                        m=zhan[top-1];
                        m*=n;
                        zhan[top-1]=m;
                    }
                    else if(fu=='/')
                    {
                        m=zhan[top-1];
                        m/=n;
                        zhan[top-1]=m;
                    }
                    else if(fu=='+')   //如果是加法则将其存入栈中
                    zhan[top++]=n;
                    else if(fu=='-')//如果是减法将其相反数存入栈中
                    zhan[top++]=-n;
                    kongge=getchar();
                    if(kongge=='
    ')
                    break;
                    scanf("%c",&fu);
    		    }
    		    if(wrong)
    		    continue;
    		    sum=0;
    		    for(i=0;i<=top;i++)
    		    {
    			    sum+=zhan[i];
    		    }
    		    printf("您所要求的结果为:
    ");
    		    printf("%.2lf
    ",sum);
    	    }
        }
        else if(a==0)
        printf("------------------------谢谢使用--------------------------------
    ");
    	return 0;
    }
    

      通过调用子函数实现(感觉这样容易理解)

    #include<stdio.h> 
    #include<string.h> 
    #define MAX 10100 
    double zhan[MAX]; 
    int j,i,s,t,top,a; 
    double n,m,sum; 
    char fu,kongge; 
    int d,wrong;
    void jieshao1()
    {
    	printf("-----------------------欢迎使用简单计算器-----------------------
    
    "); 
        printf("-------输入1 开始计算-------
    
    "); 
        printf("-------输入0 退出-----------
    "); 
    }
    void jieshao2()
    {
    	printf("------请输入所要求的式子-----------------------
    "); 
        printf("------每个数据之间用空格隔开,例如1 + 2 + 3----
    "); 
        printf("------点击回车代表输入结束,并输出结果---------
    "); 
    }
    void zhu1()
    {
    	memset(zhan,0,sizeof(zhan)); 
        kongge=getchar();  
        top=0; 
        zhan[top++]=n;  
        if(zhan[0]==0&&kongge=='
    ') 
        { 
            printf("------------------------谢谢使用--------------------------------
    "); 
            d=0;
            return ;
        } 
    }
    void zhu2()
    {
        if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-') 
        { 
            printf("您的输入有误,请重新输入
    "); 
            wrong=1; 
            d=0;
            return ;
        } 
        if(fu=='*')          //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去 
        {                     //将得到的结果存入栈中 
            m=zhan[top-1]; 
            m*=n; 
            zhan[top-1]=m; 
        } 
        else if(fu=='/') 
        { 
            m=zhan[top-1]; 
            m/=n; 
            zhan[top-1]=m; 
        } 
        else if(fu=='+')   //如果是加法则将其存入栈中 
        zhan[top++]=n; 
        else if(fu=='-')//如果是减法将其相反数存入栈中 
        zhan[top++]=-n; 
        kongge=getchar(); 
        if(kongge=='
    ') 
        {
            d=0;
    		return ;
        }             
    }
    void shuchu()
    {
    	sum=0; 
        for(i=0;i<=top;i++) 
        { 
            sum+=zhan[i]; 
        } 
        printf("您所要求的结果为:
    "); 
        printf("%.2lf
    ",sum); 
    }
    int main() 
    { 
        jieshao1();//输出第一个描述 即如何使用 
        scanf("%d",&a); 
        if(a==1) 
        { 
            jieshao2();//介绍第二个描述  依然是如何使用 
            while(scanf("%lf",&n)!=EOF) 
            { 
                d=1;
                zhu1();//对变量进行初始化 
                if(d==0)
                break;
                scanf("%c",&fu); 
                kongge=getchar();wrong=0; 
                while(scanf("%lf",&n)!=EOF) 
                {    
                    d=1;
                    zhu2();//此题主结构  即计算过程 
                    if(d==0)
                    break;
                    scanf("%c",&fu); 
                } 
                if(wrong) 
                continue; 
                shuchu();//输出结果 
            } 
        } 
        else if(a==0) 
        printf("------------------------谢谢使用--------------------------------
    "); 
        return 0; 
    }
    

     这个代码主函数里边比较简便 看起来感觉美观

    #include<stdio.h>
    #include<string.h>
    #define MAX 10100
    double zhan[MAX];
    int j,i,s,t,top,a;
    double n,m,sum;
    char fu,kongge;
    int d,wrong;
    void jieshao1()
    {
        printf("-----------------------欢迎使用简单计算器-----------------------
    
    ");
        printf("-------输入1 开始计算-------
    
    ");
        printf("-------输入0 退出-----------
    ");
    }
    void jieshao2()
    {
        printf("------请输入所要求的式子-----------------------
    ");
        printf("------每个数据之间用空格隔开,例如1 + 2 + 3----
    ");
        printf("------点击回车代表输入结束,并输出结果---------
    ");
    }
    void zhu()//这个是此题的主体部分
    {
    	jieshao1();//输出第一个描述 即如何使用
        scanf("%d",&a);
    	if(a==1)
        {
            jieshao2();//介绍第二个描述  依然是如何使用
          while(scanf("%lf",&n)!=EOF)
    	    {
    	    	memset(zhan,0,sizeof(zhan));
    	    	kongge=getchar(); 
    		    top=0;
    		    zhan[top++]=n; 
    		    if(zhan[0]==0&&kongge=='
    ')
    		    {
    		    	printf("------------------------谢谢使用--------------------------------
    ");
    		    	break;
    		    }
    		    scanf("%c",&fu);
    		    kongge=getchar();wrong=0;
    		    while(scanf("%lf",&n)!=EOF)
    		    {	
    		        if(fu!='*'&&fu!='/'&&fu!='+'&&fu!='-')
    			    {
    			    	printf("您的输入有误,请重新输入
    ");
    			    	wrong=1;
    			    	break;
    			    }
    			    if(fu=='*')          //如果运算符是乘号或者除号则直接运算并且将参与运算的栈中的因式删去
                    {                     //将得到的结果存入栈中
                        m=zhan[top-1];
                        m*=n;
                        zhan[top-1]=m;
                    }
                    else if(fu=='/')
                    {
                        m=zhan[top-1];
                        m/=n;
                        zhan[top-1]=m;
                    }
                    else if(fu=='+')   //如果是加法则将其存入栈中
                    zhan[top++]=n;
                    else if(fu=='-')//如果是减法将其相反数存入栈中
                    zhan[top++]=-n;
                    kongge=getchar();
                    if(kongge=='
    ')
                    break;
                    scanf("%c",&fu);
    		    }
    		    if(wrong)
    		    continue;
    		    sum=0;
    		    for(i=0;i<=top;i++)
    		    {
    			    sum+=zhan[i];
    		    }
    		    printf("您所要求的结果为:
    ");
    		    printf("%.2lf
    ",sum);
    	    }
        }
        else if(a==0)
        printf("------------------------谢谢使用--------------------------------
    ");
    } 
    int main()
    {
        zhu();
        return 0;
    }
    

      

  • 相关阅读:
    DM6437 dsp系列之启动过程全析(2)—AIS文件解析
    DreamWeaver文件保存时,提示"发生共享违例"问题的解决方法
    再谈cacheAsBitmap
    as3 updateAfterEvent的作用
    导致flash屏幕重绘的几种方式及避免重绘的方法
    盒子模型&position定位
    [工作问题总结]MyEclipse 打开项目
    三周的苦逼学习,这点文字只为沧海之一粟
    偷个空,写个博客——各种沟通各种纠结
    Arbitrage HDU
  • 原文地址:https://www.cnblogs.com/tonghao/p/4573738.html
Copyright © 2011-2022 走看看