c語言計算器代碼
Ⅰ 用c語言編寫計算器程序
http://www.softhouse.com.cn/html/200509/2005091911241600011153.html這個頁面可能對你有幫助。
Ⅱ 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;
}
}
}
Ⅲ 用C語言編計算器程序
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include "math.h"
//expression evaluate
#define iMUL 0
#define iDIV 1
#define iADD 2
#define iSUB 3
#define iCap 4
//#define LtKH 5
//#define RtKH 6
#define MaxSize 100
void iPush(float);
float iPop();
float StaOperand[MaxSize];
int iTop=-1;
//
char Srcexp[MaxSize];
char Capaexp[MaxSize];
char RevPolishexp[MaxSize];
float NumCapaTab[26];
char validexp[]="*/+-()";
char NumSets[]="0123456789";
char StackSymb[MaxSize];
int operands;
//
void NumsToCapas(char [], int , char [], float []);
int CheckExpress(char);
int PriorChar(char,char);
int GetOperator(char [], char);
void counterPolishexp(char INexp[], int slen, char Outexp[]);
float CalcRevPolishexp(char [], float [], char [], int);
void main()
{
int ilen;
float iResult=0.0;
printf("enter a valid number string:\n");
memset(StackSymb,0,MaxSize);
memset(NumCapaTab,0,26); //A--NO.1, B--NO.2, etc.
gets(Srcexp);
ilen=strlen(Srcexp);
//printf("source expression:%s\n",Srcexp);
NumsToCapas(Srcexp,ilen,Capaexp,NumCapaTab);
printf("Numbers listed as follows:\n");
int i;
for (i=0; i<operands; ++i)
printf("%.2f ",NumCapaTab[i]);
printf("\nCapaexp listed in the following:\n");
printf("%s\n",Capaexp);
ilen=strlen(Capaexp);
counterPolishexp(Capaexp,ilen,RevPolishexp);
printf("RevPolishexp:\n%s\n",RevPolishexp);
ilen=strlen(RevPolishexp);
iResult=CalcRevPolishexp(validexp, NumCapaTab, RevPolishexp,ilen);
printf("\ncounterPolish expression:\n%s%.6f\n",Srcexp,iResult);
}
void iPush(float value)
{
if(iTop<MaxSize) StaOperand[++iTop]=value;
}
float iPop()
{
if(iTop>-1)
return StaOperand[iTop--];
return -1.0;
}
void NumsToCapas(char Srcexp[], int slen, char Capaexp[], float NumCapaTab[])
{
char ch;
int i, j, k, flg=0;
int sign;
float val=0.0,power=10.0;
i=0; j=0; k=0;
while (i<slen)
{
ch=Srcexp[i];
if (i==0)
{
sign=(ch=='-')?-1:1;
if(ch=='+'||ch=='-')
{
ch=Srcexp[++i];
flg=1;
}
}
if (isdigit(ch))
{
val=ch-'0';
while (isdigit(ch=Srcexp[++i]))
{
val=val*10.0+ch-'0';
}
if (ch=='.')
{
while(isdigit(ch=Srcexp[++i]))
{
val=val+(ch-'0')/power;
power*=10;
}
} //end if
if(flg)
{
val*=sign;
flg=0;
}
} //end if
//write Capaexp array
// write NO.j to array
if(val)
{
Capaexp[k++]='A'+j;
Capaexp[k++]=ch;
NumCapaTab[j++]=val; //A--0, B--1,and C, etc.
}
else
{
Capaexp[k++]=ch;
}
val=0.0;
power=10.0;
//
i++;
}
Capaexp[k]='\0';
operands=j;
}
float CalcRevPolishexp(char validexp[], float NumCapaTab[], char RevPolishexp[], int slen)
{
float sval=0.0, op1,op2;
int i, rt;
char ch;
//recursive stack
i=0;
while((ch=RevPolishexp[i]) && i<slen)
{
switch(rt=GetOperator(validexp, ch))
{
case iMUL: op2=iPop(); op1=iPop();
sval=op1*op2;
iPush(sval);
break;
case iDIV: op2=iPop(); op1=iPop();
if(!fabs(op2))
{
printf("overflow\n");
iPush(0);
break;
}
sval=op1/op2;
iPush(sval);
break;
case iADD: op2=iPop(); op1=iPop();
sval=op1+op2;
iPush(sval);
break;
case iSUB: op2=iPop(); op1=iPop();
sval=op1-op2;
iPush(sval);
break;
case iCap: iPush(NumCapaTab[ch-'A']);
break;
default: ;
}
++i;
}
while(iTop>-1)
{
sval=iPop();
}
return sval;
}
int GetOperator(char validexp[],char oper)
{
int oplen,i=0;
oplen=strlen(validexp);
if (!oplen) return -1;
if(isalpha(oper)) return 4;
while(i<oplen && validexp[i]!=oper) ++i;
if(i==oplen || i>=4) return -1;
return i;
}
int CheckExpress(char ch)
{
int i=0;
char cc;
while((cc=validexp[i]) && ch!=cc) ++i;
if (!cc)
return 0;
return 1;
}
int PriorChar(char curch, char stach)
{
//棧外優先順序高於(>)棧頂優先順序時,才入棧
//否則(<=),一律出棧
if (curch==stach) return 0; //等於時應該出棧
else if (curch=='*' || curch=='/')
{
if(stach!='*' && stach!='/')
return 1;
}
else if (curch=='+' || curch=='-')
{
if (stach=='(' || stach==')')
return 1;
}
else if (curch=='(')
{
if (stach==')')
return 1;
}
return 0;
}
void counterPolishexp(char INexp[], int slen, char Outexp[])
{
int i, j, k,pr;
char t;
i=0;
j=k=0;
while (INexp[i]!='=' && i<slen)
{
if (INexp[i]=='(')
StackSymb[k++]=INexp[i];
//iPush(*(INexp+i));
else if(INexp[i]==')')
{
//if((t=iPop())!=-1)
while((t=StackSymb[k-1])!='(')
{
Outexp[j++]=t;
k--;
}
k--;
}
else if (CheckExpress(INexp[i])) // is oparator
{
// printf("operator %c k=%d\n",INexp[i],k);
while (k)
{
// iPush(*(INexp+i));
if(pr=PriorChar(INexp[i],StackSymb[k-1]))
break;
else
{
//if ((t=iPop())!=-1)
t=StackSymb[k-1]; k--;
Outexp[j++]=t;
}
} //end while
StackSymb[k++]=INexp[i]; //common process
}
else //if() 變數名
{
// printf("operand %c k=%d\n",INexp[i],k);
Outexp[j++]=INexp[i];
}
i++; //
}
while (k)
{
t=StackSymb[k-1]; k--;
Outexp[j++]=t;
}
Outexp[j]='\0';
}
Ⅳ 計算器c語言代碼
你這個代碼的問題太多了,下面已經給你一一改過來了,並且編譯運行通過了,自己比較一下:
你原先的錯誤都給你標出來了:
#include<stdio.h>
void displaymenu() //這個函數應該放在main函數外面進行定義
{
printf("\n\n*****************************\n");
printf("* 1.加法 *\n");
printf("* 2.?法 *\n");
printf("* 3.乘法 *\n");
printf("* 4.除法 *\n");
printf("* 5.求余 *\n");
printf("* 6.?乘 *\n");
printf("* 7.累加 *\n");
printf("* 8.?束 *\n");
printf("*****************************\n");
printf("????型<1,2,3,4,5,6,7,8>?\n");
}
main()
{
while(1) //這里應該是while(1),以實現循環的執行
{
displaymenu(); //這里原先筆誤成menu()了,應該是displaymenu()
int a=0;
scanf("%d",&a);
switch(a)
{
case 1:
{//int i=0,j=0,add=0; 這里少定義了一個sum=0;
int i=0,j=0,add=0,sum=0;
scanf("%d%d",&i,&j);
sum=i+j;
printf("add=%d\n",sum);
};break;
case 2:
{int i=0,j=0,sub=0;
scanf("%d%d",&i,&j);
sub=i-j;
printf("sub=%d\n",sub);
};break;
case 3:
{int i=0,j=0,multi=0;
scanf("%d%d",&i,&j);
multi=i*j;
printf("multi=%d\n",multi);
};break;
case 4:
{int i=0,j=0;
float divide=0;
scanf("%d%d",&i,&j);
divide=i/j;
if(j=0)
printf("erro\n");
else
printf("divide=%lf\n",divide);
};break;
case 5:
{int i=0,j=0,arith_compliment=0; //這里原先的arith-compliment,不是C語言的合法變數名(變數名中不能有「-」)
scanf("%d%d",&i,&j);
arith_compliment=i%j;
printf("arith-compliment=%d\n",arith_compliment);
};break;
case 6:
{int i=0;
float fac=1.0;
for(i=1;i<=9;i++)
fac=fac*i;
printf("\n");
printf("fac=%lf",fac);
};break;
case 7:
{int i=0,sum_N=0;
for(i=0;i<=9;i++)
sum_N=sum_N+i;
printf("\n");
printf("sum_N=%d",sum_N);
};break;
}
}
}
Ⅳ C語言計算器源代碼誰有
switch (f)
{
case 1: n = m + n; break;
case 2: n = m - n; break;
case 3: n = m * n; break;
case 4: n = m / n; break;
}
Ⅵ c語言計算器代碼
函數prt中return沒有返回值,主函數main無類型,void main或者是int main,然後返回一個值。
Ⅶ c語言設計一個簡單的計算器程序
#include<stdio.h>//計算器
voidmenu()//自定義的菜單界面
{
printf("--------------------\n");
printf("請輸入你的選擇\n");
printf("1.+\n");
printf("2.-\n");
printf("3.*\n");
printf("4./\n");
printf("--------------------\n");
}
intmain()
{
inti=0;
intj=0;
intnum=0;//計算結果存放在nun
intselect=0;//選擇的選項存放在select
do//do-while先執行再判斷循環條件,即可實現重復計算功能
{
menu();//列印出菜單界面
scanf("%d",&select);//輸入你的選項
printf("請輸入計算值:");
scanf("%d%d",&i,&j);//輸入要計算的數值
switch(select)
{
case1:
printf("%d+%d=%d\n",i,j,num=i+j);//實現加法功能
break;
case2:
printf("%d-%d=%d\n",i,j,num=i-j);//實現減法功能
break;
case3:
printf("%d*%d=%d\n",i,j,num=i*j);//實現乘法功能
break;
case4:
printf("%d-%d=%d\n",i,j,num=i/j);//實現除法功能
break;
default:
printf("輸入有誤重新選擇");
break;
}
}while(select);
return0;
}
運行結果:
(7)c語言計算器代碼擴展閱讀:
return表示把程序流程從被調函數轉向主調函數並把表達式的值帶回主調函數,實現函數值的返回,返回時可附帶一個返回值,由return後面的參數指定。
return通常是必要的,因為函數調用的時候計算結果通常是通過返回值帶出的。如果函數執行不需要返回計算結果,也經常需要返回一個狀態碼來表示函數執行的順利與否(-1和0就是最常用的狀態碼),主調函數可以通過返回值判斷被調函數的執行情況。
Ⅷ c語言,這是一個計算器代碼,,求詳細解釋,一句一句的講意思,,
#include <stdio.h>
#include <stdlib.h>//頭文件的包含
int main(void){//主函數,返回值是int整型,參數為空
int choice;//選擇
double a, result;//a用來存放輸入的值,result存放計算結果
while (1){//一個死循環,為了讓程序可以進行多次運算
result = 0.0;//存放結果變數的初始化
printf("(1.加 2.減 3.乘 4.除 5.退出)\n輸入你的選擇:");//輸出操作提示(界面)
scanf("%d", &choice);//接受用戶輸入的選擇
if (1 == choice){//當輸入為1的時候
printf("輸入一個實數a:");
while (1 == scanf("%lf", &a))//scanf成功接受double時,返回1,失敗返回0(scanf返回接受成功的個數)
result += a;//將輸入的數加到result中
}
else if (2 == choice){//當輸入為2時
int flag = 1;//做標示,因為被減數是正數
printf("輸入一個實數a:");
while (1 == scanf("%lf", &a)){//和第一個scanf一樣
if (flag == 1)
result += a;//為1說明是第一個被減數,加到result中
else
result -= a;//為0說明是後繼數,減數,所以從result中減
flag = 0;//第一次循環過後說明被減數已經輸入,將標示改為0,
}
}
else if (3 == choice){//當輸入為3時
result = 1.0;//初始化為1,因為後面的是乘法,如果初始值為0,就會導致result怎麼計算都為0
printf("輸入一個實數a:");
while (1 == scanf("%lf", &a))//和上面的scanf一樣
result *= a;//進行累乘
}
//題主的除法寫錯了,這里改了
else if (4 == choice){//當輸入為4時
int flag = 0;//標示,為1說明是除數,為0是被除數
result = 1.0;//初始化為1,因為被除數是用乘法存入result中
printf("輸入一個實數a:");
while (1 == scanf("%lf", &a)){//和上面都一樣
if (flag == 1)//為1時開始除法
result /= a;
else
result *= a;//為0時開始乘法
flag = 1;//循環第一次說明被除數已經存入result中,之後只要進行除法即可
}
}
else if (5 == choice){//輸入為5時
printf("最終結果:%.2f\n", result);//輸出result的結果
break;//跳出while(1)的循環,執行return 0;結束程序
}
else//當輸入不合法的時候
printf("輸入錯誤!\n");
printf("最終結果:%.2f\n", result);//每一次計算過後都會輸出計算結果
system("pause");//回車鍵繼續
system("cls");//清除所有輸出的數據
getchar();//接受一個字元
}
return 0;
}
完全手打,望採納!
Ⅸ 求一道C語言中關於計算器的程序代碼
這個已經有計算功能了,但記事本還沒有,給你急用。因為C沒有專門的字元串類型:有事再聯系405719864// C語言計算器.cpp : Defines the entry point for the console application.
//
/*注意!本程序用C編寫,在VC++6.0中運行通過,如果要有記事本功能,可能要用C++寫,因為C沒有專門的字元串類型*/
#include "stdafx.h"
#include <stdio.h>
#include <ctype.h>char c,operate;//c用於保存計算符號,operate表示當前輸入
double n,m;//記錄輸入的數字
bool check_c,check_n,check_m;//各個輸入的開關,當輸入發生改變時,可以有根據地操作double count(double n,char ch,double m)//根據不同的計算符號計算結果
{
if(ch == '+') return n+m;
if(ch == '-') return n-m;
if(ch == '*') return n*m;
if(ch == '/')
{
if(m != 0) return n/m;
else printf("0不能作除數!\n");
}
return n;
}int main()
{
n=m=0;
check_c=check_n=check_m=false;
printf("0\n"); printf("若要結束,請輸入任意字母!\n");
while(scanf("%c",&operate) != EOF)//表示輸入以EOF結束
{
if(operate == 0x0d || operate==' ' || operate=='\n') continue;//表示排除無效字元
if(operate == '#')
{
n=m=0;
check_c=check_n=check_m=false;
printf("0\n");
}
else
{
if(isdigit(operate))
{
if(!check_n) { n=n*10+operate-'0'; printf("%.0lf\n",n); }
else { m=m*10+operate-'0'; check_m=true; check_c=true; printf("%.0lf\n",m); }
}
else
{
if(operate=='+' || operate=='-' || operate=='*' || operate=='/' || operate=='=')//出現運算符號
{
if(operate != '=')//非「=」,則第一個數字輸入結束,並記錄當前計算符號
{
check_n=true;
if(!check_c) c=operate;
}
if(check_n && check_m)//兩個數字都有輸入,就進行計算
{
n=count(n,c,m);
printf("%.0lf\n",n);
if(operate != '=')//出現連續等號,連續計算,非等號,則記錄並從新輸入第二個數字
{
c=operate;
check_c=false;
m=0;
check_m=false;
}
}
else printf("%.0lf\n",n);
}
else
{
printf("輸入數據無效!\n");//表示以任意字母字元結束
break;
}
}
}
}
return 0;
}
Ⅹ 用C語言編寫一個簡單的計算器1
#include<stdio.h>
int main() {
double num1 = 0; //輸入1
double num2 = 0; //輸入2
char ch; //操作
double ret = 0; //結果 printf( "輸入第一個數:" );
scanf( "%lf", &num1 );
printf( "輸入第二個數:" );
scanf( "%lf", &num2 );
printf( "操作[+ - * /]:" );
getchar();
scanf( "%c", &ch ); switch( ch ) {
case '+':
ret = num1 + num2;
break;
case '-':
ret = num1 - num2;
break;
case '*':
ret = num1 * num2;
break;
case '/':
ret = num1 / num2;
break;
default:
break;
}
printf( "結果:%.2lf\n", ret ); return 0;
} 寫個簡單易懂的,你操作計算器的步驟就是編寫程序的思路呀