#include stdio.h
創(chuàng)新互聯(lián)服務(wù)項目包括站前網(wǎng)站建設(shè)、站前網(wǎng)站制作、站前網(wǎng)頁制作以及站前網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,站前網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到站前省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
struct s_node
{
int data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;
link push(link stack,int value)
{
link newnode;
newnode=(link) malloc(sizeof(s_list));
if(!newnode)
{
printf("\nMemory allocation failure!!!");
return NULL;
}
newnode-data=value;
newnode-next=stack;
stack=newnode;
return stack;
}
link pop(link stack,int *value)
{
link top;
if(stack !=NULL)
{
top=stack;
stack=stack-next;
*value=top-data;
free(top);
return stack;
}
else
*value=-1;
}
int empty(link stack)
{
if(stack==NULL)
return 1;
else
return 0;
}
int is_operator(char operator)
{
switch (operator)
{
case '+': case '-': case '*': case '/': return 1;
default:return 0;
}
}
int priority(char operator)
{
switch(operator)
{
case '+': case '-' : return 1;
case '*': case '/' : return 2;
default: return 0;
}
}
int two_result(int operator,int operand1,int operand2)
{
switch(operator)
{
case '+':return(operand2+operand1);
case '-':return(operand2-operand1);
case '*':return(operand2*operand1);
case '/':return(operand2/operand1);
}
}
void main()
{
char expression[50];
int position=0;
int op=0;
int operand1=0;
int operand2=0;
int evaluate=0;
printf("\nPlease input the inorder expression:");
gets(expression);
while(expression[position]!='\0'expression[position]!='\n')
{
if(is_operator(expression[position]))
{
if(!empty(operator))
while(priority(expression[position])= priority(operator-data)
!empty(operator))
{
operand=pop(operand,operand1);
operand=pop(operand,operand2);
operator=pop(operator,op);
operand=push(operand,two_result(op,operand1,operand2));
}
operator=push(operator,expression[position]);
}
else
operand=push(operand,expression[position]-48);
position++;
}
while(!empty(operator))
{
operator=pop(operator,op);
operand=pop(operand,operand1);
operand=pop(operand,operand2);
operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate);
getch();
}
我們平時進(jìn)行數(shù)學(xué)運(yùn)算都是用計算器完成的,那么如何用C語言編寫一個計算器呢?下面我給大家分享一下。
工具/材料
Dev C++
01
首先我們需要在Dev C++軟件中創(chuàng)建一個C語言項目,項目類型選擇控制臺程序,如下圖所示
02
接下來我們在項目下面新建C語言文件,如下圖所示
03
然后我們在C文件中寫入計算器邏輯代碼,主要是讓用戶輸入計算方式,然后程序自動計算,如下圖所示
04
接下來我們點擊運(yùn)行菜單,選擇下拉菜單中的運(yùn)行選項,如下圖所示
05
最后在彈出的界面中我們輸入要計算的公式,程序就會自動計算,如下圖所示
用C語言編寫一個簡單的可以進(jìn)行加減乘除運(yùn)算混合運(yùn)算的計算器的方法:
1、打開visual C++ 6.0-文件-新建-文件-C++ Source File;
2、輸入預(yù)處理命令和主函數(shù):
#includestdio.h /*函數(shù)頭:輸入輸出頭文件*/
void main()/*空類型:主函數(shù)*/
3、定義變量:
int a,b,d; /*定義變量的數(shù)據(jù)類型為整型*/
char c;/*定義變量的數(shù)據(jù)類型為字符型*/
4、輸入四則運(yùn)算式:
printf("輸入如“3*4”或“5+2”的四則運(yùn)算式:");/*輸出文字提示*/
scanf("%d%c%d",a,c,b);/*輸入四則運(yùn)算式*/
5、判斷運(yùn)算符號:
switch(c) /*判斷運(yùn)算符號*/
{
case'+':d=a+b;break;/*進(jìn)行加法運(yùn)算*/
case'-':d=a-b;break;/*進(jìn)行減法運(yùn)算*/
case'*':d=a*b;break;/*進(jìn)行乘法運(yùn)算*/
case'/':d=a/b;break; /*進(jìn)行除法運(yùn)算*/
}
6、輸出結(jié)果:
printf("%d%c%d=%d\n",a,c,b,d);/*輸出結(jié)果*/
完整的源代碼:
#includestdio.h /*函數(shù)頭:輸入輸出頭文件*/
void main()/*空類型:主函數(shù)*/
{
int a,b,d;/*定義變量的數(shù)據(jù)類型為整型*/
char c;/*定義變量的數(shù)據(jù)類型為字符型*/
printf("輸入如“3*4”或“5+2”的四則運(yùn)算式:");/*輸出文字提示*/
scanf("%d%c%d",a,c,b);/*輸入四則運(yùn)算式*/
switch(c)/*判斷運(yùn)算符號*/
{
case'+':d=a+b;break;/*進(jìn)行加法運(yùn)算*/
case'-':d=a-b;break;/*進(jìn)行減法運(yùn)算*/
case'*':d=a*b;break;/*進(jìn)行乘法運(yùn)算*/
case'/':d=a/b;break;/*進(jìn)行除法運(yùn)算*/
}
printf("%d%c%d=%d\n",a,c,b,d);/*輸出結(jié)果*/
}
#include
void
main()
{
float
a,b;
char
d;
do
{
printf("Please
enter
the
two
Numbers,
separated
by
Spaces:\n");
scanf("%f
%f",a,b);
printf("Please
select
operation
way:
(-,*,/,^,s,!)\n");
scanf("%s",d);
switch(d)
{
case'+':
printf("a+b=%f\n",a+b);
break;
case'-':
printf("a-b=%f\n",a-b);
break;
case'*':
printf("a*b=%f\n",a*b);
break;
case'/':
printf("a/b=%f\n",a/b);
break;
default:
printf("input
error\n");
}
printf("Do
you
want
to
continue(Y/N
or
y/n)");
fflush(stdin);
}
while(toupper(getchar())=='Y');
}
可以運(yùn)行,不知道滿不滿足你的要求,你自己可以試試
1
首先,得從網(wǎng)上下載并安裝c++,然后從桌面找到并打開它。
2
四則運(yùn)算+ - * / 可以用if語句或switch語句實現(xiàn)。兩者均用于判斷。
if語句運(yùn)用較廣,switch語句運(yùn)用較為簡單方便。
END
用if語句
1
下面先介紹用if語句實現(xiàn)四則運(yùn)算的方法。
2
#include "stdafx.h"
int main(int argc, char* argv[])
{
float x;
float y;
char r;
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
if(r=='+') printf("x+y=%f\n",x+y);
else if(r=='-') printf("x-y=%f\n",x-y);
else if(r=='*') printf("x*y=%f\n",x*y);
else if(r=='/') printf("x/y=%f\n",x/y);
else ?printf("input error\n");
return 0;
}
3
輸入完畢,進(jìn)行【全部重建】,然后就可以運(yùn)行了。
在運(yùn)行框輸入你想要進(jìn)行的運(yùn)算,例如想計算 2*5 的值,你只需在運(yùn)行框直接輸入 2*5 ,然后按【enter】鍵,結(jié)果就出來啦。
4
因為每次進(jìn)行計算都要重新運(yùn)行,很麻煩,我們可以加入循環(huán)語句。
5
#include "stdafx.h"
int main(int argc, char* argv[])
{
float x;
float y;
char r;
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
for(;;)
{
if(r=='+') printf("x+y=%f\n",x+y);
else if(r=='-') printf("x-y=%f\n",x-y);
else if(r=='*') printf("x*y=%f\n",x*y);
else if(r=='/') printf("x/y=%f\n",x/y);
else ?printf("input error\n");
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
}
return 0;
}
6
加入循環(huán)之后,我們不用退出再次運(yùn)行,我們可以在運(yùn)行框連續(xù)輸入,非常方便。
END
用switch語句
1
這次是使用switch語句,可達(dá)到同樣的目的。
2
#include "stdafx.h"
int main(int argc, char* argv[])
{
float x;
float y;
char r;
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
switch(r)
{
case '+': printf("x+y=%f\n",x+y);break;
case '-': printf("x-y=%f\n",x-y);break;
case '*': printf("x*y=%f\n",x*y);break;
case '/': printf("x/y=%f\n",x/y);break;
default:printf("input error\n");
}
return 0;
}
3
輸入表達(dá)式完畢后,進(jìn)行【全部重建】,然后就可以運(yùn)行了。
在運(yùn)行框輸入你想要進(jìn)行的運(yùn)算,例如想計算 8/7 的值,你只需在運(yùn)行框直接輸入 8/7 ,然后按【enter】鍵,結(jié)果就出來啦。
4
switch語句也可如if語句一般,加入循環(huán),可進(jìn)行連續(xù)輸入。
5
#include "stdafx.h"
int main(int argc, char* argv[])
{
float x;
float y;
char r;
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
for(;;)
{
switch(r)
{
case '+': printf("x+y=%f\n",x+y);break;
case '-': printf("x-y=%f\n",x-y);break;
case '*': printf("x*y=%f\n",x*y);break;
case '/': printf("x/y=%f\n",x/y);break;
default:printf("input error\n");
}
printf("請輸入如 1+2 的格式\n");
scanf("%f%c%f",x,r,y);
}
return 0;
}
END
C語言編寫計算器
我們可以用printf和scanf函數(shù)輸出結(jié)果和獲取用戶的輸入。需要stdio.h頭文件。scanf函數(shù)在讀取數(shù)據(jù)的時候不需要再一行上輸入每個數(shù)據(jù),只要數(shù)據(jù)和數(shù)據(jù)之間留出空白就可以了。先聲明兩個變量number1和number2,operation變量用來存儲運(yùn)算符。用scanf函數(shù)獲取這兩個數(shù)字和運(yùn)算符。分別用%lf %c %lf
請點擊輸入圖片描述
然后需要檢測輸入是否是正確的,檢查是不是+ - * / %,在這里要用到switch函數(shù),用來看operation變量是否別傳入了正確的值。
switch(operation)
{
case '+':
printf........
}
具體的運(yùn)算我們只需要再case之后的printf語句中設(shè)定和輸出就可以了。
請點擊輸入圖片描述
由于除法和取余運(yùn)算比較特殊,我們單獨(dú)說明。除法的除數(shù)不能為零,所以除法需要檢測除數(shù)是否為零,只需要用if else語句就可以,if(number2 == ),取余運(yùn)算符對于浮點數(shù)沒有意義,所以將浮點數(shù)轉(zhuǎn)換為long類型,強(qiáng)制類型轉(zhuǎn)換,if((long)number2 == 0) ? else ,這樣整個代碼就完成了。
請點擊輸入圖片描述
簡單計算器的編輯并不難,但是要注意一些細(xì)節(jié),除法的處理要注意除數(shù)不能為零的情況,而且取模運(yùn)算要將兩個操作數(shù)轉(zhuǎn)化為整型,當(dāng)然,作為真正的計算器,只實現(xiàn)這些功能是不夠的,還需要更多的功能,不過有一個好的開始也不錯。
下面我們就運(yùn)行一下這個程序吧。25*13的值和8%5的值。可以看到是我們期望的值。
請點擊輸入圖片描述
請點擊輸入圖片描述
當(dāng)前文章:c語言用函數(shù)制作計算器,如何用c語言制作計算器
本文路徑:http://vcdvsql.cn/article6/hsppog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、建站公司、域名注冊、搜索引擎優(yōu)化、虛擬主機(jī)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)