精华内容
下载资源
问答
  • 一个简单的程序,但是很实用,适合C语言初学者
  • if(data==NULL) data=fopen("61590_4.dat","wt"); if(data==NULL) return 0; token[n]=getchar(); result=exp(); if(token[n]=='\n') { token[n]='\0'; printf("%s=%g\n",token,result); fprintf(data,"%s=%g\n",...

    满意答案

    #include

    #include

    #include

    char token[61]; /*存放表达式字符串的数组*/

    int n=0;

    void error(void) /*报告错误函数*/

    {

    printf("ERROR!\n");

    exit(1);

    }

    void match(char expected) /*检查字符匹配的函数*/

    {

    if(token[n]==expected)

    token[++n]=getchar();

    else error();

    }

    double term(void); /*计算乘除的函数*/

    double factor(void); /*处理括号和数字的函数*/

    double exp(void) /*计算加减的函数*/

    {

    double temp=term();

    while((token[n]=='+')||(token[n]=='-'))

    switch(token[n])

    {

    case'+':match('+');

    temp+=term();

    break;

    case'-':match('-');

    temp-=term();

    break;

    }

    return temp;

    }

    double term(void)

    {

    double div;

    double temp=factor();

    while((token[n]=='*')||(token[n]=='/'))

    switch(token[n])

    {

    case'*':match('*');

    temp*=factor();

    break;

    case'/':match('/');

    div=factor();

    if(div==0) /*处理除数为零的情况*/

    {

    printf("The divisor is zero!\n");

    exit(1);

    }

    temp/=div;

    break;

    }

    return temp;

    }

    double factor(void)

    {

    double temp;

    char number[61];

    int i=0;

    if(token[n]=='(')

    {

    match('(');

    temp=exp();

    match(')');

    }

    else if(isdigit(token[n])||token[n]=='.')

    {

    while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/

    {

    number[i++]=token[n++];

    token[n]=getchar();

    }

    number[i]='\0';

    temp=atof(number);

    }

    else error();

    return temp;

    }

    main()

    {

    double result;

    FILE *data=fopen("61590_4.dat","at");

    if(data==NULL)

    data=fopen("61590_4.dat","wt");

    if(data==NULL)

    return 0;

    token[n]=getchar();

    result=exp();

    if(token[n]=='\n')

    {

    token[n]='\0';

    printf("%s=%g\n",token,result);

    fprintf(data,"%s=%g\n",token,result);

    }

    else error();

    fclose(data);

    return 0;

    getch();

    }

    我觉得这个就可以.我试了!

    51分享举报

    展开全文
  • C语言实现四则混合运算

    千次阅读 2014-10-28 21:10:15
    #include using namespace std;   typedef struct SqStack{  int * base;  int * top;  int size; }SqStack;   #define STACK_INIT_SIZE 100 #define STACKINCREMENT 20 ...InitSq


    #include<iostream>
    usingnamespace std;
     
    typedefstruct SqStack{
     int* base;
     int* top;
     intsize;
    }SqStack;
     
    #define STACK_INIT_SIZE  100
    #define STACKINCREMENT   20
     
    voidInitSqStack(SqStack &t);
    voidpush(SqStack &t, intn);
    int out(SqStack &t);
    int Empty( SqStack &t);
    charGetTop(SqStack &t);
    charPrecede(char ,char);
     
    int main(){
        charch;
     SqStack OPTR;InitSqStack(OPTR);
     SqStack OPND;InitSqStack(OPND);
        push(OPTR,'=');
         
      
     ch=getchar();
     
     if(ch=='-'){        //第一个数为负数
      intm=0;
      ch=getchar();
       while(ch<='9'&&ch>='0'){
        m=m*10+ch-48;
        ch=getchar();                          
           }
        push(OPND,m*(-1));
     }
        
      
      
     while(ch!=10){
      intm=0; int flag=1;   char ch1=ch;
     
            if(ch1=='('){  
       charch2;
       push(OPTR,ch);
       while((ch=getchar())=='(')
                     push(OPTR,ch);
        
       ch2=ch;
       if(ch2=='-'){               //出现负数
        flag=-1;
        ch=getchar();
        }
           
      while(ch<='9'&&ch>='0'){
          m=m*10+ch-48;
          ch=getchar();                          
             }
       
           
      if(ch==')')              //形如(-1)的负数 还有形如(-1+2*5  中的负数
         {
         out(OPTR);
         ch=getchar();
         }
     }
     
     else{
         while(ch<='9'&&ch>='0'){
        m=m*10+ch-48;
        ch=getchar();                          
         }
     }
     
      if(m)
        push(OPND,m*flag);
     
      switch(Precede(GetTop(OPTR),ch)){
                      
            case'<':push(OPTR,ch);ch=getchar();break;
              
            case'=':out(OPTR);ch=getchar();break;
               
            case'>':{
                         intm2=out(OPND),m1=out(OPND);
                                      //注意m1和m2的顺序  后一个操作数先出来用m2接收
                         switch(out(OPTR))
                         {
                              case'+':push(OPND,m1+m2);break;
                                       case'-':push(OPND,m1-m2);break;
                                       case'*':push(OPND,m1*m2);break;
                                       case'/':push(OPND,m1/m2);break;
                          }
            
                 break;
           
         }
        }
     }
     printf("%d",out(OPND));
      
      
     getchar();
     
      
    }
     
       
     
    voidpush(SqStack &t, intn){              
     if((t.top-t.base)>=t.size){
      t.base=(int*)realloc(t.base,(t.size+STACKINCREMENT)*sizeof(int));
      if(!t.base)
       exit(1);
     }
      *(t.top)=n;
         t.top++;
      
    }         
     
    intout(SqStack &t){            
     t.top--;
     return*(t.top);
    }           
     
    intEmpty( SqStack &t){
     intm=(t.top-t.base); 
     returnm;
    }   
     
    charGetTop(SqStack &t){
       return*(t.top-1);
    }      
     
    charPrecede(char c,char d)
    {
        charyouxian[7][7]=
        {
            {'>','>','<','<','<','>','>'},
            {'>','>','<','<','<','>','>'},
            {'>','>','>','>','<','>','>'},
            {'>','>','>','>','<','>','>'},
            {'<','<','<','<','<','=','>'},
            {'>','>','>','>','>','>','>'},
            {'<','<','<','<','<','>','='}
        };
        charopt[7]={'+','-','*','/','(',')','='};
        intm,n,i;
        for(i=0;i<7;i++)
        {
            if(c==opt[i])
            {
                m=i;
            }
            if(d==opt[i])
            {
                n=i;
            }
        }
     returnyouxian[m][n];
    }
     
    voidInitSqStack(SqStack &t){
     t.base=(int*)(malloc(sizeof(int)*STACK_INIT_SIZE));
     if(!t.base)
       exit(1);
     t.top=t.base;
     t.size=STACK_INIT_SIZE;
    }  

    展开全文
  • 本文实例为大家分享了C++实现四则混合运算的计算器,供大家参考,具体内容如下计算器是带括号的四则运算实际上利用的是栈后进先出的原则转换思想:#define _CRT_SECURE_NO_WARNINGS 1#include"stdio.h"#include...

    本文实例为大家分享了C++实现四则混合运算的计算器,供大家参考,具体内容如下

    计算器是带括号的四则运算实际上利用的是栈后进先出的原则

    0a134aee3b2918c1d19e2e299ff2e20d.png

    49754314f7572923d35f057cd645d0c6.png

    转换思想:

    65a989541f147f057b981cb2c7f710eb.png

    #define _CRT_SECURE_NO_WARNINGS 1

    #include"stdio.h"

    #include"stdlib.h"

    #include"string.h"

    #define maxsize 1024

    typedef struct

    {

    float data[maxsize];

    int top;

    }Stack1;

    void Initstack1(Stack1 *S)

    {

    S = (Stack1*)malloc(sizeof(Stack1));

    S->top = -1;

    }

    int Push1(Stack1 *S, float ch)

    {

    if (S->top == maxsize - 1)

    return 0;

    else

    {

    S->top++;

    S->data[S->top] = ch;

    return 1;

    }

    }//入栈Push

    int Pop1(Stack1 *S, float ch)

    {

    if (S->top == -1)

    printf("栈上溢出!\n");

    else

    ch = S->data[S->top];

    S->top--;

    return 1;

    }//出栈

    typedef struct

    {

    char data[maxsize];

    int top;

    }Stack2;

    void Initstack2(Stack2 *S)

    {

    S = (Stack2*)malloc(sizeof(Stack2));

    S->top = -1;

    }

    int Push2(Stack2 *S, char ch)

    {

    if (S->top == maxsize - 1)

    return 0;

    else

    {

    S->top++;

    S->data[S->top] = ch;

    return 1;

    }

    }//入栈Push

    int Pop2(Stack2 *S, char ch)

    {

    if (S->top == -1)

    printf("栈上溢出!\n");

    else

    ch = S->data[S->top];

    S->top--;

    return 1;

    }//出栈

    int Comop(char ch) //判断是否是运算符

    {

    switch (ch)

    {

    case'+':

    case'-':

    case'*':

    case'/':

    case'(':

    case')':

    case'#':

    return 1;

    default:

    return 0;

    }

    }//判断ch是否为运算符

    char Prior[7][7] =

    { // 运算符优先级表

    // '+' '-' '*' '/' '(' ')' '#'

    /*'+'*/{ '>', '>', '', '>' },

    /*'-'*/{ '>', '>', '', '>' },

    /*'*'*/{ '>', '>', '>', '>', '', '>' },

    /*'/'*/{ '>', '>', '>', '>', '', '>' },

    /*'('*/{ '

    /*')'*/{ '>', '>', '>', '>', ' ', '>', '>' },

    /*'#'*/{ ' ', '=' },

    };

    int Opid(char op1)

    {

    switch (op1)

    {

    case'+':return 0;

    case'-':return 1;

    case'*':return 2;

    case'/':return 3;

    case'(':return 4;

    case')':return 5;

    case'#':return 6;

    default:return -123456;

    }

    }

    char Precede(char op1, char op2) //优先级比较

    {

    int a, b;

    a = Opid(op1); b = Opid(op2);

    return(Prior[a][b]);

    }

    float Operation(float a, char op, float b)

    {

    switch (op)

    {

    case '+':

    return b + a;

    case '-':

    return b - a;

    case '*':

    return b * a;

    case '/':

    return b / a;

    default:

    return -123456;

    }

    }

    void CreateExpression(char *exp)

    {

    if (exp == NULL)

    {

    exit(1);

    }

    scanf("%s", exp);

    }

    void TransmitExpression(char *exp, char postexp[]) //中缀表达式转换后缀表达式

    {

    Stack2 FZ;

    Initstack2(&FZ);

    int i = 0;

    char x;

    FZ.top = -1;

    Push2(&FZ, '#');

    FZ.data[FZ.top] = '#';

    while (*exp != '\0')

    {

    if (!Comop(*exp))

    {

    while (*exp >= '0'&&*exp <= '9')//读取一个数字串

    {

    postexp[i++] = *exp;

    exp++;

    }

    postexp[i++] = '#';

    }

    else

    switch (Precede(FZ.data[FZ.top], *exp))

    {

    case'

    Push2(&FZ, *exp);

    exp++;

    break;

    case'=':

    x = FZ.data[FZ.top];

    Pop2(&FZ, x);

    exp++;

    break;

    case'>':

    postexp[i++] = FZ.data[FZ.top];

    x = FZ.data[FZ.top];

    Pop2(&FZ, x);

    break;

    }

    }

    while (FZ.data[FZ.top] != '#')

    {

    postexp[i++] = FZ.data[FZ.top];

    x = FZ.data[FZ.top];

    Pop2(&FZ, x);

    }

    postexp[i] = '\0';

    }

    float EvaluateExpression(char *postexp) //后缀表达式的计算

    {

    Stack1 SZ;

    Initstack1(&SZ);

    float a, b, d;

    SZ.top = -1;

    while (*postexp != '\0')

    {

    switch (*postexp)

    {

    case'+':

    case'-':

    case'*':

    case'/':

    a = SZ.data[SZ.top];

    Pop1(&SZ, a);

    b = SZ.data[SZ.top];

    Pop1(&SZ, b);

    Push1(&SZ, Operation(a, *postexp, b));

    break;

    default:

    d = 0;

    while (*postexp >= '0'&&*postexp <= '9')

    {

    d = 10 * d + *postexp - '0';

    postexp++;

    }

    Push1(&SZ, d);

    SZ.data[SZ.top] = d;

    break;

    }

    postexp++;

    }

    return(SZ.data[SZ.top]);

    }

    int Error(char *exp) //错误表达式判断

    {

    int i = 0;

    while (exp[i] != '\0')

    {

    if (

    ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i + 1] == ')'))

    || ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i - 1] == '('))

    || (exp[i] == ')'&&exp[i + 1] == '(')

    || (exp[i] == '('&&exp[i + 1] == ')')

    || ((exp[i] == ')') && exp[i + 1] >= '0'&&exp[i + 1] <= '9')

    || (exp[i] >= '0'&&exp[i] <= '9'&&exp[i + 1] == '(')

    || (exp[0] == '+' || exp[0] == '-' || exp[0] == '*' || exp[0] == '/' || exp[0] == ')')

    || ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i + 1] == '+' || exp[i + 1] == '-' || exp[i + 1] == '*' || exp[i + 1] == '/'))

    || (exp[i] == '/'&&exp[i + 1] == '0')

    )

    return 1;

    else

    if (exp[i] == '\0')

    return 0;

    i++;

    }

    return 0;

    }

    void menu()

    {

    printf("\t\t--------------------------------------------\n");

    printf("\t\t| 计算器 |\n");

    printf("\t\t| ---------------- |\n");

    printf("\t\t| | | |\n");

    printf("\t\t| ---------------- |\n");

    printf("\t\t| 1 2 3 + |\n");

    printf("\t\t| 4 5 6 - |\n");

    printf("\t\t| 7 8 9 * |\n");

    printf("\t\t| 0 ( ) / |\n");

    printf("\t\t--------------------------------------------\n");

    printf("\t\t 请输入你要进行的操作:\n");

    printf("\t\t a表达式求值 b清空 c退出\n");

    }

    void clear()

    {

    system("cls");

    menu();

    }

    void Quit()

    {

    system("cls");

    exit(1);

    }

    void main()

    {

    char c;

    char exp[maxsize];

    char postexp[maxsize] = { 0 };

    menu();

    while (1)

    {

    scanf("%c", &c);

    switch (c)

    {

    case 'a':

    sr :

    printf("请输入要计算的表达式:\n");

    CreateExpression(exp);

    if (!Error(exp))

    {

    TransmitExpression(exp, postexp);

    printf("后缀表达式为:%s\n", postexp);

    printf("表达式结果为:%s=", exp);

    printf("%g\n", EvaluateExpression(postexp));

    break;

    }

    else

    if (Error(exp))

    {

    printf("您输入的表达式有误!\n");

    goto sr;//goto语句在循环体里进行跳转

    }

    case'b':

    clear();

    break;

    case'c':

    Quit();

    break;

    }

    }

    system("pause");

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • c语言简易计算器实现中缀表达式四则混合运算
  • 采用编译原理的方法用c语言实现四则混合运算,其中有词法分析和语法分析,并用尾动作文法实现求值。请先看action表和goto表,一定要对照着这两个表来看程序。
  • 给出四则混合运算的详细实现,代码较为全面给出了包括错误检查等各个发面的问题
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #include int putlogo(HANDLE handle);int main(){HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);putlogo(handle);while(1){printf(" Mather >...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include

    #include

    int putlogo(HANDLE handle);

    int main()

    {

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

    putlogo(handle);

    while(1)

    {

    printf(" Mather >");

    //mather();

    getchar();

    }

    }

    int putlogo(HANDLE handle)

    {

    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);

    printf(" \n");

    printf(" \n");

    printf(" _/ _/ _/ \n");

    printf(" _/_/ _/_/ _/ _/ \n");

    printf(" _/ _/ _/ _/_/_/ _/_/_/ _/_/_/ \n");

    printf(" _/ _/ _/ _/ _/ _/ _/ \n");

    printf(" _/ _/ _/_/ _/ _/_/ _/ _/ \n");

    printf(" \n");

    printf(" \n");

    SetConsoleTextAttribute(handle,7);

    printf("\n");

    return 0;

    }

    /*void mather()

    {

    const char *a;

    scanf("%s",a)

    int x = 0;

    int b = 0;

    double s = 0;

    while(a[x] != 0)

    {

    if(a[x] != "+")

    {

    if(a[x] != "-")

    {

    if(a[x] != "*")

    {

    if(a[x] != "/")

    {

    }

    else

    {

    }

    }

    else

    {

    }

    }

    else

    {

    }

    }

    else

    {

    char c0[x-b] = a[b+1];

    s =(double)c0 + s;

    b = x;

    }

    }

    }*/

    展开全文
  • C语言写的秒速计算四则混合运算项目 开发语言:C语言 开发工具:Visual Studio 2017 整理时间:2017年8月2日 源代码:500行; 开发方式:C语言多文件模式开发 实现功能:在文件中写入四则混合运算表达式(无论有多长...
  • 满意答案夏x夕2013.09.06采纳率:51%等级:12已帮助:11673人scanf("%c",&c[i]);}for(i=0;c[i]!='=';i++){if(c[i]=='*'||c[i]=='/'){switch(c[i]){case '*': a[i]=a[i]*a[i+1];a[i+1]=0;t=i;...
  • 使用堆栈实现对算数四则混合运算表达式的求值(C语言) 一个运算数和运算符之间没有空格的算术表达式字符串,采用堆栈的方法对其进行计算
  • C语言不同数据混合运算时类型转换

    千次阅读 2012-11-12 13:38:41
    有两个通用的指导原则: 1.为了防止数据精度损失,如果有必要的话,类型总是被提升为较宽的类型 2.所有含有小于整数类型的算术表达式在计算之前其类型被提升为整形数据类型
  • c语言 整数四则运算

    千次阅读 2020-07-19 15:19:17
    整数四则运算 计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 ...
  • int _tmain(int argc, _TCHAR* argv[]){ std::string sss = "1+-3*4/(-4+-2)*4/6+-8"; double nValue = 0; GetValue( sss, nValue); printf("%f", nValue); getchar();return 0; } struct _data { int dataType; ...
  • 之前在网上找了好多相似的文章,不过有的是...由于加减和乘除运算优先级不同,所以处理的时候需要先处理乘除,再计算加减,程序中的全局数组用于第一次处理(处理乘除),函数内部的数组用于第二次处理(加减处理);
  • C语言·混合运算

    2020-03-14 19:27:57
    混合运算 缺省事实1 一个十进制小数换算成二进制时可能会变为无限小数,为了不损失精度,计算机默认将float常量转换为double常量处理。 缺省事实2 对于整型常量,计算机会根据其大小,默认作为对应的有符号型整数来...
  • c语言四则运算出题器》由会员分享,可在线阅读,更多相关《c语言四则运算出题器(16页珍藏版)》请在人人文库网上搜索。1、include#include#includeint a,n,nright=0,nwrong=0,flag5,flag3=1,flag6=0,mark,etime=0,...
  • 请问如何用C语言编写一个自动出题程序 可以出题关于小学的四则混合运算</p>
  • 用递归来实现带括号的C语言实数四则运算

    千次阅读 多人点赞 2018-09-13 09:51:40
    本人大一菜鸡一枚,借着老师课程设计的机会,用C语言写了一个四则运算 (即输入一个字符串,返回它计算的结果) 这篇是用递归写的,还有一个是用栈实现的~...
  • C语言实现四则运算

    千次阅读 2013-10-10 11:31:04
    default: printf("运算错误!\n"); break; } } int calculate(int len, char *expStr) { //表达式异常处理,注意len 要加括号 if ((len ) || (expStr == NULL)) { printf("表达式为空!\n"); ...
  • C语言四则运算程序

    千次阅读 2020-10-01 22:58:55
    选择1表示只有加法运算,2表示只有减法运算,3表示只有乘法运算4表示只有除法运算,5表示上面运算类型的随机混合。 允许用户输入难度等级。在难度等级为1时,程序只使用一位数字完成算术运算;在难度等级为2时...
  • C语言混合运算

    2015-07-27 13:03:00
    如果是int和float运算先把int转化为float后在运算,如果是float和double运算先把float转化为double在进行运算。同理int和double,此外字符类型的本质是整形,所以同int一样。 转载于:...
  • C语言 实现四则运算简单计算器

    千次阅读 2017-03-12 21:53:54
    C语言编写了一个简单的四则运算计算器,输入以#号结束 #include #include #define MAXSIZE 100 #define OKAY 1 #define ERROR 0 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2},...
  • 第2章 C语言的数据和运算...6. 掌握各类数据的混合运算;7. 掌握算术、关系、逻辑运算符和算术、关系、逻辑表达式;8. 掌握赋值运算符和赋值表达式、逗号运算符和逗号表达式。[基本内容]1. C语言的数据类型;2. 常...
  • C 语言的一个四则运算例子 仅供参考 其中设置的加减乘除算法子程序。
  • C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程...
  • C语言实现四则运算(小型计算器)

    万次阅读 多人点赞 2017-10-31 23:15:44
    //判断输入的符号是否是四则运算符号 int IsOperateSymbolOrNum(char ch) { if(ch == '+' || ch == '-' || ch == '*'|| ch == '/' || ch == '\n') return 1; else return 0; } //判断符号的优先级 char Priority...
  • C语言混合运算,情况较多,死记硬背必然达不到预期的效果。如果理解了如下几个问题,那C语言混合运算问题将必然迎刃而解。一、存储形式在C中,整型和字符型(以ASCII码表示)都是以二进制补码存放的,正数的补码为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,643
精华内容 6,257
关键字:

c语言四则混合运算

c语言 订阅