VC 计算器课程设计报告..
c实现计算器课程设计报告
得分:信电工程学院课程设计报告基于VC的表达式计算器软件设计课程:程序设计综合训练1班级:12软嵌2班学号:223姓名:***指导教师:**2013年6 月28日目录1引言------------------------------------------------------------------------------- 1 课题背景-----------------------------------------------------------------2课程设计目的-----------------------------------------------------------32需求分析-------------------------------------------------------------------------5 系统功能模块-----------------------------------------------------------5设计要求-----------------------------------------------------------------63系统实现------------------------------------------------------------------------8 对话框界面设计-------------------------------------------------------8数值计算功能的实现-----------------------------------------------104程序关键代码及运行结果-------------------------------------------------12 5总结与体会------------------------------------------------------------------151 引言课题背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具;要实现计算功能,可以用VC++的知识编写程序来解决此问题;该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度;该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用.课程设计目的本课程是一门实践性很强的课程,既要熟练掌握相关概念,又要动手编程,还要上机调试运行;同时,本课程也注重提高学生编写技术文档和技术文档阅读的能力;学生通过本课程的学习实践,将学习和强化软件开发的能力、文档写作能力、英语阅读能力、软件使用能力等;为今后计算机编程的学习和工作打下良好、扎实的理论实践基础;2 需求分析系统功能模块1输入的符号,数字从左向右显示; 点击“=”输出结果,在输出行显示2支持加减乘除运算;3支持“xˆy”的运算;4 括号“”“”的使用;5支持混合运算;6功能键“ANS” ,“CLEAR” ,“BACKSPACE”的使用;7计算器的输入方式:支持鼠标点击计算器键输入;8计算器计算结果的输出方式:在计算器窗口的输出行显示9算数运算的数据类型:整数和浮点数;10特殊情况的计算;11以上所有的运算都是在10进制下进行.1输入的符号,数字从右向左显示;先输入“8”再输入“×”点击“=”输出结果,在输出行显示.2支持加减乘除运算.a.c. 减法计算d.除法运算特殊情况见2)支持求次方x ˆy运算;求次方x ˆy运算:“ˆ”为次方x ˆy在输入行中的显示符号4“”“”的使用;括号的使用要使用“”“”的时候,先点击“”,再输入数字或符号,内容输入完毕以后,点击“”,完成“”“”的所有功能;例如:2×2+2=22+222+222+25支持混合运算;附:运算符的优先级表 优先级 功能键 显示 结合律从 高 到 低、 、 自左向右 x ˆy 、1/x ˆ、~ 自左向右 ×、÷ 、/ 自左向右 ﹢﹣ ﹢﹣自左向右例如:5+2×5=5+256功能键“CLEAR ”及“BACKSPACE ”的使用;a .“CLEAR ”为清0键;只要按下“CLEAR ”键,输入行所有字符清0,输出行回到原始状态; 输入前:5+25输入后:b.“BACKSPACE ”为退格键;当输入任何数字或运算符,只要按下“BACKSPACE ”混合运算则按优先级表中的运算符优先顺序从左向右计算键,字符位自右向左消去一位;注:初始的“0”不能被删除输入前:输入后:C.“ANS”为变量储存器;当一次结果被清除后,个结果;如:按“CLEAR”键后,再按“ANS”键就会这样7计算器的输入方式:只支持鼠标点击计算器键输入;8计算器计算结果的输出方式:在计算器窗口的输出行显示;9算数运算的数据类型:整数和浮点数;a.输入行最大显示的字符数32位,每个运算符算一位;b.“”,“”各占一个字符位;c.输出行最大显示的字符数为32位;d.纯小数显示的最大字符数为小数点后30位,整数及小数点各占一位;若纯小数为负数,则显示最大字符数为小数点后29位,“-”占一位;e.输入行在未输入任何数字的时候,显示“0”,只占一个字符位;当输入任何数字时;“0”消失,输入的的数字取代“0”;当输入任何运算符时;默认之前输入数字“0”;f.点击“=”键后方可显示数字或字母或汉字;10特殊情况的运算A.运算结果整数部分超出32位,显示Infinity无穷大;出现运算异常B.除数为0的情况,提示用户被除数不能为零C.在运算时,若结果为纯小数,小数位超过30位,则超出的字符舍弃;若舍弃超出部位后,结果全为0,则结果为0D.在运算时,若结果的整数位不为0a.总位数在最大字符位内,则直接显示;b.总位数在最大字符位以外,整数部分在最大字符位以内,则只优先显示整数部位,弃掉32位以后的字符E.当用户输入“^0”时,若“^0”之前的算式或数字的值为0,点击“=”后,输出界面显示“底数不能为0”11)以上所有的运算都是在10进制下进行设计要求1 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2 理解需求分析过程,掌握需求分析文档编写;3 理解面向对象程序设计的基本思路和方法;4 掌握用VC++开发MFC应用程序的一般步骤和方法;5 掌握基于对话框的应用程序的编写,主要包括文本框和按钮等;6 掌握后缀表达式算法;7 掌握VC++开发工具的使用;包括资源管理,项目创建,运行调试等;8 完成表达式的计算器应用程序,实现基本的加、减、乘、除等四则运算,且支持包括括号的表达式运算功能;3系统实现对话框界面设计数值计算实现例如:2×2+2=2222+222+222+284程序关键代码及运行结果include <iostream>include <string>include ""include <cmath>using namespace std;bool jisuandouble a,double b,char c,double& d{switch c{case '+':d=a+b;"using namespace std;ifdef _DEBUGdefine new DEBUG_NEWendifvoid CCompuetrDlg::OnPaint{if IsIconic{CPaintDC dcthis; // 用于绘制的设备上下文SendMessageWM_ICONERASEBKGND, reinterpret_cast<WPARAM>, 0;// 使图标在工作矩形中居中int cxIcon = GetSystemMetricsSM_CXICON;int cyIcon = GetSystemMetricsSM_CYICON;CRect rect;GetClientRect▭int x = - cxIcon + 1 / 2;int y = - cyIcon + 1 / 2;// 绘制图标x, y, m_hIcon;}else{CRect rect;CPaintDC dcthis;GetClientRectrect;rect,RGB255,0,0;//设置背景颜色CDialog::OnPaint;CDialog::OnPaint;}}// : 定义应用程序的类行为;//include ""include ""include ""ifdef _DEBUGdefine new DEBUG_NEWendif// CCompuetrAppBEGIN_MESSAGE_MAPCCompuetrApp, CWinAppON_COMMANDID_HELP, CWinApp::OnHelpEND_MESSAGE_MAP// CCompuetrApp 构造CCompuetrApp::CCompuetrApp{// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在InitInstance 中}// 唯一的一个CCompuetrApp 对象CCompuetrApp theApp;// CCompuetrApp 初始化BOOL CCompuetrApp::InitInstance{// 如果一个运行在Windows XP 上的应用程序清单指定要// 使用版本6 或更高版本来启用可视化方式,//则需要InitCommonControls;否则,将无法创建窗口;InitCommonControls;CWinApp::InitInstance;// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey_T"应用程序向导生成的本地应用程序";CCompuetrDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = ;if nResponse == IDOK{// TODO: 在此放置处理何时用“确定”来关闭//对话框的代码}else if nResponse == IDCANCEL{// TODO: 在此放置处理何时用“取消”来关闭//对话框的代码}// 由于对话框已关闭,所以将返回FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵;return FALSE;}//stackinclude<iostream>include<string>include<new>using namespace std;template <class T>class LinkedStack;template <class T>class Node{friend LinkedStack<T>; private:T data;Node<T> link;};template <class T>class LinkedStack{public:LinkedStack{top=0;length=0;}~LinkedStack;bool isEmptyconst{return top==0;}bool isFullconst;T Top const;LinkedStack<T>&Addconst T& x;LinkedStack<T>&DeleteT& x;int getLength{return length;} private:Node<T> top;int length;};template <class T>LinkedStack<T>::~LinkedStack{Node<T> next;whiletop{next=top->link;delete top;top=next;}}template <class T>bool LinkedStack<T>::isFullconst{try{Node<T> p=new Node<T>;delete p;return false;}catchbad_alloc& e{return true;}}template <class T>T LinkedStack<T>::Topconst{ifisEmptythrow CString"堆栈空异常";return top->data;}template <class T>LinkedStack<T>& LinkedStack<T>::Addconst T& x {Node<T> p=new Node<T>;p->data=x;p->link=top;top=p;length++;return this;}template <class T>LinkedStack<T>& LinkedStack<T>::DeleteT& x {ifisEmptythrow CString"堆栈空异常";x=top->data;Node<T> p=top;top=top->link;delete p;length--;return this;}5总结与体会计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题;完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利;一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好;所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心。
c课程设计计算器报告
c 课程设计计算器报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法,熟练使用C语言进行程序设计。
具体分为三个部分:1.知识目标:学生需要掌握C语言的基本语法,包括数据类型、运算符、控制结构、函数等。
2.技能目标:学生能够使用C语言编写简单的程序,解决实际问题。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生解决问题的能力。
二、教学内容教学内容主要包括C语言的基本语法和程序设计的基本方法。
具体安排如下:1.第一章:C语言概述,介绍C语言的历史和发展,理解C语言的特点。
2.第二章:数据类型和运算符,学习C语言的基本数据类型和运算符。
3.第三章:控制结构,学习C语言的条件语句和循环语句。
4.第四章:函数,学习C语言的函数定义和调用。
5.第五章:数组和字符串,学习C语言的数组和字符串操作。
6.第六章:指针,学习C语言的指针概念和应用。
7.第七章:结构体和文件,学习C语言的结构体和文件操作。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法:1.讲授法:讲解C语言的基本语法和概念。
2.案例分析法:通过分析实际案例,让学生理解C语言的应用。
3.实验法:安排实验课程,让学生动手编写C语言程序。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》2.参考书:《C Primer Plus》、《C和指针》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境五、教学评估本课程的评估方式包括平时表现、作业、考试等。
具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。
2.作业:占课程总评的30%,包括课后练习、编程任务等。
3.考试:占课程总评的40%,包括期中考试和期末考试。
评估方式要求客观、公正,能够全面反映学生的学习成果。
我们将根据学生的实际情况,及时给予反馈,帮助学生提高。
六、教学安排本课程的教学进度安排如下:1.每周一次课,每次课2小时。
一个简单的计算器VC课程设计
《可视化程序设计》课程设计报告模拟计算器姓名:班级:学号:指导教师:成绩:完成时间:2009年12月30日完成地点:软件实验室(9)一、设计题目(问题)描述和要求题目:模仿windows计算器描述:使用Microsoft Visual Studio .NET 2005完成一个功能与windows 自带的计算器功能相似的小程序。
要求完成以下功能:①能够完成加、减、乘、除、开平方、取倒数、百分数运算;②能够使用“BackSpace”、“C”、“.”、“+/-”、“CE”的功能。
二、系统分析与概要设计根据题目描述和要求,系统要求能够制作出来一个与Windows自带计算器功能相似的小软件。
我们需要使用基于对话框的MFC应用程序来完成此任务,所建项目名为:计算器。
本项目中不需要添加心得类,只需要使用系统自动生成的CAboutDlg,C计算器App,C计算器Dlg三个类即可。
其中主要实现该项目功能的类为:C计算器Dlg类。
概要设计:(1)我们先要对对话框的可视部分进行编辑,向上面添加一个“EditControl”控件和23个“Button”控件。
其中“EditControl”控件用来显示数据及运算结果,“Button”控件用来实现各种操作功能。
(2)我们需要为“EditControl”控件添加一个变量“n”,用来接收及显示数据;为23个“Button”控件分别添加“事件处理程序”,来实现具体功能。
(3)在声明模块(计算器Dlg.h) 中我们需要声明七个变量:n,n_2,setxiaoshu,xiaoshui,setnew,operate,innum。
26个成员函数:1-23是控件功能函数“afx_msg voidOnBnClickedButton1()”…,其余三个函数是另行添加的功能函数:void setempty(void)(置空中间变量),void inum(int i)(处理字符输入),void operation(char ope)(执行选定运算)。
c语言程序设计课程计算器设计报告
课程设计实验报告题目 C/C++语言程序设计所在院系信息学院专业计算机科学与技术班级 12级计科班学生指导教师2014年9月24 日程序设计流程图:源代码:#include <stdio.h>#include<math.h> #include <stdlib.h>void fun1(){printf("\t\t\t*****************************\n");printf("\t\t\t$ 欢迎使用计算器 $\n");printf("\t\t\t$ $\n");printf("\t\t\t$ 1.加法 $\n");printf("\t\t\t$ 2.减法 $\n");printf("\t\t\t$ 3.乘法 $\n");printf("\t\t\t$ 4.除法 $\n");printf("\t\t\t$ 5.乘方 $\n");printf("\t\t\t$ 6.开方 $\n");printf("\t\t\t$ 7.八进制转换 $\n");printf("\t\t\t$ 8.十六进制转换 $\n");printf("\t\t\t$ 9.退出 $\n");printf("\t\t\t$ $\n");printf("\t\t\t*****************************\n");}void fun2(float x,float y,int c){float z;int n,i;switch(c){case 1: z=x+y;printf("结果:%g+%g=%g\n",x,y,z);break; case 2: z=x-y;printf("结果:%g-%g=%g\n",x,y,z);break; case 3: z=x*y;printf("结果:%g*%g=%g\n",x,y,z);break; case 4: if(y==0)printf("错误!");else{z=x/y;printf("结果:%g/%g=%g\n",x,y,z);}break; case 5: n=x;for(i=1;i<y;i++){x=x*n;}printf("结果:%g\n",x);break;default:printf("请重新输入!");}}void fun3(float x,int c){float z;switch(c){case 6:if(x<0)printf("错误!");else{z=sqrt(x);printf("结果:%g\n",z);}break;default:printf("请重新输入!");}}void convert(int m,int c){char s[128];switch(c){case 7:printf("结果:%o\n",m);break;case 8:printf("结果:%x\n",m);break;default:printf("请重新输入!");}}void main(){for(;;){float x,y,z;int c,m;char h;fun1();printf("请选择运算:\n");printf("1\n2\n3\n4\n5\n6\n7\n8\n9\n"); printf("请输入运算方式前面的数字:\n");scanf("%d",&c);if(c==1||c==2||c==3||c==4||c==5){printf("输入两个数:");scanf("%f%f",&x,&y);fun2(x,y,c);}if(c==6){printf("输入一个数:");scanf("%f",&x);if(x<0)printf("错误!");elsefun3(x,c);}if(c==7||c==8){printf("输入一个数:");scanf("%d",&m);convert(m,c);}if(c==9){printf("<<<<<<<<<谢谢使用!>>>>>>>>>\n");} if(c>='a' && c<='z')printf("没有这个选择!\n");if(c>='A' && c<='Z')printf("没有这个选择!\n");}}。
VC++可视化课程设计(计算器)
3功能说明计算器的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。
使用人员能快捷简单地进行操作。
即可单机按钮进行操作,也可直接通过键盘直接输入。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
(1)包含的功能有:加、减、乘、除运算,开方、求倒数等功能[1].(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)给对话框添加菜单。
(4)制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色[3]。
(5)制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。
(6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(7)实现对话框的扩展功能[2]。
(8)计算功能基本上是用系统内部函数。
(9)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(10)“C E”按钮可以清除所有已输入的数据从头计算功能模块的实现:(1)首先,添加高级按钮控件类,在这个类中实现高级的按钮控件。
在此类中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的,实现按钮对鼠标不同的位置和动作改变不同的颜色,并且按钮的客户区域变成一个椭圆。
(2)其次,添加一个高级编辑控件类,在此类的基础上实现高级编辑控件。
在OnDisplay函数中设置编辑框的显示文本,再调用OnDraw函数将其显示出来,并用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。
(3)最后,实现主对话框界面功能,主要是加载菜单资源和对话框扩展功能的实现。
在CCalculatorDlg::OnCreate函数中设定对话框的初始大小与位置,可以在这个对话框中进行窗口风格修改,位置设置等操作,然后添加菜单项ID_EXTEND的响应函数OnExtend。
4系统的实现4.1 窗体设计利用MFC AppWinzard生成计算器应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Calculator 。
c简单计算器课程设计报告
c 简单计算器 课程设计报告一、课程目标知识目标:1. 让学生掌握简单计算器的基本功能,包括加、减、乘、除等四则运算。
2. 使学生理解计算器操作规则,如先算乘除后算加减、括号的作用等。
3. 帮助学生掌握计算器上的其他功能键,如清除、取反、百分比等。
技能目标:1. 培养学生运用计算器进行四则运算的能力,提高计算速度和准确性。
2. 培养学生运用计算器解决实际问题的能力,如购物找零、计算面积等。
3. 培养学生通过观察、思考、提问等方式,发现计算器使用过程中的问题,并尝试解决。
情感态度价值观目标:1. 培养学生对待计算器等电子设备的正确态度,爱护设备,遵守使用规范。
2. 培养学生在合作学习中互相帮助、共同进步的精神,增强团队意识。
3. 通过计算器教学,激发学生对数学学科的兴趣,提高学生的自信心和自主学习能力。
本课程针对年级学生的特点,注重培养学生的学习兴趣和实践能力。
课程性质为实践操作类,强调学生在动手实践中掌握知识。
在教学过程中,教师需关注学生的学习需求,及时调整教学策略,确保学生能够达到课程目标。
课程目标分解为具体学习成果,以便于后续教学设计和评估。
在教学结束后,学生应能独立使用计算器完成四则运算,解决实际问题,并在学习过程中培养良好的情感态度和价值观。
二、教学内容1. 计算器基本结构认知:让学生了解计算器各部分名称及其功能,如数字键、运算符号键、等于键、清除键等。
2. 四则运算操作方法:教学加、减、乘、除四则运算的计算器操作方法,以及运算顺序和括号的使用。
- 加法和减法运算- 乘法和除法运算- 混合运算及括号应用3. 计算器其他功能键使用:介绍取反、百分比、开方等特殊功能键的操作方法。
4. 实践应用:设计实际应用场景,让学生运用计算器解决购物找零、计算面积、计算速度等问题。
- 购物找零问题- 长度、面积、体积计算- 速度、时间、路程计算教学内容参考教材相关章节,结合课程目标进行整合。
教学大纲安排如下:第一课时:计算器基本结构认知、四则运算操作方法(加法和减法运算)第二课时:四则运算操作方法(乘法和除法运算)第三课时:四则运算操作方法(混合运算及括号应用)第四课时:计算器其他功能键使用第五课时:实践应用(购物找零问题)第六课时:实践应用(长度、面积、体积计算)第七课时:实践应用(速度、时间、路程计算)教学内容注重科学性和系统性,确保学生能够循序渐进地掌握计算器的使用方法,并在实际应用中巩固所学知识。
c语言实验报告计算器
c语言实验报告计算器C 语言实验报告计算器一、实验目的本次 C 语言实验的主要目的是通过编写程序实现一个简单的计算器功能,加深对 C 语言基本语法、数据类型、控制结构和函数的理解和运用,提高编程能力和解决实际问题的能力。
二、实验要求1、实现基本的四则运算(加、减、乘、除)功能。
2、能够处理用户输入的合法表达式,并输出计算结果。
3、具备错误处理能力,如除数为 0 、输入不合法等情况。
三、实验环境本次实验使用的编程环境是 Visual Studio Code,编译器为 GCC。
四、算法设计与思路(一)整体思路首先,需要从用户那里获取输入的表达式。
然后,对表达式进行解析和计算。
在计算过程中,需要根据运算符的优先级进行相应的运算。
为了实现这个过程,可以使用栈来存储运算符和操作数。
(二)具体算法1、定义一个栈来存储运算符,另一个栈来存储操作数。
2、逐字符读取输入的表达式。
如果是数字字符,则将其转换为数字并压入操作数栈。
如果是运算符,则根据运算符的优先级进行处理。
如果当前运算符的优先级高于栈顶运算符的优先级,则将其压入运算符栈。
否则,从操作数栈中弹出两个操作数,从运算符栈中弹出一个运算符,进行相应的运算,并将结果压入操作数栈。
3、当表达式读取完毕后,依次从运算符栈和操作数栈中弹出元素进行计算,直到运算符栈为空,此时操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```cinclude <stdioh>include <stdlibh>include <ctypeh>//定义栈的最大容量define MAX_SIZE 100//定义操作符栈typedef struct {char itemsMAX_SIZE;int top;} OperatorStack;//定义操作数栈typedef struct {double itemsMAX_SIZE;int top;} OperandStack;//初始化操作符栈void initOperatorStack(OperatorStack stack) {stack>top =-1;}//初始化操作数栈void initOperandStack(OperandStack stack) {stack>top =-1;}//判断操作符栈是否为空int isOperatorStackEmpty(OperatorStack stack) {return stack>top ==-1;}//判断操作数栈是否为空int isOperandStackEmpty(OperandStack stack) {return stack>top ==-1;}//操作符入栈void pushOperator(OperatorStack stack, char op) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = op;} else {printf("Operator stack overflow!\n");exit(1);}}//操作数入栈void pushOperand(OperandStack stack, double num) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = num;} else {printf("Operand stack overflow!\n");exit(1);}}//操作符出栈char popOperator(OperatorStack stack) {if (!isOperatorStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operator stack underflow!\n");exit(1);}}//操作数出栈double popOperand(OperandStack stack) {if (!isOperandStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operand stack underflow!\n");exit(1);}}//获取操作符的优先级int getPriority(char op) {switch (op) {case '+':case '':return 1;case '':case '/':return 2;default:return -1;}}//计算表达式double calculate(char expression) {OperatorStack opStack;OperandStack numStack; initOperatorStack(&opStack);initOperandStack(&numStack);int i = 0;while (expressioni!='\0'){if (isdigit(expressioni)){double num = 0;while (isdigit(expressioni)){num = num 10 +(expressioni '0');i++;}if (expressioni ==''){double fraction = 01;i++;while (isdigit(expressioni)){num +=(expressioni '0') fraction; fraction /= 10;i++;}}pushOperand(&numStack, num);} else if (expressioni =='('){pushOperator(&opStack, expressioni);i++;} else if (expressioni ==')'){while (opStackitemsopStacktop!='('){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}popOperator(&opStack);i++;} else {while (!isOperatorStackEmpty(&opStack) &&getPriority(opStackitemsopStacktop) >= getPriority(expressioni)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}pushOperator(&opStack, expressioni);i++;}}while (!isOperatorStackEmpty(&opStack)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}return popOperand(&numStack);}int main(){char expression100;printf("Enter an expression: ");scanf("%s", expression);double result = calculate(expression);printf("Result: %f\n", result);return 0;}```六、实验结果与分析(一)测试用例及结果以下是一些测试用例及其对应的结果:1、输入:"2 + 3",输出:50000002、输入:"5 2",输出:30000003、输入:"3 4",输出:120000004、输入:"6 / 2",输出:30000005、输入:"2 + 3 4",输出:140000006、输入:"(2 + 3) 4",输出:200000007、输入:"5 / 0",输出:Division by zero!(二)结果分析从测试结果来看,程序能够正确计算基本的四则运算表达式,包括有括号的情况。
简单计算器C语言课程设计报告书
C语言课程设计报告书题目:简单计算器院系:班级:1.2.3.4.5.2.1功能概述:该软件为用户提供一个在windows系统上运行的简单计算器,能进行简单的加、减、乘、除四则运算和一些常用特殊运算,包括余弦运算、正弦运算、正切运算、绝对值、平方根运算、以e为底的指数运算、以10为底的对数运算。
2.2【总体设计】2.2.1系统模块机构框图2.2.3系统流程图2.2.42.3实现各2.3.1算类型的数字代码,并进入相应的功能执行程序,显示相应界面。
(2)数学计算模块中,根据用户选择的运算类型和运算符号,自动调用相应的函数,运行相关程序,进行计算,并显示结果。
(3)退出程序模块。
根据用户的需要,选择是否退出程序。
2.3.2系统头文件#include<stdio.h>/*I/Q函数*/#include<math.h>/*数学函数的定义*/#include<conio.h>/*屏幕操作函数*/#include<stdlib.h>/*库函数*/2.3.3函数声明(1)主函数main()处理:{printf("简单计算器\n");printf("******************************\n");printf("请输入要进行的运算\n");printf("------------------------------\n");printf("1四则运算\n");printf("2特殊运算\n");printf("3退出程序\n");h=getche();switch(h)/*判断用户想要进行的操作*/{}(2)自定义函数size()功能:进行简单的加、减、乘、除四则运算输入:用户输入要计算的数字和运算符号(+、-、*、/)处理:根据用户输入的运算符号,跳转到相关运算函数,并调用输出:运算结果和是否需要继续运算(y/n)程序清单(b)intsize()/*定义四则(size)运算函数*/{intn,m;intc;{c=m+n;printf("\n\n\t结果是%d\n",c);printf("\n");break;case'-':/*减法运算*/c=m-n;printf("\n\n\t结果是%d\n",c);printf("\n");break;case'*':/*乘法运算*/l=getche();/*得到输入的值*/printf("\n");if(l=='y')/*如果得到的是y,则重复运算步骤,达到无限运算的作用*/ {printf("\n请输入下一个要计算的数并按Enter结束:");scanf("%d",&n);printf("\n请选择运算符号[\t+\t-\t*\t/\t]:");l=getche();switch(l){printf("\n");break;case'/':/*除法运算*/c=c/n;printf("\n\n\t结果是%d\n",c);printf("\n");break;}}else}}(33输出:运算结果和是否需要继续运算(y/n)程序清单(c)doubleteshu()/*定义(teshu)特殊运算函数*/{doubley;intn,m;charp;printf("---------请选择特殊运算类型---------");printf("1余弦2正弦3正切4绝对值\n");printf("5平方根6以e为底的指数7以10为底的对数\n");docase'2':y=sin(m);/*正弦函数*/printf("\n\n\t结果是:%f\n",y);printf("\n");break;case'3':y=tan(m);/*正切函数*/printf("\n\n\t结果是:%f\n",y);printf("\n");break;printf("\n");break;case'7':y=log10(m);/*底数为10的对数函数*/ printf("\n\n\t结果是:%f\n",y);printf("\n");break;}printf("\n是否继续?y/n");p=getche();}2.4系统主界面其他功能截图等……2.5【设计总结】本报告对简单计算器系统的分析、设计、实现的完整过程进行了介绍。
计算器C程序设计报告
计算器C程序设计报告一. 设计要求运用C语言所具有的函数,模仿画出计算器的界面,并实现计算器的基本功能:浮点数加、减、乘、除、乘方和求模运算。
(1)收集资料,全面分析课题,分析问题,形成总体编程思路。
(2)深入分析各个小问题,编写各部分程序模块并进行具体介绍。
(如初始化函数、主窗口函数、计算器函数等等。
)(3)上机调试,修改出现的错误,确保程序能正确运行。
二. 设计的作用、目的(1)通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、各种函数等方面的基本知识。
(2)通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C 程序的调试过程。
(3)培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。
(4)通过自己动手,培养、提高对编程的兴趣,为将来从事相关工作打好基础。
三.课题分析要实现计算器功能,先要输出计算器的样式,再是通过按键的方式实现数值的运算,故程序大致可分两部分实现,一部分是显示计算器,另一部分是实现计算功能。
Turbo C提供了PC系统环境下扩充的屏幕和图形支持系统,利用系统提供的字符屏幕处理函数和图形系统的有关信息以及函数的实现,这样就可以显示计算器了。
计算功能主要解决的是接收按键信息的处理和进行识别,如果按键是数字符号,要将其转变为操作数,如果是运算操作符,则进行相应的处理。
四.设计的具体实现1.系统组成模块结构及功能(1)Main主函数设置了程序的流程,首先初始化图形系统,然后调用计算器computer()函数进行计算,当从计算器程序返回时,关闭图形系统,程序结束。
(2)Initialize()初始化函数Turbo C通常的工作方式是字符文本模式,要显示图形,调用图形函数,则必须进入图形工作方式,应首先调用函数initgraph(&GraphDriver,&GraphMode,)初始化图形系统,并装入相应的图形驱动器。
C语言课程设计-计算器程序设计报告书
C语言课程设计-计算器程序设计报告书课程设计说明书题目计算器程序设计起讫日期 2006 年 7月 3日至 2006 年 8月 6日所在院系软件学院专业机械+软件班级 04-2 学生姓名学号指导教师2010年 8 月日摘要当今社会是信息社会,科技经济高速发展的社会~为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品~随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小~电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成~电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延~下面我们将用我们学习的c 语言编写一个简易的计算器程序~实现简单的初步的计算功能~本程序的编写基础是Tubro C2.0汉化版,它在tubro c的原有基础上实现了多汉字的支持方便了我们的使用。
生成的程序可移植性强兼容性好稳定~现在只实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,以及一个时钟原代码。
这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
但是,每次只能运算一个表达式。
不能运算多个表达式。
在程序里面在添加一组选择函数即可。
本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。
重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。
关键词:C语言 Tubro c 2.0汉化版计算器时钟目录第一章综述…………………………………………………………………1 (1 课题的现实意义………………………………………………………1 11(2 软件环境........................................................................1 1(3 硬件环境 (1)第二章系统设计流程图……………………………………………………2 2(1 系统流程图……………………………………………………………2 (2 主要功能表……………………………………………………………2 2第三章系统分析和设计……………………………………………………3 (1 图形的绘制和输出……………………………………………………3 33(2 文本的输出显示...............................................................3 3(3 计算函数的调用...............................................................4 3(4 程序的运行和退出 (5)第四章系统测试.....................................................................6 4(1 系统测试........................................................................6 4(2 调试..............................................................................6 4(3 错误原因分析一...............................................................6 4(4 错误原因分析二 (6)第五章用户使用说明书……………………………………………………8 5(1 运行Turbo C程序进入计算器界面…………………………………8 5(2 计算器的使用..................................................................9 5(3 退出程序 (9)第六章工作总结 (10)参考文献………………………………………………………………………11 附录: 源代码第一章综述1.1 课题的现实意义现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
vc计算器课程设计
描写童年趣事作文600字高二描写童年趣事作文600字高二6篇童年是七色的,是热忱的、可爱的、好玩的,布满笑声的。
共享一下你的童年趣事吧。
下面是我为大家收集的描写童年趣事作文600字高二例文,期望你宠爱。
描写童年趣事作文600字高二(篇1)一进教室,映入眼帘的就是讲台上的那几个易拉罐和几根“专业”的钓鱼竿。
我一下子就呆住了,心里不禁猜想起老师葫芦里卖的是什么药?“莫非是去钓鱼,不对,要易拉罐干什么?莫非里面装的是鱼食?不对,不对”“下面我们来玩一个叫‘钓旱鱼’的玩耍吧!”老师的一句话打断了我的猜想,也点破了我的困惑。
首先,江老师将我们分成四个大组,每个大组有六名“钓鱼者”。
老师为了让我们生疏玩耍规章,便让我们先进行练习。
在练习的过程中,我渐渐把握了要领,能在十五秒之内钓起一条“旱鱼”了。
在为自己的成绩窃喜时,我才发觉真是“人外有人,天外有天”啊!———有些同学格外娴熟,不出十秒就能钓起一条“旱鱼”,这使我不由得站在一旁观看起其他人的动作。
不一会儿,练习结束,老师让各组前来抽签。
令我欣喜的是:我们组竟幸运的抽到了第5号,这样我们就有机会进行训练了。
这时,老师让每组选出2名队员来参赛。
然而,在参赛问题上,大家竟不约而同的推选了我和刘宇欣,这是我颇感意外的。
竞赛最终开头了。
首先上场的是闵耀东和王涵,他们或许是由于第一个上场产生了恐惊心理,或许是由于不太娴熟,所以显得有些力不从心,连续2次都使“鱼儿”顺当脱钩,最终才钓起了2次。
我和队友们马上对他们报以了“鼓舞”的掌声。
最精彩的也是最使人感到意外的,是第四个上场的李亦桐和方菁如一组。
她们一开头上场的表现是顺风顺水,一连钓起了2个,但到中间的时候,不知是谁顺手将竿一抖,两根鱼竿就像热恋情人一般纠缠在一起了,害得同学们费了九牛二虎之力才将难分难舍的它们分开。
“哈!哈!哈!”的笑声始终萦绕在我的耳畔,它不仅使我的童年丰富多彩,更使它意义非凡。
描写童年趣事作文600字高二(篇2)每个人的童年生活都是丰富多彩的,布满了无穷的乐趣。
vc课程设计计算器
vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。
具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。
技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。
情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。
二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。
2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。
3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。
4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。
2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。
3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。
4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。
2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。
3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。
4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。
2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。
C语言课程设计--计算器(图形界面)
C语言课程设计--计算器(图形界面)扬州大学C语言课程设计报告题目一个简易计算器的设计与实现班级学号姓名指导教师成绩老师评语:第 2 页共 14 页第 3 页共 14 页一、系统调试…………………………………………8,9,10,11二、课程设计体会总结………………………………8,9,10,111 课程设计目的(1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。
通过课程设计可以达到综合设计C语言程序的目的。
(2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础!(3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。
2 课程设计内容目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。
(2)三角与反三角运算:如sinx,cosx等。
(3)指数对数运算:如log(x),lnx,e的x次方等。
(4)其他运算:如X!,x 的累加等。
(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。
(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。
使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表第 4 页共 14 页示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。
C++课程设计(计算器)报告
课程设计报告Visual C++ 课程设计题目:计算器题目:计算器1.程序功能简介实现计算器功能。
用户根据程序提示,输入数字,选择要进行的运算,可以进行加,减,乘,除,开方、温度单位的换算。
2.课程设计要求(1)完善计算器程序,改写成可对实数操作。
(2)完善程序,改为多个操作数基本四则运算,遇到0为止(3)增加函数、完成四则混合运算,注意算法要考虑优先级,对应增加主菜单选项。
(4)添加语句,使四则运算具有测试功能,即计算器出题目,并要求用户计算,同时计算机判断用户对错并打分,要求十题为一个单元,加减运算时最高为两位数运算,乘除法为两位数乘一位数,除法是两位数或三位数除以一位数,且没有余数。
3.设计思路将原函数的int型数据改为float型数据。
仿照类设计四则混合运算的程序,四则混合运算的分函数主要有double eval_exp(char *exp);//运算四则运算表达式的主函数,返回结果、void oopcalc::sizeyunsuan();//四则运算调用的主函数、double oopcalc::eval_exp(char *exp)//计算表达式函数并返回结果、get_token();//取表达式函数等。
利用类的结构编写一个void test()//测试函数,并给出选项选择测试的内容。
并参考资料改写随机数生成器源代码,使之符合类的结构能够被调用,添加有关头文件。
4.程序结构图5.添加的主要函数代码添加四则运算主要代码oopcalc::parser(){exp_ptr = NULL;}// 将exp_prt赋值为空指针double oopcalc::eval_exp(char *exp)//计算表达式函数并返回结果{double result;exp_ptr = exp;//将指针指向表达式get_token();//取表达式函数if(!*token)//取得链表为空时,显示错误警告,并返回0值{serror(2);return 0.0;}eval_exp2(result);if(*token) serror(0);return result;}void oopcalc::eval_exp2(double &result)//识别加减符号{register char op;double temp;eval_exp3(result);while((op = *token) == '+' || op == '-')//判断指针指向的符号{get_token();eval_exp3(temp);switch(op) //通过switch语句实现判断{case '-':result = result - temp;break;case '+':result = result + temp;break;}}}void oopcalc::eval_exp3(double &result)//识别乘除号与百分号,方法同加减号{register char op;double temp;eval_exp4(result);while((op = *token) == '*' || op == '/' || op == '%'){get_token();eval_exp4(temp);switch(op) {case '*':result = result * temp;break;case '/':result = result / temp;break;case '%':result = (int) result % (int) temp;break;}}}void oopcalc::eval_exp4(double &result){double temp, ex;register int t;eval_exp5(result);if(*token== '^'){get_token();eval_exp4(temp);ex = result;if(temp==0.0){result = 1.0;return;}for(t=(int)temp-1; t>0; --t) result = result * (double)ex;}}void oopcalc::eval_exp5(double &result){register char op;op = 0;if((tok_type == DELIMITER) && *token=='+' || *token == '-') {op = *token;get_token();}eval_exp6(result);if(op=='-') result = -result;}void oopcalc::eval_exp6(double &result){if((*token == '(')){get_token();eval_exp2(result);if(*token != ')')serror(1);get_token();}else atom(result);}void oopcalc::atom(double &result){switch(tok_type){case NUMBER:result = atof(token);get_token();return;default:serror(0);}}void oopcalc::serror(int error)//输入空时显示输入错误{static char *e[]= //将一组字符串赋值给指针{"Syntax Error","Unbalanced Parentheses","目前没有表达式"};cout << e[error] << endl;//输出字符串}void oopcalc::get_token()//{register char *temp;tok_type = 0;temp = token;*temp = '\0';if(!*exp_ptr) return;while(isspace(*exp_ptr)) ++exp_ptr;if(strchr("+-*/%^=()", *exp_ptr)){tok_type = DELIMITER;*temp++ = *exp_ptr++;}else if(isalpha(*exp_ptr)){while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;tok_type = V ARIABLE;}else if(isdigit(*exp_ptr)){while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;tok_type = NUMBER;}*temp = '\0';}int oopcalc::isdelim(char c){if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)return 1;return 0;}void oopcalc::sizeyunsuan()//——————————————————————————————四则运算{char expstr[80];cout << "输入0使计算终止。
C语言计算器程序设计报告
C语言集中上机实验报告一、需求分析(1)制作一个计算器,能够计算四则混合运算以及乘方和开方,并显示出正确的结果。
(2)程序能根据运算符的高低进行运算(开放符号置左置右不影响正常运算)(3)可以输入括号二、设计思路(1)运用栈以及结构体来实现,将数字与运算符分别放在结构体与栈里面,将栈以及结构体里的字符数值一一匹配计算,将得出的结果保存到另一个栈里(zhan3)。
(2)开始,对所输入的字符串进行转化,把运算符存放在zhan2里面,把数值存放到data结构体里面,然后进行运算和操作。
(3)运用循环来实现无限输入,用数组nibo来跟踪整个过程,每次运算后将值置空,若检测到空,计算得出结果,退出输入q。
三、流程图四、主程序段#include<stdio.h>#include<math.h>#include<malloc.h>double jisuan(char a[]){int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;char nibo[50],zhan2[50];//zhan2存放的是运算符double x,n,l,z=0,zhan3[50];//暂存结果typedef struct{double d1;int d2;}dd;typedef struct{dd data[50];int top;}zhan1;zhan1 *shu;shu=(zhan1 *)malloc(sizeof(zhan1));shu->top=0;while(a[i]!='\0'){if(a[i]>='0'&&a[i]<='9'){z=0;j=i+1;while(a[j]>='0'&&a[j]<='9'){j++;}j--;for(k=i;k<=j;k++){z=z*10+a[k]-'0';}j=j+1;//j跳到数字后一位x=z;if(a[j]=='.')//如果是小数的话就把小数和整数一起加上{l=1;i=j+1;j=i+1;while(a[j]>='0'&&a[j]<='9'){j++;}j--;for(k=i;k<=j;k++){n=pow(0.1,l);l=l+1;x=x+n*(a[k]-'0');}i=j+1;}else i=j;shu->data[++shu->top].d1=x;shu->data[shu->top].d2=++cnt;nibo[++t1]='0'+shu->data[shu->top].d2;nibo[t1+1]='\0';}//如果是数字那么就保存到结构体里的dd数组里的第二个成员里else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];nibo[t1+1]='\0';j--;}t2=j-1;i++;}else if(a[i]=='+'){while(t2>0&&zhan2[t2]!='('){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='-'){if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{while(t2>0&&zhan2[t2]!='('){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}else if(a[i]=='*'||a[i]=='/'){while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#'){while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}//把输出的多项式中的数字字符先转换成数值型存入结构体里,然后把加减乘除等的字符存入到zhan2里--这是转化过程并存储入站//下面就是开始计算结果相当于出站的过程把dd结构体里的数值取出和zhan2的字符来进行运算,当前结果存储到zhan3里,就用nibo数组来判断是否计算完毕while(t2>0){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}j=1;t3=0;while(j<=t1){if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#')//{for(i=1;i<=shu->top;i++){if((int)(nibo[j]-'0')==shu->data[i].d2){m=i;break;}}zhan3[++t3]=shu->data[m].d1;}else if(nibo[j]=='+'){zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];t3--;}else if(nibo[j]=='-'){zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];t3--;}else if(nibo[j]=='*'){zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];t3--;}else if(nibo[j]=='/'){zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];t3--;}else if(nibo[j]=='^'){zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);t3--;}else if(nibo[j]=='#'){zhan3[t3]=sqrt(zhan3[t3]);}j++;}return zhan3[t3];}void main()//{for(;;){char x,a[50];double jieguo;int i=0;a[0]='$';printf("#表示开方,^表示乘方(支持负数)\n");printf("请输入表达式无需输入= 号直接回车可输出答案退出请输入q \n\n");scanf("%c",&x);if(x=='q') break;while(x!='\n'){a[++i]=x;scanf("%c",&x);}a[i+1]='\0';jieguo=jisuan(a);printf("\n");printf("结果为:%lf",jieguo);printf("\n\n\n");printf("退出请输入q 继续请直接输入\n\n"); }}}五、调试分析六、调试说明以及分析:1、当输入为正确的格式时,能算出正确的结果,其中包括:小数、整数以及个位以上的数字,且运算符包括:加、减、乘、除运算,还有就是可以加括号等。
简单计算器C语言课程设计报告书
C 语言课程设计报告
系:
级:
号:
名:
院 班 学 姓
、课程设计目的
、课程设计的基本过程
课程设计的基本过程包括 5 个步骤,即功能需求,总体
设计,详细设计,程序测试,结论。
每个步骤都有其特定的 任务。
2.1 【功能需求】
功能概述:该软件为用户提供一个在 windows 系统上
运 行的简单计算器,能进行简单的加、减、乘、除四则运算和
些常用特殊运算,包括余弦运算、正弦运算、正切运算、 绝对值、平方根运算、以 e 为底的指数运算、以 10 为底的 对数运算。
2.2 【总体设计】
1. 巩固和加深 C 语言课程的基本知识的理解和掌握
2. 掌握 C 语言编程和程序调试的基本技能
3. 利用 C 语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用 C 语言解决实际问题的能力。
vc计算器实验报告
VC计算器实验报告1. 引言计算器是我们日常生活中经常使用的工具之一。
它可以帮助我们进行简单的数学运算,如加减乘除,以及更复杂的科学计算。
然而,传统的计算器通常功能有限,无法满足我们日益增长的计算需求。
为了解决这个问题,我们设计并实现了一款名为VC计算器的应用程序。
本文将详细介绍VC计算器的设计思路、功能特点以及实现过程。
2. 设计思路VC计算器的设计思路基于“step by step thinking”的理念,即通过逐步思考和分解问题来实现复杂的功能。
我们希望用户能够通过简单的步骤,逐渐构建出复杂的计算式,并获得准确的计算结果。
3. 功能特点3.1 基本计算功能VC计算器支持基本的四则运算,包括加法、减法、乘法和除法。
用户可以通过逐步输入数字和运算符,构建出复杂的计算式,并得到准确的计算结果。
3.2 科学计算功能除了基本的四则运算,VC计算器还提供了一些常用的科学计算功能,如三角函数、对数函数、指数函数等。
用户可以通过简单的步骤,构建出复杂的科学计算式,并得到准确的计算结果。
3.3 变量和函数支持为了进一步增强计算器的功能,我们在VC计算器中添加了变量和函数的支持。
用户可以定义和使用变量,以及定义和调用函数。
这样,用户可以根据自己的需求,自定义复杂的计算式,并得到准确的计算结果。
4. 实现过程4.1 界面设计我们通过使用Markdown文本格式来展示VC计算器的界面设计。
下面是一个示例界面:==========================================VC计算器==========================================[1] 2 + 3 = 5[2] sin(45) = 0.707[3] x = 10[4] y = 5[5] x + y = 15[6] f(x) = 2x + 1[7] f(5) = 114.2 代码实现VC计算器的代码实现主要分为以下几个步骤:1.解析用户输入,获取操作符和操作数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
V C++计算器课程设计报告1.作品名称:计算器2.本次课程设计的目的在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
3.主要功能实现计算器的功能。
用户根据程序提示,输入数字或字符,选择要进行的运算,可以进行正弦、余弦、正切、开方、对数、加、减、乘、除、华氏温度与摄氏度之间的换算以及平方根的运算。
4.代码#include <process.h>#include<time.h>#define MAX 100#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <math.h>double number1,number2,answer,number3,num[10000];int n,k=1;char input,val; class oopcalc {private:double x,y; double fartocel(double number1); double celtofar(double number1); double sqroot(double number1);void calcsqr();void calccos();void calctan();void calcsin();void calclog();public:double getX(){return x;}double getY(){return y;}double set(){x=number1;y=number2;}double calcadd(double number1,double number2);double calcsub(double number1,double number2);double calcdiv(double number1,double number2);double calcmult(double number1,double number2);void calcfartocel();void calcceltofar();void calcsroot();void exitprog();void menu();void caculate();void test();void badinput();};void oopcalc::calcsin(){cout<<"The Sin Function\n";cout<<"Enter a number:";cin>>number1;answer=sin(number1);cout<<"The sin of "<<number1<<" is "<<answer<<endl;cout<<"Press any key to continue\n";getch();menu();}void oopcalc::calccos(){cout<<"The Cos Function\n";cout<<"Enter a number:";cin>>number1;answer=cos(number1);cout<<"The cos of "<<number1<<" is "<<answer<<endl;cout<<"Press any key to continue\n";getch();menu();}void oopcalc::calctan(){cout<<"The Tan Function\n";cout<<"Enter a number:";cin>>number1;answer=tan(number1);cout<<"The tan of "<<number1<<" is "<<answer<<endl;cout<<"Press any key to continue\n";getch();menu();}void oopcalc::calcsqr(){cout<<"The sqr Function\n";cout<<"Enter a number:";cin>>number1;answer=(number1*number1);cout<<"The sqr of "<<number1<<" is "<<answer<<endl;cout<<"Press any key to continue\n";getch();menu();}void oopcalc::calclog(){cout<<"The Log Function\n";cout<<"Enter a number:";cin>>number1;if(number1<=0){cout<<"Bad input!\n";cout<<"Press any key to continue\n";getch();menu();}elseanswer=log(number1);cout<<"The log of "<<number1<<" is "<<answer<<endl;cout<<"Press any key to continue\n";getch();menu();}double oopcalc::calcadd(double number1,double number2){answer=number1+number2;return(answer);}double oopcalc::calcsub(double number1,double number2){answer = number1-number2;return(answer);}double oopcalc::calcdiv(double number1,double number2){if(number2==0){getch();menu();}elseanswer = number1/number2;return(answer);}double oopcalc::calcmult(double number1,double number2){answer = number1*number2;return(answer);}void oopcalc::calcfartocel(){cout << "The Farenheit to Celsius Function\n"; cout << "Enter a tempature in Farenheit: ";cin >> number1;answer =((number1 - 32) * 5) / 9;cout << "The tempature in Celsius is " << answer << endl;cout << "Press any key to continue\n";getch();menu();}void oopcalc::calcceltofar(){cout << "The Celsius to Farenheit Function\n"; cout << "Enter a tempature in Celsius: ";cin >> number1;answer =number1 * 9 / 5 + 32;cout << "The tempature in Farenheit is " << answer << endl;cout << "Press any key to continue\n";getch();menu();}void oopcalc::calcsroot(){cout << "The Square Root Function\n";cout << "First number: ";cin >> number1;if(number1<0){cout<<"your enter is incorrect,please enter a new number\n";getch();menu();}elseanswer = sqrt(number1);cout << "The square root of " << number1 << " is "<< answer << endl;cout << "Press any key to continue\n";getch();menu();}void oopcalc::exitprog(){exit(-1);}void oopcalc::menu(){oopcalc a;system("cls"); \cout <<"==================MENU===============\n";cout <<"s:选择s进行正弦运算\n";cout <<"c:选择c进行余弦运算\n";cout <<"t:选择t进行正切运算\n";cout <<"g:选择g进行对数运算\n";cout <<"n:选择n进行求平方运算\n";cout << "1: 选择1进行混合运算\n";cout << "2: 选择2进行华氏温度转化为摄氏温度的运算\n";cout << "3: 选择3进行摄氏温度转化为华氏温度的运算\n";cout << "4: 选择4进行求平方根运算\n";cout << "5: 选择5进行测试\n";cout << "6:选择6退出运算\n";cout << "请选择: ";cin >> input;cout << "=====================================\n"; switch (input){case 's':case 'S':a.calcsin();case 'c': case 'C':a.calccos();break;case 't':case 'T':a.calctan();break;case 'g':case 'G':a.calclog();break;case 'n':case 'N':a.calcsqr();break;case '1': a.caculate(); break;case '2': a.calcfartocel(); break;case '3': a.calcceltofar(); break;case '4': a.calcsroot(); break;case '5': a.test();case '6': a.exitprog();break;default : a.badinput();}}void oopcalc::caculate(){oopcalc a;cout<<"The Multifunction(混合四则运算)\n";for(int n=1;;n++){cout<<"Number"<<n<<"(Enter 0 to end entering):";cin>>num[n]\if(num[n]==0){\c out<<"Press any key to continue\n";g etch();m enu();}switch(k){case 1:if(n==1){answer=num[1];break;}else {answer=a.calcadd(answer,num[n]);cout<<"The answer is "<<answer<<endl;break;}case 2:if(n==1){answer=num[1];break;}else {answer=a.calcsub(answer,num[n]);cout<<"The answer is "<<answer<<endl;break;}case 3:if(n==1){answer=num[1];break;}else {answer=a.calcmult(answer,num[n]);cout<<"The answer is "<<answer<<endl;break;} case 4:if(n==1){answer=num[1];break;}else {answer=a.calcdiv(answer,num[n]);cout<<"The answer is "<<answer<<endl;break;} }label1:cout<<"Please choose the function you want(+ or - or * or /):\n";cin>>val;switch(val){case'+':k=1;break;case'-':k=2;break;case'*':k=3;break;case'/':k=4;break;default:cout<<"Bad input!\n";goto label1;}}}void oopcalc::test(){cout<<"The Test Function\n";int s;float p;s=rand()%4+1;srand ( time (NULL) );number1=rand()%MAX+1; n umber2=rand()%MAX+1;switch(s){case 1:cout<<number1<<'+'<<number2<<'=';answer=calcadd(number1,number2);b reak;case 2: c out<<number1<<'-'<<number2<<'=';answer=calcsub(number1,number2);b reak;case 3: c out<<number1<<'/'<<number2<<'=';a nswer=calcdiv(number1,number2);b reak;case 4: c out<<number1<<'*'<<number2<<'=';a nswer=calcmult(number1,number2);b reak;}cin>>p;if(answer==p){cout<<"Correct!You are very clever!\n";}else{cout<<"NO!The correct answer is "<<answer<<",You should have more practise.\n";} cout<<"Press any key to continue\n";cout<<flush;getch();menu();}void oopcalc::badinput(){cout << "BAD INPUT!\n";cout << "Press any key to continue\n";getch();menu();}void main(){oopcalc s;s.menu();}5.运行界面进行正弦运算进行混合运算求平方根运算,根据用户输入与系统提示,运行过程依次如下:进行华氏温度和摄氏度间的转化,运行如下:进行测试选择6键,回到菜单界面,运行如下:6.心得体会这次课程设计让我获益匪浅,我懂得了,做出一个优秀的程序,不是一蹴而就的事情,更不是马马虎虎随随便便就能成功的。