报告汇总之c语言数据结构报告篇(二)

简单计算器

代码区

#include <stdio.h>
#include <stdlib.h>char S[100];
char S2[100];
int i=0;//用来存储计算对数据
typedef struct sqlist
{char data[100];int top;
}s1;
//初始化数据栈
void initSqlist (s1*L)
{L=(s1*)malloc(sizeof(s1));L->top=-1;
}
//数据栈进栈
void pushs1 (s1*L,char c)
{L->top++;L->data[L->top]=c;
}
//数据栈进栈
int  pop (s1*L)
{int i;i=L->top;L->top--;return L->data[i];
}
//创建运算符栈
typedef struct
{char op[100];int top;
} c1;
//初始化运算符栈
void initc1 (c1*P)
{P=(c1*)malloc(sizeof(c1));P->top=-1;
}
//运算符压栈void pushc1 (c1*P,char c)
{P->top++;P->op[P->top]=c;
}
//运算符出栈
char popc1 (c1*P)
{int i=P->top;P->top--;return P->op[i];
}
//获得需要处理的式子
void get (char s1[100])
{int i=0;scanf("%s",s1);while (s1[i]!=';'){printf("%c",s1[i]);i++;}printf("\n");
}
void changeguohao (char S[100],s1*L,c1*P,int i);
//变换中缀为后缀
void change (char S[100],s1*L,c1*P,int i)
{get(S);printf("后缀表达式为:");char a;while (S[i-1]!=';'){int s=-1;if (S[i]=='('){s=P->top;}if (S[i]=='('||S[i]==')'){if (S[i]==')'){while (P->top!=s){a=popc1(P);printf("%c",a);}}i++;}if (S[i]>=49&&S[i]<=57){pushs1(L,S[i]);a=pop(L);printf("%c",a);}if (S[i]==';')while (P->top!=-1) {a=popc1(P);printf("%c",a);}if (S[i]=='+'||S[i]=='-'){if (S[i-2]=='+'||S[i-2]=='-'){a=popc1(P);printf("%c",a);}pushc1(P,S[i]);}if (S[i]=='*'||S[i]=='/'){pushc1(P, S[i]);if(S[i+1]!='('){i++;pushs1(L,S[i]);a=pop(L);printf("%c",a);}while (P->top!=-1&&S[i+1]!='('){a=popc1(P);printf("%c",a);}//i++;//pushc1(P,S[i]);}i++;}}
//变换有括号时的中缀表达式
void changeguohao (char S[100],s1*L,c1*P,int i)
{char a;if (S[i]==')'){while (P->top!=-1){a=popc1(P);printf("%c",a);}i++;}change(S, L, P, i);
}
//计算后缀表达式
int clculate (char S[100],s1*L,c1*P,int i)
{printf("请输入您需要处理的后缀表达式:");get(S);i=0;char a;char b;int c=0;char d = '0';L->top=-1;while (S[i]!=';'){if (S[i]>=49&&S[i]<=57)pushs1(L, S[i]);//数据压栈else{//对运算符进行判断,进行计算if (S[i]=='+'){a=pop(L);b=pop(L);c=(a-'0')+(b-'0');d=c+'0';pushs1(L, d);}if (S[i]=='-'){a=pop(L);b=pop(L);c=(b-'0')-(a-'0');d=c+'0';pushs1(L, d);}if (S[i]=='*'){a=pop(L);b=pop(L);c=(a-'0')*(b-'0');d=c+'0';pushs1(L, d);}if (S[i]=='/'){a=pop(L);b=pop(L);c=(b-'0')/(a-'0');d=c+'0';pushs1(L, d);}}i++;}return c;
}
int main ()
{s1 *L;L=(s1*)malloc(sizeof(s1));//initSqlist(L);L->top=-1;c1 *P;P=(c1*)malloc(sizeof(c1));//initc1(* &P);P->top=-1;while (1){printf("请输入您需要进行的操作:");printf("0代表转换为后缀表达式;1代表计算后缀表达式结果\n");int n;scanf("%d",&n);getchar();switch (n){case 0:{printf("中缀表达式为:");change(S, L, P,i);printf("\n");break;}case 1:{printf ("计算的结果为:%d",clculate(S, L, P, i));printf("\n");break;}default:break;}}return 0;
}

报告区

一、 实验内容描述(问题域描述)
编写程序,模拟简单运算器的工作:输入一个算式(没有空格),遇等号“=”说明输入结束,输出结果。假设计算器只能计算加减乘除运算,运算数和结果都是整数。要求完成以下功能:
(1) 从键盘录入中缀表达式,将中缀表达式转换为后缀表达式输出;
(2) 输入后缀表达式,计算后缀表达式的值。
二、实验基本原理与设计(数据结构设计与算法设计)
(1)利用顺序栈进行存储和运算运算符和数字
(2)在读入信息时碰到数字就输出,碰到字符先入栈比较后输出
(3)在进行计算时直接运算,把运算后的结果入栈;直至把最终结果出栈
第二部分:实验调试与结果分析(可加页)
一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1.调试方法描述
① 输入c程序,并保存;
② 编译c程序,找出程序的语法错误并改正;
③ 输入测试数据,运行c程序;
④ 若有错利用断点一步步运行查错
⑤ 重复②-④步,直到得到正确的运行结果。

2.实验输入/输出数据记录

3.实验过程发现的问题
在进行减法运算的时候我们需要注意是谁减谁,除法运算也一样。开始我并没有注意到这一点,导致后面的结果错误很多。
在把中缀转后缀的过程中我忘记将括号删去导致一开始输出时括号一起输出;带括号的转换
的复杂程度明显高于不带括号所以我将其单独列出便于查看。
二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1. 结果描述
转换过程和计算过程全部正确;结果输出无误。
2. 实验现象分析
所有程序经调试均符合题目要求。
3.影响因素讨论

4.算法分析(包括时间和空间)
空间复杂度为 Sn=O(100)
时间复杂度为Tn=O(n)
5.结论
经过多次调试,所有程序最终运行都成功了。

三、 实验小结、建议及体会
学习C语音需要有很大的耐心与毅力,对我们的身体的脑力都是一项很大的挑战。敲了快整整一 周的代码,虽然很累,很烦琐,偶尔还会 被题目难倒,压力山大。可当自己将题目一
题一题的解决时,心中更多的是成就感,多了一分慰藉。在接下来的日子里,要更加努力好好学专业基础,稳固提升。在课余时间更加注重劳逸结合,多运动,多锻炼,这样学习更有效率。

数据结构实验报告(二)简单计算器(中缀转后缀)相关推荐

  1. 计算器软件C语言课程设计实验报告,c简单计算器实验报告_相关文章专题_写写帮文库...

    时间:2019-05-15 12:55:15 作者:admin 计算器实验报告 班级: 07计本(1)班 姓名: 王林 学号: 20706031047 指导老师: 韩静 一. 需求分析 (1)制作一个 ...

  2. 数据结构实验报告二 栈和队列

    一.实验目的 1.掌握栈的结构特性及其入栈,出栈操作: 2.掌握队列的结构特性及其入队.出队的操作,掌握循环队列的特点及其操作. 二.实验内容和要求 1.阅读下面程序,将函数Push和函数Pop补充完 ...

  3. 编译原理 实验二 简单计算器的设计与实现

    实验二 简单计算器的设计与实现  一.实验目的   综合运行词法分析器.语法分析器等原理实现一个具有加.乘功能的简单计算器,该计算器满足乘法优先级高于加法优先级,且仅处理非负整数. 二.实验内容    ...

  4. 数据结构实验报告,二叉树的基本操作(C语言)

    数据结构实验报告,二叉树的基本操作(C语言) 作者:命运之光 专栏:数据结构 目录 数据结构实验报告,二叉树的基本操作(C语言) 实验六 二叉树的基本操作 一.需求分析 二.概要设计 三.详细设计 四 ...

  5. 数据结构实验报告(六)

    数据结构实验报告(六) 一.实验名称 实验六  图的实验1--图的邻接矩阵存储实现 二. 实验目的 1.  熟练理解图的相关概念: 2.  掌握图的邻接矩阵的存储方法的实现: 3.  学会图的遍历算法 ...

  6. 桂电七院数据结构实验报告一

    顺序表的基本操作 实验内容与步骤 实现顺序表上的插入.删除等操作.调试程序并对相应的输出作出分析:修改输入数据,预期输出并验证输出的结果.加深对有关算法的理解. 步骤: 第一步:定义顺序表的存储结构. ...

  7. mysql数据库实验报告二

    实验报告二 实验目的 实验内容和主要步骤: 实验中遇到的问题和心得体会 实验目的 1.掌握SQL查询语句的一般格式 2.掌握简单数据查询操作 3.熟练掌握各种查询条件的表示 4.掌握排序和分组操作在S ...

  8. 计算机图形学二维图形基本变换实验原理,江苏大学-计算机图形学第三次实验报告-二维图形变换...

    <江苏大学-计算机图形学第三次实验报告-二维图形变换>由会员分享,可在线阅读,更多相关<江苏大学-计算机图形学第三次实验报告-二维图形变换(13页珍藏版)>请在人人文库网上搜索 ...

  9. 计算机组成移位运算器实验,计算机组成实验报告二移位运算实验

    <计算机组成实验报告二移位运算实验>由会员分享,可在线阅读,更多相关<计算机组成实验报告二移位运算实验(3页珍藏版)>请在人人文库网上搜索. 1.淮海工学院计算机工程学院实验报 ...

最新文章

  1. 零基础入门学习Python(28)文件系统
  2. 计算机视觉结课论文,计算机视觉与图像识别结课论文
  3. 如何让百度第一时间收录你的网站
  4. 宏基笔记本4740 Linux,宏基4740g拆机【教程详解】
  5. Leetcode--260. 只出现一次的数字Ⅲ
  6. 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介
  7. cmp linux 命令,比较文件Linux基本命令:cmp
  8. 三种方法在地图上绘制网络图
  9. 明小子动力上传拿webshell.zip
  10. 那些年Android面试官常问的知识点,快来收藏!
  11. qte5编译dub.json
  12. Netron 模型可视化神器,保存好的模型丢进去就能可视化!
  13. 三星云服务S Cloud亮相 与苹果iCloud为敌
  14. 音频设置 audio
  15. 中山大学曾兆阳_实习派 | 曾兆阳: “宝藏男孩”的进阶之路
  16. 上海市计算机应用基础教学资源平台,课程平台
  17. Orin 调试GMSL camera遇到问题之MIPI CSI2 报文解析
  18. 从零开始建立机械臂URDF模型
  19. Python微信点赞
  20. windows server搭建redcap数据库基本流程

热门文章

  1. 陶哲轩实分析:关于罗素悖论的一些思考
  2. 【PSOC4】入门学习笔记6——电容触摸滑条控制LED灯
  3. Android Studio 3.5 打Jar包
  4. a as as big rat_as big as等于什么
  5. Java tif多页文件转jpg问题,Decoding of old style JPEG-in-TIFF data is not supported问题
  6. 树莓派 使用 i2c 连接 LCD1602/LCD1602A 模块
  7. 如何提升网页在搜索引擎排名
  8. 克鲁斯卡尔算法的基本思想
  9. 用遗传算法优化垃圾收集策略
  10. Python + Uniprot获取蛋白质的功能向量