當前位置:首頁 » 編程語言 » c語言編程多功能計算機
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編程多功能計算機

發布時間: 2023-04-10 03:51:05

A. 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;
}
}
}

B. 設計一個多功能計算器<用C語言程序設計>

一.題目意義和設計思想
1、題目意義 多功能計算器的設計目的是為了簡化計算及對所學C語言知識的有效應用。在多功能計算器設計的這個實際的例子中,我們運用C語言知識來解決這個生活中的實際問題。從而能更有效地檢驗自己的C語言學習的水平,加強對知識的掌握,提高解決實際問題的能力。 2、設計思想 首先是對要解決的問題進行分拿頌析,
二、採用的主要技術、遇到的難點和解決方法
在設計的過程中主要運用到do-while 循環語句,if-else判斷語句,switch選擇語句,函數的遞歸調用,庫函數windows.h的清屏函數system(「cls」),和程序的終止函數exit(0)等技術。遇到的問題主要有兩個: 1) 清屏的功能的實現 2) 輸出結果後將結果作為操作數繼續計算的功能的實現解決方法:1) 是通過查詢資料和復習書上的知識 明白了應該調用庫函數windows.h的清屏函數system(「cls」)就可以解決這個問題2) 通過循環do-while嵌套do-while和if-else語句的使用來解決,循環的利用前次計算的結果來作為下一個計算的第一個操好鬧作數來實現的。
三、實現的主要功能和系統結構
各函數的 實現的功能Main()主函數 主函數
Calculate() 進行直接的計算
Expression() 表達式計算得形式
System(「cls」) 系統清屏的功能
Exit() 系統使得程序退出的功能
函數之間的關系\實現功能:1)具備整型數據、浮點型數據的算術(加、減、乘、除)運算功能。依次輸入第一個運算數、運算符(+,-,*,/),第二個運算數,然後輸出結果。結果可以作友敏罩為下一個運算的第一運算數。按『C』清屏,按『X』退出。例如: 選擇c清屏的功能後如圖 按任意鍵繼續 最後按X退出功能2)實現單運算符表達式計算的功能。輸入的操作數可以包含整數或浮點數。如果遇到錯誤的表達式,應輸出錯誤提示信息。輸入表達式如下:

C. 請問怎樣用C語言編寫一個一鍵多功能的程序,就是說按一下是一種功能

說一下思路辯橋:對按鍵進行計數,給個默認功能,對應計數0,每按一次,計數器加1,就老雹可以了
主體裡面使用switch...case,侍灶帆判斷按鍵次數

D. c語言設計一個「多功能計算器」

#include<stdio.h> /*庫文件包含*/
#include<string.h> /*用於字元串操作*/
#include<stdlib.h> /*用於exit函數*/

/**************************************************************************
int check(char *c)
輸入參數:
char *c: 輸入的字元串
返回參數:
0:字元串中有不符合規定的字元
1: 字元串字元符合規定,沒有不符合規定的字元.
功能:
檢查字元串中有否除了 0-9, +,-,*,/,(,),之外的其他字元,
如果有,則返回0, 表示出現錯誤。
若沒有,則返回1,表式字元串符合規定。
**************************************************************************/
int check(char *c)
{
int k=0;
while(*c!='\0')
{
if((*c>='0' && *c<='9') || *c=='+' ||
*c=='-' || *c=='*' || *c=='/' ||
*c=='.' || *c=='(' || *c==')' )
{

}
else
{
printf("input error, there have the char not the math expression char!\n");
return 0;
}

if(*c=='(')
k++;
else if(*c==')')
k--;

c++;
}
if(k!=0)
{
printf("input error, there is not have correct bracket '()'!\n");
return 0;
}
return 1;
}

/**************************************************************************
void move(char *f, double *s,int p)

輸入參數:
char *f : 運算符數組
double *s: 數值數組
int p: 當液碧前運算符數組位置。
返回參數:

功能:
將當前已經完成運算的運算符消去,同時將數值數組的位置調整以進行下一次運算。
傳入值p若為3
則當前符號的數組位置為3.
f[3]=f[3+1].......f[len-2]=f[len-1] f[len-1]='\0';
s[i]=s[i+1].......s[len-1]=s[len] 因為數值比運算符含老多一個。
***************************************************************************/

void move(char *f, double *s,int p)
{
int i=0,len=strlen(f);
for(i=p; i<len; i++) /*將已經運算過的符號,空出來的位置用後面談埋升的符號來填充,*/
{ /*即把乘和除號的位置用後面的加和減號填充*/
f[i]=f[i+1];
s[i]=s[i+1];
}
s[i]=s[i+1];
f[len-1]='\0';
}
/**************************************************************************
double convnum(char *c)
輸入參數:
char *c :由數字和小數點組成的字元,用以轉換成double型的數值。
返回參數:
num:返回轉換好的值。
功能:
將輸入的字元串先將其小數點以前的部分復制到temp[]數組中,
若有小數點,則將小數點之後的數值,也就是小數部分先進行計算,值存入num中
計算完成後,再對整數部分進行計算,值加上小數部分的值,存入num中。
***************************************************************************/
double convnum(char *c)
{
double num=0.0;
double a=1.0;
int i=0,p=0,len=0;
char temp[100];
int tempi=0;
int start=0;
int f=1; /*正負符號指示器,若為1則為正數,為-1,此數為負數*/

len=strlen(c);

if(c[0]=='-')
{
start=1;
f=-1;
}
for(i=start; i<len; i++)
{
if(c[i]=='.')
{
p=i;
break;
}
temp[tempi++]=c[i]; /*將整數部分復制到temp[]中*/
}
temp[tempi]='\0';

if(p!=0)
{
for(i=p+1;i<len;i++) /*將小數部分計算出來*/
{
if(c[i]=='.') /*如果有多餘的小數點,則表示輸入錯誤*/
{
printf("there is more that one dot '.' in number!error!\n");
exit(0);
}
a=a*0.1;
num+=(a*(c[i]-48));
}
}

a=1.0;

len=strlen(temp); /*計算整數部分*/
for(i=len-1;i>=0; i--)
{
num=num+(a*(temp[i]-48));
a*=10;
}

num=num*f;
return num;
}

/**************************************************************************
double good(char *c)
輸入參數:
char *c :即將進行運算的字元串型數學表達式。如3.5+(2*3/5)
返回參數:
s[0]:計算結果將放入s[0]中
功能:
將輸入的字元串中的數字分別調用convnum(char *c)函數進行數值變換,再將其依
次存入doulbe s[i]中,將加減乘除運算符依次存入字元串符號數組 char f[i]中,
然後如果遇到括弧,則將括弧內的字元串存入另一字元數組中,然後用此
good(char *c) 遞歸函數進行遞歸運算。 然後根據先乘除,後加減的順序對已
存入數組的數值根 據存入字元串符號數組的運算符進行運算。結果存入s[0]中。
返回最終結果。
***************************************************************************/
double good(char *c) /*可遞歸函數*/
{ /*取得數值字元串,並調用convnum轉換成double*/
char g[100],number[30]; /*g,保存當前的表達式串,number保存一個數的所有字元*/
char f[80]; /*保存所有的符號的堆棧*/
int fi=0; /*保存符號的位置指針*/
double s[80]; /*保存當前所有的數的一個堆棧*/
int si=0; /*保存數字位置指針*/
int k=0; /* 若k=1則表示有一對括弧*/
int num=0,i=0; /*num保存新括弧內的字元數,i 保存number里的字元位置*/
int cc=0; /*乘除符號數量*/
int jj=0; /*加減符號數量*/

while(*c!='\0')/*當p==1 和k==0時,表示已經把括弧里的內容全部復制到g[100]中了*/
{
k=0;
num=0;

switch(*c)
{
case '+': /*當前字元為+-乘除時則表示*/
case '-':
case '*':
case'/':
f[fi++]=*c;
if(*c=='*' || *c=='/')
cc++;
else
jj++;
if(*(c-1)!=')')
{
number[i]='\0';
i=0;/*完成一個數字的復制,其位置指針i=0*/

s[si++]=convnum(number);
}
break;
case'(': /*有括弧,則將當前括弧作用范圍內的全部字元保存,作為*/
k++; /*一個新的字元表達式進行遞歸調用good函數計算。*/
while(k>0)
{
c++;
g[num]=*c;
num++;
if(*c==')')
{
k--;
}
else if(*c=='(')
{
k++;
}
}
g[num-1]='\0';
num=0;/*完成一個括弧內容的復制,其位置指針num=0*/
s[si++]=good(g);
break;
default:
number[i++]=*c;

if(*(c+1)=='\0')
{ number[i]='\0';
s[si++]=convnum(number);
}
break;
}

c++;
}

f[fi]='\0';

i=0;
while(cc>0)
{
switch(f[i])
{
case '*': cc--;
s[i+1]=s[i]*s[i+1];
move(f,s,i);
break;
case '/': cc--;
s[i+1]=s[i]/(float)s[i+1];
move(f,s,i);
break;
default:
i++;
break;
}
}

i=0;
while(jj>0)
{
switch(f[i])
{
case '+': s[i+1]=s[i]+s[i+1];
jj--;
move(f,s,i);
break;
case '-': s[i+1]=s[i]-s[i+1];
jj--;
move(f,s,i);
break;
default:
printf("operator error!");
break;
}
}

return s[0];
}

void main()
{
char str[100];
double sum=0;
int p=1;

while(1)
{
printf("enter expression: enter 'exit' end of program\n");
scanf("%s",str);
p=strcmp(str,"exit");
if(p==0)
break;
p=check(str);

if(p==0)
continue;
sum=good(str);
printf("%s=%f",str,sum);
printf("\n");
}
printf("good bye!\n");
}

E. 求按要求用C語言作的一個計算器

計算器的c語言程序設計
一.功能概述:本程序能計算帶二重括弧的計算式的結果,如輸入((3+2)*(3+2)+5)*((3+2)*(3+2)+5)*(5+5)= 將輸出結果為9000
二.源程序:
#include<stdio.h>
int w;
double B[4][40];

shuru(char *pt)
{
int i=0,m;
do
{
*(pt+i)=getchar();
m=i;
i++;
}
while(*(pt+m)!='=');
*(pt+m)='+';
*(pt+m+1)='=';
}

tlchli(char *p)
{
int a,b;
if(*p=='-'||*p=='+')
{
for(b=0;*(p+b)!='=';b++)
;
for(;b>=0;b--)
*(p+b+1)=*(p+b);
*p='0';
}
else
{
for(a=1;*(p+a)!='=';a++)
{
if(*(p+a)=='-'||*(p+a)=='+')
{
if(*(p+a-1)=='('&&*(p+a+1)>='0'&&*(p+a+1)<='9')
{
for(b=0;*(p+a+b)!='=';b++)
;
for(;b>=0;b--)
*(p+a+b+1)=*(p+a+b);
*(p+a)='0';
a=(a+1);
}
}
}
}
}

jgh(double B[4][40],char *p)
{
int a,b,c=0,d,e,f,h,i,k,n,m;
double g=0,j=0;
for(a=0;a<4;a++)
for(b=0;b<40;b++)
B[a]=0;
for(d=0;*(p+d)!='=';d++)
{
if(*(p+d)=='+'||*(p+d)=='-'||*(p+d)=='*'||*(p+d)=='/')
{
if(*(p+d)=='+') B[3][c]='+';
if(*(p+d)=='-') B[3][c]='-';
if(*(p+d)=='*') B[3][c]='*';
if(*(p+d)=='/') B[3][c]='/';
if(*(p+d-1)==')'&&*(p+d-2)==')')
{
B[0][c]=')';
B[1][c]=')';
}
if(*(p+d-1)==')'&&*(p+d-2)!=')')
B[1][c]=')';
for(e=d-1;*(p+e)<'0'||*(p+e)>'9';e--)
;
for(f=e;*(p+f)!='.'&&(f>0)&&*(p+f)>='0'&&*(p+f)<='9';f--)
;
if(*(p+f)=='.')
{
for(h=f-1;(h>=0)&&*(p+h)>='0'&&*(p+h)<='9';h--)
;
h++;
if(*(p+h-1)=='('&&*(p+h-2)=='(')
{
B[0][c]='(';
B[1][c]='(';
}
if(*(p+h-1)=='('&&*(p+h-2)!='(')
B[1][c]='(';
for(i=h;*(p+i)>='0'&&*(p+i)<='9';i++)
g=(*(p+i)-48)+g*10.0;
for(k=f+1;*(p+k)>='0'&&*(p+k)<='9';k++)
;
k--;
for(n=k;*(p+n)>='0'&&*(p+n)<='9';n--)
j=(j/10.0+(*(p+n)-48)/10.0);
B[2][c]=(g+j);
g=j=0;
}
else
{
for(m=e;*(p+m)>='0'&&*(p+m)<='9';m--);
m++;
if(*(p+m-1)=='('&&*(p+m-2)=='(')
{
B[0][c]='(';
B[1][c]='(';
}
if(*(p+m-1)=='('&&*(p+m-2)!='(')
B[1][c]='(';
for(i=m;*(p+i)>='0'&&*(p+i)<='9';i++)
g=(*(p+i)-48)+g*10.0;
B[2][c]=g;
g=0;
}
c++;
}
}
w=(c-1);
}

qkh1(double B[4][40])
{
int a=1,b,c,d,e,f,j,k;
for(b=0;b<w;b++)
{
if(B[a]=='(')
{
for(c=b;B[a][c]!=')';c++)
;
for(d=b+1;B[a][d]!='('&&d<c;d++)
;
if(B[a][d]=='(')
k=d;
else
k=b;
B[a][k]=0;B[a][c]=0;
for(e=k;e<c;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}

}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=k;f<c;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=B[2][f]-B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
}
b=c-1;
if(B[3][k-1]=='*'&&k>0)
{
for(;k<c;k++)
{
B[3][k]='*';
B[2][k]=1.0;
}
}
if(B[3][k-1]=='/'&&k>0)
{
for(;k<c;k++)
{
B[3][k]='/';
B[2][k]=1.0;
}
}
}
}
for(j=0;j<=w;j++)
{
if(B[1][j]!='('&&B[1][j]!=')')
B[1][j]=B[0][j];
}
}

qkh2(double B[4][40])
{
int a,b,c,d,e,f,j;
for(b=0;b<w;b++)
{
if(B[1]=='(')
{
for(c=b;B[1][c]!=')';c++)
;
B[1]=0;B[1][c]=0;
for(e=b;e<c;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&(e>0))
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=b;f<c;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=B[2][f]-B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
}
if(B[3][b-1]=='*'&&b>0)
{
for(;b<c;b++)
{
B[3]='*';
B[2]=1.0;
}
}
if(B[3][b-1]=='/'&&b>0)
{
for(;b<c;b++)
{
B[3]='/';
B[2]=1.0;
}
}
}
}
}

jshjg(double B[4][40])
{
int b,d,e,f;
for(e=0;e<w;e++)
{
if(B[3][e]=='*')
{
B[2][e+1]=B[2][e]*B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
if(B[3][e]=='/')
{
B[2][e+1]=B[2][e]/B[2][e+1];
if(B[3][e-1]=='-'&&e>0)
{
B[2][e]=0;
B[3][e]='-';
}
else
{
B[2][e]=0;
B[3][e]='+';
}
}
}
for(f=0;f<w;f++)
{
if(B[3][f]=='+')
{
B[2][f+1]=B[2][f]+B[2][f+1];
B[2][f]=0;B[3][f]='+';
}
if(B[3][f]=='-')
{
B[2][f+1]=(B[2][f]-B[2][f+1]);
B[2][f]=0;B[3][f]='+';
}
}
}

shuchu(double B[4][40],char *p)
{
printf("answer %f\n",B[2][w]);
}

main()
{
char *p,A[100];
shuru(A);
p=&A[0];
tlchli(p);
jgh(B,p);
qkh1(B);
qkh2(B);
jshjg(B);
shuchu(B,p);
}

#include"string.h"
#include"graphics.h"
#include"conio.h"
#include"dos.h"
#include"time.h"
#include"stdlib.h"
#include"stdio.h"
#include"math.h"
/*調用一系列的庫函數*/
int py;/*定義一個全局變數*/
void mode(int py)/*mode函數,用來設置的,來使用計算器的多種運算功能*/
{ double x1,x2,ans,ans2;
if(py<11)
{ printf("input x1,x2:");
scanf("%lf,%lf",&x1,&x2); }
else {printf("input x:");scanf("%lf",&x1);}
switch(py)
{ case 6 : ans=x1+x2;printf("=%.3lf",ans);break;
case 7 : ans=x1-x2;printf("=%.3lf",ans);break;
case 8 : ans=x1*x2;printf("=%.3lf",ans);break;
case 9 : ans=x1/x2;printf("=%.3lf",ans);break;
case 10 : ans=pow(x1,x2);printf("x^%.1lf=%.3lf",x2,ans);break;
case 11 : ans=sqrt(x1);printf("=%.3lf",ans);break;
case 12 : ans=sin(x1);ans2=cos(x1);printf("sin x=%.3lf,cos x=%.3lf",ans,ans2);break;
case 13 : ans=asin(x1);ans2=acos(x1);printf("asin x=%.3lf,acos x=%.3lf",ans,ans2);break;
}
getch();clrscr();
}
int join(char *ps) /*join函數是輸入用戶名和密碼的,可於已注冊的用戶進行匹配,注冊用戶可使用高級功能*/
{ char name[30],pass[20];
int len,i;
printf("ID:");
scanf("%s",name);
printf("\npass word:");
scanf("%s",pass);
clrscr();
for(i=0;i<strlen(ps);i++)
if(pass[i]!=*(ps+i)) return 0;
return 1;
}

int menu(int pass)/*menu函數,菜單*/
{int py=6;char key=0;
gotoxy(1,4);
printf("MENU\n\n");
printf("ADD +\n");
printf("SUB -\n");
printf("MUL *\n");
printf("DIV /");
gotoxy(10,6);printf("<-");
if(pass) {gotoxy(1,10);printf("INV ^\n");
printf("EVO ~\n");
printf("SIN COS\n");
printf("ASIN ACOS\n");
printf("modify\n");
printf("QUIT"); }
else {gotoxy(1,10);printf("QUIT");}
while(key!=13) /*以下都是控制選擇箭頭的位子的語句*/
{ key=getch();
switch(key)
{ case 80 : gotoxy(10,py);printf(" ");if(!pass) py=py%5+6; else {++py;if(py==16) py=6;}break;

case 72 : gotoxy(10,py);printf(" ");--py; if(py==5) py=10+5*pass; break;
}
gotoxy(10,py);printf("<-");
}
return py;
}

main() /*主函數,關於函數分配和開始動畫的語句*/
{ int gd=DETECT,gm,x=320,y=10,i,l=10,h=10,t,co=3,v=0;
int pass;
FILE *fp;char ps[20];
initgraph(&gd,&gm,"");/*初始化圖形模式*/
registerbgidriver(EGAVGA_driver);
for(i=1;i<31;co=(co++%10),v++,y+=2+v,i++)
{ delay(9e10);cleardevice();
setcolor(co);
setfillstyle(1,co);
sector(x,y,0,360,l,h);/*畫圓*/
}
for(i=1;i<300;i++)
{ setcolor(i%10);
circle(x,y,i);
delay(1000);/*延時*/
}
cleardevice();/*清屏*/
closegraph();
fp=fopen("file1","r");
if(fp==NULL) pass=1;
else {fgets(ps,20,fp);
pass=join(ps);}
ld: py=menu(pass);
if(py==pass*5+10) {clrscr();printf("bye bye!");getch();return 0;}
else if(py!=14){clrscr();mode(py);} else { fp=fopen("file1","w");
printf("\npass word:");
scanf("%s",ps);
fputs(ps,fp);
fclose(fp); getch();clrscr();
}
goto ld; /*函數內跳轉*/
}
#include <stdio.h> /*庫函數*/
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();
}

F. 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;
}

G. 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就是最常用的狀態碼),主調函數可以通過返回值判斷被調函數的執行情況。

H. c語言編程,編一個多功能計算器

#define MAX 100

typedef struct //運算數
{
double a[MAX];
int top;
}OPND;

typedef struct //運算符
{
char a[MAX];
int top;
}OPTR;

void Init_OPND(OPND *s); //初始化運算數棧
void Push_OPND(OPND *s,double x); //push一個運算數
double Pop_OPND(OPND *s); //pop一個運算數
double GetTop_OPND(OPND *s); //取棧頂運算數
void Init_OPTR(OPTR *s); //初始化運算符棧
void Push_OPTR(OPTR *s,char x); //push一個運算符
char Pop_OPTR(OPTR *s); //pop一個運算符
char GetTop_OPTR(OPTR *s); //取棧頂運算符
int IsOpr(char c); //判斷輸入字元是否為運算符
char Precede(char s,char c); //判斷字元的優先順序
double Operate(double x,char opr,double y); //計算

void Init_OPND(OPND *s) //初始化運算數棧

{
s->top =-1;
}

void Init_OPTR(OPTR *s) //初始化運算符棧

{
s->top =-1;
}

void Push_OPND(OPND *s,double x) //push一個運算數

{
s->top ++;
s->a [s->top ]=x;
}

void Push_OPTR(OPTR *s,char x) //push一個運算符

{
s->top ++;
s->a [s->top ]=x;
}

double Pop_OPND(OPND *s) //pop一個運算數
{
double x;
x=s->a [s->top];
s->top --;
return x;
}

char Pop_OPTR(OPTR *s) //pop一個運算符

{
char x;
x=s->a [s->top];
s->top --;
return x;
}

double GetTop_OPND(OPND *s) //取棧頂運算數

{
return (s->a[s->top]);
}

char GetTop_OPTR(OPTR *s) //取棧頂運算符

{
return (s->a[s->top]);
}

int IsOpr(char c) //判斷輸入字元是否為運算符
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.')
return 1;
else
return 0;
}

char Precede(char s,char c) //判斷字元的優先順序
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '*':
case '/':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;

case '(':
{
if(c==')')
return '=';
else
return '<';
}
break;

case ')':
{
return '>';
}
break;

case '#':
{
if(c=='#')
return '=';
else
return '<';

}
break;
}
return 0;
}

double Operate(double x,char opr,double y) //計算
{
double result;
switch (opr)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
break;
case '/':
result = x / y;
break;
}
return result;
}

I. C語言課程設計 題目為設計一個多功能計算軟體實現功能 求完美的代碼

參考下這個:
#include <stdio.h>
#include <windows.h>
//輸入操作數和操作符
void inputNum(double &num_one,double &num_two,short &operatorNum)
{
printf("第一個數:");
double num;
scanf("%lf",&num);
if(num==0)
{
num_one=num_one;
}
else
{
num_one=num;
}
printf("選擇運算:");
scanf("%d",&operatorNum);
printf("第二個數:");
scanf("%lf",&num_two);
}
//返回操作符號
char intputOperator(short &typeOperator)
{
char signal;
switch (typeOperator)
{
case 1:
signal='+';break;
case 2:
signal='-';break;
case 3:
signal='*';break;
case 4:
signal='/';break;
default:
printf("無此運算符");
}
return signal;
}
//顯示菜單
void showMenu()
{
printf("操作符選擇:\n1:\t加法(+)\n2:\t減法(-)\n3:\t乘法(×)\n4:\t除法(÷)\n註:若想把上次的結果作為下次的第一運算數那麼請輸入0\n\n");
}
//清屏操作
void clearScreen()
{
printf("輸入C 清除屏幕,輸入R回到主菜單,輸入S繼續計算\n輸入:");
char ch;
getchar();
scanf("%c",&ch);
if(ch=='C')
{
system("cls");
}
else if(ch=='R')
{
system("cls");
showMenu();
}
else if (ch=='S')
{
}
else
{
printf("輸入錯閉冊誤,請重新輸入!\n");
clearScreen();
}
}
//計算結果
void GetResult(double &num_one,double &num_two,short &typeOperator)
{
char signal;
signal=intputOperator(typeOperator);
double res=0.0;
switch (signal)
{
case '+':
res=num_one+num_two;break;
case '-':
res=num_one-num_two;break;
case '*':
res=num_one*num_two;break;
case '/':
if(num_two == 0)
{
printf("除數不能尺態肆為0\n");break;
}
res=num_one/num_two;break;
default:
printf("無此運算方法");
}
printf("=%lf\n\n",res);
num_one=res;
}
void main()
{
double num_one,num_two; //聲明操作數
short operator_num; //聲明陵轎操作符
showMenu(); //顯示菜單
while (1)
{
inputNum(num_one,num_two,operator_num); //輸入操作數和操作符
GetResult(num_one,num_two,operator_num); //計算結果以及顯示結果
clearScreen(); //清屏工作
}
}