導航:首頁 > 源碼編譯 > 多功能演算法器

多功能演算法器

發布時間:2022-06-18 03:34:25

『壹』 有人可以用C語言編個多功能計算器嗎

#include<iostream>
#include"Stack.h"
using namespace std;
/*@author sasa*/

Status Stack::InitStack(SqStack &S){ //初始化構造一個空棧
S.base = new SElemType[STACK_INIT_SIZE];
if(!S.base) exit(OVERFLOW); //存儲失敗
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}

Status Stack::GetTop(SqStack S,SElemType &e){ //返回棧頂元素
if(S.top == S.base) return ERROR;
e = *(S.top-1);
return OK;
}

Status Stack::Push(SqStack &S, SElemType e){ //插入元素e為新的棧頂元素
//棧滿,追加存儲空間
if(S.top - S.base >=S.stacksize){
S.base = new SElemType[S.stacksize + STACKINCREMENT];
if(!S.base) exit(OVERFLOW); //存儲分配失敗
S.top = S.base + S.stacksize;
S.stacksize +=STACKINCREMENT;
}
*S.top++ = e;
return OK;
}

Status Stack::Pop(SqStack &S,SElemType &e){ //刪除S的棧頂元素,用e返回
if(S.top == S.base) return ERROR;
e = * --S.top;
return OK;
}

Status Stack::StackEmpty(SqStack S){ //判斷是否空棧,空棧返回true
if(S.top==S.base)
return true;
else
return false;
}

我編的小型計算器程序,能計算普通+,-,*,/,和帶括弧的表達式,使用順序棧的數據結構,程序如下:
//////////////////////////////////////////////
#include "iostream"
#include "string"
using namespace std;

//---------------------------------- Stack.h --------------------------
//定義Stack類
const maxsize=20;
enum Error_code { success, overflow, underflow };

template <class T>
class Stack {
public:
Stack();
bool empty() const;
bool full() const;
int size() const;
void clear();
Error_code top(T &item) const;
Error_code pop();
Error_code push(const T &item);
private:
int count;
T entry[maxsize];
};

template <class T>
Stack<T>::Stack() {
count=0;
}

template <class T>
bool Stack<T>::empty () const {
return count==0;
}

template <class T>
bool Stack<T>::full () const {
return count==maxsize;
}

template <class T>
int Stack<T>::size() const {
return count;
}

template <class T>
void Stack<T>::clear() {
count=0;
}

template <class T>
Error_code Stack<T>::top (T &item) const {
if (empty()) return underflow;
item= entry[count-1];
return success;
}

template <class T>
Error_code Stack<T>::pop () {
if (empty()) return underflow;
count--;
return success;
}

template <class T>
Error_code Stack<T>::push (const T &item) {
if (full()) return overflow;
entry[count++]=item;
return success;
}
//------------------------------------------額外函數------------------

bool user_says_yes()
{
int c;
bool initial_response = true;
do { // Loop until an appropriate input is received.
if (initial_response)
cout << " (y,n)? " << flush;
else
cout << "Respond with either y or n: " << flush;
do { // Ignore white space.
c = cin.get();
} while (c == '\n' || c ==' ' || c == '\t');
initial_response = false;
} while (c != 'y' && c != 'Y' && c != 'n' && c != 'N');
return (c == 'y' || c == 'Y');
}

//---------------------------------- Main Program ----------------------

Stack<char> sign;
Stack<double> num;
int set; // 判斷程序中的異常,以便適時退出

void process(char c) { //計算兩個數的 + - * / 運算
int k=0;
double a,b;
sign.pop();
if (num.top(b)==success){ //判斷例外
num.pop();
if (num.top(a)==success) {
num.pop();
k=1;
}
}
if (k) {
switch (c) {
case '+': num.push(a+b); break;
case '-': num.push(a-b); break;
case '*': num.push(a*b); break;
case '/':
if (b==0) { //分母不能為0
set=4;
num.push(-1);
}
else
num.push(a/b);
break;
}
}
else {set=1;num.push(-1);}
}
//輸入表達式
void get_command(string &str) {
cout<<"\n請輸入要進行運算的表達式,包括\" +,-,*,/,=,(,)\"和數字,"<<endl
<<"例如:\" 3+2.5*(6-25/4)-8.32= \"."<<endl
<<"注意: 以數字開頭,等號結尾,中間括弧要匹配."<<endl;
cin>>str;
}
//求值 表達式
double do_command(const string &str) {
string s="";
double outcome=-1;
char c;
for (int i=0;str[i]!='\0';i++)
{
if (set!=0) break; //例外 則停止運行
while (1) { //分離數據與運算符
if (str[i]<='9' && str[i]>='0' || str[i]=='.') {
s+=str[i];
i++;
}
else {
if(s!="") {
if (num.push(atof(s.c_str ()))==overflow)
set=3;
s="";
}
break;
}
}
char ch= str[i];
switch (ch) { //處理運算的優先順序,並注意例外拋出
case '*':
case '/':
if (sign.top(c)==success)
if(c=='*'||c=='/') process(c);
if (sign.push(ch)==overflow)
set=3;
break;
case '+':
case '-':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
if (sign.push(ch)==overflow)
set=3;
break;
case '(':
if (sign.push(ch)==overflow)
set=3;
break;
case ')':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
sign.pop();
break;
case '=':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
break;
default: set=2;break;
}
}
if (num.size()==1 && sign.size()==0)
num.top(outcome);
else set=1;
if (set==0) cout<<"運算結果是:\n"<<endl; //出錯時的錯誤信息
else {
outcome=-1;
if (set==1) cout<<"\n您輸入的不匹配,有錯誤發生。Result lost!!"<<endl;
if (set==2) cout<<"\n您輸入了非法字元 , 請重新輸入,謝謝合作!"<<endl;
if (set==3) cout<<"\nStack is full, Lost result!!"<<endl;
if (set==4) cout<<"\n 分母為0,不能進行除法運算,出現溢出, Lost result!!"<<endl;
}
return outcome;
}
// 主程序main()
int main() {
do {
string str,s;
set=0;
get_command(str);
s=str;
if( str[0]=='-') str='0'+str; //處理表達式中的負號
for (int i=1;str[i]!='\0';i++) {
if (str[i]=='-' && str[i-1]=='(') {
str.insert (i,"0");
i++;
}
}
double out= do_command(str);
cout<<s<<out<<endl; //輸出結果
num.clear(); //清空棧
sign.clear();
cout<<"\n還要計算其它的嗎"<<flush;
}while (user_says_yes()); //允許多次執行運算
return 1;
}
/*保存為*.cpp文件*/

『貳』 求c程序編多功能計算器

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>

#define UNKNOWN_CHAR 2
#define DIVISOR_IS_ZERO 3
#define FALSE 0
#define TRUE 1

/*定義結構,主要用於GetString函數,可以不管它*/
typedef struct string
{char str;
struct string *next;
}string;

/*函數聲明*/

/*可以無限接受字元,輸入一個字元就給你個空間,返回一個字元串首地址 . */
/*這個函數可以看成普通的scanf()*/
char *GetString();
/*從字元串str第*rank個字元開始分析直到遇到 ')' or ']' or '}' or '\0' . */
/*有錯誤就把錯誤代號裝在*errorNum中,返回從中計算出的值*/
double GetASResultOf(char * str, int *rank, int *errorNum);
/*從字元串str第*rank個字元開始分析直到遇到不符合要求的字元,返回這個單位值.*/
/*如:str="12+sin(30)+[12+cos(60)]"
GetUnitageOf(str,0,errorNum)=12
GetUnitageOf(str,3,errorNum)=0.5
GetUnitageOf(str,11,errorNum)=12.5 */
double GetUnitageOf(char * str, int *rank, int *errorNum);
/*Are you ready? Let's go!----------------------------------*/
int main()
{
/*定義變數*/
double value;
int rank=0;
int errorNum=TRUE;
char * str;

/*接收字元*/
printf("counter v1.0\n");
printf("Made by PT\n");
printf("Date 2005-07-16\n\n");
printf("Please input your arithmetic:\n");
str=GetString();

/*調用處理函數,*/
value = GetASResultOf(str, &rank, &errorNum);

/*錯誤處理(沒完善)*/
if (errorNum==TRUE) printf("The result is: %lf\n",value, rank);
else if (errorNum==UNKNOWN_CHAR) printf("char error!\n");
else if (errorNum==DIVISOR_IS_ZERO) printf("Divisor could not be 0\n");
else printf("Other error\n");

getch();
return 0;
}

/*0==[=========>無限動態字元接受函數*/
char *GetString()
{
char *CharToString(string * sHead, int arraySize);
int arraySize=0;
string *s;
string *sHead;

s = (string *)malloc(sizeof(string));
sHead = s;
s->str = getchar();
arraySize++;

while((s->str)!='\n')
{
arraySize++;
s->next=(string *)malloc(sizeof(string));
s=s->next;
s->str=getchar();
}

return CharToString(sHead, arraySize);
}

char *CharToString(string * sHead, int arraySize)
{
char *strArray;
string *s=sHead;
int i=0;
strArray = (char*)malloc(arraySize*sizeof(char));

while(i<arraySize)
{
if (s->str=='=' || s->str=='\n') break;
if (s->str!=32) strArray[i++]=s->str;
s=s->next;
}
strArray[i]='\0';
return strArray;
}
/*0==[=========> 得到一個單位的值*/
double GetUnitageOf(char * str, int *rank, int *errorNum)
{
double CharToNum(char * str, int *rank);
double value;

/*如果是數字或負號就返回這個數字*/
if ((str[*rank]>=48 && str[*rank]<=57) || (str[*rank]=='-'))
{if (str[*rank]=='-') {(*rank)++;value = (-1)*GetUnitageOf(str, rank,errorNum);}
else {value = CharToNum(str, rank);}}

/*如果是括弧就用GetASResultOf取得括弧裡面的值並返回*/
else if (str[*rank]=='(' ||
str[*rank]=='[' ||
str[*rank]=='{' )
{(*rank)++;
value = GetASResultOf(str, rank, errorNum);}

/*返回sin(x)*/
else if (str[*rank]=='s' &&
str[(*rank)+1]=='i' &&
str[(*rank)+2]=='n')
{ (*rank)=(*rank)+3;
value = GetUnitageOf(str, rank, errorNum);
value = sin(value);
}

/*返回cos(x)*/
else if (str[*rank]=='c' &&
str[(*rank)+1]=='o' &&
str[(*rank)+2]=='s')
{*rank=*rank+3;
value = cos(GetUnitageOf(str, rank, errorNum));}

/*返回tan(x)*/
else if (str[*rank]=='t' &&
str[(*rank)+1]=='a' &&
str[(*rank)+2]=='n')
{*rank=*rank+3;
value = tan(GetUnitageOf(str, rank, errorNum));}
/*還可以加一些的,懶得加了*/

/*defult:處理錯誤*/
else {*errorNum = UNKNOWN_CHAR;value = 0;}

/*檢查errorNum*/
if (*errorNum==TRUE){return value;}
else return FALSE;
}

/*0==[=========>這個是把字元轉換成數字的函數,只在GetUnitageOf()里用*/
/*數字不能超過15個,其餘的將被抹去.*/
double CharToNum(char * str, int *rank)
{
int j=0;
double value=0;

while((str[*rank]>=48 && str[*rank]<=57) || (str[*rank]==46))
{
if (str[*rank]!='.')
{if ((j++)<=15) {value = value*10+(str[*rank]-48);}}
else
{if (j<=15)
{
for ((*rank)++,j=1; (str[*rank]>=48 && str[*rank]<=57 && str[*rank]!='\0'); (*rank)++, j++)
{value = value+(str[*rank]-48)*pow(0.1,j);}
return value;
}
}

(*rank)++;
}
return value;
}
/*0==[=========>這個函數寫的太復雜了,實在不好作解釋,反正是在GetPDResultOf
函數和GetUnitageOf函數之間轉啊轉的*/
/*簡單地說就是把str中第一個加減號前的式子算出來放在value變數中.再用函數
GetPDResultOf算出直到二個加減號前的式子然後與value相加或相減放在
變數value中,以此類推,直到遇上 ')' or ']' or '}' or '\0' */
double GetASResultOf(char * str, int *rank, int *errorNum)
{
double GetPDResultOf(char * str, int *rank, int *errorNum);
double value;
double dwIf_Zero;

/*遇上 ')' or ']' or '}' or '\0' 就返回*/
while (str[*rank]!=')' &&
str[*rank]!=']' &&
str[*rank]!='}' &&
str[*rank]!='\0')
{
if ((str[*rank]>=48 && str[*rank]<=57) ||
str[*rank]=='s' ||
str[*rank]=='c' ||
str[*rank]=='t')
{
if ((str[*rank-1]==')' ||
str[*rank-1]==']' ||
str[*rank-1]=='}') &&
*rank!=0)
{value = value*GetUnitageOf(str, rank, errorNum);}
else
{value = GetUnitageOf(str, rank, errorNum);}
}

else if (str[*rank]=='+')
{if (str[*rank-1]!= '(' &&
str[*rank-1]!= '[' &&
str[*rank-1]!= '{' && (*rank)!=0 )
{(*rank)++; value = value + GetPDResultOf(str, rank, errorNum);}
else {*errorNum=UNKNOWN_CHAR;return 0;}}

else if (str[*rank]=='-')
{if (str[*rank-1]!= '(' &&
str[*rank-1]!= '[' &&
str[*rank-1]!= '{' && (*rank)!=0 )
{(*rank)++; value = value - GetPDResultOf(str, rank, errorNum);}
else {value = GetUnitageOf(str, rank, errorNum);}}

else if (str[*rank]=='*')
{if (str[*rank-1]!= '(' &&
str[*rank-1]!= '[' &&
str[*rank-1]!= '{' && (*rank)!=0 )
{(*rank)++; value = value * GetUnitageOf(str, rank, errorNum);}
else {*errorNum=UNKNOWN_CHAR;return 0;}}

else if (str[*rank]=='/')
{if (str[*rank-1]!= '(' &&
str[*rank-1]!= '[' &&
str[*rank-1]!= '{' && (*rank)!=0 )
{(*rank)++;
dwIf_Zero=GetUnitageOf(str, rank, errorNum);
if (dwIf_Zero==0) {*errorNum=DIVISOR_IS_ZERO;return 0;}
else value = value /dwIf_Zero;}
else {*errorNum=UNKNOWN_CHAR;return 0;}}

else if (str[*rank]== '(' ||
str[*rank]== '[' ||
str[*rank]== '{' )
{if (str[*rank-1]!= '(' &&
str[*rank-1]!= '[' &&
str[*rank-1]!= '{' && (*rank)!=0 )
{(*rank)++; value = value*GetASResultOf(str, rank, errorNum);}
else {value = GetUnitageOf(str, rank, errorNum);}}

else {*errorNum=UNKNOWN_CHAR;return FALSE;}

if (*errorNum!=TRUE) return FALSE;
}
(*rank)++;
return value;
}

double GetPDResultOf(char * str, int *rank, int *errorNum)
{
double value;
double dwIf_Zero;
value = GetUnitageOf(str, rank, errorNum);
if (str[*rank]=='\0') return value;

while (str[*rank]!='+' &&
str[*rank]!='-' &&
str[*rank]!=')' &&
str[*rank]!=']' &&
str[*rank]!='}')
{
if (str[*rank]=='*')
value = value * GetUnitageOf(str, rank, errorNum);
else if (str[*rank]=='/')
{
dwIf_Zero= GetUnitageOf(str, rank, errorNum);
if (dwIf_Zero=0) {*errorNum=DIVISOR_IS_ZERO;return 0;}
else value = value /dwIf_Zero;
}
else if (str[*rank]=='(' ||
str[*rank]=='[' ||
str[*rank]=='{')
{(*rank)++;
value = value * GetUnitageOf(str, rank, errorNum);}
else {*errorNum=UNKNOWN_CHAR;return FALSE;}
if (*errorNum!=TRUE) return FALSE;
}

return value;
}

『叄』 多功能計算器有哪些類型

多功能計算器有
函數機:比如卡西歐FX82,FX991等,能以自然書寫的顯示方式計算多種函數
圖形機:如卡西歐FX10,9860等,可以計算各種函數並顯示函數圖像
程序機:可以用特定語言編輯保存計算程序的組合,多數圖形機也帶程序功能
主要的計算器品牌有:卡西歐,德州儀器(TI),夏普等

『肆』 c語言編寫「多功能計算器」的代碼

#include<stdio.h>
#include<windows.h>
#include<math.h>
double EPS=10E-6;
double sum(double a,double b)
{
return a+b;
}
double sub(double a,double b)
{
return a-b;
}
double mul(double a,double b)
{
return a*b;
}
double divv(double a,double b)
{
return a/b;
}
int rem(int a , int b)
{
return a%b;
}
int addnumber(int c,int d)
{
int sum=0;
for(int i=c;i<=d;i++)
{
sum+=i;
}
return sum;
}
int factor(int n)
{
int f=1;
for(int i=1;i<=n;i++)
{
f*=i;
}
return f;
}

void displaymenu()
{
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \n");
printf("*############高級計算器############* \n");
printf("************************************ \n");
printf("* ①加法運算 * \n");
printf("* ②減法運算 * \n");
printf("* ③乘法運算 * \n");
printf("* ④除法運算 * \n");
printf("* ⑤取余運算 * \n");
printf("* ⑥累加運算 * \n");
printf("* ⑦階乘運算 * \n");
printf("* ⊙結束運算 * \n");
printf("************************************ \n");
printf("************************************ \n");
}
void main()
{
int c,d; /*用於做四則運算的兩個數值的說明*/
double a,b; /*用來做累加函數的兩個參數值的說明*/
int intresult;
double result; /*用於保存表單運算中函數的返回值*/
int choice;
displaymenu();/*保存用戶選擇項目菜單項*/
while(1)
{
printf("請選擇你所進行運算項目的符號:");
scanf("%d",&choice);
switch(choice)
{
case 1: /*加法計算*/
printf("請輸入兩個數字:");
scanf("%lf%lf",&a,&b);
result=sum(a,b);
printf("%lf+%lf的計算結果是:%lf\n",a,b,result);
break;
case 2: /*減法計算*/
printf("請輸入兩個數字:");
scanf("%lf%lf",&a,&b);
result=sub(a,b);
printf("%lf-%lf的計算結果是:%lf\n",a,b,result);
break;
case 3: /*乘法計算*/
printf("請輸入兩個數字:");
scanf("%lf%lf",&a,&b);
result=mul(a,b);
printf("%lf*%lf的計算結果是:%lf\n",a,b,result);
break;
case 4: /*除法計算*/
{
scanf("%lf%lf",&a,&b);
if(b-0.0<EPS) printf("數字錯誤\n");
else
{
printf("請輸入兩個數字:");
result=divv(a,b);
printf("%lf/%lf的計算結果是:%lf\n",a,b,result);
}
break;
}
case 5: /*取余計算*/
printf("請輸入兩個數字:");
scanf("%d%d",&c,&d);
result=rem(c,d);
printf("%d % %d的計算結果是:%d\n",c,d,result);
break;
case 6: /*累加計算*/
printf("請輸入兩個整數");
scanf("%d%d",&c,&d);
intresult=addnumber(c,d);
printf("%d-%d的累加計算結果是:%d\n",c,d,intresult);
break;
case 7: //階乘計算
{
printf("請輸入一個大於0小於10的整數字");
scanf("%d",&c);
if(c<0||c>10)
{
printf("請輸入一個大於0小於10的整數字,數據錯誤。\n");
break;
}
intresult=factor(c);
printf("%d的階乘計算結果是:%d\n",c,intresult);
break;
}
case 0:
printf("謝謝使用。歡迎下次再用。\n");
return ;
default:
printf("選擇錯誤,程序結束\n");
break;
}

}
}

『伍』 最多功能的計算器中文版電腦版下載

開始菜單裡面的附件 里的計算器就能實現

『陸』 多功能計算器有哪些功能

開根,解三角。對數等數學計算有關

『柒』 卡西歐多功能計算器fx-3800p的RAD DEG GRA什麼意思

顯示上出現[DEG]、[RAD]、[GRA],代表計算器角度單位被設定為「度」、「弧度」、「梯度(一整圓為400單位)」
較早的型號使用[DRG]鍵切換角度單位,如fx-80、fx-100型計算器,直接按[DRG]鍵切換角度單位設置;其後的函數型計算器在按鍵上方有一列表,說明按[MODE]鍵後再按其他鍵後對計算器的一些設置,如按[MODE]+[4],顯示屏出現黑底的[D],表示計算器設定角度單位為「度」;按[MODE]+[5],顯示屏顯示黑底白字[R],表示計算器角度被設定為「弧度」;這個設定隻影響有角度參加運算的計算,此時如果顯示[RAD],角度輸入或運算結果得到的角度是以弧度為單位,不是以度為單位;對一般數字運算沒有影響,也無法消除。
至於 SD ,則表示計算器被設定為可以進行統計功能標准偏差值運算,使用[MODE]+[0]鍵,使計算器設定為[comp]即普通狀態,則統計運算功能取消, SD 顯示消失。
早期計算器上有[SD]鍵,按此鍵取消SD功能。

『捌』 我想下載一個多功能計算器 '

先按1.03,然後按X^Y,再按20,最後按=就行了

『玖』 多功能計算器如何開根號

先按你要開幾次方的方數,按shift鍵,按朝下的這個符號 「<」我打不出來,按被開方數,按=鍵出結果。
或逆向思維,用答案選項去試,乘一次原數是平方,再乘原數是三次方,再乘原數是四次方,以此類推。例:3.731531開9次方等於1.157558654 1.1576*1.1576*1.1576……連乘,每乘一次多一次方,乘到9次方得3.73153101143,但書上總給四捨五入,所以數會有一丁點的出入,但不影響你選擇正確答案。

『拾』 求一款多功能計算器軟體。

matlab什麼都能算

閱讀全文

與多功能演算法器相關的資料

熱點內容
海聊app怎麼玩 瀏覽:207
單文件夾是什麼 瀏覽:234
程序員生財案例 瀏覽:354
男兵接上級命令電視劇全集 瀏覽:5
什麼是系統級編譯 瀏覽:336
學習php最好的入門書籍 瀏覽:592
當上程序員的八年是怎麼過來的 瀏覽:104
android兩個焦點 瀏覽:875
如何在核桃編程app報名 瀏覽:642
linux基礎命令教程豪華版chm 瀏覽:147
失物招領代碼python 瀏覽:247
基於c51單片機的設計 瀏覽:350
伺服器升級什麼鬼 瀏覽:912
微信做照片小程序源碼 瀏覽:561
linuxsftp連接命令 瀏覽:190
string函數php 瀏覽:342
輸入接收郵件伺服器地址 瀏覽:807
程序員炒股的段子 瀏覽:208
php執行流程 瀏覽:869
黑馬程序員c語言第4講 瀏覽:422