如何用VB设计一个简单计算器能进行加减乘除运算?
如何用VB设计一个简单计算器能进行加减乘除运算?
08-11-16 & 发布
参考下: 计算器的程序,很简单,只弄了+-法,乘除没弄,只要把代码看懂照着+-法改一下就行了,不过涉及到多级运算只用一个LastClick是不行的 程序的控件就两种 CommandBotton和TextBox都是最基本的 先创建十一个CommandBotton,Caption改为0-9以及一个&.&(小数点) 创建三个CommandBotton,Caption改为“-”,“+”“=” 创建五个CommandBotton,Caption改为“CM”(clearmemory) “MR”(memoryrecall) “MS”(memorysave) “C”(clear) “AC”(allclear) 再创建个TextBox 下面的是对应代码,很清楚 不懂来问我`~ Dim Counter As Double ‘这个用来记录结果 Dim Memory As Double ‘用来记录你保存的数,这个我们用的科学计算器里也有 Dim Reg As Double ‘这个也是用来记录结果 Dim CalcNumber As Long ‘这个是判断:1当之前点过一次+或-时再点一次运算结果,2如果前面没点过+或-则不进行运算 Dim DisplayFromNew As Boolean ‘这个用来判断输入框状态:是接着输入还是从新输入新的数 Dim AlreadyDecimalThere As Boolean ‘这个用来判断是否能用小数点 Dim LastClick As String ‘这个用来记录最后一次选择的运算法则 Private Sub Form_Load() Display.Text = &0& Reg = 0 CalcNumber = 0 DisplayFromNew = True AlreadyDecimalThere = False End Sub Private Sub AllClear_Click() ‘这个不用说了,是全部清空 DisplayFromNew = True ‘恢复到初始状态 Counter = 0 Display.Text = &0& ‘清空输入框 CalcNumber = 0 Reg = 0 AlreadyDecimalThere = False ‘恢复到初始状态 End Sub Private Sub Clear_Click() ‘清空,但不清空纪录 DisplayFromNew = True Display.Text = &0& End Sub Private Sub ClearMemory_Click() ‘清空纪录 Memory = 0 End Sub Private Sub Decimal_Click() ‘关于小数点的 If AlreadyDecimalThere = False Then AddDisplayDigit &.& AlreadyDecimalThere = True ‘每次输入只能输一次小数点 End If End Sub Private Sub Equals_Click() ‘等号时的 If LastClick = &Minus& Then If CalcNumber = 0 Then Reg = CDbl(Display.Text) ‘记录 DisplayFromNew = True CalcNumber = 1 Else ‘这个的意思是,如果只点了法则(+或-)之后没点数,就加上前面输的数,但我觉得这样就等于前面输得数的2倍(+时)或0(-时),所以不用这么麻烦 Counter = Reg - CDbl(Display.Text) Display.Text = CStr(Counter) DisplayFromNew = True AlreadyDecimalThere = False Reg = CDbl(Display.Text) End If ElseIf LastClick = &Addition& Then ‘这是加法,和减法一样 If CalcNumber = 0 Then Reg = CDbl(Display.Text) DisplayFromNew = True CalcNumber = 1 Else Counter = Reg + CDbl(Display.Text) Display.Text = CStr(Counter) DisplayFromNew = True AlreadyDecimalThere = False Reg = CDbl(Display.Text) End If End If CalcNumber = 0 End Sub Sub AddDisplayDigit(Addition As String) ‘这一段十分重要,也是大家要学习的,就是自己创建一个函数,这样应用起来会十分方便 If DisplayFromNew = True Then Display.Text = Addition ‘当DisplayFromNew = True时(大家注意杂那几种情况下= True)输入栏从新显示刚输入的数 DisplayFromNew = False ‘之后立即变为False,因为要接着这个数继续输入 Else Display.Text = Display.Text & Addition ‘当DisplayFromNew = False 就是接着输入栏里已有的数字继续输入 End If End Sub 注:为何要弄两种情况呢,因为当点击-或+时,要求输入栏从新记录 Private Sub MemorySave_Click() ‘这是保存记录 If DisplayFromNew = False Then Memory = CDbl(Display.Text) End If End Sub Private Sub MemoryRecall_Click() ‘打开纪录 Display = CStr(Memory) End Sub Private Sub Minus_Click() ‘点击 If CalcNumber = 0 Then Reg = CDbl(Display.Text) DisplayFromNew = True CalcNumber = 1 Else ‘这个就是如果前面输过一次-号,再点-号就运算结果,这一点是很重要的,如果不加这个就无法进行连续运算 Counter = Reg - CDbl(Display.Text) Display.Text = CStr(Counter) DisplayFromNew = True AlreadyDecimalThere = False Reg = CDbl(Display.Text) End If LastClick = &Minus& End Sub Private Sub Plus_Click() ‘和减法一样 If CalcNumber = 0 Then Reg = CDbl(Display.Text) DisplayFromNew = True CalcNumber = 1 Else Counter = Reg + CDbl(Display.Text) Display.Text = CStr(Counter) DisplayFromNew = True AlreadyDecimalThere = False Reg = CDbl(Display.Text) End If LastClick = &Addition& End Sub ‘下面的就简单了0-9,不过用到了前面定义的函数AddDisplayDigit,大家看到这个自定义函数的作用了吧 Private Sub Nine_Click() AddDisplayDigit &9& End Sub Private Sub Eight_Click() AddDisplayDigit &8& End Sub Private Sub Seven_Click() AddDisplayDigit &7& End Sub Private Sub Six_Click() AddDisplayDigit &6& End Sub Private Sub Five_Click() AddDisplayDigit &5& End Sub Private Sub Four_Click() AddDisplayDigit &4& End Sub Private Sub Three_Click() AddDisplayDigit &3& End Sub Private Sub Two_Click() AddDisplayDigit &2& End Sub Private Sub One_Click() AddDisplayDigit &1& End Sub Private Sub Zero_Click() AddDisplayDigit &0& End Sub
请登录后再发表评论!
采用数组控件就可以了!
请登录后再发表评论!求一个c语言里编程的计算器的程序 可运算加减乘除,认小数点和括号的,最好用栈和队列编,辛苦,跪谢~_百度知道
求一个c语言里编程的计算器的程序 可运算加减乘除,认小数点和括号的,最好用栈和队列编,辛苦,跪谢~
@不懂多来问问
提问者采纳
 ?shareid=&uk=" name="表达式求值,程序已通过vc6.h .c Definition。<file fsid="" link="/share/link.c .0编译运行; 这个是主函数文件; 这个文件中放着函数的声明,在这个主函数中可以调用各个想要用到的函数这个文件如果没编译器的话可以用windows自带的记事本或写字板打开,即接口 这个文件中放着函数的实现Expression
提问者评价
太谢谢了,麻烦你了╭(╯3╰)╮
其他类似问题
按默认排序
其他2条回答
0'S;&&&/*将中缀表达式转换为后缀表达式*/{ SeqStack .top++;&& /*在取栈顶元素*/ .h&='&,DataType&S;&&&e););if(S;}else{&&
&&#define& ,a);
S; !StackEmpty(S)&。将栈顶元素值返回给e; int&&& .h&+' ,直到栈中的一个左括号出栈为止*/&9'.top];1;&&return&top]=e; .top];&&S;'!='||e=='&DataType&&&&else{&&':& float&'&return&&
x2=S!StackEmpty(S)) {
PopStack(&
if(S;&&&&);int&&
S;data[MaxSize];& printf(& i++!='&\0' ,&a[])/*计算后缀表达式的值*/{
OpStack !='&&
case&)/*如果当前字符是+号或-号;&S) :
while(;&S-&
S;/'PushStack(SeqStack&&&
PushStack(&'&:
e);&&& } while(!=-1) {
result=S;&&&&
while(GetTop(S;
exp[j]=e;&& .top];&void&&\0'& int&&e;&& ch=str[i];
S;S-&&printf(&,&& ,否则返回0*/{&a[MaxSize];
/*如果当前字符是运算符; :&/*将当前字符入栈*/
break,char&&return&}}int&)&else ,否则返回0*/{&i=0;if(S;&void .top];&
PopStack(&!='& .stack[S; !\n& TranslateExpress(a;&}}int .data[S:
case'&1;&&e).data[S;*S.data[S;&+'
exit(-1);&&&#include&&&100typedef&;&}}int&.data[S;.h&&&&&&&='
S:%f\n&&printf(&
j++.top]=top--;struct{ .top==-1)
return&&&TranslateExpress(char&&& ,则将其转换为数字并存入栈中*/
value=0,即出栈*/ .top-1];&;*'
i--;否则返回0*/&top&&;S)/*求栈的长度;e).data[S;&stack[S->,x2;&0;S; char&
S;}////////////////////&&&/*如果当前字符是右括号;& .top];& /*把栈顶指针置为0*/}int&/*将元素e进栈.top--;& .top]; .*/{if(S-&请输入一个算术表达式;&&&& :
x1=S;i=0; {
switch(ch)
case',char&a[i]&&&void&}&
case :\n& :
x1=S;GetTop(S;str[];/*将栈初始化为空栈只需要把栈顶指针top置为0*/{S-&
j++,即栈中元素个数;&e)&&
PushStack(&,并返回1表示成功;StackEmpty(SeqStack&
result=x2-x1; .top],判断栈是否为空*/{ ,判断栈是否为空*/&/*取栈顶元素.top--;
PopStack(&&TranslateExpress(char&&
j++,&)/*如果当前字符是数字字符,都注释了;PopStack(SeqStack&& ,&,则将栈中字符出栈*/
PopStack(&&& S;& printf(& /*将出栈元素赋值给e*/&top&e);&',栈顶指针的值就等于栈中元素的个数*/{ ,不能进栈;return ,很容易看懂的);&*e)& :
s1[];DataT)
value=10*value+a[i]-'
case'ComputeExpress(char&&中缀表达式为;;
x2=S.data[S,ch).top]= DataType&&&&=0)
/*在取栈顶元素之前;&&
/*修改栈顶指针*/&
ch=str[i];&&;S;&&SeqS}SeqS#include&后缀表达式为;&GetTop(S; .top++.top];
x2=S;&return&&&&&f;&stack[StackSize];
ch=str[i];1;&('float&return ,并将结果保存到栈中*/
switch(a[i])
case&*S)&-'.top==0)
/*判断栈顶指针top是否为0*/ .top--;
x2=S;0。//////////////////&);&'&;
S;&&&top=0;&&
/*当栈为空时;);s[]); ,b);& float ,则将栈中字符出栈;&*'.data[S;S);////////////////////////#include&
S,f),&&& /*当前字符入栈*/
S;/*判断栈是否为空;float&S; ,直到遇到左括号为止*/
PopStack(&
S;main(){ char&
result=x1+x2;'&('&
while(a[i];&}& gets(a);&
} }}void&InitStack(SeqStack& .data[S;('&
exp[j]=e;&&&& while(/*左括号入栈*/& printf(&& !\n&0,否则返回0;栈已经没有元素;
S;栈已满;& 。出栈成功返回1; ,&& int&GetTop(SeqStack&.top--;&&/*左括号出栈*/
printf(&&& .data[S,返回1.data[S;计算结果;表达式错误&&
S;;;&栈已经空;return .top]; float&ch&&&
/*先修改栈顶指针;'DataType& !S:
/*处理数字字符*/
while(ch&*S;&e;&&*e)/*出栈操作;1; .top--;&*'&)'&&e)&:
case'&&S;e)&&SeqS&if(S->.e)&
exp[j]=e;&&&&50typedef&&&) {
if(a[i].top=-1;
exp[j]='&& .top++;
printf(",不能出栈; ,j=0,并将其赋值给e;/'&*e=S,则对栈中的数据进行求值; ,&&&///////////////////#define&;&&j++,栈为空返回1;)
exp[j]=&StackSize&typedef&exp[])&
S,则将栈中的字符出栈;&s2[])。将栈顶元素出栈;
i++;&&9' !\n&&struct/*操作数栈的类型定义*/{ float&S;&&&
result=x2/x1; !=' InitStack(&.top--.data[S;&&&&&
/*元素e进栈*/ :%s\n&return&&&=0)
/*元素出栈之前; while(a[i];char&='&
result=x1*x2;&&S->,ch);&x1;}else{&=StackSize)
/*在元素进栈前.top]=&&&,&,b); .top]=a[i]&-'0'
i++; .top]=&
case'{&}OpSstack[S-& .data[S;e==' .c&
j++,判断是否栈已经满*/{ ,b[MaxSize];&&& .top--;0:%s\n&
S;S; ;否则返回0表示失败;result!StackEmpty(S)&,ch);='
case'.top++; .top++;&top++,以前编写的直接给你找来了;&0'S;return&S;
exp[j]=e。*/{&}int&&&&MaxSize& .top&)/*如果当前字符是*号或者是/号!='&
S; printf(&top];&/' .top--;)&。(C语言实现;S;
case& ,DataType .top.top--,元素进栈成功返回1;& .data[S;e; } exp[j]='\0' f=ComputeExpress(b);ComputeExpress(char&&*e=S-&&&
PushStack(&StackLength(SeqStack&
if(这个就是了
啊,可以给我一份txt或者word版的代码吗……谢
源代码,你下载吧。
你居然在我一个一个敲刚打完的时候给我发过来……我……泪奔啊……那个里面判断括号的时候有一段程序:while(GetTop(S,&e)&&e!='(')
PopStack(&S,&e);
}那个第一行里的“‘(’)”什么意思啊,是打错了吗
没有啊,判断括号啊!
你这不会是数据结构的课程设计吧,我做过完全符合要求的程序,我的文库地址为
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何将5 5 5 1四个数通过加减乘除四则运算使其结果为24每个数字现用一次
如何将5 5 5 1四个数通过加减乘除四则运算使其结果为24每个数字现用一次
09-08-06 &匿名提问 发布
span name=whlm id=whlmstruct Node // 定义一个双向链表用来存贮结果 {
// 数据*定义为字符的原因:要显示负号 Node * // 尾指针 Node * // 首指针 }; /*----------------------------WBR------------------------------WBR---------------- *函数名称: 大数加法 *函数过程:1 比较两个数那一个长 * 2 以长的作为循环次数 * 3 对应项相加 进位存贮直到下高位相加用 * 4 直到循环结束 * 5 !!!!!!没设计负数相加 *入口参数:numa,numb,result字符串 *出口参数:无 *编辑环境:winSP2 + VC2003 + C++ *-----------------------------WBR------------------------------WBR---------------*/ void addition(char *numa, char *numb,char *result) // 计算两大数之和 { char *pna = findend(numa); // 指向numa的一个指针。point numa pna 指向乘数的最低位, char *pnb = findend(numb); //指向numb的一个指针 //pnb 指向被乘数的最低位, int along=(int)strlen(numa); //标记数字a的长度; int blong=(int)strlen(numb); //标记数字b的长度; int times = 0; // 标致要计算多少次。 int carry=0,temp_ //存贮进位 和临时结果的 Node *head, // 用于存贮头指针 *pstart, // 用于存贮计算时的首指针 * //作于申请新结点 head = pstart =new N //初始化首结点和头结点。 pstart -& data = 0; pstart -& next = NULL; pstart -& ahead = NULL; if (abigerb(numa ,numb)&=1) times = (int)strlen(numa); //比较两个字符串长度,以大的作为循环次数 else { times = (int)strlen(numb); pna = findend(numb); //交换指针 pnb = findend(numa); along=(int)strlen(numb); //标记数字a的长度; blong=(int)strlen(numa); //标记数字b的长度; } while ((times-- && (times&=0))|| carry != 0) { if(!pstart-&next) //如果当前为空结点,则申请新结点 { pnew = new N pnew -& data = 0; pnew -& next = NULL; pnew -& ahead = pstart -& next = } else temp_result =(pstart-&data +(*pna-48)+(*pnb-48)+carry) ; //自身的值+新值+进位 作为当前的新值 pstart -& data = temp_result%10; //存贮个位 carry = temp_result/10; //存贮进位 pstart = pstart -& //结点移动 blong--; if(blong&0)pnb--; //指针移向被加数高位 else *pnb=48; //之后相减就变为了0不作任何运算; pna--; //加数指针移动, } pstart = //寻找链表的结尾点 while(pstart-&next != 0) { pstart-&data += 48; //!!&&&因为我们的输出是字符。所以再此加上48&&&& 逆顺输出 pstart = pstart-& } int tip = 0; //转为字符串用 pstart = pstart-& //找有效字 //cout&&&\n结果是 : &; while(pstart != 0) //输出正序的结果; { result[tip++] = pstart-& //cout& pstart = pstart-& } result[tip] = '\0'; pstart = //释放空间 while(pstart-&next != 0) { pnew = pstart-& pstart = }
} //比较两个数字符串大小的函数 //返回值说明:0是 2是along=blong int abigerb(char *numa, char *numb) //比较两个数最高位那一个大 { int along=(int)strlen(numa); //标记数字a的长度; int blong=(int)strlen(numb); //标记数字b的长度; char *pna = //指向数A的最高位, char *pnb = //指向数B的最高位, if (along&blong) return 1; if (along==blong) { while(*pna) //比较两个数那一个大 { if(*pna&*pnb)return 1; else if(*pna&*pnb)return 0 ; else if(*pna==*pnb){pna++;pnb++;} // } return 2; //这表明找到最后了还是全相等; } return 0 ; } /*----------------------------WBR------------------------------WBR---------------- *函数名称: 大数减法 *函数过程:1 比较两个数那一个长 * 2 以长的作为循环次数 * 3 如果两个数长度相等,从最高位开始比直到发现那一个数更大,WBR使大项减去小项 * 4 对应项相减 进位存贮直到下高位相加用 * 5 每一位对应项相减时,处理三种可能的情况,a=b, * 6 a=b时,则计算,11-12,111-112,要考虑借位 * 7 直到循环结束 *入口参数:numa,numb,result字符串 *出口参数:无 *-----------------------------WBR------------------------------WBR---------------*/ void subtract(char *numa, char *numb,char *result)//计算减 { char *pna = findend(numa);//指向numa的一个指针。WBRpoint numa pna 指向减数的最低位, char *pnb = findend(numb);//指向numb的一个指针 //pnb 指向被减数的最低位, int along=(int)strlen(numa);//WBR标记数字a的长度; int blong=(int)strlen(numb);//WBR标记数字b的长度; int times = 0; // 标记要计算多少次。 int carry=0; //存贮借位 int clear0=0; //消除结果最前面无用的'0' 13-5 = 08 的效果!! int isnegative=0; //用来加上被减数大于减数时补上最后一个负号 Node *head, // 用于存贮头指针 *pstart, // 用于存贮计算时的首指针 * //作于申请新结点 head = pstart =new N//初始化首结点和头结点。 pstart -& data = 0; pstart -& next = NULL; pstart -& ahead = NULL; if (abigerb(numa ,numb)) times = strlen(numa);//比较两个字符串长度,WBR以大的作为循环次数 else //交换位置以降低难度 { times = strlen(numb);//让数(字符串)长的减去数(WBR字符串)短的 pna = findend(numb);//交换指针 pnb = findend(numa); along=(int)strlen(numb);//WBR标记数字a的长度; blong=(int)strlen(numa);//WBR标记数字b的长度; isnegative=1;//标记最后要加上负号 } /span
请登录后再发表评论!
[5 - 1/5]x5=24
请登录后再发表评论!
76+78+88=242这是甲乙丙三人钱数的两倍 除以二得121是三人钱数之和 于是121-76=45是丙的钱数 121-78=43是甲的 121-88=33是乙的
请登录后再发表评论!有一种“二十四点”的游戏,其游戏规则是这样的,任取四个1到13之间的自然数,将这四个数(每个数用且只有一次)进行加减乘除四则运算,使其结果等于24.
例如:1、2、3、4,可做运算(1+2+3)×4=24,(注意,上述运算与4×(1+2+3)应视为相同方法)
现有四个有理数:3、4、-6、10,运用上述规则写出三种不同方式的运算,使其结果等于24.
解:(1);
提 示 请您之后查看试题解析 惊喜:新移动手机注册无广告查看试题解析、半价提问编写一个具有加减乘除四则运算的小计算器,需求能反复多次操作,当输入运算符_百度知道
编写一个具有加减乘除四则运算的小计算器,需求能反复多次操作,当输入运算符
提问者采纳
d=a+b;请输入两个数; scanf(&n& scanf(& switch(c) { case ' }
printf(& scanf(&*'请输入一种运算符,b,&a);#include<:
d=a/,d;%d&b; case 'n&;-' case ''; printf(&/ printf(&:\%d& case ':
d=a*b;break,d):
d=a-b;%d",&b);+');%c":\;void main(){):.h>,&c)
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}