计算数学表达式程序设计实训报告
《程序设计方法学》实验报告-算术表达式求值

X X X X X大学《程序设计方法学》实验报告实验一:算术表达式求值学院:X X X专业:计算机科学与技术姓名:X X X学号:XXXXX2010年11 月18 日目录1.前言 (1)2.概要设计 (1)2.1 数据结构设计 (1)2.2 算法设计 (1)2.3 ADT描述 (2)2.4 功能模块分析 (3)3.详细设计 (3)3.1 数据存储结构设计 (3)3.2主要算法流程图(或算法伪代码) (4)4.测试结果 (7)5.参考文献 (8)附录--程序源代码 (8)1.前言在计算机中,算术表达式由常量、变量、运算符和括号组成。
由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。
因而在程序设计时,借助栈实现。
算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。
为简化,规定操作数只能为正整数,操作符为+、-*、/,用#表示结束。
算法输出:表达式运算结果。
算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。
在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。
2.概要设计2.1 数据结构设计任何一个表达式都是由操作符,运算符和界限符组成的。
我们分别用顺序栈来寄存表达式的操作数和运算符。
栈是限定于紧仅在表尾进行插入或删除操作的线性表。
顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置,base为栈底指针,在顺序栈中,它始终指向栈底,即top=base可作为栈空的标记,每当插入新的栈顶元素时,指针top增1,删除栈顶元素时,指针top减1。
2.2 算法设计为了实现算符优先算法。
可以使用两个工作栈。
一个称为OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。
1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为”#”)。
算术表达式求值实验报告

算术表达式求值实验报告前言算术表达式求值是计算机科学中比较基础的内容,同时也是很实用的技能,因为有时候我们需要用程序来计算一些复杂的数学运算。
在本次实验中,我们将对算术表达式的求值进行深入研究,并实际编写程序来实现这一功能。
实验原理算术表达式通常由数字、运算符和括号组成,我们需要将其转换为计算机能够直接执行的形式。
常见的算术表达式求值方法有两种:1.中缀表达式求值中缀表达式就是我们平时所熟悉的数学表达式,如2+3*4-5/2。
中缀表达式求值需要遵循一定的运算符优先级和括号的影响,可以通过栈来实现。
首先,我们需要将中缀表达式转换为后缀表达式,即将运算符放在数字后面。
具体的转换方法可以使用栈来实现。
遍历中缀表达式,遇到数字就直接输出,遇到运算符就将其与栈顶运算符进行比较,如果优先级高于栈顶运算符,则将其入栈,否则将栈顶运算符弹出并输出,直到遇到优先级小于等于栈顶运算符或者栈顶为空时,将运算符入栈。
最后将栈中的运算符依次弹出并输出即可。
转换为后缀表达式之后,我们可以通过再次遍历后缀表达式来求值。
遇到数字将其入栈,遇到运算符则弹出栈顶两个数字进行运算,并将结果入栈。
遍历完毕后,栈中剩下的数字就是最终结果。
2.前缀表达式求值前缀表达式就是将运算符放在数字前面的表达式,如:- + * 3 4 5 6。
前缀表达式求值与后缀表达式求值类似,不同之处在于需要从右至左遍历表达式,并将运算符与栈顶数字进行操作。
实验步骤在本次实验中,我们将通过 Python 语言来实现算术表达式求值功能。
具体步骤如下:1. 输入待求值的算术表达式。
2. 对算术表达式进行转换,得到后缀表达式或前缀表达式。
3. 遍历后缀表达式或前缀表达式,求出最终结果。
4. 输出结果。
实验结果我们在 Python 中编写了求解算术表达式的程序,以下是一些样例输入和输出:1. 输入:2+3*4 输出:142. 输入:(2+3)*4 输出:203. 输入:-+*3456 输出:-9通过多组测试,我们可以发现程序能够正确地求解各种算术表达式,包括包含括号和负数的表达式。
实验三算法表达式C语言实验报告

数据结构实验实验项目三栈和队列的应用计算机科学与技术系0902班组长:雷耀阳组员:柴瑞东、李志鹏、张玲春日期:实验报告实验类型__综合设计__实验室软件实验室1 1.实验题目求一个数学表达式的值:用户输入一个包含正整数、括号和四则运算符(“+”、“—”、“*”、“/”)的算术表达式,计算其结果。
2.需求分析首先置操作数栈为空栈,表达式起始符“#”为运算符栈底元素;依次读入表达式中每个字符,若是操数则进操作数栈,若是操作符则和操作符栈顶的运算符进行比较优先权后作相应的操作,直到整个表达式求值完毕(即操作符栈顶元素和当前读入的字符均为“#”)3.概要设计结点结构类型描述如下typedef struct{char *base,*top;int stacksize;}sqstack;函数关系:4.详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。
对主程序和其他模块也都需要写出伪码算法。
#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <process.h>#include <string.h>#define N 100double numStack[N]={0};int numTop;char opStack[N];int opTop;int op(char ch){if(ch=='+'||ch=='-') return 2;if(ch=='*'||ch=='/') return 3;if(ch=='(') return -1;return 0;}double result(double num1,char op,double num2) {if(op=='+') return num1+num2;if(op=='-') return num1-num2;if(op=='*') return num1*num2;if(op=='/') return num1/num2;return 0;}int compute(char str[]){double num=0;int i=0,j=1,k=1;int Flag=0;numTop=opTop=0;while(str[i]!='\0'||opTop>0){if(str[i]>='0'&&str[i]<='9')if(Flag==0)num=num*10+str[i]-'0';else{num+=(str[i]-'0')/(j*10.0);j*=10;}elseif(str[i]=='.')Flag=1;elseif( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) )k=-1;else{if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')'){numStack[numTop++]=num*k;num=0; j=1; Flag=0; k=1;}if(opTop==0||str[i]=='(')opStack[opTop++]=str[i];elseif(str[i]==')'){while(opTop>0&&opStack[--opTop]!='('){numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]); numTop--;}if(opStack[opTop]!='(') return 0;}else{if(str[i]=='\0'&&numTop==0) return 0;while(opTop>0&&op(str[i])<=op(opStack[opTop-1])){numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);numTop--;}if(str[i]!='\0')opStack[opTop++]=str[i];}}if(str[i]!='\0')i++;}if(numTop!=1||opTop!=0)return 0;return 1;}void face(){system("cls");printf("__________________________________________________________________\n"); printf(" Save number(S) | Read number(R) | Clear(C) | Equal(E) | Quit(Q) \n"); printf("------------------------------------------------------------------\n"); }main(){int i=0,j=0,k;char str[N]="\0";char num[N]="\0";char save[N]="\0";char ch;double temp;unsigned long temp2;face();printf("input an expression,press key 'E' to compute\n");ch=getch();while( 1 ){if(ch=='.'||ch==')'||op(ch)||ch>='0'&&ch<='9')str[i++]=ch;str[i]='\0';face();printf("input an expression,press key 'E' to compute\n"); printf("%s",str);if( ch=='-'&&(i==1||op(str[i-2]))||ch>='0'&&ch<='9' ) {num[j++]=ch;num[j]='\0';}else j=0;}if(ch=='S'||ch=='s')if(strlen(num)){face();printf("%s has been saved\n",strcpy(save,num));printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}else{face();printf("there is no number to save!\n");printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}if(ch=='R'||ch=='r')if(strlen(save)){face();printf("input an expression,press key 'E' to compute\n"); printf("%s",strcat(str,save));i+=strlen(save);}if(ch=='C'||ch=='c')if(strlen(str))str[--i]='\0';face();printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}if(ch=='E'||ch=='e'){if(compute(str)){printf("\n=%g\n",numStack[0]);j=0; temp=numStack[0];if(temp<0){temp=-temp;num[j++]='-';num[j]='\0';}temp2=(unsigned long)temp;k=1;while(temp2/k>=10)k*=10;while(k){num[j++]=temp2/k+'0';num[j]='\0';temp2=temp2%k;k/=10;}temp=temp-(int)temp;if(temp!=0){num[j++]='.';num[j]='\0';temp+=0.0000005;}for(k=6;k>0;k--){if(temp==0) break;temp*=10;num[j++]=(int)temp+'0';num[j]='\0';temp=temp-(int)temp;}}else{face();printf("input an expression,press key 'E' to compute\n"); printf("%s",str);printf("\nwrong expression!");}i=0; j=0; str[0]='\0';}if(ch=='Q'||ch=='q'){printf("\nare you sure to quit?(Y/N)\n");ch=getch();if(ch=='Y'||ch=='y') break;else{face();printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}}ch=getch();}}#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <process.h>#include <string.h>#define N 100double numStack[N]={0};int numTop;char opStack[N];int opTop;int op(char ch){if(ch=='+'||ch=='-') return 2;if(ch=='*'||ch=='/') return 3;if(ch=='(') return -1;return 0;}double result(double num1,char op,double num2) {if(op=='+') return num1+num2;if(op=='-') return num1-num2;if(op=='*') return num1*num2;if(op=='/') return num1/num2;return 0;}int compute(char str[]){double num=0;int i=0,j=1,k=1;int Flag=0;numTop=opTop=0;while(str[i]!='\0'||opTop>0){if(str[i]>='0'&&str[i]<='9')if(Flag==0)num=num*10+str[i]-'0';else{num+=(str[i]-'0')/(j*10.0);j*=10;}elseif(str[i]=='.')Flag=1;elseif( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) )k=-1;else{if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')'){numStack[numTop++]=num*k;num=0; j=1; Flag=0; k=1;}if(opTop==0||str[i]=='(')opStack[opTop++]=str[i];elseif(str[i]==')'){while(opTop>0&&opStack[--opTop]!='('){numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]); numTop--;}if(opStack[opTop]!='(') return 0;}else{if(str[i]=='\0'&&numTop==0) return 0;while(opTop>0&&op(str[i])<=op(opStack[opTop-1])){numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]); numTop--;}if(str[i]!='\0')opStack[opTop++]=str[i];}}if(str[i]!='\0')i++;}if(numTop!=1||opTop!=0)return 0;return 1;}void face(){system("cls");printf("__________________________________________________________________\n"); printf(" Save number(S) | Read number(R) | Clear(C) | Equal(E) | Quit(Q) \n"); printf("------------------------------------------------------------------\n"); }main(){int i=0,j=0,k;char str[N]="\0";char num[N]="\0";char save[N]="\0";char ch;double temp;unsigned long temp2;face();printf("input an expression,press key 'E' to compute\n");ch=getch();while( 1 ){if(ch=='.'||ch==')'||op(ch)||ch>='0'&&ch<='9'){str[i++]=ch;str[i]='\0';face();printf("%s",str);if( ch=='-'&&(i==1||op(str[i-2]))||ch>='0'&&ch<='9' ) {num[j++]=ch;num[j]='\0';}else j=0;}if(ch=='S'||ch=='s')if(strlen(num)){face();printf("%s has been saved\n",strcpy(save,num));printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}else{face();printf("there is no number to save!\n");printf("input an expression,press key 'E' to compute\n"); printf("%s",str);}if(ch=='R'||ch=='r')if(strlen(save)){face();printf("input an expression,press key 'E' to compute\n"); printf("%s",strcat(str,save));i+=strlen(save);}if(ch=='C'||ch=='c'){if(strlen(str))str[--i]='\0';face();printf("%s",str);}if(ch=='E'||ch=='e'){if(compute(str)){printf("\n=%g\n",numStack[0]); j=0; temp=numStack[0];if(temp<0){temp=-temp;num[j++]='-';num[j]='\0';}temp2=(unsigned long)temp;k=1;while(temp2/k>=10)k*=10;while(k){num[j++]=temp2/k+'0';num[j]='\0';temp2=temp2%k;k/=10;}temp=temp-(int)temp;if(temp!=0){num[j++]='.';num[j]='\0';temp+=0.0000005;}for(k=6;k>0;k--){if(temp==0) break;temp*=10;num[j++]=(int)temp+'0';num[j]='\0';temp=temp-(int)temp;}}else{face();printf("input an expression,press key 'E' to compute\n");printf("%s",str);printf("\nwrong expression!");}i=0; j=0; str[0]='\0';}if(ch=='Q'||ch=='q'){printf("\nare you sure to quit?(Y/N)\n");ch=getch();if(ch=='Y'||ch=='y') break;else{face();printf("input an expression,press key 'E' to compute\n");printf("%s",str);}}ch=getch();}}5.调试分析1.实验过程中,发现错误后,经过看书,不断调试后,成功。
汇编语言程序设计数学表达式的计算

南昌航空大学实验报告年月日课程名称:汇编语言程序设计实验名称:数学表达式的计算班级:学生姓名:学号:指导教师评定:签名:一.实验目的1.熟悉汇编语言源程序的组织;2.掌握利用顺序结构编写简单程序的方法;3.进一步熟悉程序的调试过程,对自己编写的程序进行调试。
二.实验内容1.完成以下内容1)设W、X、Y、Z均为16位带符号数。
2)要求完成计算表达式(W-(X*Y+Z-220))/X。
3)将表达式的商和余数存入数据区RESULT单元开始的区域中。
提示及要求:1)W、X、Y、Z可以利用DW或者WORD进行定义,数据大小根据自己需要进行设置2)RESULT单元要定义的足够大可以存放运算结果3)注意使用带符号的算术运算指令4)判断并理解计算机中除法的溢出。
5)提前写好预习报告,对报告中的源代码进行上机实现,记录实验结果。
2.实现自然数求和程序提示:1)利用等差数列求和公式计算2)提前写好预习报告,对报告中的源代码进行上机实现,记录实验结果。
三.实验过程和程序过程:鼠标双击启动win32.bat。
Masm编译环境启动后是一个控制台。
输入命令:make32 shiyan输入命令:shiyan程序:1.DA TA SEGMENTW DW 100X DW 5Y DW 2Z DW 200DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DA TASMOV DS,AXMOV AX,XIMUL YADD AX,ZSUB AX,220MOV BX,WSUB BX,AXMOV AX,BXIDIV XMOV AX,4C00HINT 21HCODE ENDSEND START2.四.实验结果和分析1结果:W 100X 5Y 2Z 200商是22 ,余数是0。
2结果:N为100求和结果为5050。
五.实验体会这次实验主要是学会了如何运用数值表达式的计算,熟悉了汇编语言源程序的组织,掌握利用顺序结构编写简单程序的方法,进一步熟悉程序的调试过程,对自己编写的程序进行调试。
算术运算编程实验报告

实验目的:1. 理解并掌握基本的算术运算编程方法。
2. 培养编程解决问题的能力。
3. 熟悉Python编程语言的基本语法和常用库。
实验环境:1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm实验内容:本次实验主要围绕基本的算术运算展开,包括加法、减法、乘法、除法、求余等运算。
以下为实验的具体步骤和结果。
一、实验步骤1. 导入必要的库```pythonimport math```2. 定义一个函数,用于执行加法运算```pythondef add(a, b):return a + b```3. 定义一个函数,用于执行减法运算```pythondef subtract(a, b):return a - b```4. 定义一个函数,用于执行乘法运算```pythondef multiply(a, b):return a b```5. 定义一个函数,用于执行除法运算```pythondef divide(a, b):if b != 0:return a / belse:return "Error: Division by zero" ```6. 定义一个函数,用于执行求余运算```pythondef modulo(a, b):return a % b```7. 测试上述函数```pythonprint("加法运算:", add(3, 4))print("减法运算:", subtract(3, 4))print("乘法运算:", multiply(3, 4))print("除法运算:", divide(3, 4))print("求余运算:", modulo(3, 4))```二、实验结果1. 加法运算:72. 减法运算:-13. 乘法运算:124. 除法运算:0.755. 求余运算:3三、实验总结1. 通过本次实验,我们学习了Python编程语言的基本语法和常用库,掌握了基本的算术运算编程方法。
数据结构实验二——算术表达式求值实验报告

《数据结构与数据库》实验报告实验题目算术表达式求值学院:化学与材料科学学院专业班级:09级材料科学与工程系PB0920603姓名:李维谷学ﻩﻩ号:PB09206285邮ﻩ箱:指导教师:贾伯琪实验时间:2010年10月10日一、需要分析问题描述:表达式计算就是实现程序设计语言得基本问题之一,它得实现就是栈得应用得一个典型例子.设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈得应用实现对算术表达式进行四则混合运算。
问题分析:在计算机中,算术表达式由常量、变量、运算符与括号组成.由于不同得运算符具有不同得优先级,又要考虑括号,因此,算术表达式得求值不可能严格地从左到右进行。
因而在程序设计时,借助栈实现.设置运算符栈(字符型)与运算数栈(浮点型)辅助分析算符优先关系。
在读入表达式得字符序列得同时完成运算符与运算数得识别处理,然后进行运算数得数值转换在进行四则运算.在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内得栈顶数据变化过程,最后得到运算结果。
算法规定:输入形式:一个算术表达式,由常量、变量、运算符与括号组成(以字符串形式输入)。
为使实验更完善,允许操作数为实数,操作符为(、)、、(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。
输出形式:演示表达式运算得中间结果与整个表达式得最终结果,以浮点型输出。
程序功能:对实数内得加减乘除乘方运算能正确得运算出结果,并能正确对错误输入与无定义得运算报错,能连续测试多组数据。
测试数据:正确输入:12*(3、6/3+4^2—1)#输出结果:194、4无定义运算:12*(3、6/(2^2—4)+1)#输出结果:表达式出错,除数为0,无意义错误输入:12+s#输出结果:ERROR!二、概要设计拟采用两种类型得展分别对操作数与操作符进行操作.程序中将涉及下列两个抽象数据类型:1、设定“操作数”得栈得抽象数据类型定义:ADT SqStack_f{ﻩ数据对象:D={ﻩ数据关系:R1={〈>|,,i=2,…,n}约定端为栈顶,端为栈底。
表达式计算实验报告

printf("\n\n");
}
}
下面给出的是用后缀表达式实验表达式计算的程序的源代码:
int calculator(char s[],int n){ //计算表达式的值
int i,x1,x2,x;
intstack *q;
q=intcreat();
for(i=0;i<=n;i++){
if(s[i]==' ') i=i+1;
if(a[i]<='9'&&a[i]>='0'){
s[j]=a[i];
j=j+1;
if(a[i+1]>'9'||a[i+1]<'0'){
s[j]=' ';
j=j+1;
}
}
else{
x1=a[i];
x2=top(q);
if(x2=='#')
q=push(q,x1);
else{
if(x1==')'){
while(top(q)!='('){
if(s[i]<='9'&&s[i]>='0'){
x1=(int)s[i]-48;
while(s[i+1]<='9'&&s[i+1]>='0'){
x1=10*x1+(int)s[i+1]-48;
i=i+1;
}
q=intpush(q,x1);
程序设计实训报告(9篇)

程序设计实训报告(9篇)【导语】程序设计实训报告怎么写出亮点?整理了9篇优秀的《程序设计实训报告》通用版范文,有规范的开头结尾写法和标准的书写格式。
是您写出深受大家欢迎的综合报告抱负参考模板,盼望对您有所关心。
【第1篇】程序设计实训报告程序设计实训报告1一,实训目的:加深对可视化编程技术基本学问的理解,把握运用vb开发应用程序的基本方法及基本技巧。
二,实训时间:20xx年10月20xx年11月三,实训方式:上机操作四,实训类容:这次在杨立雄老师的带领下,利用vb开发工具与数据库sql开发一个使用的小型管理信息系统。
我选择了学籍管理系统。
它的功能要求如下:1,学籍信息输入:实现同学基本状况的输入。
包括各个同学的状况,姓名,家庭号码,家庭住址,学号等各个信息。
2,学籍信息管理:本模块实现了信息的修改,删除,查询。
还有个人信息。
把信息统计这个繁琐的工作简洁化,为同学信息的管理方面提高工作效率。
3,学籍信息查询:通过输入学号便可以查询到这个同学的全部信息,包括姓名,性别,诞生年月,班级,入学日期,联系电话,嘉奖和成果表都一目了然,很大的便利了教工们查询同学信息的过程。
4,统计查询:实现查询全班人数,男女生比例等。
五,实训体会:这次实训,感觉既好玩又有些辛苦。
这还是老师担忧我们适应不了所以没教那么多学问,即使这样我们仍学到了比以前上学时更多的学问,而且这些学问有好多都是我们自己去领悟的到的。
我也知道有人比我们更累,所以我自觉得还是挺好的。
经过这次的实训,我真真实切的感受到了计算机在我们生活中工作中的运用,这些软件,程序能让我们提高工作的效率,更直观更便捷切入主题。
这次我们学习的是数据源的原理及应用的各方面学问,由老师带着我们不断操作。
vb能有效的组织,管理和共享数据库信息,能把数据库信息与ado结合在一起,实现数据库信息的共享。
同时,vb概念清楚,简洁易学,使用。
是适合企业管理人员,数据库管理员使用的首选。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算数学表达式程序设
计实训报告
文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)
程序设计实训报告题目:计算数学表达式程序
1、课程设计目的
(1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控
(2)课程设计为大家提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机结合起来,锻炼我们的分析解决实际问题的能力。
提高我们适应实际,实践编程的能力。
(3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及JAVA语言的理解。
2、设计题目分析
2.1 题目要求:
(1)由用户输入一个简单的四则运算表达式,求出其计算结果后显示。
(2)允许在表达式中出现常用的数学函数,如取整、三角函数、倒数、平方根、平方、立方等。
界面要求:
(1)尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。
(2)如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作。
2.3 设计要求及需求分析
设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
需求分析:在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。
虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。
所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
3、课程设计内容
3.1 总体设计:
3.2 详细设计:
以下是部分类功能的说明:
CalFrame 点符号问题,经常出现漏打分号,忽略中英文标点转换等问题,所以一定要谨慎仔细.
2.进制转换的实现及正/余弦计算经常出现问题,结果不正确,经过
查阅资料及反复调试,我们终于克服了这一难题.
3.界面设计,开始我们的设计不太合理,各类功能键排序不合理,
看起来杂乱无章,既不美观也不实用。
经过多次调整程序终于能使
界面美观实用。
4.要注意类、成员变量、成员方法的命名,其中,class后的类名由一个或多个英文
单词构成,每个单词的第一个字符必须是大写;而成员变量和成员方法
名的第一个单词的第一个字母必须小写,其他单词第一个字母大写。
以下是其中一些主要功能演示过程:
运行界面:
4、设计心得与总结:
通过此次的课程设计实践,我们不但进一步理解掌握了课上老师教授的知识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义,发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了GUI方面的知识。
在实践中我们遇到了很多问题,但我们都努力克服,并最终成功的完成了这次课程设计。
通过编写这个相对复杂的程序,我们认识解决实际问题前应先建立模型,再通过建立的模型使问题简单化,从而解决问题。
并且这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我们充分理解了包和类的调用关系。
由于这次编写的程序比较复杂,所以不能一次性编写、调试,也由此让我们学会把程序分块,逐个编写、调试。
5、附录(源代码)
import .*;
import 加载包(使用图形界面处理的,都必须加载此包)
public class Cal {
public static void main(String[] args) {
CalFrame f = new CalFrame(); CalPanelL() ;
("-0"+(0));
}
} catch(Exception ee) { }
}
}
class PressBPoint implements ActionListener { public void actionPerformed(ActionEvent e) { String text = ();
if(".") == -1)
(text+".");
}
}
class PressB0 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"0");
}
}
class PressB1 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"1");
}
}
class PressB2 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"2");
}
}
class PressB3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String text = ();
(text+"3");
}
}
class PressB4 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"4");
}
}
class PressB5 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"5");
}
}
class PressB6 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"6");
}
}
class PressB7 implements ActionListener {
public void actionPerformed(ActionEvent e) { String text = ();
(text+"7");
}
}
class PressB8 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String text = ();
(text+"8");
}
}
class PressB9 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String text = ();
(text+"9");
}
}
// class: Wclose
class Wclose extends WindowAdapter//用窗口上的关闭按钮关闭窗口
{
public void windowClosing(WindowEvent e) //关闭窗口事件处理{
(0);
}
}
}。