極限的四則運(yùn)算法則是:

為豐澤等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及豐澤網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、豐澤網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
極限四則運(yùn)算法則的前喊埋悔提是兩個(gè)極限液仿存在,當(dāng)有一個(gè)極限本身是不存在的,則不能用四則運(yùn)算法則。設(shè)limf(x)和limg(x)存在,且令limf(x)=A,limg(x)=B。
四則運(yùn)算是指加法、減法、乘法和除法四種運(yùn)算。四則運(yùn)算是小學(xué)數(shù)學(xué)的重要內(nèi)容,也是學(xué)習(xí)其它各有關(guān)知識(shí)的基礎(chǔ)。
在極限都存在的情況下,和差積商的極限,等于極限的和差積商。用數(shù)學(xué)的話鄭正表達(dá)就是:
lim(A+B)limA+limB
lim(A-B)=limA-limB
limAB=limA×limB
lim(A/B)limA/limB
前提是以上各個(gè)極限都存在。
我曾用c編了個(gè)計(jì)算器,支持四則運(yùn)算,支持括扮歷號(hào)改變優(yōu)先級(jí),你看看吧:
#include stdio.h
#include string.h
#include stdlib.h
#include conio.h
#define Esc 27
#define Tab 9
void needle(char* s,char* carriage,int start)//needle意為“用針縫”
{
int size_carriage=(int)strlen(carriage);
int i,j;
for(j=0;jsize_carriage;j++)
{
for(i=(int)strlen(s);i=start;i--)
s[i+1]=s[i];
s[i+1]=carriage[j];
start=i+2;
}
}
double factorial(double d)//factorial意為“階乘”
{
return d==0?1:d*factorial(d-1);
}
void handle(char* carriage)//handle意為“處理”
{
void find_start(char*,int*);
char* save1,*save2,ch;
char op[111];
double d1,d2;
int start,i;
find_start(carriage,start);
ch=carriage;
d1=strtod(carriage,save1);//strtod是廳肢搜庫(kù)函數(shù),功能是將字符串carriage中出現(xiàn)的第一個(gè)浮點(diǎn)數(shù)轉(zhuǎn)化為double,并將剩余字符儲(chǔ)存饑州在save1中
if(ch=='!')
{
sprintf(op,"%g",factorial(d1));//springf是庫(kù)函數(shù),功能是將顯示在屏幕上的內(nèi)容儲(chǔ)存在op中
strcpy(carriage,op);
return;
}
for(i=0;i(int)strlen(save1);i++)//對(duì)于第一個(gè)不是'+'或'-'或數(shù)字的字符串,strtod無(wú)法作用。所以得去掉諸如"*22"字符串中的'*'
save1[i]=save1[i+1];
d2=strtod(save1,save2);
switch(ch)
{
case '*':sprintf(op,"%.32g",d1*d2);break;
case '/':sprintf(op,"%.32g",d1/d2);break;
case '+':sprintf(op,"%.16g",d1+d2);break;
case '-':sprintf(op,"%.16g",d1-d2);
}
strcpy(carriage,op);
}
void del(char* s,int start,int end)//delete意為“刪除”
{
int i,j;
int size=(int)strlen(s);
for(i=end;i=start;i--)
for(j=i;jsize;j++)
s[j]=s[j+1];
}
void copy(char* s,char* carriage,int start,int end)//copy意為“復(fù)制”
{
int i;
for(i=0;start=end;i++,start++)
carriage[i]=s;
carriage[i]='\0';
}
void scissor(char* s,char* carriage,int* start)//scissor意為“用剪刀剪”
{
int sta,end;
for(sta=*start-1;(s[sta]='0's[sta]='9')||s[sta]=='.';sta--);
if(sta!=0||s[*start]=='!') //處理式子是-2+3或-2!的特殊情況
sta++;
if(s[*start]=='!')//'!'是單目運(yùn)算符
end=*start;
else
{
for(end=*start+1;(s='0's='9')||s=='.';end++);
if((s[end-1]=='*'||s[end-1]=='/')(s=='+'||s=='-'))//處理式子是2*-2等的特殊情況
for(end++;(s='0's='9')||s=='.';end++);
end--;
}
copy(s,carriage,sta,end);
del(s,sta,end);
*start=sta;//記住等下針線函數(shù)needle要開(kāi)始縫的地方
}
void find_start(char* s,int* start)//find_start意為“找到操作符號(hào)開(kāi)始處”
{
int i;
int size=(int)strlen(s);
//由優(yōu)先級(jí)決定從上而下的順序
for(i=0;isize;i++)
if(s[i]=='!')
{
*start=i;
return;
}
for(i=0;isize;i++)
if(s[i]=='*'||s[i]=='/')
{
*start=i;
return;
}
if(s[0]=='+'||s[0]=='-')
{
for(*start=1;(s[*start]='0's[*start]='9')||s[*start]=='.';(*start)++);
return;
}
for(i=0;isize;i++)
if(s[i]=='+'||s[i]=='-')
{
*start=i;
return;
}
}
int judge(char* s)//judge意為“判斷”
{
int i;
int size=(int)strlen(s);
for(i=1;isize;i++)
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='!')
return 1;
return 0;
}
void count(char* s)//count意為“計(jì)算”
{
int start,i;
char carriage[555];//carriage意為“運(yùn)載體”
while(judge(s))//判斷式子是否還需要進(jìn)行運(yùn)算
{
for(i=0;i(int)strlen(s);i++)//此循環(huán)作用是將式子中出現(xiàn)的'--'替換為'+'
{
for(;s[i]!='-' i(int)strlen(s);i++);//循環(huán)結(jié)束
if(s[i+1]=='-')
{
del(s,i,i+1);
needle(s,"+",i);
}
}
find_start(s,start);//讓下標(biāo)start指向式子應(yīng)該最先開(kāi)始處理的運(yùn)算符
scissor(s,carriage,start);//用剪刀scissor將start指向的運(yùn)算符及相對(duì)應(yīng)的操作數(shù)剪下并儲(chǔ)存在運(yùn)載體carriage上
handle(carriage);//處理該運(yùn)載體,并將運(yùn)載體上運(yùn)載的式子的計(jì)算結(jié)果儲(chǔ)存在運(yùn)載體上
needle(s,carriage,start);//見(jiàn)函數(shù)simplify中的說(shuō)明
}
}
void simplify(char* s)//simplify意為“簡(jiǎn)化”,即將括號(hào)去除
{
char carriage[555];//carriage意為“運(yùn)載體”
int start,end,i;
int size=(int)strlen(s);
while(1)
{
for(i=0;s[i] != '(' isize;i++);//注意這里末尾是分號(hào)
if(i==size)
break;//說(shuō)明式子已不含括號(hào),簡(jiǎn)化完成
for(end=0;s != ')';end++);//使end下標(biāo)指向式子中第一個(gè)出現(xiàn)')'的地方
end--;
for(start=end;s != '(';start--);//尋找與上面一個(gè)')'配對(duì)的'('
start++;
copy(s,carriage,start,end);//將括號(hào)里的內(nèi)容復(fù)制給運(yùn)載體carriage
del(s,start-1,end+1);//刪除整個(gè)括號(hào)及其里面的內(nèi)容
count(carriage);//計(jì)算運(yùn)載體運(yùn)載的表達(dá)式,運(yùn)算結(jié)果儲(chǔ)存在運(yùn)載體上
needle(s,carriage,start-1);//將運(yùn)載體運(yùn)載過(guò)來(lái)的結(jié)果用針線needle縫在剛才刪除式子s括號(hào)及其內(nèi)容的地方
}
}
int main()
{
int i=0;
char s[555],ch;
puts(" 本程序不對(duì)用戶輸入數(shù)據(jù)進(jìn)行檢測(cè):");
puts(" 即用戶應(yīng)輸入規(guī)范的計(jì)算式,包括分母不能為0:");
puts(" 式子不能含有空格及其他非計(jì)算字符;");
puts(" 按任意一個(gè)鍵開(kāi)始,按回車(chē)鍵顯示運(yùn)算結(jié)果;");
while(1)
{
i++;
ch=getch();
if(Esc==ch)
break;
if(Tab==ch)
{
system("cls");//清除當(dāng)前屏幕
puts("顯示運(yùn)算結(jié)果后:按“Esc”鍵退出,按“Tab”鍵清除當(dāng)前屏幕");
}
if(i==1)
{
system("cls");
puts("顯示運(yùn)算結(jié)果后:按“Esc”鍵退出,按“Tab”鍵清除當(dāng)前屏幕");
}
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
gets(s);
simplify(s);
count(s);
puts(s);
//實(shí)驗(yàn)數(shù)據(jù):23.243*(5!-23.123/.133+(2!-13/13.23)*(2!-.235)-((4!-20)!/2!)-32*(3!+2.23/(2*3)!))
//其正確結(jié)果是:-5953.9401265774754346182917611489
}
puts("謝謝使用!\n有問(wèn)題可加q問(wèn)我:281754179");
getch();
return 0;
}
我記得學(xué)了數(shù)據(jù)結(jié)構(gòu)后我又重新用棧寫(xiě)了個(gè),容錯(cuò)能力會(huì)更好,上面的代碼可以改進(jìn)很多,也只是給你一個(gè)思路罷了
1.判斷四則運(yùn)算字符串的括號(hào)是否匹配,可以用以個(gè)棧來(lái)計(jì)算,開(kāi)始棧是空,從頭遍歷所有字符,找到'(',壓棧,找到')'彈出一個(gè)元素,遍歷完成以后如果棧是空表示正常,非空,或則中間出現(xiàn)問(wèn)題都表示括號(hào)不正常。
2.分解四則運(yùn)算中的所有元素,把所有分解的元素放在隊(duì)列中,遍歷整個(gè)字符串,有switch分支,如果是0-9的字符用一個(gè)字符串存儲(chǔ)并和前面的字符組合起來(lái),如果是'孝鏈+''-''*''/'就把前面存儲(chǔ)數(shù)字的字符串當(dāng)成一個(gè)元素放進(jìn)隊(duì)列,并把當(dāng)前運(yùn)算法符當(dāng)成一個(gè)元素拆迅也放進(jìn)隊(duì)列,遍歷完成以后所有的數(shù)據(jù)和運(yùn)算符都分開(kāi)了,比如234+456,會(huì)分解成234,+,456三個(gè)元素。
3.然后分解隊(duì)列,用兩個(gè)棧,一個(gè)存放所有元素用A表示,一個(gè)存放運(yùn)算符號(hào)用B表示(這個(gè)是臨時(shí)變量),從頭開(kāi)始遍歷整個(gè)隊(duì)列,如果是數(shù)據(jù)就把數(shù)據(jù)壓到A棧。如果元素是運(yùn)算符就分開(kāi)處理,如果是'(''+''-''*''/'')'處理方法都不一樣,詳細(xì)說(shuō)明太復(fù)雜,整體的思想就是把數(shù)據(jù)和運(yùn)算符的順序排列好(上面的元素排列以后變成234,456,+;可以參考后序排列)。
4.計(jì)算:依次彈出A中的元素,如果是數(shù)據(jù)把數(shù)據(jù)壓在棧C中,如果是運(yùn)算符,從C中彈出該運(yùn)算符需要的數(shù)據(jù),然后把計(jì)算結(jié)果再次壓進(jìn)棧C,當(dāng)A遍歷完以后,C頂元素就是計(jì)算結(jié)果。
整個(gè)大題思路:1.檢查,2.分巧御孫解,3.中序排列,4.后序排列,5.計(jì)算
網(wǎng)站標(biāo)題:c語(yǔ)言函數(shù)四則運(yùn)算法則 c語(yǔ)言的四則運(yùn)算法則
鏈接分享:http://chinadenli.net/article16/dshoidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容