急求一个计算器的源程序,要求:完整输入数学表达式(数字加减乘除括号)按=显示结果.JAVA或C++的都可以
C#的要不?
#include
#include
void main()
{
float a=0,b=0,c=0;
char d;
printf("输入数学表达式:
");
scanf("%f%c%f",&a,&d,&b);
switch(d)
{
case'+': c=a+b;break;
case'-': c=a-b;break;
case'x':
case'*': c=a*b;break;
case'/': if(b>0) c=a/b;break;
default:break;
}
printf("%g%c%g=%g
",a,d,b,c);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream> //输入输出流
#define N 11 //表达式长度,以字符数组实现,有效位19个
//由于不会把数字与操作符同时存入一个数组,所以有如下定义:
// -11 代表 (
// -12 代表 )
// -13 代表 +
// -14 代表 -
// -15 代表 *
// -16 代表 /
float a[N]={3,-13,-11,5,-15,4,-13,3,-14,6,-12};//表达式
int n=10; //表达式的实际长度,以全局变量形式
int p=0; //指向前括号,或表达式头部
int at=10; //指向后括号,或表达式尾部
int m=10; //扫描标志位
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//类定义
class calculate
{public:
void mov(int sign); //////运算后,或去括号后,表达式左移
void gover( ); //扫描函数扫扫描“()”,如果扫描到“()”就计算其中的值,
//没有扫到就直接进行计算表达式值
void jisuan(int &a,int &b); //主要的计算函数
};//类定义结束
//表达式为:3+(5*4+3-6)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//move 函数
void calculate::mov(int sign)
{
//出现了(1+5)这样的情况,要变成(6)**,注:**是原先)的后继元素
for (int j=0;sign+j<=n-2;j++)
a[sign+j]= a[sign+j+2]; //元素依次前移
n-=2; //表长减2
at-=2; //指向后括的标志随着)前移
}//move结束
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//jisuan函数
void calculate::jisuan(int &at,int &p)
{
for (int i=at;p!=i ;i--) //乘法,除法运算
{
if (a[i]==-15.000000)//出现乘法
{
a[i-1]=a[i-1]*a[i+1];
mov(i);
} //if over
if (a[i]==-16.000000) //出现除法
{a[i-1]=a[i-1]/a[i+1];
mov(i);
}// if over
} //for over //乘法,除法运算结束
for (int j=at;p!=j ;j--) //加减运算
{
if (a[j]==-13.000000) //出现加法
{
a[j-1]=a[j-1]+a[j+1];
mov(j);
}// if over
if (a[j]==-14.000000) //出现除法
{
a[j-1]=a[j-1]-a[j+1];
mov(j);
}//if over
}//for over加减运算结束
if (p!=0)
{if (p+2==at) //出现(5)的情况,就去括号
{
a[p]=a[p+1];
for (int j=0;p+j<=n-3;j++) //前移两个单位
a[p+j+1]= a[p+j+3]; //向前付值
n-=2; //表长减2
p=0; //去掉括号后指明针回到头尾
at=n; //去掉括号后,尾指
} // if (p+2==at) 结束
} //if (p!=0) 结束
m=n+1; //给M补1
}//jisuan完
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//扫描函数
void calculate::gover( )
{ //m用来指示下标变化,每次发生移位后,都要把新的n值付给m,即第次//移位后,要从尾开重新扫描
for ( ; m>=0; m-- )
{
if (a[m]==-12.000000 ) //出现“)”
{
at=m; //用at标记住“)”的下标
}
if (a[m]==-11.000000) //出现“(”
{p=m; //用p标记住“(”的下标,连续出现了(),计算()内的表达式值
jisuan(at,p) ;
}//if 完
}//扫描()结束
//如果没有()则直接调用jisuan( )
//把两个指针放回到表达式的首尾,
jisuan(at,p);
}//gover结束
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() //主调函数
{calculate example; //创建一个对象
example.gover( ); //对象调用gover
printf("%f",a[0]);//计算完毕,输出结果
return 0;
}
//改进目标:第一,实现用户输入运算表达式
// 第二,实现对表达式的正确性进行扫描
//第三,用Mfc把用户界面设计出来
//
//存在的问题:
//第一,参数传递中有很多不理解的东西
//第二,由于第一个原因p,at迫于无奈做成了全局的变量,因为全局变量过多
//第三,结构化程序不够高,没有把面向对象的思想最大的发挥出来
//针对以上三点,下一步努力改进
======================
还有一个:
# include <windows.h>
long WINAPI CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE phinst,
PSTR cmdline,int cmdshow)
{
//the application's name
static CHAR Appname[] = TEXT("HexCalc");
//---------------------------------------
HWND hwnd;
MSG msg;
// window class create
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = DLGWINDOWEXTRA;
wndclass.hInstance = hinst;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = Appname;
//---------------------------------------
//create and show window
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),
Appname,MB_ICONHAND);
return 0;
}
hwnd = CreateDialog(hinst,Appname,0,NULL);
ShowWindow(hwnd,cmdshow);
UpdateWindow(hwnd);
//------------------------------------------------
//send message
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//------------------------------------------------
return msg.wParam;
}
void ShowNumber(HWND hwnd,UINT iNumber)
{
char szBuffer[20];
wsprintf(szBuffer,TEXT("%X"),iNumber);
SetDlgItemText(hwnd,VK_ESCAPE,szBuffer);
}
DWORD Calclt(UINT iFirstNum,int iOperation,UINT iNum)
{
switch(iOperation)
{
case '=':
return iNum;
case '+':
return iFirstNum + iNum;
case '-':
return iFirstNum - iNum;
case '*':
return iFirstNum * iNum;
case '&':
return iFirstNum & iNum;
case '|':
return iFirstNum | iNum;
case '^':
return iFirstNum ^ iNum;
case '<':
return iFirstNum << iNum;
case '>':
return iFirstNum >> iNum;
case '/':
return iNum ? iFirstNum / iNum : MAXDWORD;
case '%':
return iNum ? iFirstNum % iNum : MAXDWORD;
default:
return 0;
}
}
long WINAPI CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static BOOL bNewNumber = TRUE;
static int iOperation = '=';
static UINT iNumber,iFirstNum;
HWND hButton;
//message list or procces
switch(message)
{
case WM_KEYDOWN:
if(wParam != VK_LEFT)
break;
wParam = VK_BACK;
case WM_CHAR:
if((wParam = (WPARAM)CharUpper((char*)wParam)) == VK_RETURN)
wParam = '=';
if(hButton = GetDlgItem(hwnd,wParam))
{
SendMessage(hButton,BM_SETSTATE,1,0);
Sleep(100);
SendMessage(hButton,BM_SETSTATE,0,0);
}
else
{
MessageBeep(0);
break;
}
case WM_COMMAND:
SetFocus(hwnd);
if(LOWORD(wParam) == VK_BACK)
ShowNumber(hwnd,iNumber /= 16);
else if(LOWORD(wParam) == VK_ESCAPE)
ShowNumber(hwnd,iNumber = 0);
else if(isxdigit(LOWORD(wParam)))
{
if(bNewNumber)
{
iFirstNum = iNumber;
iNumber = 0;
}
bNewNumber = FALSE;
if(iNumber <= MAXDWORD >> 4)
ShowNumber(hwnd,iNumber = 16 * iNumber + wParam -
(isdigit(wParam) ? '0' : 'A' - 10));
else
MessageBeep(0);
}
else
{
if(!bNewNumber)
ShowNumber(hwnd,iNumber = Calclt(iFirstNum,iOperation,iNumber));
bNewNumber = TRUE;
iOperation = LOWORD(wParam);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
//-----------------------------------------
return DefWindowProc(hwnd,message,wParam,lParam);
}
我写的,你看看咋样~~
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* @author 李政劭
* 一个简单地计算器
*/
public class Caculator extends JPanel{
private static final long serialVersionUID = 1L;
private JButton buttonDvision,buttonPlus,buttonMinus;
private JButton buttonD,buttonEqual,buttonNC,buttonMupl;
private JButton[] buttons = new JButton[10];
private JTextField field;
private String x = "0";
private String y = "0";
private String numbers = "";
private String symbol;
private double answer = 0;
private boolean exist = false;
public static void main(String args[]){
GUI();
}
public static void GUI(){
JFrame frame = new JFrame("caculator");
frame.setContentPane(new Caculator());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public Caculator(){
JPanel panelLeft = new JPanel();
JPanel panelRight = new JPanel();
JPanel panelUp = new JPanel();
for(int i = 9 ; i >= 0 ; i--){
int j = i;
if(i % 3 == 0 && i >= 3){
j = j - 2;
}
if((i + 2) % 3 == 0 ){
j =j + 2;
}
buttons[i] = new JButton("" + j);
panelLeft.add(buttons[i]);
}
panelLeft.setLayout(new GridLayout(4, 3));
panelRight.setLayout(new GridLayout(4, 1));
buttonD = new JButton(".");
buttonEqual = new JButton("=");
buttonPlus = new JButton("+");
buttonMinus = new JButton("-");
buttonMupl = new JButton("*");
buttonDvision = new JButton("%");
buttonNC = new JButton("NC");
field = new JTextField("0.0",14);
field.setVisible(true);
field.setEditable(false);
for(int i = 0 ; i < 10 ; i++){
buttons[i].addActionListener(new ListenerNumber());
}
buttonD.addActionListener(new ListenerD());
buttonEqual.addActionListener(new ListenerEqual());
buttonPlus.addActionListener(new ListenerSymbol());
buttonMinus.addActionListener(new ListenerSymbol());
buttonMupl.addActionListener(new ListenerSymbol());
buttonDvision.addActionListener(new ListenerSymbol());
buttonNC.addActionListener(new ListenerNC());
panelLeft.add(buttonD);
panelLeft.add(buttonEqual);
panelRight.add(buttonPlus);
panelRight.add(buttonMinus);
panelRight.add(buttonMupl);
panelRight.add(buttonDvision);
panelUp.add(field);
panelUp.add(buttonNC);
setLayout(new BorderLayout());
add(panelLeft,BorderLayout.CENTER);
add(panelRight,BorderLayout.EAST);
add(panelUp,BorderLayout.NORTH);
}
class ListenerNumber implements ActionListener {
public void actionPerformed(ActionEvent event) {
if(event.getSource() instanceof JButton){
JButton actButton = (JButton)(event.getSource());
numbers = numbers + actButton.getText();
field.setText(numbers);
}
}
}
class ListenerD implements ActionListener {
public void actionPerformed(ActionEvent event) {
if(exist == false && numbers != ""){
numbers+=".";
field.setText(numbers);
exist = true;
}
}
}
class ListenerSymbol implements ActionListener {
public void actionPerformed(ActionEvent event) {
if(event.getSource() instanceof JButton){
JButton actButton = (JButton)(event.getSource());
symbol = actButton.getText();
x = field.getText();
field.setText("");
numbers = "";
}
}
}
class ListenerEqual implements ActionListener {
public void actionPerformed(ActionEvent event) {
try{
double a;
double b;
y = field.getText();
a = Double.parseDouble(x);
b = Double.parseDouble(y);
if(symbol == "+"){
answer = a + b;
}else if(symbol == "-"){
answer = a - b;
}else if(symbol == "*"){
answer = a * b;
}else if(symbol == "%"){
answer = a / b;
}else{
answer = b;
}
field.setText("" + answer);
exist = false;
numbers = "";
answer = 0;
symbol = "";
x = "0";
y = "0";
}catch(NumberFormatException e ){
exist = false;
numbers = "";
field.setText("0.0");
answer = 0;
symbol = "";
x = "0";
y = "0";
}
}
}
class ListenerNC implements ActionListener {
public void actionPerformed(ActionEvent event) {
symbol = "";
x = "0";
y = "0";
exist = false;
numbers = "";
field.setText("0.0");
}
}
}
VB我就懂 C++恩。。忘记了 ~
Private Sub Command1_Click()
Text3 = Val(Text1.Text) - Val(Text2.Text)
End Sub
+ - * / 改个符号就好~
求VB.net程序源代码 绘图板、二十一点游戏、计算器、井字棋游戏、屏幕...
说明:1.共有4个文本框其,其中三个是填入或输出数据的(名称分别是:txta txtb txtc),剩下的那个是符号(txtd)2.共7个按钮,4个是符号按钮,一个计算,一个清零.这是我弄的程序”袖珍计算器”代码也是自己编写的,代码如下:通用声明Dim j As Integer '定义j为整型 Private Sub Text1_...
求一个VB编写的加减乘除四则运算的计算器程序代码 有空的高手帮忙下 27...
一、需求分析 1、 功能:疏如一行表达式,若表达式有误,则输出“表达式有错” ,否则计算出表达式的值并输出。 运算符包括加、减、乘、除、乘方、一目减。 括号均为小括号,但可以层层嵌套。操作数可以是浮点数,也包括有多个字母组成的变量。 2、 输入的形式为表达式,按回车结束。输入值的范围不超过浮点数的范围...
急求用VB编程一个计算器软件!!空白键设置为开根号的功能,如图!!求源...
sqr(a) or sin(a)
[求源程序]VB的简易计算器求下载
Dim a As Double Dim b As String Private Sub Command1_Click(Index As Integer)Text1.Text = Text1.Text & Command1(Index).Caption End Sub Private Sub Command2_Click()If InStr(Text1.Text, ".") = 0 Then Text1.Text = Text1.Text & Command2.Caption End If If Left(Text1....
求c++:源程序。前20项斐波那契数列 ,要求输出的时候每行输出五个
解答过程如图所示:工作原理:C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。
C语言编程问题:分数计算器
所有数据都可以用分数来表示,比如整数可以认为分母为1,这样,所有数据可以这样保存(数据结构为:)struct { int z;\/\/分子 int m;\/\/分母};我没写过具体的可以计算分数的计算器,下面是加减乘除和括号的计算器源代码,你参考一下,如果看懂了应该不难改,应该是数据结构课程里堆栈这一块的内...
求java源程序代码:输入两个数,输出最大值
public class Test{ private static Scanner scanner;public static void main(String[] args) { scanner = new Scanner(System.in);System.out.println("请输入a值:");int a = scanner.nextInt();System.out.println("请输入b的值:");int b = scanner.nextInt();if(a > b)System.out....
电子计算器 一、任务 要求自制一个计算器 。二、要求 1.基本要求 (1...
3. 可进行连续输入,例如:1.23+4.56*8.23\/234.8 ,但是运算结果为从左到右,这也是8位简易计算器的方式。4. 可进行错误判断,溢出、除零等错误将显示一个字符 E 。5. 由于键盘只有16个按键,安排如下:+---+ | 7 | 8 | 9 | + | | 4 | 5 | 6 | - | | 1 | 2 | 3 ...
怎么用VB做一个计算器
一、基础练习:编制一个数运算的数学小工具 利用VB编制一个用于数学计算的小程序——《数学小工具1》,主要有计算平方、立方、平方根、正弦、余弦、正切、余切、对数值等功能。程序界面如下:一、分析问题:本任务主要涉及数学运算,求平方、立方值、四次方可利用运算符计算.求平方根、正弦、余弦、正...
求一C++源程序
int n = 0;for(int i = 10000; i < 99999; i+=5){ if(i%9 == 0) n++;}
啜怎甘露: 只要+ - * /的是吧? #include<stdio.h> int main(void) { char ch; int a,b; printf("Enter formula:"); scanf("%d%c%d",&a,&ch,&b); switch(ch) { case '+':printf("%d+%d=%d\n",a,b,a+b);break; case '-':printf("%d-%d=%d\n",a,b,...
安西县18372127410: 求个用C语言编写的计算器源程序!!!急用!!!?
啜怎甘露: /* HELLO.C -- Hello, world */ #include "stdio.h" #include "conio.h" #include "math.h" main() { int num1,num2,action; int jia(int a,int b); int jian(int a,int b); int chen(int a,int b); float chu(int a,int b); int fac(int a); int chengfang(int a,int b); void ...
安西县18372127410: 急!!!求一个简单的C语言计算器程序..... - ?
啜怎甘露: //实现计算机功能的程序 a program which can work the functions as a computer.#include <stdio.h>//头文件#include <conio.h> void menu();//声明部分 void add(); void sub(); void mul(); void div(); void remain(); void add_n_to_m(); void factor(); ...
安西县18372127410: 急求急急急急急求,急求用C语言编写一个计算器程序,代码量为三百行左右!!!!!在线等 - ?
啜怎甘露: #include #include #define MAXOP 100#define NUMBER '0' //标识读入的是数字#define NAME 'n' //标识读入的是字符串(函数名或非法字符串)#define ALPHA 26 int getop(char []); void push (double); //压栈double pop(void); //出栈void clear(...
安西县18372127410: 我急需一个用c语言编写的简单的计算器程序代码300行左右 - ?
啜怎甘露: Input expression(number,+-*/()),return to exit:(2+3)*3+5/(3+2) Parsed result: 1 : ( 99 : 2 3 : + 99 : 3 2 : ) 5 : * 99 : 3 3 : + 99 : 5 6 : / 1 : ( 99 : 3 3 : + 99 : 2 2 : ) Evaled result:16.000000 Input expression(number,+-*/()),return to exit:这是程序运行结果,如能满足要求请私信
安西县18372127410: 谁有C语言编的计算器源程序?
啜怎甘露: 我自己写的 可以看一下, 不想用指针#include<stdio.h> #include<stdlib.h> #include<math.h>//求次幕 pow定义 int main() { while(1) //0为假.其他为真 { jsq(); //调用后面的菜单 max(); //接收定义的max函数 system("pause");//linux上没有...
安西县18372127410: 求一个C语言或VB的程序(编程:设计一个计算器) - ?
啜怎甘露: 计算器的c语言程序设计 一.功能概述:本程序能计算带二重括号的计算式的结果,如输入((3+2)*(3+2)+5)*((3+2)*(3+2)+5)*(5+5)= 将输出结果为9000 二.源程序: #include<stdio.h> int w; double B[4][40];shuru(char *pt) { int i=0,m; do{*(...
安西县18372127410: c语言编程…急求一个“计算器”代码 - ?
啜怎甘露: #include typedef float DataType; typedef struct { DataType *data; int max; int top; }Stack; void SetStack(Stack *S,int n) { S->data=(DataType*)malloc(n*sizeof(DataType)); if(S->data==NULL) { printf("overflow"); exit(1); } S->max=n; S->top=-1; } void...
安西县18372127410: C语言 要求编写一个简单计算器的程序 - ?
啜怎甘露: #include<stdio.h> void add(int a,int b,int c) {c=a+b;printf("%d+%d = %d",a,b,c);printf("\n"); } void minus(int a,int b,int c) {c=a-b;printf("%d-%d=%d",a,b,c);printf("\n"); } void multiplication(int a,int b,int c) {c=a*b;printf("%d*%d=%d...
安西县18372127410: 求大神给一个C语言的程序代码做简易计算器? - ?
啜怎甘露: 更好看的代码 #include <stdio.h> #include <math.h> double sum(double a, double b) { return a + b; } double minu(double a, double b) { return a - b; } double mult(double a, double b) { return a * b; } double div(double a, double b) { return a / b; } int mod...