精华内容
下载资源
问答
  • 要求: (1)输入不含变量的数学表达式的中缀形式,可以接受的操作符包括+、-、*、/、%; (2)若表达式正确,则输出表达式的结果;若表达式非法,则输出错误信息; (3)同时输出堆栈的状态变化过程;...
  • 其实开发一款计算器很简单,当然也是很多C语言小白必练手的一个项目,小编今天介绍的...【C语言制作简单计算器】 项目简介: 项目用 c 语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都...

    在这里插入图片描述
    其实开发一款计算器很简单,当然也是很多C语言小白必练手的一个项目,小编今天介绍的项目课程就是教你利用C语言开发一款简单的计算器,非常适合新手小白哦~

    小编整理好了一套C/C++资料,加小编C/C++编程学习群:825414254获取一套C/C++学习资料噢!

    在这里插入图片描述

    项目名称:

    【C语言制作简单计算器】

    项目简介:

    项目用 c 语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。

    项目需要检查输入,确保用户没有要求计算机完成不可能的任务。而且还必须允许用户一次输入一个计算式,例如: 32.4+32 或者 9*3.2,而不是一个数字一个数字的输入。

    开发思路:

    获得用户要求计算机执行计算所需的输入。
    检查输入,确保输入可以理解。
    执行计算。
    显示结果。

    项目效果图:
    在这里插入图片描述

    这个计算器比较简单,只能计算加减乘除,用到了递归思想

    在这里插入图片描述
    在这里插入图片描述
    程序结果

    在这里插入图片描述

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/202005/13/1589348640_923214.png)
  • 使用C语言编写计算器,可以计算简单的数学计算式。完整的C代码。
  • STC89C52单片机C语言编写简单计算器程序,矩阵按键输入,4位数码管输出显示,可实现简单的加减乘除运算!
  • o p using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;...
  • 这是一个用C语言编写简单计算器。它使用readline获取用户输入。 最初写于2021年1月25日,当前版本: 1.5 可用命令 当前, calc支持以下命令: 命令 描述 calc 进入仅计算器模式(请参阅[1]) clear 清除萤幕 ...
  • C语言编写简单计算器程序

    万次阅读 多人点赞 2016-07-01 10:03:13
    这两天在看一个C语言写的计算器程序,做了不少的功夫,跟着作者一步步的进行完善,了解了许多细节性的东西,在此自己做个总结,加深自己对程序的印象,也算是梳理。 在该计算器程序,能进行加减乘除、sin、cos、exp...

    这两天在看一个C语言写的计算器程序,做了不少的功夫,跟着作者一步步的进行完善,了解了许多细节性的东西,在此自己做个总结,加深自己对程序的印象,也算是梳理。

    在该计算器程序,能进行加减乘除、sin、cos、exp等操作,同时能进行数值保存功能。而该计算器使用逆波兰表示法。即所有运算符都跟在操作数的后面,比如下列表达式:
    (1 - 2) * (4 + 5)采用逆波兰表示法表示为:1 2 - 4 5 + *
    逆波兰表达法中不需要圆括号,只要知道每个运算符需要几个操作数就不会引起歧义。

    计算器程序实现很简单,具体原理如下:

    while/* 下一个运算符或操作数不是文件结束指示符 */if/* 是数 *//* 将该数压入到栈中 */
        else if/* 是运算符 *//* 弹出所需数目的操作数 */
            /* 执行运算 */
            /* 将结果压入到栈中 */
        else if/* 是换行符 *//* 弹出并打印栈顶的值 */
        else
            /* 出错 */

    在程序设计中,使用模块化思想,getop函数来进行读入,该函数返回一个标识,用来标识读入的是什么类型。主循环体中根据该标识执行相应的动作。

    以下是该程序: (我将所有函数和变量放在同一文件)

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    #define MAXOP 100
    #define NUMBER '0'   //标识读入的是数字
    #define NAME 'n'     //标识读入的是字符串(函数名或非法字符串)
    #define ALPHA 26     
    int getop(char []);   
    void push (double);  //压栈
    double pop(void);    //出栈
    void clear(void);    //清空栈
    void mathfnc(char []);   //执行相应的数学函数sin、cos、exp等
    
    int main(void)
    {
        int type;
        int i, var = 0;
        double op1, op2,v;
        char s[MAXOP];
        double variable[ALPHA];
    
        for (i = 0; i < ALPHA; i++)    //初始化用于保存数值的变量数组
            variable[i] = 0.0;
    
        while ((type = getop(s)) != EOF)    //读取输入
        {
            switch (type)
            {
                case NUMBER:
                    push (atof(s));
                    break;
                case NAME:
                    mathfnc(s);
                    break;
                case '+':
                    push (pop() + pop());
                    break;
                case '*':
                    push (pop() * pop());
                    break;
                case '-':
                    op2 = pop();
                    push (pop() - op2);
                    break;
                case '/':
                    op2 = pop();
                    if (op2 != 0.0)
                        push (pop() / op2);
                    else
                        printf ("error: zero divisor\n");
                    break;
                case '%':
                    op2 = pop();
                    if (op2 != 0.0)
                        push (fmod(pop(), op2));
                    else
                        printf ("error: zero divisor\n");
                    break;
                case '?':    //打印栈顶元素
                    op2 = pop();
                    printf ("\t%.8g\n", op2);
                    push (op2);
                    break;
                case '=':   //保存数值
                    pop();
                    if (var >= 'A' && var <= 'Z')
                        variable[var - 'A'] = pop();
                    else
                        printf ("error: no variable name\n");
                    break;
                case 'c':
                    clear();
                    break;
                case 'd':   //复制栈顶元素
                    op2 = pop();
                    push(op2);
                    push(op2);
                    break;
                case 's':   //交换栈元素
                    op1 = pop();
                    op2 = pop();
                    push(op1);
                    push(op2);
                case '\n':
                    v = pop();   //v保存最后的一次结果
                    printf ("\t%.8g\n", v);
                    break;
                default:
                    if (type >= 'A' && type <= 'Z')
                        push(variable[type - 'A']);
                    else if (type == '@')   //输入的字符@表示最近一次结果值 
                        push(v);
                    else
                        printf ("error: unknown command %s\n", s);
                    break;
            }
            var = type;  
        }
        return 0;
    }
    
    /* ----------------------------------------------------------- */
    
    #define MAXVAL 100
    
    int sp = 0;     //标识栈顶
    double val[MAXVAL];
    
    void push(double f)
    {
        if (sp < MAXVAL)
            val[sp++] = f;
        else
            printf ("error: stack full, can't push %g\n", f);
    }
    
    double pop(void)
    {
        if (sp > 0)
            return val[--sp];
        else
        {
            printf ("error: statck empty\n");
            return 0.0;
        } 
    }
    
    void clear(void)
    {
        sp = 0;
    }
    
    void mathfnc (char s[])
    {
        double op2;
    
        if (strcmp (s, "sin") == 0)
            push(sin(pop()));
        else if(strcmp (s, "cos") == 0)
            push(cos(pop()));
        else if(strcmp (s, "exp") == 0)
            push(exp(pop()));
        else if(strcmp (s, "pow") == 0)
        {
            op2 = pop();
            push (pow(pop(), op2));
        }
        else
            printf ("error: %s not supported\n", s);
    }
    
    /* ----------------------------------------------------------- */
    
    #include <ctype.h>
    
    int getch(void);
    void ungetch(int);
    
    int getop(char s[])
    {
        int i, c;
        while ((s[0] = c = getch()) == ' ' || c == '\t')  //过滤开头的空白字符
            ;
        s[1] = '\0';
    
        i = 0;
    
        if (islower(c))   //判断是否为小写字母,也即读取由小写字母组成的字符串
        {
            while (islower(s[++i] = c = getch()))
                ;
            s[i] = '\0';
    
            if (c != EOF)
                ungetch(c);
            if (strlen (s) > 1)
                return NAME;
            else 
                return c;
        }
    
        if (!isdigit(c) && c != '.' && c != '-')
            return c;
    
        if (c == '-')     //用于判断是负数还是减操作          
        { 
            if (isdigit(c = getch()) || c == '.')  
                s[++i] = c;
            else
            {
                if (c != EOF)
                    ungetch(c);
                return '-';
            }
        }
    
        if (isdigit(c))      //收集整数部分
            while (isdigit(s[++i] = c = getch()))
                ;
    
        if (c == '.')    //收集小数部分
            while (isdigit(s[++i] = c = getch()))
                ;
    
        s[i] = '\0';
    
        if (c != EOF)
            ungetch(c);
    
        return NUMBER;
    }
    
    
    /* ----------------------------------------------------------- */
    /*
     * 引用以下两个函数是因为:程序不能确定它已经读入的输入是否足够 *
     * 除非超前多读入一些输入,在本程序中,读入一些字符合成一个数字 *
     * 所以在看到第一个非数字字符之前,已经读入的数的完整性是不能确定的
     * 由于程序要超前读入一个字符,这样就导致最后又一个字符不属于当前所要读入的数 
     */
    
    #define BUFSIZE 100
    char buf[BUFSIZE];
    int bufp = 0;
    
    int getch(void)  
    {
        return (bufp > 0) ? buf[--bufp] : getchar();
    }
    
    void ungetch (int c)
    {
        if (bufp >= BUFSIZE)
            printf ("ungetch: too many characters\n");
        else
            buf[bufp++] = c;
    }
    

    该程序虽然简单,但是还是存在一些小小的问题,比如没有数据时进行pop的话,会打印栈中无数据同时返回数值0.0,在循环体中许多执行操作会将该数值保存到栈中,之后打印该值,用户体验度比较差。程序设计方面,模块化设计使得该程序容易增加功能而不影响其他模块,比如增加一些数学函数处理,在mathfnc函数中去添加,或增加一些运算符操作,可以在主循环体中增加。

    总之,这次学习还是颇有收获。

    展开全文
  • C语言编写简单计算器

    万次阅读 2017-12-07 16:26:45
    /* Note:Your choice is C IDE */ #include "stdio.h" void main() {  double a,b,d;//定义算式数  char c;//定义变量符号  printf("请输入算法 如(3+4):");//提示输入算式 ... sw
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        double a,b,d;//定义算式数
        char c;//定义变量符号
        printf("请输入算法 如(3+4):");//提示输入算式
        scanf("%lf%c%lf",&a,&c,&b);//输入的算式
        switch(c)//switch开关
        {
        case '+': d=a+b; printf("计算结果为:%lf",d);break;//加法
        case '-': d=a-b; printf("计算结果为:%lf",d);break;//减法
        case '*': d=a*b; printf("计算结果为:%lf",d);break;//乘法
        case '/': d=a/b; printf("计算结果为:%lf",d);break;//除法
        default:printf("有误,请重新输入");  //有错误提示结束              
        } 
    }
    展开全文
  • C语言编写简易计算器的思路和过程

    千次阅读 2009-07-29 13:05:00
    关于这个计算器,我已经改进了好几次,使用do-while和switch语句嵌套来进行简单的四则运算。但是在处理“/”运算时,由于分母不能为零,所以我使用了if-else语句。如下:#include main(void){ float sum1,sum2,jum...

     

          关于这个计算器,我已经改进了好几次,使用do-while和switch语句嵌套来进行简单的四则运算。但是在处理“/”运算时,由于分母不能为零,所以我使用了if-else语句。如下:
    #include <stdio.h>
    main(void)

    {
     
    float sum1,sum2,jum,dom;
     
    char dey;
     
    do{
     
          printf("Welcome/nPlease input number/n");
     
          scanf("%f%c%f",&sum1,&dey,&sum2);
     
          switch(dey)
     
              {
     
                    case'+':{jum=sum1+sum2;printf("Results is:%f/n",jum);}break;
     
                    case'-':{jum=sum1-sum2;printf("Results is:%f/n",jum);}break;
     
                    case'*':{jum=sum1*sum2;pr intf("Results is:%f/n",jum);}break;
     
                    case'/':{jum=sum1/sum2;if(sum2==0)
     
                                              printf("Result is error/n");
     
                                        else
     
                                              printf("Result is:%f/n",jum);
     
                                      }
     
                                    break;

     
              }
            printf("If you want to continue,Please input 1/nIf you want to comeback,Please input 2/n");
     
          scanf("%f",&dom);
     
          }
     
      while(dom<2);
     
      printf("Thank you/n");
    }

           这样的话,我们就能很完美的去实现简单的四则运算了。但是只局限于简单的四则运算,如果想要进行复杂的运算,我推荐一种算法,就是逆波兰算法 。我想这个大家都不算陌生吧,如果你想更复杂一点不仿试试这种算法。我这里只对于初级算法,如果大家对于这有更好的想法和建议,不仿说出来,也好叫大家学习讨论一下。
    插画
    展开全文
  • 昨天完成了简易计算器,能使用简单的四则运算。但是太过于简陋,我都不好意思使用。而且在使用一次后再想使用,就要再次使用就必须重新运行代码才行,所以这次要在后面加上一定的改进。如果说上个计算器中运行四则...
  • 编写程序的目的就是使程序有他应用的地方,编写一个简单计算器来实现我们计算的目的。  利用swich case 语句和循环结构来实现简单程序的编写。利用选择语句来进行输入的选择,然后利用所输入的数字的不同进行...
  • #include"stdio.h" int main() { int m,n; scanf("%d/n%d/n",&m,&n); printf("%d%d",m,n); printf("%d%d%d%d/n",M(m,n),S(m,n),C(m,n),D(m,n)); } int M(int a,int b) { ...}
  • 首先确定数据类型,作为计算器来讲的话data1和data2自然就要设置为双精度的double型,然后运算符op设置为字符型,然后运算结果的话设置为浮点型或整型输出的话在遇到其他数据时容易结果显示很复杂,所以设置为了实数的...
  • C语言数据结构静态栈——计算器的实现 下面我来详细的解释一下我编写计算器代码。。。。 有必要先说明一下的是,此代码中含有两个栈:数据栈和算符栈; 数据栈:存放double型数字; 算符栈:存放char型运算符(加...
  • C语言创建窗体计算器

    2012-07-26 08:56:48
    利用C语言创建窗体,编写一个简单计算器,代码全在那里,双击即可运行
  • 输入连续的乘除混合运算式子,程序根据输入式子进行计算,输出正确计算结果(要求式子不能有括号,每个数均为个位数,例如输入4*5/2,输出10) 解答要求 根据给出部分代码写出完整代码;对代码进行详细注释;
  • C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法: # include <stdio.h> int main() { char operator; double firstNumber,secondNumber; printf("输入操作符 (+, -, *,/): "); ...
  • C语言采用SDK方式编写简单计算器
  • 该程序实现了 加减乘除 四则运算。。。。。。。。喜欢的下载喔
  • C语言编写简单计算器 使用SLR Parser实现语法分析,本项目除了实现了SLR Parser外还实现了几种简单的数据结构:数组栈、循环队列、哈希表和哈希集合 以及 树。应该可以勉强作为数据结构的课程设计,编译原理我还...
  • #include<stdio.h> #include<iostream> using namespace std; int main() { ... printf("**********计算器**********"); printf("是否开始(Y/N)\n"); scanf_s("%c", &Choice);

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

c语言编写简单计算器

c语言 订阅