四则运算实验报告
实验一复数四则运算.doc

实验一复数四则运算一、实验目的本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现方法。
抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节则依赖于所用语言的功能.通过本次实习还可以帮助读者复习高级语言的使用方法.二、实验内容设计一个可进行复数运算的演示程序。
要求实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积,5)从已知复数中分离出实部;6)从已知复数中分离出虚部。
运算结果以相应的复数或实数的表示形式显示。
三、实验仪器、设备及材料586以上微机四、实验原理复数在计算机中的表示及复数的四则运算规则.五、实验步骤1。
问题分析和任务定义;2。
数据类型和系统设计;3. 编码实现和静态检查;4。
上机准备和上机调试;5.总结和整理实验报告。
六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1. 需求分析;2.概要设计;3.详细设计;4. 调试分析;5。
经验和体会等;6。
测试结果;7.附录。
七、实验注意事项实验前先预习,完成问题分析和任务定义的工作。
实验二集合的并、交和差运算一、实验目的本次实验的主要目的在于帮助学生熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用作为重点内容.二、实验内容编制一个能演示执行集合的并、交和差运算的程序。
三、实验仪器、设备及材料586以上微机四、实验原理利用链表的基本运算(插入、删除、查找及合并等)实现集合的基本运算。
五、实验步骤1。
问题分析和任务定义;2.数据类型和系统设计;3。
编码实现和静态检查;4。
上机准备和上机调试;5。
总结和整理实验报告。
六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1.需求分析;2。
概要设计;3.详细设计;4.调试分析;5. 经验和体会等;6.测试结果;7. 附录。
【7A版】四则运算表达式求值实验报告

HUNANUNIVERSITY课程实习报告题目:四则运算表达式求值学生姓名:学生学号:专业班级:指导老师:完成日期:一、需求分析四则运算表达式求值,将四则运算表达式用中缀表达式表示,然后转换为后缀表达式,并计算结果。
本程序要求利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值。
在字符界面上输入一个中缀表达式,回车表示结束。
如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
测试数据输入:21+23G(12-6)输出:2123126-G+二、详细设计输入和输出的格式输入本程序可以将输入的四则运算表达式(中缀表达式)转换为后缀表达式输出后缀表达式为://输出结果的位置表达式的值为://输出结果的位置三、调试分析本次实验的难点主要是在建立二叉树的问题上。
关于如何把中缀表达式存入二叉树中,我参考了网上的一些方法,成功实现了目标,但是却遇到了一个问题,那就是不能处理小数,甚至两位或两位以上的整数。
因为如果采用字符数组来存储操作数,运算符合一位整数还可以处理,但对于两位数就就会出问题,最后我改进采用字符串数组来存储操作数,成功解决了问题。
另外在处理输入的非法表达式问题中,我也费了很大功夫,但总体问题不大。
四、测试结果五、用户使用说明(可选)1、运行程序时提示输入四则运算表达式本程序可以将中缀表达式转化为后缀表达式,并计算结果请输入四则运算表达式:输出后缀表达式为:表达式的值为:程序源代码(c++)#include<iostream>#include<string>#include<stack>#include<iomanip>constintMaG=100;usingnamespacestd;classNode{public:charch[MaG];//考虑到数值有时会是两位数,所以使用字符串数组NodeGlChild;NodeGrChild;Node(){strcpy(ch,"");lChild=rChild=NULL;}~Node(){if(lChild!=NULL)deletelChild;if(rChild!=NULL)deleterChild;}};staticintcount=0;staticchararray[MaG];//保存原始的中缀表达式staticcharstr[2GMaG];//保存后序遍历出来的字符串,为表达式求值提供方便staticintk=0;chargetOp(NodeGtemp);//temp指针保存每个结点,返回的是运算符NodeGcrtTree(NodeGroot);//传入根结点指针,返回根结点指针voidoutput(NodeGroot);//获得处理后的字符串boolisError(char);//判断字符是否有问题voiddeal();//对字符数组进行处理doublevalue(string);//计算后缀表达式,得到其结果。
长整数四则运算 实验报告

“数据结构”课程设计报告长整数四则运算学生姓名:吴成杰徐文良指导教师:陈少军所在系:电子信息系所学专业:计算机科学与技术年级:2010计算机(1)班目录第1章需求分析 (1)1.1选题要求 (1)1.2选题背景和意义 (1)1.3选题目标 (2)1.4组员分配任务 (2)第2章概要分析 (2)2.1系统数据流图 (2)2.2原始数据 (3)2.3输出数据 (3)2.4对数据的处理 (3)2.5数据结构(存储方式) (4)2.6模块分析 (4)第3章详细设计 (4)第4章系统说明书 (11)第5章系统测试 (12)项目总结 (16)参考文献 (17)第1章需求分析1.1选题要求1、实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算2、2个人对应完成2个人各自的任务1.2选题背景和意义(1)选题背景操作系统老师曾经布置我们做一道斐波拉契数列和求30的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。
于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。
(2)选题意义我们选的这个课题能计算任意的四则运算,比如:1234567+7654321=8888888987654321-123456789=86419754123*456=5608884/42=2586-25*15+8*(9*2-144/12)=586-375+8*(18-12)=586-375+8*6=586-355+48=211+48=2591.3选题目标实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算1.4组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。
实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。
2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。
二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。
c语言四则运算实验报告

深圳大学实验报告课程名称: ________ C 语言实验 ________________实验名称: 100以内的四则运算游戏 _________学 院: ___________ 信息工程学院 ______________指导教师 ______________ 张金凤 __________________报告人: 王文杰 组号:]7 ________学号 2013130073 实验地点 教学楼D506实验时间: 2014 年 4 月 16 日提交时间: ___________ 2014.5.9 ____________________课程编号 1300050027一、实验目的一、学习和掌握c语言函数的泄义与调用:二、进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法:三、进一步掌握c语言中的数组左义和引用方法:四、学习和掌握根据流程图进行模块化程序设计的思想*二、实验要求产生1到4之间的随机数,决定4则运算的符号,再产生两个0到99的随机数进行运算,并记录下做的题数以及正确的数目,当做题者输入n或N时退出程序并显示出完成题数及正确率。
int num2); int五、对流程图的简要说明:#include <std io. h> #include <stdlib. h> #include Htime. h" #include <conio. h> void max_min(int a, int b); randN1N2(int rN1f int rN2 ); rand0per4(); randL/ntlOO ();addLmt100(int num1vsubLmt100(int num1fmulLmt100(int num1fdivLmt100(int num1f/*主函数的功能如下:在主函数中调用上面定义的五个函数,在屏幕上随机循环出一道 100以内的四则运算题。
小学四则运算实验报告

石家庄经济学院“高级语言程序设计”课程实习报告班级:试点2班姓名:贺迎春学号:410109030221日期:2011-10-19目录1.实习目的 (3)2.实习题目与程序功能 (3)3.算法设计 (3)4. 主要数据结构和标识符及其说明 (4)5. 程序运行实例 (5)6. 源程序清单 (6)7. 实习体会 (9)1.实习目的(1)掌握分支语句、循环语句的基本语法、语义。
(2)熟练使用if语句、case语句进行分支结构的程序设计、熟练使用for语句、repeat语句、while语句进行循环结构的程序设计。
(3)掌握嵌套的分支、循环结构。
(4)掌握基本的程序调试技能。
能够使用Trace Into、step over步进追踪,断点等控制程序的运行步骤,能够使用Watch监视表达式的值,并且点击project点击options点击compiler点击optimization把代码优化去掉,这样件事变量的之就能显示出来、添加条件断点等等。
(5)能够合理的设计程序的测试用例并验证程序的有效性能。
2.实习题目与程序功能实习题目:小学生的加减乘除以及混合运算的自动出题及评分系统。
功能描述:系统首先会给出提示信息,根据提示信息,当n=1时,系统会自动出10道十以内的加法练习题目并自动评分;当n=2时,系统会自动出10道十以内的减法练习题目并自动评分;当n=3时,系统会自动出10道十以内的乘法练习题目并自动评分;当n=4时,系统会自动出10道十以内的除法练习题目并自动评分;当n=5时,系统会自动出10道十以内的混合运算题目并自动评分;当n=6时,结束练习,退出系统;性能要求:要保证程序有足够的健壮性。
3.算法设计(1)分析①此系统的使用对象使小学生,所以加法、减法、乘法以及除法都是10以内的整数,并没有涉及到小数的问题。
小学生并未学习负数,所以当减法自动出题时,把答案为负数的情况删掉;而除法,则是利用10以内的整数相乘采用逆思维的方法来生成的。
C语言实验报告四则运算

《C语言》课内实验报告学生姓名:及学号:学院:班级:课程名称:C语言实验题目:实验二选择结构程序设计指导教师姓名及职称:年月日一、实验目的1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。
2.掌握选择结构程序设计方法。
二、实验内容编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。
(如下图所示,要求使用if语句和switch语句两种方法实现)三、实验结果1、流程图2、源程序(1)使用if语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b);getchar();printf("\nplease input the operator:");//fflush(stdin);scanf("%c",&c);printf("\n");if(c=='+')printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);else if (c=='-')printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);else if (c=='*')printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);else if (c=='/')printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);elseprintf("Input error!\n");}(2)使用switch语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b); //输入a,b的值getchar();printf("\nplease input the operator:"); //输入操作符scanf("%c",&c);printf("\n");switch(c) //判断输入操作符{case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);break;case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);break;case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);break;case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);break;default:printf("Input error!\n");}}2、运行结果输入12、13以及+,得到结果如下:输入12、13以及-,得到结果如下:输入12、13以及*,得到结果如下:输入12、13以及/,得到结果如下:输入12、13以及a,得到结果如下:3、结果分析题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。
数据结构c语言版算术四则混合运算实验报告

数据结构c语言版算术四则混合运算实验报告一、引言在计算机科学领域,算术四则运算是最基本的运算之一。
本实验旨在通过使用C语言编写程序,实现算术四则运算的混合运算功能。
通过该实验,我们可以提高对数据结构的理解,并掌握在C语言中实现算术四则混合运算的方法。
二、实验目的1. 理解算术四则运算的基本原理;2. 掌握数据结构在算术四则运算中的应用;3. 使用C语言编写程序,实现算术四则混合运算功能。
三、实验方法1. 首先,我们需要定义并实现一个栈数据结构,用于存储运算符和操作数;2. 然后,通过读取用户输入的表达式,将其中的运算符和操作数依次入栈;3. 在入栈的过程中,我们需要判断运算符的优先级,以确保正确的运算顺序;4. 最后,通过出栈的方式,按照正确的运算顺序进行运算,并输出结果。
四、实验步骤1. 定义并实现栈数据结构,包括入栈、出栈等基本操作;2. 读取用户输入的表达式,并将其中的运算符和操作数依次入栈;3. 根据运算符的优先级,确定出栈的顺序,并进行相应的运算;4. 将运算结果入栈,继续进行下一轮的运算,直到表达式中的所有运算符和操作数都被处理完毕;5. 最后,将最终的运算结果出栈,并输出。
五、实验结果通过本实验,我们成功实现了算术四则混合运算的功能。
经过多组测试,程序能够正确处理各种复杂的运算表达式,并给出正确的结果。
六、实验总结通过本次实验,我们进一步加深了对数据结构的理解,并成功将其应用于算术四则混合运算中。
我们掌握了C语言中实现算术四则混合运算的方法,并通过编写程序实现了该功能。
通过本次实验,我们不仅提高了对数据结构的应用能力,还提升了编程能力和问题解决能力。
在今后的学习和工作中,我们将继续深入研究数据结构和算法,不断提升自己的编程技术,为解决实际问题提供更好的解决方案。
七、致谢感谢指导老师对本实验的支持和指导,感谢实验室的同学们在实验过程中给予的帮助和建议。
本次实验的顺利完成离不开你们的支持与帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3四则运算表达式求值背景在工资管理软件中,不可避免的要用到公式的定义及求值等问题。
对于数学表达式的计算,虽然可以直接对表达式进行扫描并按照优先级逐步计算,但也可以将中缀表达式转换为逆波兰表达式,这样更容易处理。
问题描述四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。
基本要求使用二叉树来实现。
实现提示利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值。
输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。
输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
选作内容(1)在输入输出方式上要求使用:输入:将中缀表达式存于文本文件中,程序从该文本文件中读出表达式。
输出:如果该中缀表达式正确,则将后缀表达式输出到该文件中原表达式的后面,它们之间用“---”后相连;如果不正确,请在输出表达式错误提示到该文件原表达式的后面,它们之间用“---”相连。
(2) 利用堆栈来实现中缀表达式转换为后缀表达式。
测试用例输入:21+23*(12-6)输出:21 23 12 6 -*+程序代码:#include <iostream>#include <string.h>using namespace std;#define SIZE 100#define STACKINCREMENT 10template<class T>//栈class stack{public:void InitStack() {S.base = (T *)malloc(SIZE * sizeof(T));if(!S.base) exit(0);S.top = S.base;S.stacksize = SIZE;}void DestroyStack(){free(S.base);}void ClearStack(){S.top = S.base;}bool StackEmpty(){if(S.top == S.base) return true;else return false;}int StackLength(){return (S.top - S.base);}bool GetTop(T &t){if(S.top != S.base){t = *(S.top - 1);return true;}else return false;}void Push(T t){if(S.top - S.base >= S.stacksize){S.base = (T *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(T));if(!S.base) exit(0);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top = t;S.top++ ;}bool Pop(T &t){if(S.top == S.base) return false;else S.top-- ;t = *S.top ;return true;}private:struct SqStack{T *base;T *top;int stacksize;}S;};class BiTree{private:struct BiTreeNode{char OPT[10];BiTreeNode *lchild,*rchild;};BiTreeNode *T; //T是根结点int index; //index是后缀表达式转换二叉树时的索引int number_of_point ;//销毁一颗树void DestroyTree(BiTreeNode *T){if(T){DestroyTree(T->lchild);DestroyTree(T->rchild);free(T);}}void DestroyTree(){DestroyTree(T);}//1表示栈顶优先级高于待入栈的元素int compare(char a,char b){ //定义了任意两个运算符的优先级if(a == '(' && b == ')') return 0;else if((a == '+' && b == '*') || (a == '+' && b == '/') || (a == '-' && b == '*') || (a == '-' && b == '/')|| (a != ')' && b == '(') || (a == '(' && b != ')'))return -1;else return 1;}//递归构造start,end分别是一个式子开始值和结束值的索引/*递归构造中缀表达式转化为的二叉树(利用栈) */void InorderCreate(BiTreeNode *&T,char str[30][10],int start,int end){ if(start == end) { //递归终止if(!(T = (BiTreeNode *)malloc(sizeof(BiTreeNode)))) exit(0);strcpy(T->OPT,str[start]);T->lchild = NULL;T->rchild = NULL;}else{stack<char> opt;stack<int> num;num.InitStack();opt.InitStack();char last;int index;int a;bool jump = false;for(int i = start;i <= end;i++) { //begin求解优先级最小的一个运算符if(jump) break;number_of_point = 0 ;if(IsNumber(str[i][0]) || str[i][0] == '-' &&IsNumber(str[i][1]) )continue;else{char c = str[i][0];char b;if(i == start && c == '(') {start += 1;continue;}else if(opt.StackEmpty() || (opt.GetTop(b) && compare(b,c) == -1)){opt.Push(c);num.Push(i);}else{if(c != ')'){opt.Pop(b);num.Pop(a);if(!opt.StackEmpty()){opt.GetTop(b);if(compare(b,c) == 1){opt.Pop(b);num.Pop(a);opt.Push(c);num.Push(i);}else{opt.Push(c);num.Push(i);}}else{opt.Push(c);num.Push(i);}}else{for(opt.GetTop(b);compare(b,c) != 0;opt.GetTop(b)){opt.Pop(b);num.Pop(a);if(opt.StackEmpty()){opt.Push(b);num.Push(a);end -= 1;jump =true;break;}}if(compare(b,c) == 0) {opt.Pop(b);num.Pop(a);}}}}} //end,得到的是该步中的根结点字符last及其索引indexopt.Pop(last);num.Pop(index);if(!opt.StackEmpty()){opt.Pop(last);num.Pop(index);}opt.DestroyStack();num.DestroyStack();if(!(T = (BiTreeNode *)malloc(sizeof(BiTreeNode)))) exit(0);T->OPT[0] = last;T->OPT[1] = '\0';InorderCreate(T->rchild,str,start,index-1);InorderCreate(T->lchild,str,index+1,end);}}bool IsNumber(char a){ //判断一个字符是否为数值形式的if( a == '.' && number_of_point == 0 ) {number_of_point ++ ;return true;}else if('0' <= a && a <= '9') return true ;else return false;}//递归求解树表示的表达式的值double Operate(BiTreeNode *T){if(T->lchild==NULL && T->rchild==NULL){double num = atof(T->OPT); //调用系统函数atof()将字符串转换为浮点数return num;}double ld,rd;ld = Operate(T->lchild);rd = Operate(T->rchild);char c = T->OPT[0];switch(c){case '+': return ld+rd;break;case '-': return rd-ld;break;case '*': return ld*rd;break;case '/': return rd/ld;break;default:cout << " you have entered wrong data ! "<< endl ;return 0;break ;}}void display(BiTreeNode *T){if(T == NULL ) return ;display(T->rchild);display(T->lchild);cout << T->OPT << " " ;public:BiTree() {T = NULL ;index = 0 ;number_of_point = 0 ;}/*以下两个函数重载私有成员函数方便计算*/void InorderCreate(){char OPT[30][10];cout << "输入中缀表达式: " << endl;char c = getchar();bool flag = true;int i = 0,j = 0 ;while(c != 10) { //输入的是空格j = 0;if(c == '-' && flag == true) { //flag判断是否是一个负数的值OPT[i][j++] = c;for(c = getchar() ; IsNumber(c) ; c = getchar() )OPT[i][j++] = c;OPT[i++][j] = '\0';flag = false;}else if(IsNumber(c)){OPT[i][j++] = c;for(c = getchar();IsNumber(c);c = getchar())OPT[i][j++] = c;OPT[i++][j] = '\0';flag = false;}else //运算符时的处理{flag = true;OPT[i][j++] = c;OPT[i++][j] = '\0';c = getchar();}}InorderCreate(T,OPT,0,i-1);}double Operate(){return Operate(T);}void display(){display(T) ;}~BiTree() {DestroyTree();};int main(){BiTree tree;tree.InorderCreate();cout << endl << tree.Operate() << endl;tree.display() ;cout << endl ;return 0;}测试结果:。