科学计算器课程设计报告C课程设计修订稿
C++ 科学计算器-课程设计报告

screen.SetWindowTextW(str);
have_num=true;
have_point=true;
}
// TODO:在此添加控件通知处理程序代码
}
四则运算按钮事件加法为例
void C计算器Dlg::OnBnClickedadd()
{
if(have_num||have_left) //判断条件,运算符必须在数字后与右括号后
//栈的实现
//初始化
stack::stack(int len)
{
lengh=len;
date=new double[len];
date[0]=0;
top=0;
}
stack::stack()
{
date=new double[100];
date[0]=0;
top=0;
}
//判断为空
bool stack::is_empty()
result=cal.eval(char_arr,char_arr+lengh);
if(cal.geterror()=="null")
{
str.Format(_T("%g"),result);
screen.SetWindowTextW(str);
}
else
{
MessageBox(cal.geterror());
if(str.GetLength()!=0)
{
check_char(str); //删除前检查一下
str=str.Left(str.GetLength()-1);
screen.SetWindowTextW(str);
C课程设计简易计算器实验报告

《程序设计基础》(C++)课程设计报告计算器姓名:班级:学号:指导教师:成绩:完成时间:完成地点:计算器1 基本功能描述计算器包含基本的四则运算、开方、倒数、相反数(正负)等运算。
可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算。
同时包含清除功能。
2 设计思路如图1是计算器总流程图,输完第一个操作数后,若点击双目运算符,则把m_edit 传递给op1,并传递给变量calculator相对运算符对应的值,输入的第二个操作数传递给op2,点击等号根据calculator的值进行相应运算并输出结果。
若点击的是单目运算符,则直接对其处理得出结果。
若点击清零,则m_edit等于0。
设计思路流程图如下(见下页)。
图1 计算器设计思路总流程图3 软件设计创建步骤打开Microsoft Visual C++ ,选择新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名Calculator及其所在位置。
将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成。
MFC AppWizard建立基于对话窗口的程序框架。
界面设计1、创建控件在对话框上的合适的位置画出编辑框和下压式按钮。
如图2所示。
图2 绘制编辑框在按钮和编辑框属性对话框中输入控件的ID值和标题属性。
如图3所示。
图3 Push Button属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表1 各对象属性对象ID 标题或说明编辑框IDC_EDIT1 结果显示按钮IDC_BUTTON0 0按钮IDC_BUTTON1 1按钮IDC_BUTTON2 2按钮IDC_BUTTON3 3按钮IDC_BUTTON4 4按钮IDC_BUTTON5 5按钮IDC_BUTTON6 6按钮IDC_BUTTON7 7按钮IDC_BUTTON8 8按钮IDC_BUTTON9 9按钮IDC_ BUTTONneg +/-按钮IDC_ BUTTONpot .按钮IDC_ BUTTONadd +按钮IDC_BUTTONsub -按钮IDC_BUTTONmul *按钮IDC_BUTTONdiv /按钮IDC_BUTTONsqrt sqrt按钮IDC_BUTTONCE CE完成后界面如图4所示。
计算器课程设计c

计算器课程设计c一、教学目标本课程的教学目标是使学生掌握计算器的基本使用方法,包括加减乘除、科学计算等功能,能够运用计算器解决实际问题。
知识目标为学生能够理解计算器的基本工作原理和各种功能的使用方法;技能目标为学生能够熟练操作计算器,进行正确的数值计算和科学计算;情感态度价值观目标则是培养学生的计算思维,使他们认识到计算器在现代学习和工作中的重要性,养成良好的学习习惯和科学精神。
二、教学内容根据课程目标,本课程的教学内容主要包括计算器的基本操作、各种功能的使用方法以及计算器在实际问题中的应用。
具体的教学大纲如下:1.计算器的基本操作:学习如何开机、关机、清屏等基本操作。
2.数值计算:学习如何进行加减乘除等基本的数值计算。
3.科学计算:学习如何进行幂次计算、平方根、倒数等科学计算。
4.实际问题应用:通过实例讲解计算器在解决实际问题中的应用,如面积、体积计算等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
讲授法用于讲解计算器的基本操作和功能使用方法;讨论法用于引导学生交流计算器使用的心得和遇到的问题;案例分析法用于分析计算器在实际问题中的应用;实验法用于让学生亲自动手操作计算器进行实际计算。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于提供理论知识的学习,多媒体资料用于辅助讲解和演示计算器的操作,实验设备则是让学生进行实际操作的重要工具。
在教学过程中,教师应充分利用这些资源,丰富学生的学习体验,提高学习效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面客观地评价学生的学习成果。
平时表现主要评估学生在课堂上的参与度、提问回答等情况;作业则主要评估学生的动手操作能力和对知识的理解运用;考试则是对学生学习成果的全面检验,包括理论知识和实际操作两部分。
评估方式应公正客观,能够全面反映学生的学习成果。
计算器课程设计报告

计算器课程设计报告一、课程目标本节计算器课程设计以提升学生的数学计算能力、逻辑思维能力和实际应用能力为核心,结合三年级学生的认知特点和实际需求,制定以下课程目标:1. 知识目标:(1)学生能够掌握计算器的基本功能及操作方法;(2)学生能够运用计算器进行简单的四则运算,并理解相关数学概念;(3)学生能够运用计算器解决生活中的实际问题,提高数学应用能力。
2. 技能目标:(1)培养学生运用计算器进行快速、准确计算的能力;(2)培养学生运用计算器辅助解决数学问题的能力;(3)提高学生逻辑思维能力,培养学生独立思考和解决问题的能力。
3. 情感态度价值观目标:(1)激发学生对计算器的兴趣,培养学生主动探究新知的习惯;(2)培养学生合作交流、分享成果的团队精神;(3)培养学生将所学知识应用于实际生活的意识,增强学生的自信心和成就感。
本课程旨在通过计算器教学,使学生在掌握基本计算技能的同时,提高数学素养,培养实际应用能力,激发学生对数学学习的兴趣,为学生的终身学习打下坚实基础。
二、教学内容本节计算器课程依据课程目标,结合课本内容,选择以下教学材料和安排:1. 教学大纲:(1)计算器的基本功能介绍与操作方法;(2)使用计算器进行加、减、乘、除四则运算;(3)运用计算器解决实际问题。
2. 教学内容安排与进度:第一课时:认识计算器,了解计算器的基本功能和操作方法,包括开关机、清屏、数字键、运算符号键等。
第二课时:学习使用计算器进行加、减、乘、除四则运算,并通过练习巩固运算方法。
第三课时:运用计算器解决生活中的实际问题,如购物找零、计算面积等。
3. 教材章节及内容列举:(1)第三章《计算器与计算》:介绍计算器的基本功能、操作方法及四则运算;(2)第四章《计算器在实际应用中的作用》:举例说明计算器在生活中的应用,提高学生实际操作能力。
教学内容科学系统地组织,注重理论与实践相结合,使学生能够熟练掌握计算器的使用方法,并能在实际生活中运用计算器解决简单问题,提高学生的数学素养。
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小时。
C课程设计(计算器)[转载]
![C课程设计(计算器)[转载]](https://img.taocdn.com/s3/m/b3a47009a9956bec0975f46527d3240c8447a1f8.png)
04
C语言函数
函数的定义和声明
函数定义:函数是完成特定任务的独立代码块,可以重复使用 函数声明:在函数定义之前,需要先声明函数,以便编译器知道函数的存在 函数参数:函数可以接受参数,参数可以是变量、常量或其他表达式 函数返回值:函数可以返回一个值,返回值可以是任何类型的数据
2010年代,全球科学家共 同研发了第一台量子计算
机
计算器的应用场景
家庭日常计算:如购物、做饭等 学校教育:如数学、物理等学科的教学和练习 商业计算:如财务、会计等业务的计算和统计 科研计算:如科学研究、工程计算等数据的处理和分析
02
C语言基础
C语言概述
C语言是一种高级 编程语言,广泛应 用于系统编程、嵌 入式系统、驱动程 序等领域。
01
计算器概述
计算器的基本功能
加减乘除运算 平方、开方、求余等高级运算 存储和读取数据
计算器模式切换(如科学计算器、工 程计算器等)
单位转换(如长度、重量、温度等)
计算器设置(如时间、日期、闹钟等)
计算器的发展历程
1820年,英国数学家查尔 斯·巴比奇发明了第一台差
分机
1960年代,日本科学家发 明了第一台便携式电子计
执行流程:函 数被调用后, 会按照函数体 中的代码顺序
执行
返回值:函数 执行完成后,
可以通过 return语句返
回一个值
结束调用:函 数执行完成后, 会返回到调用 函数的位置, 继续执行后面
的代码
05
计算器功能实现
输入输出处理
输入:键盘输入,支持数字、运算符号等 输出:显示屏显示计算结果 处理:计算器内部进行计算,包括加减乘除等基本运算 错误处理:输入错误时,给出提示信息,如“输入错误,请重新输入”
计算器c语言课程设计报告书

设计分析:我做的是一个计算器程序,属于B级。
题目要求如下:1、完善计算器程序,改为可对实数操作。
2、完善程序,改为多个操作数基本四则运算,遇到z为止。
3、增加函数,完成四则混合运算,增加相应的主菜单选项4、添加语句,使四则运算具有测试功能。
5、可扩充其功能。
所给的计算器源程序中已有基本的加、减、乘、除和开方运算,我所要做的就是添加一个可以进行四则混合运算功能的类。
本程序所要用到的头文件有如下几种:process,iostream,conio,stdlib,math和assert.原程序中已经定义了加、减、乘、除和开方的运算,它用了类oopcalc将这几个基本运算进行封装。
类中包含以下几个函数:void calcadd();void calcsub();void calcdiv();void calcmult();void calcfartocel();void calcceltofar();void calcsroot();void exitprog();void menu();void badinput();每个函数的参数形式如下:int add(float x,float y);int sub(float x, float y);int div(float x, float y);int mult(float x, float y);int fartocel(float x);int celtofar(float x);int sqroot(float x);原程序对这几个函数分别做了如下定义:int oopcalc::add(float x, float y) {val = x + y;return val;}int oopcalc::sub(float x,float y) {val = x - y;return val;}int oopcalc::div(float x, float y) {val = x / y;return val;}int oopcalc::mult(float x, float y){val = x * y;return val;}int oopcalc::fartocel(float x){int cel = ((x - 32) * 5) / 9;return cel;}int oopcalc::celtofar(float x){int f;f = x * 9 / 5 + 32;return f;}int oopcalc::sqroot(float x){int g = sqrt(x);return g;}首先要把程序改为可对实数进行操作,由于原程序中的操作数类型都是整形,因此我所采用的办法就是把“int”依次改成“float”。
c简单计算器课程设计报告

c 简单计算器 课程设计报告一、课程目标知识目标:1. 让学生掌握简单计算器的基本功能,包括加、减、乘、除等四则运算。
2. 使学生理解计算器操作规则,如先算乘除后算加减、括号的作用等。
3. 帮助学生掌握计算器上的其他功能键,如清除、取反、百分比等。
技能目标:1. 培养学生运用计算器进行四则运算的能力,提高计算速度和准确性。
2. 培养学生运用计算器解决实际问题的能力,如购物找零、计算面积等。
3. 培养学生通过观察、思考、提问等方式,发现计算器使用过程中的问题,并尝试解决。
情感态度价值观目标:1. 培养学生对待计算器等电子设备的正确态度,爱护设备,遵守使用规范。
2. 培养学生在合作学习中互相帮助、共同进步的精神,增强团队意识。
3. 通过计算器教学,激发学生对数学学科的兴趣,提高学生的自信心和自主学习能力。
本课程针对年级学生的特点,注重培养学生的学习兴趣和实践能力。
课程性质为实践操作类,强调学生在动手实践中掌握知识。
在教学过程中,教师需关注学生的学习需求,及时调整教学策略,确保学生能够达到课程目标。
课程目标分解为具体学习成果,以便于后续教学设计和评估。
在教学结束后,学生应能独立使用计算器完成四则运算,解决实际问题,并在学习过程中培养良好的情感态度和价值观。
二、教学内容1. 计算器基本结构认知:让学生了解计算器各部分名称及其功能,如数字键、运算符号键、等于键、清除键等。
2. 四则运算操作方法:教学加、减、乘、除四则运算的计算器操作方法,以及运算顺序和括号的使用。
- 加法和减法运算- 乘法和除法运算- 混合运算及括号应用3. 计算器其他功能键使用:介绍取反、百分比、开方等特殊功能键的操作方法。
4. 实践应用:设计实际应用场景,让学生运用计算器解决购物找零、计算面积、计算速度等问题。
- 购物找零问题- 长度、面积、体积计算- 速度、时间、路程计算教学内容参考教材相关章节,结合课程目标进行整合。
教学大纲安排如下:第一课时:计算器基本结构认知、四则运算操作方法(加法和减法运算)第二课时:四则运算操作方法(乘法和除法运算)第三课时:四则运算操作方法(混合运算及括号应用)第四课时:计算器其他功能键使用第五课时:实践应用(购物找零问题)第六课时:实践应用(长度、面积、体积计算)第七课时:实践应用(速度、时间、路程计算)教学内容注重科学性和系统性,确保学生能够循序渐进地掌握计算器的使用方法,并在实际应用中巩固所学知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
科学计算器课程设计报告C课程设计集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]计算机科学与技术学部C++课程设计题目科学计算器学部计算机科学与技术班级计科1103 指导教师李军姓名刘明学号2012年6月27日摘要计算器的产生和发展是建立在电子计算机基础之上的。
硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。
软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。
在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。
能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。
此系统在Windows 7环境下,使用VC++ 进行编写。
简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。
可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
并且包含清除,退格功能等。
我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。
关键词:计算器;运算;VC++等课程设计任务分配表:采用的类的数据类型:class CCalculatorDlg : public CDialog{public:void clean_aliter();CString OLD_ANSWER;void out_change(int system);变量的定义以及初始化int Sel,EndSel; //定义输入或插入时光标的位置int Expr_pos; //词法分析表达式时,标记当前字符位置int OS_pos ; //操作数栈顶位置int old_pos; //历史表达式的位置int old_head; //历史表达式数组中最最前位置int old_back; //历史表达式数组中最最后位置int error_mark; //标记表达式错误int parentheses_count; //记录表达式中括号的个数double operand_Stack[200]; //操作数栈CString old_expression[20]; //表达式历史记录//以上为定义部分,以下为初始化部分Sel=0; //输入的光标位置EndSel=0; //插入光标的位置Expr_pos = 0; //当前字符的位置OS_pos = 0 ; //操作数栈顶位置old_pos=old_head=old_back=0;//历史表达式的位置error_mark=0; //表达式错误parentheses_count=0; //括号的个数OLD_ANSWER = _T(""); //初始化第三章系统实现窗体设计利用MFC AppWinzard生成计算器应用程序框架具体步骤如下:(1)执行VC++ 程序,选择文件——新建命令,转到工程选项卡,选择MFC AppWizard(exe)选项,然后在工程名称输入名字,一般以C开头,也可以自定义,位置路径自定义。
(2)单击确定,弹出MFC 应用程序向导-步骤1对话框。
选中单选按钮基本对话框,单击完成即可,如图所示:(1)为控件添加成员变量已经在系统设计里面列举出,这里就不再重复;(2)为控件添加消息,查看-类向导命令,转到Message Maps选项卡,为控件添加BN_CLICKED消息,单击确定即可,具体哪些控件这里就不再详细介绍了。
程序核心代码void CCalculatorDlg::OnNumberKey(UINT nID) //按键输入{(Sel,EndSel); //得到输入框的光标位置switch(nID){// 在光标位置插入按钮表示的字符,在输入框插入相应的数值case IDC_0:{ (Sel,"0");break;}case IDC_1:{ (Sel,"1");break;}case IDC_2:{ (Sel,"2");break;}case IDC_3:{ (Sel,"3");break;}case IDC_4:{ (Sel,"4");break;}case IDC_5:{ (Sel,"5");break;}case IDC_6:{ (Sel,"6");break;}case IDC_7:{ (Sel,"7");break;}case IDC_8:{ (Sel,"8");break;}case IDC_9:{ (Sel,"9");break;}case IDC_A:{ (Sel,"A");break;}case IDC_B:{ (Sel,"B");break;}case IDC_C:{ (Sel,"C");break;}case IDC_D:{ (Sel,"D");break;}case IDC_E:{ (Sel,"E");break;}case IDC_F:{ (Sel,"F");break;}}Sel++; //光标后移UpdateData(FALSE);(Sel,Sel); //更新输入框光标后移位置UpdateData(FALSE);}voidCCalculatorDlg::compute(OperatorOp){//根据操作计算类型,计算结果switch(Op){caseOpAdd:{operand_Stack[OS_pos-2]+=operand_Stack[OS_pos-1];OS_pos--;break;} caseOpSubtract:{operand_Stack[OS_pos-2]-=operand_Stack[OS_pos-1];OS_pos--;break;} caseOpMultiply:{operand_Stack[OS_pos-2]*=operand_Stack[OS_pos-1];OS_pos--;break;} caseOpDivide:{if(operand_Stack[OS_pos-1]==0){error(5);break;}else{operand_Stack[OS_pos-2]/=operand_Stack[OS_pos-1];OS_pos--;break;}}caseOpMod:{if(operand_Stack[OS_pos-1]==0){error(5);break;}else{ __int64temp=0;temp=(__int64)(operand_Stack[OS_pos-2]/operand_Stack[OS_pos-1]);operand_Stack[OS_pos-1]*=temp;operand_Stack[OS_pos-2]-=operand_Stack[OS_pos-1];OS_pos--;break;} }caseOpPower:{operand_Stack[OS_pos-2]=pow(operand_Stack[OS_pos-2],operand_Stack[OS_pos-1]);OS_pos--;break;}caseOpLog:{operand_Stack[OS_pos-1]=log10(operand_Stack[OS_pos-1]);break;} caseOpLn:{operand_Stack[OS_pos-1]=log(operand_Stack[OS_pos-1]);break;} caseOpSqrt:{operand_Stack[OS_pos-1]=sqrt(operand_Stack[OS_pos-1]);break;} caseOpExp:{ operand_Stack[OS_pos-1]=exp(operand_Stack[OS_pos-1]);break;}caseOpSin:{if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*PI/180;operand_Stack[OS_pos-1]=sin(operand_Stack[OS_pos-1]);break;}caseOpCos:{if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*PI/180;operand_Stack[OS_pos-1]=cos(operand_Stack[OS_pos-1]);break;}caseOpTan:{if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*PI/180;operand_Stack[OS_pos-1]=tan(operand_Stack[OS_pos-1]);break;}caseOpAsin:{ if(operand_Stack[OS_pos-1]>1||operand_Stack[OS_pos-1]<-1) {error(9);return;}operand_Stack[OS_pos-1]=asin(operand_Stack[OS_pos-1]);if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*180/PI;break;}caseOpAcos:{ if(operand_Stack[OS_pos-1]>1||operand_Stack[OS_pos-1]<-1) {error(9);return;}operand_Stack[OS_pos-1]=acos(operand_Stack[OS_pos-1]);if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*180/PI;break; }caseOpAtan:{ operand_Stack[OS_pos-1]=atan(operand_Stack[OS_pos-1]);if(m_Radio2==0)operand_Stack[OS_pos-1]=operand_Stack[OS_pos-1]*180/PI;break; }caseOpFactorial:{ if(OS_pos<=0){error(1);return;}longk;k=(long)operand_Stack[OS_pos-1];if(k<operand_Stack[OS_pos-1]){error(8);return;}__int64temp=1;for(longi=1;i<=k;i++){ temp*=i;//operand_Stack[OS_pos-1]*=i; }/*(_T("%I64X"),temp);UpdateData(FALSE);MessageBox("sdfsd");*/operand_Stack[OS_pos-1]=(double)temp;break;}}提示错误的核心代码void CCalculatorDlg::error(int error_type) //错误类型{ //错误处理switch(error_type){case 1: {m_result="错误:缺少操作数!";break;}case 2: {m_result="错误:括号不匹配!";break;}case 3: {m_result="错误:函数名不正确!!";break;}case 4: {m_result="错误:非法输入!!";break;}case 5: {m_result="错误:出现除数为零!!";break;}case 6: {m_result="错误:函数缺少括号!!";break;}case 7: {m_result="错误:缺少运算符!!";break;}case 8: {m_result="错误:阶乘操作数不是整数!!";break;}case 9: {m_result="asin和acos函数计算必须在[-1,1]内!!";break;}}error_mark=1; }voidCCalculatorDlg::getword(WordType&w_type,Operator&Fun_Ope,intsyste m)//进制转为浮点型{//词法分析器,参数w_type,Fun_Ope,system分别表示单词类型,操作运算类型,进制类型intt=();if(t<=0){error(4);return;}//表达式为空则返回if(Expr_pos<t){ if((m_expression[Expr_pos]>='0'&&m_expression[Expr_pos]<='9')||(m_e xpression[Expr_pos]>='A'&&m_expression[Expr_pos]<='F')){//当前字符为数字则转换为浮点数压入操作数栈if((Expr_pos+1)<t&&m_expression[Expr_pos]=='0'&&m_expression[Expr_pos +1]=='0'&&m_Radio1!=3) {error(4); return ;}//数字前面有两个零,报错返回switch(system){//根据传来的进制类型,把字符串表示的数字转换为浮点数case0:{if(!getword16()){error(4);return;}break;}case1:{if(!getword10()){error(4);return;}break;}case2:{if(!getword8()){error(4); return ;} break;}case3:{if(!getword2()){error(4);return ; }break;}default:{error(4);return;}}w_type=Tynum;//单词类型为数字return;}if(m_expression[Expr_pos]>='a'&& m_expression[Expr_pos]<='z'){/*当前字符为字母则,把字母串保存到str中*/char str[100]="";int i=0;while(Expr_pos<t&&m_expression[Expr_pos]>='a'&& m_expression[Expr_po s]<='z'){ str[i]=m_expression[Expr_pos];i++;Expr_pos++; }if(Expr_pos>=t){error(3);w_type=TyFun;return;}//表达式结束,则报错/****以下ifelse语句为匹配字符串****/if(strcmp(str,"ln")==0){Fun_Ope=OpLn;}elseif(strcmp(str,"log")==0){Fun_Ope=OpLog;}elseif(strcmp(str,"sqrt")==0){Fun_Ope=OpSqrt;}elseif(strcmp(str,"exp")==0){Fun_Ope=OpExp;}elseif(strcmp(str,"sin")==0){Fun_Ope=OpSin;}elseif(strcmp(str,"cos")==0){Fun_Ope=OpCos;}elseif(strcmp(str,"tan")==0){Fun_Ope=OpTan;}elseif(strcmp(str,"asin")==0){Fun_Ope=OpAsin;}elseif(strcmp(str,"acos")==0){Fun_Ope=OpAcos;}elseif(strcmp(str,"atan")==0){Fun_Ope=OpAtan;}//elseif(m_expression[Expr_pos]=='('){w_type=TyFun;}else{error(3);w_type=TyFun;return;}//匹配不到函数单词,报错w_type=TyFun;return;}switch(m_expression[Expr_pos]){/*当前字符为操作运算符,则设置单词类型,和操作运算*/case'+':{Fun_Ope=OpAdd;Expr_pos++;w_type=oper;break;}case'-':{Fun_Ope=OpSubtract;Expr_pos++;w_type=oper;break;}case'*':{Fun_Ope=OpMultiply;Expr_pos++;w_type=oper;break;}case'/':{Fun_Ope=OpDivide; Expr_pos++;w_type=oper;break;}case'^':{Fun_Ope=OpPower; Expr_pos++;w_type=oper;break;}case'(':{Fun_Ope=Left_par;Expr_pos++;w_type=oper;break;}case')':{Fun_Ope=Right_par; Expr_pos++;w_type=oper;break;} case'%':{Fun_Ope=OpMod; Expr_pos++;w_type=oper;break;} default:{error(4);return;}//其他字符都为非法字符,报错} }elseif(Expr_pos==t)w_type=TyEnd;//表达式已结束,返回else{error(4);return;}}void CCalculatorDlg::OnOctal() //八进制单选按钮消息响应函数{// TODO: Add your control notification handler code here WordType type ;Operator Ope;CString result;int system;system = m_Radio1;m_Radio1 = 2 ;if()>0) m_expression = OLD_ANSWER;UpdateData(FALSE);getword(type,Ope,system);if(type==Tynum&&(!error_mark)&&(Expr_pos==())){out_change(m_Radio1);result = m_result;clean_all();m_expression = m_result = result;UpdateData(FALSE)Sel = ();(Sel,Sel);UpdateData(FALSE);}else{Expr_pos = 0;OS_pos = 0 ;error_mark=0;parentheses_count=0;m_result = _T("");}(TRUE);(TRUE);(TRUE);(TRUE);(TRUE);(TRUE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);}void CCalculatorDlg::OnBinary() //二进制单选按钮消息响应函数{// TODO: Add your control notification handler code here //E_AddSub();WordType type ;Operator Ope;CString result;int system;system = m_Radio1;m_Radio1 = 3 ;if()>0) m_expression = OLD_ANSWER;UpdateData(FALSE);getword(type,Ope,system);if(type==Tynum&&(!error_mark)&&(Expr_pos==())) {out_change(m_Radio1);result = m_result;clean_all();m_expression = m_result = result;UpdateData(FALSE);Sel = ();(Sel,Sel);UpdateData(FALSE);}else{Expr_pos = 0;OS_pos = 0 ;error_mark=0;parentheses_count=0;m_result = _T("");}(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE);(FALSE); (FALSE); }第四章系统运行测试以及运行界面程序主界面测试测试测试过程中要判断是否成功,要分析程序界面的变化和计算数据的结果是否正确以及各功能键是否能正常实用。