精华内容
下载资源
问答
  • 程序实习报告书起止日期: 2014 年 6月 23 日 至 2014 年 7月 4日学 号:班 级:姓 名:指导教师:通信与电子工程学院2014年 7月 4日5目 录1. 需求分析……………………………………………21.1 程序的功能…………...

    程序实习报告书

    起止日期: 2014 年 6月 23 日 至 2014 年 7月 4日

    学 号:

    班 级:

    姓 名:

    指导教师:

    通信与电子工程学院

    2014年 7月 4日

    5

    目 录

    1. 需求分析……………………………………………2

    1.1 程序的功能…………………………………………2

    1.2 输入输出的要求……………………………………2

    1.3 测试数据……………………………………………2

    2. 概要设计……………………………………………3

    3. 详细设计……………………………………………4

    3.1 模块功能说明………………………………………4

    4. 调试分析……………………………………………6

    5. 核心源程序清单和执行结果………………………6

    1.需求分析

    1.1 程序的功能

    本程序是一个计算器小程序,利用算符优先关系,实现对算术四则混合运算表达式的求值并输出结果。

    1.2 输入输出的要求

    输入的形式:算术表达式,以井号“#”结束。例如2*(3+4)#;

    包含的运算符只能有+ 、- 、* 、/ 、(、 );

    输出的形式:运算结果,例如Answer is:14;

    1.3 测试数据

    第一组: 输入 3*(9-4)# 输出 Answer is:15

    第二组: 输入140/(57+13)# 输出 Answer is:2

    第三组: 输入 56*(12-10)# 输出 Answer is:112

    2. 概要设计

    向SIGN中压入“#”

    用c=getchar()读字符

    c!=’#’||SIGNgettop!=’#’

    N

    c是否为操作符

    Y

    N

    将字符数转换成整形数

    将c压入DATE

    用c=getchar()读字符c

    Y

    结束运算

    比较SIGNgettop和c的优先级

    #include #define MAX 100

    typedef struct /*定义一个栈存放运算数*/

    {

    int a[MAX];

    int top;

    }OPND;

    typedef struct /*定义一个栈存放运算符*/

    {

    char a[MAX];

    int top;

    }OPTR;

    void Init_OPND(OPND *s) /*初始化运算数栈*/

    {

    s->top =0;

    }

    void Init_OPTR(OPTR *s) /*初始化运算符栈*/

    {

    s->top =0;

    }

    void Push_OPND(OPND *s,int x) /*压入一个运算数*/

    {

    s->top ++;

    s->a [s->top ]=x;

    }

    void Push_OPTR(OPTR *s,char x) /*压入一个运算符*/

    {

    s->top ++;

    s->a [s->top ]=x;

    }

    int Pop_OPND(OPND *s) /*取出一个运算数*/

    {

    int x;

    x=s->a [s->top];

    s->top --;

    return x;

    }

    char Pop_OPTR(OPTR *s) /*取出一个运算符*/

    {

    char x;

    x=s->a [s->top];

    s->top --;

    return x;

    }

    int GetTop_OPND(OPND *s) /*取栈顶运算数*/

    {

    return (s->a[s->top]);

    }

    char GetTop_OPTR(OPTR *s) /*取栈顶运算符*/

    {

    return (s->a[s->top]);

    }

    int IsOpr(char c) /*判断输入字符是否为运算符*/

    {

    if (c==+||c==-||c==*||c==/||c==(||c==)||c==#)

    return 1;

    else

    return 0;

    }

    char Precede(char s,char c) /*判断字符的优先级*/

    {

    switch(s)

    {

    case +:

    case -:

    {

    if(c==+||c==-)

    return >;

    else if (c==*||c==/)

    return ;

    else

    return >;

    }

    break;

    case *:

    case /:

    {

    if(c==+||c==-)

    return >;

    else if (c==*||c==/)

    return >;

    else if(c==()

    return ;

    else

    return >;

    }

    break;

    case (:

    {

    if(c==))

    return =;

    else

    return ;

    }

    break;

    case #:

    {

    if(c==#)

    return =;

    else

    return :

    theta=Pop_OPTR(&soper);

    b=Pop_OPND(&sdata);

    a=Pop_OPND(&sdata);

    result=Operate(a,theta,b);

    Push_OPND(&sdata,result);

    break;

    }

    }

    }

    printf("Anwser is: %d\n",GetTop_OPND(&sdata));

    }

    第 10 页 共 12 页

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼case 0x7b: dengyu=1; //key=11; //wei++; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; ...

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

    case 0x7b: dengyu=1; //key=11; //wei++; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: jia=1; //key=12; // wei++; break;

    case 0xd7: jian=1; break;

    case 0xb7: cheng=1; break;

    case 0x77: chu=1; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } }}}

    void display0(){if(key!=20){switch(wei){case 1: a0=key;b0=16;c0=16;d0=16;e0=16;f0=16;break;case 2: b0=key;c0=16;d0=16;e0=16;f0=16;break;case 3: c0=key;d0=16;e0=16;f0=16;break;case 4: d0=key;e0=16;f0=16;break;case 5: e0=key;f0=16; break;case 6: f0=key;//wei=0;break;}key=20;}display(a0,b0,c0,d0,e0,f0);if(a0!=16) s5=a0;if(b0!=16) s4=b0;if(c0!=16) s3=c0;if(d0!=16) s2=d0;if(e0!=16) s1=e0;if(f0!=16) s0=f0;}

    void main(){uchar gongneng,yunsuan; while(1){ keyscan();gongneng=jia|jian|cheng|chu|dengyu|qingling;if(gongneng==0){display0();}else{ yunsuan=jia|jian|cheng|chu;if(yunsuan){a0=16;b0=16;c0=16;d0=16;e0=16;f0=16;//wei=0;if(jia){jia=0;jia0=1;jian0=0;cheng0=0;chu0=0;}if(jian){jian=0;jia0=0;jian0=1;cheng0=0;chu0=0;}if(cheng){cheng=0;jia0=0;jian0=0;cheng0=1;chu0=0;}if(chu){chu=0;jia0=0;jian0=0;cheng0=0;chu0=1;}switch(wei){case 6:qian=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;case 5:qian=s5*10000+s4*1000+s3*100+s2*10+s1;break;case 4:qian=s5*1000+s4*100+s3*10+s2;break;case 3:qian=s5*100+s4*10+s3;break;case 2:qian=s5*10+s4;break;case 1:qian=s5;break;}wei=0;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;display(a0,b0,c0,d0,e0,f0);//P1=0x55;}if(dengyu){ dengyu=0; //display(16,16,16,16,16,16); switch(wei){case 6:hou=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;case 5:hou=s5*10000+s4*1000+s3*100+s2*10+s1;break;case 4:hou=s5*1000+s4*100+s3*10+s2;break;case 3:hou=s5*100+s4*10+s3;break;case 2:hou=s5*10+s4;break;case 1:hou=s5;break;}wei=0;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0; if(jia0) {jia0=0;hou=qian+hou;} if(jian0) {jian0=0;hou=qian-hou;} if(cheng0) {cheng0=0;hou=qian*hou;} if(chu0) {chu0=0;hou=qian/hou;} if(hou<10) { a0=hou;b0=16;c0=16;d0=16;e0=16;f0=16; } else { if(hou<100){a0=hou/10;b0=hou%10;c0=16;d0=16;e0=16;f0=16;}else{if(hou<1000){a0=hou/100;b0=hou%100/10;c0=hou%10;d0=16;e0=16;f0=16;}else{if(hou<10000){a0=hou/1000;b0=hou%1000/100;c0=hou%100/10;d0=hou%10;e0=16;f0=16;}else{if(hou<100000){a0=hou/10000;b0=hou%10000/1000;c0=hou%1000/100;d0=hou%100/10;e0=hou%10;f0=16;}else{if(hou<1000000){a0=hou/100000;b0=hou%100000/10000;c0=hou%10000/1000;d0=hou%1000/100;e0=hou%100/10;f0=hou%10;}}}}} } display(a0,b0,c0,d0,e0,f0); P1=hou;}if(qingling){a0=16;b0=16;c0=16;d0=16;e0=16;f0=16;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;jia=0;jian=0;cheng=0;chu=0;jia0=0;jian0=0;cheng0=0;chu0=0;qingling=0;dengyu=0;qian=0;hou=0;display(a0,b0,c0,d0,e0,f0);}}

    }}

    展开全文
  • C语言】简易科学计算器代码(链栈应用)(原创)用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:(摘抄结束)我给出的计算器功能有:支持欧拉数e,支持圆周率pi,...

    【C语言】简易科学计算器源代码(链栈应用)(原创)

    用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:

    (摘抄结束)

    我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)

    #include

    #include

    #include

    #include

    #include

    //引用请注明出处:/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html

    #define MAX_TOKEN_LEN 100 //标记最大长度

    #define EXPR_INCREMENT 20//表达式长度的增量

    typedef struct {

    double opnd; //操作数

    char optr[11]; //运算符

    int flag; //若为1,则为单目运算符,2则是双目运算符

    } SElemType; //栈元素类型

    typedef struct SNode { //栈

    SElemType date;

    struct SNode * next;

    } SNode, *Stack;

    struct { //用来存储一个操作数或运算符

    char str[MAX_TOKEN_LEN];

    int type; //类型,若为0,则为操作数,若为1则为运算符

    } token;

    struct { //expression,用来存储表达式

    char *str;

    int cur; //标记读取expr的当前位置

    }expr;

    Stack OPND, OPTR; //操作数栈operand,运算符栈operator

    int expr_size; //表达式长度

    void InitStack(Stack *S) { //初始化栈

    *S = (Stack)malloc(sizeof(SNode));

    if(!(*S)) {

    printf("动态申请内存失败!\n");

    exit(0);

    } //if

    (*S)->next = NULL;

    } //InitStack

    void DestroyStack(Stack *S) { //销毁栈

    SNode *p;

    while(p = *S) {

    *S = p->next;

    free(p);

    } //while

    } //DestroyStack

    void Push(Stack S, SElemType e) { //入栈

    SNode *p;

    p = (SNode *)malloc(sizeof(SNode));

    if(! p) {

    printf("动态申请内存失败!\n");

    exit(0);

    } //if

    strcpy(p->date.optr,e.optr);

    p->date.opnd = e.opnd;

    p->date.flag = e.flag;

    p->next = S->next;

    S->next = p;

    } //Push

    void Pop(Stack S,SElemType *e) { //出栈

    SNode *p;

    p = S->next;

    if(! p) {

    printf("栈为空,不能出栈!\n");

    exit(0);

    } //if

    S->next = p->next;

    strcpy(e->optr,p->date.optr);

    e->opnd = p->date.opnd;

    e->flag = p->date.flag;

    free(p);

    } //Pop

    void get_expr() { //获取expr字符串

    char *p;

    int size;

    expr.cur = 0;

    expr_size = 100;

    expr.str = (char*)malloc(expr_size * sizeof(char));

    if(! expr.str) {

    printf("内存分配失败!\n");

    exit(0);

    } //if

    size = 0;

    p = expr.str;

    while((*p = getchar()) != '\n') {

    if(*p != ' ') {

    if((*p >= 'A') && (*p <= 'Z')) {

    *p = *p + 32; //将大写转换成小写

    } //if

    p++;

    size+

    展开全文
  • C语言】简易科学计算器代码(链栈的应用)(原创)用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:(摘抄结束)我给出的计算器功能有:支持欧拉数e,支持圆周率pi,...

    【C语言】简易科学计算器源代码(链栈的应用)(原创)

    用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:

    (摘抄结束)

    我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)

    #include

    #include

    #include

    #include

    #include

    //引用请注明出处:/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html

    #define MAX_TOKEN_LEN 100 //标记最大长度

    #define EXPR_INCREMENT 20//表达式长度的增量

    typedef struct {

    double opnd; //操作数

    char optr[11]; //运算符

    int flag; //若为1,则为单目运算符,2则是双目运算符

    } SElemType; //栈元素类型

    typedef struct SNode { //栈

    SElemType date;

    struct SNode * next;

    } SNode, *Stack;

    struct { //用来存储一个操作数或运算符

    char str[MAX_TOKEN_LEN];

    int type; //类型,若为0,则为操作数,若为1则为运算符

    } token;

    struct { //expression,用来存储表达式

    char *str;

    int cur; //标记读取expr的当前位置

    }expr;

    Stack OPND, OPTR; //操作数栈operand,运算符栈operator

    int expr_size; //表达式长度

    void InitStack(Stack *S) { //初始化栈

    *S = (Stack)malloc(sizeof(SNode));

    if(!(*S)) {

    printf("动态申请内存失败!\n");

    exit(0);

    } //if

    (*S)->next = NULL;

    } //InitStack

    void DestroyStack(Stack *S) { //销毁栈

    SNode *p;

    while(p = *S) {

    *S = p->next;

    free(p);

    } //while

    } //DestroyStack

    void Push(Stack S, SElemType e) { //入栈

    SNode *p;

    p = (SNode *)malloc(sizeof(SNode));

    if(! p) {

    printf("动态申请内存失败!\n");

    exit(0);

    } //if

    strcpy(p->date.optr,e.optr);

    p->date.opnd = e.opnd;

    p->date.flag = e.flag;

    p->next = S->next;

    S->next = p;

    } //Push

    void Pop(Stack S,SElemType *e) { //出栈

    SNode *p;

    p = S->next;

    if(! p) {

    printf("栈为空,不能出栈!\n");

    exit(0);

    } //if

    S->next = p->next;

    strcpy(e->optr,p->date.optr);

    e->opnd = p->date.opnd;

    e->flag = p->date.flag;

    free(p);

    } //Pop

    void get_expr() { //获取expr字符串

    char *p;

    int size;

    expr.cur = 0;

    expr_size = 100;

    expr.str = (char*)malloc(expr_size * sizeof(char));

    if(! expr.str) {

    printf("内存分配失败!\n");

    exit(0);

    } //if

    size = 0;

    p = expr.str;

    while((*p = getchar()) != '\n') {

    if(*p != ' ') {

    if((*p >= 'A') && (*p <= 'Z')) {

    *p = *p + 32; //将大写转换成小写

    } //if

    p++;

    size+

    展开全文
  • //x, y, z: 用来保存取模相关变量,printf("代码计算器:可以求加、减、乘、除和取模\n""如果需要进行四则运算请输入1, 如果需要进行取模运算请输入2 \n");do{scanf("%d", &xz);if (xz == 1){printf("请按照“被X数 ...
  • 已结贴√问题点数:10回复次数:5 科学计算器(可实现带括号的浮点数四则运算)/*Name: 科学计算器(可实现带括号的浮点数四则运算)Copyright:Author:Date: 15-09-14 21:49Description:对近阶段所学的一个小总结,综合...
  • c语言计算器代码程序设计报告《C语言课程设计》报告 设计题目:简单计算器设计 学院名称:电子与信息工程学院专业:计算机科学与技术班级:计科姓名:学号指导教师: 定稿日期:XX-5-28 一、设计题目 简单...
  • c语言编的小程序c语言编的小程序计算器算器c语言编的小程序计算器c语言编的小程序计算器
  • c语言计算器设计代码

    2012-11-14 11:05:46
    这是一款基于对话框的简易计算器,功能实现比较简单,代码主要集中在计算模块。
  • #### 原题链接:[题目486 - ACM在线评测系统](http://nyoj.top/problem/486 "nyoj在线评测")#### 原题内容:**题目描述:**szhhck有一个五年前买的旧计算器...你的任务是写个程序去检测旧计算器计算的答案正确与否。...
  • c语言计算器程序设计包含加减乘除简单的函数运算c语言计算器程序设计包含加减乘除简单的函数运算人气:258 ℃时间:2020-03-28 13:19:41优质解答实用计算器之程序设计[摘 要]多用计算器的构思及设计代码[关键词]多用...
  • 一个简单的计算器C代码一个简单的计算器C代码一个简单的计算器C代码一个简单的计算器C代码一个简单的计算器C代码一个简单的计算器C代码一个简单的计算器C代码
  • C语言 计算器代码

    2011-06-30 20:28:06
    计算器设计开发在C语言平台上的应用。这只是个小软件。加油
  • 程序实习报告书起止日期:2014年6月23日至2014年7月4日学 号: 班 级: 姓 名: 指导教师:通信与电子工程学院2014年7月4日目 录TOC \o "1-5" \h \z \o "Current Document" 需求分析 2\o "Current Document" 1.1程序的...
  • C语言设计计算器程序代码,有需要的来下载吧~
  • C语言计算器代码

    2008-06-18 11:09:12
    这个程序只提供课程设计,没有界面.简单,易懂!
  • 芯片是AT89S52的,用c语言写的,12864液晶屏显示的,可以算9为小数,还可以开根。大概1000行代码 别忘了我的名字:永城汤志强
  • C语言 计算器

    2017-10-12 17:44:30
    计算器c源代码,非常好的源代码,可已参考 这是一个用c语言实现的完成计算器功能的程序,主要包括加、减、乘、除。
  • 自编小程序 供初学者参考 要过二级的可以下来看看 更多访问:http://www.liufuduan.com/
  • 今天做实验楼的C计算器程序实验,把scanf输入改编成通过argv输入参数。 +,-,/三种运算都可以。 代码如下 #include&lt;stdlib.h&gt; int main(int argc,char* argv[]) { double num1 = 0.0 ,num2 =...
  • 慕影 #include<stdio.h>//标准输入输出 #include<conio.h>//system设置颜色使用到 #include<stdlib.h>//清屏时用到 #include<math.h>//数学函数用到 int main) { void mnue;//菜单函数声明 void add;...
  • 程序实习报告书 起止日期 2014 年 6月 23 日 至 2014 年 7月 4日 学 号 班 级 姓 名 指导教师 通信与电子工程学院 2014年 7月 4日 .下载可编辑. .下载可编辑. 目 录 1. 需求分析2 1.1 程序的功能2 1.2 输入输出的...
  • C语言计算器代码

    2015-07-01 23:21:33
    一个C语言计算器代码来源:Linux社区
  • c语言计算器的实验报告 1. 题目:简单计算器 2. 实验目的:模仿日常生活中所用的计算器,自行设计一个简单 的计算器程序,实现简单的计算功能。 3. 实验主要硬件软件环境:Window 7Visual C++ 6.0 4. 实验内容: (1)...
  • 完成一个简单的计算器,要求实现最基本的运算操作,当用户输入一个算式后,计算器显示计算结果,同时屏幕项部显示:continue? 如果用户此时按Y键,则继续输入下一个算式,否则,程序终止。 实现要求: 由主函数获取...
  • c语言计算器

    千次阅读 多人点赞 2018-11-22 22:03:32
    c语言计算器两种方法 //一般做法 #include&lt;stdio.h&gt; #include&lt;windows.h&gt; //#include&lt;assert.h&gt; void menu() { printf("**************************\n"); ...
  • //x, y, z: 用来保存取模相关变量,printf("代码计算器:可以求加、减、乘、除和取模\n""如果需要进行四则运算请输入1, 如果需要进行取模运算请输入2 \n");do{scanf("%d", &xz);if (xz == 1){printf("请按照“被X数 ...
  • C语言课程设计 工 程 实 践 院系名称 网络工程学院 班 级 学生姓名 学 号 课 题 计 算 器 目 录 TOC \o "1-3" \h \z \u 摘 要 1 一问题要求及任务描述 2 二系统分析 3 1功能需求 3 2数据需求 3 3性能需求 3 4系统...
  • 这是用C语言写的一个简单的计算器程序代码 expression,term,factor的划分,使得函数递归的结构十分清晰,大家可以下载学习

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,557
精华内容 3,822
关键字:

c语言计算器程序代码

c语言 订阅