精华内容
下载资源
问答
  • 一个简单的程序,但是很实用,适合C语言初学者
  • 满意答案#include#include#includechar token[61]; /*存放表达式字符串的数组*/int n=0;void error(void) /*报告错误函数*/{printf("ERROR!\n");exit(1);}void match(char expected) /*检查字符匹配的函数*/{if...

    满意答案

    #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分享举报

    展开全文
  • +、-、*、/运算的两个数中有一个数为float或double型,结果为double型,因为系统将所有的float型数据转换为double类型数据再进行计算。 如果int型与float或double型数据进行计算,先把int型和float型数据转换为...
    1. +、-、*、/运算的两个数中有一个数为float或double型,结果为double型,因为系统将所有的float型数据转换为double类型数据再进行计算。
    2. 如果int型与float或double型数据进行计算,先把int型和float型数据转换为double数据再进行计算,结果为double型。
    3. 字符(char)型数据与整形数据计算,即是把char型数据的ASCLL代码与整形数据进行计算。如果字符型与浮点型(因为C语言中存储小数是用科学计算法保存,小数点位置可以移动,所以称小数为浮点类型)数据进行运算,则将字符的ACSLL代码转换为double型数据,然后进行计算。
    总结:1. 计算数据中有double或float类型,那么计算结果为double类型
               2. 低数据类型(排序为:char,short,int,long,float,double)与高数据类型计算时先同一转换为高数据类型再进行计算,结果为高数据类型。
    展开全文
  • C语言混合运算

    2015-07-27 13:03:00
    如果是int和float运算,则先把int转化为float后在运算,如果是float和double运算,则先把float转化为double在进行运算。同理int和double,此外字符类型的本质是整形,所以同int一样。 转载于:...
    1. +,-,*,/,的左右如果是不同类型进行运算,是先转换为同一类型在进行运算。

    2. 如果是int和float运算,则先把int转化为float后在运算,如果是float和double运算,则先把float转化为double在进行运算。同理int和double,此外字符类型的本质是整形,所以同int一样。

    转载于:https://my.oschina.net/u/2423028/blog/484149

    展开全文
  • 本文实例为大家分享了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语言四则运算程序

    千次阅读 2020-10-01 22:58:55
    选择1表示只有加法运算,2表示只有减法运算,3表示只有乘法运算,4表示只有除法运算,5表示上面四种运算类型的随机混合。 允许用户输入难度等级。在难度等级为1时,程序只使用一位数字完成算术运算;在难度等级为2时...
  • 请问如何用C语言编写一个自动出题程序 可以出题关于小学的四则混合运算
  • C语言程序提供的运算3.1 基本运算符及其表达式3.2 基本运算表达式3.3 关系运算符及表达式3.4 逻辑运算符及表达式3.5 赋值运算符及表达式3.6 其他运算3.7 各类数值型数据间的混合运算3.8 类型转换3.1 基本运算符及其...
  • C语言——整型和浮点型混合运算

    千次阅读 2020-05-08 21:39:53
    C语言int和double混合运算时,会自动将int类型的数据转换为double类型的数据,最后得到的结果也是double类型。如下例: double a=4.0/9.0; int b=9*a;//b=3,因为double类型的4.0/9.0的值要小于4.0/9.0的实际值...
  • 采用编译原理的方法用c语言实现四则混合运算,其中有词法分析和语法分析,并用尾动作文法实现求值。请先看action表和goto表,一定要对照着这两个表来看程序
  • C语言数值型数据之间的混合运算数值型数据之间的混合运算自动转换强制类型转换 数值型数据之间的混合运算 变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据...
  • 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
  • 本节书摘来自华章出版社《C语言程序...在C语言中,允许不同类型的数据之间进行某些混合运算。前面提到,字符型数据可以和整型通用。不仅如此,C语言还允许整型、单精度型、双精度型、字符型的数据之间进行混合运算。...
  • 程序中经常会遇到不同类型的数据进行运算,如果一个运算符两侧的数据类型不同,则会先自动进行数据类型转换,使运算符两侧的数据类型相同,然后再进行运算,因此整型、实型、字符型数据间都可以进行混合运算 规律...
  • 汇编C语言混合编程

    2017-03-04 15:31:04
    ARM汇编语言和C语言混合编程  ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套规则(C51中也有类似的一套规则)。我感觉比在线汇编功能强大(不用有很多忌讳),...
  • 程序设计基础(C语言)》是为了适应高职高专教学改革的需要而编写的,全书主要内容包括C程序的结构,算法及算法...主要表现在:一是将编译预处理和位运算并入c语言基础,降低了教学要求;二是将指针的相关知识以应用...
  • 本节书摘来自华章出版社《C语言解惑》一 书中的第3章,第3.1节,作者:刘振安 刘燕君...3.1 混合运算要小心 【例3.1】分析下面程序的输出结果。 #include <stdio.h> void main() { double a=2,b=6; int c=...
  • 实验三:编写一个C语言和汇编混合的DSP程序一、实验目的1.学习在C工程中加入汇编编程混合编程的方法。2.了解混合编程的注意事项。3.了解混合编程的必要性和在什么情况下采用混合编程。二、实验设备1.PC机一台:...
  • C语言不同数据类型间的混合运算+常见数据类型

    万次阅读 多人点赞 2017-07-29 21:24:41
    程序中经常会遇到不同类型的数据进行运算,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,现将规律总结如下: 1. +. -. *. /运算的两个数中有一个数为float或double...
  • C语言混合运算,情况较多,死记硬背必然达不到预期的效果。如果理解了如下几个问 题,那C语言混合运算问题将必然迎刃而解。 一、存储形式 在C中,整型和字符型(以ASCII码表示)都是以 二进制补码存放的,...
  • 《实验三C语言和ARM汇编混合编程指导书.》由会员分享,可在线阅读,更多相关《实验三C语言和ARM汇编混合编程指导书.(4页珍藏版)》请在人人文库网上搜索。1、实验三 C 语言和 ARM 汇编混合编程1 实验目的掌握 C 语言...
  • 之前在网上找了好多相似的文章,不过有的是...由于加减和乘除运算优先级不同,所以处理的时候需要先处理乘除,再计算加减,程序中的全局数组用于第一次处理(处理乘除),函数内部的数组用于第二次处理(加减处理);
  • matlab与C语言混合编程

    千次阅读 2019-07-10 20:58:04
    上面的程序跟在C语言中在main函数上写效果上没有很大区别,但是mex的源文件一定要包含头文件"mex.h“,可以这样理解mexFunction函数可以相当于main函数,在这里相当于一个入口函数的作用,这个mexFunction函数有四个...
  • ARM汇编与C语言混合编程课件基于ARM的C语言与汇编语言混合编程 C语言与汇编语言混合编程应遵守的规则 ATPCS规则 1)寄存器的使用规则 子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数...
  • 有关C语言中有符号/无符号数混合运算的小问题 分类: C语言知识2012-03-28 00:47 157人阅读 评论(0) 收藏 举报 语言c汇编n2div工作 这两天的工作需要涉及到对无符合数,有符号数作混合运算。 ...
  • 各类数据型数据之间的混合运算 变量的数据类型时可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则: (1)...
  • 第6章 C语言和汇编语言混合编程,,混合编程中参数传递和寄存器使用,在很多DSP应用中都使用C语言和汇编语言进行混合编程。...,,6.1 混合编程中参数传递和寄存器使用,某些程序使用汇编语言编写时,实时运行效率是C...
  • matlab与c语言混合编程

    2019-08-31 23:29:06
    因此将循环部分用C语言写,然后编译成matlab可以调用的mex文件,无疑可以加快循环运算速度,从而加快整个代码速度 之前因为合并数据需要不会数据库,强行在matlab里利用类似excel的vlookup功能,无奈太慢,只能想.....
  • 可进行加、减、乘、除或混合运算,随机生成题目,回答后程序会判断结果是否正确并以图形和声音方式提示,结束时给出成绩。大一时做c语言课程设计写的,做相似题目的可以参考。
  • 引言1.1 计算机程序的基本概念1.2 计算机程序设计的步骤与方法1.2.1 计算机程序设计的步骤1.2.2 计算机结构化程序设计方法1.3 算法...C语言程序的基本结构1.5 C语言程序的执行过程1.6 C语言程序开发环境小结习题一第2章...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,200
精华内容 5,680
关键字:

c语言混合运算程序

c语言 订阅