當前位置:首頁 » 操作系統 » 科學計算器源碼

科學計算器源碼

發布時間: 2024-08-21 06:43:38

㈠ 用java編寫的科學計算器源代碼

以下是一個簡單的用Java編寫的科學計算器的源代碼示例:

java

import java.util.Scanner;

public class ScientificCalculator {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("Welcome to the Scientific Calculator!");

System.out.println("Enter 'add', 'subtract', 'multiply', 'divide', 'sin', 'cos', 'tan', 'log', 'exp', 'sqrt', or 'quit' to exit.");

while (true) {

System.out.print("Enter operation (e.g., add 2 3): ");

String operation = scanner.nextLine();

if (operation.equalsIgnoreCase("quit")) {

break;

}

String[] parts = operation.split(" ");

double num1 = Double.parseDouble(parts[1]);

double num2 = Double.parseDouble(parts[2]);

switch (parts[0].toLowerCase()) {

case "add":

System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));

break;

case "subtract":

System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));

break;

case "multiply":

System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));

break;

case "divide":

if (num2 != 0) {

System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));

} else {

System.out.println("Error: Division by zero is not allowed.");

}

break;

case "sin":

System.out.println("sin(" + num1 + ") = " + Math.sin(Math.toRadians(num1)));

break;

case "cos":

System.out.println("cos(" + num1 + ") = " + Math.cos(Math.toRadians(num1)));

break;

case "tan":

System.out.println("tan(" + num1 + ") = " + Math.tan(Math.toRadians(num1)));

break;

case "log":

System.out.println("log(" + num1 + ") = " + Math.log10(num1));

break;

case "exp":

System.out.println("exp(" + num1 + ") = " + Math.exp(num1));

break;

case "sqrt":

if (num1 >= 0) {

System.out.println("sqrt(" + num1 + ") = " + Math.sqrt(num1));

} else {

System.out.println("Error: Cannot calculate the square root of a negative number.");

}

break;

default:

System.out.println("Error: Invalid operation.");

break;

}

}

scanner.close();

System.out.println("Goodbye!");

}

}

這個科學計算器支持基本的四則運算(加、減、乘、除)以及一些科學運算(正弦、餘弦、正切、對數、指數和平方根)。用戶可以通過輸入相應的操作和兩個數字來執行計算。例如,輸入“add 2 3”將計算2加3的結果。

代碼首先導入了`Scanner`類,用於從用戶處獲取輸入。然後,在`main`方法中,創建了一個`Scanner`對象,用於讀取用戶的輸入。程序通過一個無限循環來持續接收用戶的輸入,直到用戶輸入“quit”為止。

在循環中,程序首先提示用戶輸入一個操作,然後讀取用戶的輸入並將其分割為多個部分。接著,程序將第二個和第三個部分轉換為`double`類型的數字,並根據第一個部分(即操作)執行相應的計算。

程序使用`switch`語句來根據用戶輸入的操作執行相應的計算。對於基本的四則運算,程序直接執行相應的計算並輸出結果。對於科學運算,程序使用了Java的`Math`類中的相應方法。例如,對於正弦運算,程序使用了`Math.sin`方法,並將角度轉換為弧度作為參數傳遞給它。

如果用戶輸入了無效的操作或無效

㈡ 如何用C語言編寫一個科學計算器

用棧 就可以辦到了。。。這個很詳細的, lz 隨便輸入一個表達式,中間的計算過程全部輸出了,lz試兩個 就知道怎麼回事了。 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4000;
typedef struct
{
char data[10];
int top;//頭地址

int base;//基地址

int length;//長度

}Stack;

void init(Stack *st)//初始化棧

{
st->base=0;
st->top=0;
st->length=0;
}

int isEmpty(Stack *st)
{
int n=0,top,base;
top =st->top;
base =st->base;
if(top==base)
{
return 1;
}
return n;
}

int isFull(Stack *st)
{
int n=0,top,base;
top =st->top;
if(top>=4000)
{
return 1;
}
return n;
}

char getTop(Stack *st)// 返回top值,不改變棧的結構

{
char n;
if(isEmpty(st))
{
printf("棧為空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出數據;

return n;
}

char pop(Stack *st)// 出棧,返回

{
char n;
if(isEmpty(st))
{
printf("棧為空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出數據;

st->top--;
st->length--;
st->data[positon]='\0';//消除數據

return n;
}

void push(char n,Stack *st)//入棧

{
int positon ;
if(isFull(st))
{
printf("棧滿\n");

}
else
{
positon= st->top;//獲取位置

st->data[positon]=n;//存入數據

st->top++;//改變位置

}

}

void show(Stack *m1)//輸出棧中的數據

{
int top,base;
top=m1->top;
base=m1->base;
while(top>base)
{
printf("%c,",m1->data[--top]);
}
printf("\n");
}

int isOperate(char temp)//是否是操作符

{
if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')
{
return 1;
}
return 0;
}

int isValue(char temp)//是否是數值

{
if(temp>='0'&&temp<='9')//

{
return 1;
}
else
{
return 0;
}
}

int isAvail(char temp)//是否有效字元

{
if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和數值的話,則它是非法的

{
return 1;
}
return 0;
}

int detect(char temp)//搜索矩陣位置

{
int i=0;
char oper[7]={'+','-','*','/','(',')','#'};
for(i=0;i<7;i++)
{
if(temp==oper[i])
{
return i;
}
}
}

char Priority(char temp,char optr)//判斷優先順序

{
/**//*
+ - * / ( ) #
1 2 3 4 5 6 7
+ 1 < < < < > > >
- 2 < < < < > > >
* 3 > > < < > > >
/ 4 > > < < > > >
( 5 > > > > > = 0
) 6 < < < < = 0 >
# 7 < < < < > 0 =
*/
int row ,col;
char priority[7][7]={/**//* + - * / ( ) # */
{'<','<','<','<','>','>','>'},

{'<','<','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','>','>','>','=','>'},

{'<','<','<','<','=','0','>'},

{'<','<','<','<','>','<','='},
};

row = detect(temp);//找出對應的矩陣下標;

col = detect(optr);
// printf("%d,%d",row,col);

//優先順序存儲在一個7x7的矩陣中,對應關繫上圖;

return priority[row][col];

}
char evaluate(int a,int b,char oper)
{
switch(oper)
{
case '+': return a+b+'0';
case '-': return a-b+'0';
case '*': return a*b+'0';
case '/': return a/b+'0';
default : return 0+'0';
}
}
int calculateExpress(char *express)//計算表達式

{
int result=0;
int a,b;
// char oper,result;

Stack OPTR,OPND;//OPTR存儲操作符,OPND操作數值

init(&OPTR);
init(&OPND);
push('#',&OPTR);//默認第一個位'#'

////////////////////-演算法-////////////////////////////

while(*express!='\0')
{
char temp;
temp= *(express);
printf("---------------------------------\n");
printf("當前的符號為%c\n",temp);
if(isAvail(temp))//是否是有效字元

{
if(isOperate(temp) )//輸入的是操作符

{
char oper,result;
char optr = getTop(&OPTR);//棧中top位的操作符

printf("棧頂操作符位:%c\n",optr);
char prior = Priority(temp,optr);//判斷優先順序

switch(prior)
{
case '>':
push(temp,&OPTR);
printf("將符號位%c入棧\n",temp);
express++;
break;
case '<':
//int a,b;

//char oper,result;

a=pop(&OPND)-'0';//存在棧中的都是char字元

b=pop(&OPND)-'0';
oper=pop(&OPTR);

result=evaluate(b,a,oper);//出棧一個操作符,計算結果

//printf("%d",result-'0');

push(result,&OPND);//結果入OPND

printf("%d%c%d結果為:%d\n",b,oper,a,result-'0');
break;

case '=':
//消除括弧

pop(&OPTR);
printf("消除括弧\n");
express++;
break;

}

}
if(isValue(temp))//輸入的是數值

{
push(temp,&OPND);//將數值位入棧;

express++;
printf("將數值%c壓入棧\n",temp);
//show(&OPND);

}
}
else //表達式中有非法字元

{
printf("表達式中有非法字元\n");
exit(-1);//退出程序

}

}
// show(&OPND);

// show(&OPTR);

return getTop(&OPND)-'0';
}

void inputExpress(char *express)//輸入表達式

{
int length=0;
printf("請輸入一個表達式:");
scanf("%s",express);
int len =strlen(express);
express[len]='#';//表達式最後一位默認為'#';

express[len+1]='\0';

}

void output(char *express,int result)//輸出表達式

{
int i=0;
printf("----------------------------------------\n表達式:");
while(express[i]!='#')
{
printf("%c",express[i]);
i++;
}
printf("=%d\n",result);

}

int main()
{

char express[100];//表達式

int result =0;

inputExpress(express);//輸入表達式

result = calculateExpress(express);//計算表達式;

output(express,result); //輸出表達式

//、、、、、、、、、、、、、測試優先順序。

/**//*
char m='7' ;
m=Priority('+','*');
printf("優先順序為%c",m);

int m=evaluate(5,6,'m');
printf("%d",m);
*/
return 0;
}

㈢ 求C++編寫的科學計算器源代碼

給你個地址,自己去下載。
★★[源碼庫]811款導彈-制導-彈道-慣性導航-GPS-雷達等模擬源代碼★★
http://bbs.81tech.com/read.php?tid=209564

其中有兩款計算機源代碼:
1. 科學計算器程序--VC++源代碼.rar (30 K)
2. 非常實用的一款計算器-VC++源代碼.rar (138 K)

熱點內容
手游伺服器怎麼找ip 發布:2024-11-25 08:23:10 瀏覽:751
c語言名次 發布:2024-11-25 08:04:22 瀏覽:55
新浪雲伺服器登錄 發布:2024-11-25 08:04:21 瀏覽:853
工控機伺服器電腦的區別 發布:2024-11-25 08:04:21 瀏覽:513
Python對比matlab 發布:2024-11-25 07:45:58 瀏覽:307
ovt機頂盒管理員密碼多少 發布:2024-11-25 07:45:58 瀏覽:377
win10與linux雙系統 發布:2024-11-25 07:40:05 瀏覽:658
網易我的世界4d皮膚伺服器 發布:2024-11-25 07:38:36 瀏覽:944
傳奇結義腳本 發布:2024-11-25 07:31:25 瀏覽:662
linuxpppd 發布:2024-11-25 07:29:54 瀏覽:294