按要求求一个C语言的计算器。

计算器的c语言编程

1.函数概述:此程序可以计算带双括号的公式的结果,如((3+2)*(3+2)+5)*((3+2)*(3+2)+5)*(5+5)=输出结果为9000。

2.源程序:

# include & ltstdio.h & gt

int w;

双B[4][40];

shuru(char *pt)

{

int i=0,m;

{

*(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 & gt=0;b -)

*(p+b+ 1)= *(p+b);

* p = ' 0

}

其他

{

for(a = 1;*(p+a)!='=';a++)

{

if(*(p+a)=='-'||*(p+a)=='+')

{

if(*(p+a-1)= '(' & amp;& amp*(p+a+1)>= ' 0 ' & amp& amp*(p+a+1)& lt;='9')

{

for(b = 0;*(p+a+b)!='=';b++)

for(;b & gt=0;b -)

*(p+a+b+ 1)= *(p+a+b);

*(p+a)=“0”;

a =(a+1);

}

}

}

}

}

jgh(双B[4][40],char *p)

{

int a,b,c=0,d,e,f,h,I,k,n,m;

双g=0,j = 0;

for(a = 0;a & lt4;a++)

for(b = 0;b & lt40;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)= ')' & amp;& amp*(p+d-2)== ')')

{

b[0][c]= ')';

b[1][c]= ')';

}

if(*(p+d-1)= ')' & amp;& amp*(p+d-2)!=')')

b[1][c]= ')';

for(e = d-1;*(p+e)& lt;0 ' | | *(p+e)>;'9';e -)

for(f = e;*(p+f)!='.'& amp& amp(f & gt0)& amp;& amp*(p+f)>= ' 0 ' & amp& amp*(p+f)& lt;='9';f -)

if(*(p+f)== ' . ')

{

for(h = f-1;(h & gt= 0)& amp;& amp*(p+h)>= ' 0 ' & amp& amp*(p+h)& lt;='9';h -)

h++;

if(*(p+h-1)= '(' & amp;& amp*(p+h-2)== '(')

{

b[0][c]= '(';

b[1][c]= '(';

}

if(*(p+h-1)= '(' & amp;& amp*(p+h-2)!='(')

b[1][c]= '(';

for(I = h;*(p+i)>= ' 0 ' & amp& amp*(p+I)& lt;='9';i++)

g =(*(p+I)-48)+g * 10.0;

for(k = f+1;*(p+k)>= ' 0 ' & amp& amp*(p+k)& lt;='9';k++)

k-;

for(n = k;*(p+n)>= ' 0 ' & amp& amp*(p+n)& lt;='9';n -)

j =(j/10.0+(*(p+n)-48)/10.0);

b[2][c]=(g+j);

g = j = 0;

}

其他

{

for(m = e;*(p+m)>= ' 0 ' & amp& amp*(p+m)& lt;='9';m-);

m++;

if(*(p+m-1)= '(' & amp;& amp*(p+m-2)== '(')

{

b[0][c]= '(';

b[1][c]= '(';

}

if(*(p+m-1)= '(' & amp;& amp*(p+m-2)!='(')

b[1][c]= '(';

for(I = m;*(p+i)>= ' 0 ' & amp& amp*(p+I)& lt;='9';i++)

g =(*(p+I)-48)+g * 10.0;

b[2][c]= g;

g = 0;

}

c++;

}

}

w =(c-1);

}

qkh1(双B[4][40])

{

int a=1,b,c,d,e,f,j,k;

for(b = 0;b & ltw;b++)

{

if(B[a]== '(')

{

for(c = b;B[a][c]!=')';c++)

for(d = b+ 1;B[a][d]!= '(' & amp;& ampd & ltc;d++)

if(B[a][d]== '(')

k = d;

其他

k = b;

b[a][k]= 0;b[a][c]= 0;

for(e = k;e & ltc;e++)

{

if(B[3][e]=='* ')

{

B[2][e+1]= B[2][e]* B[2][e+1];

if(B[3][e-1]= = '-' & amp;& amp(e & gt0))

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

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]= = '-' & amp;& ampe & gt0)

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

b[2][e]= 0;

b[3][e]= '+';

}

}

}

for(f = k;f & ltc;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]= = ' * ' & amp;& ampk & gt0)

{

for(;k & ltc;k++)

{

b[3][k]= ' * ';

b[2][k]= 1.0;

}

}

if(B[3][k-1]= = '/' & amp;& ampk & gt0)

{

for(;k & ltc;k++)

{

b[3][k]= '/';

b[2][k]= 1.0;

}

}

}

}

for(j = 0;j & lt= w;j++)

{

if(B[1][j]!= '(' & amp;& ampB[1][j]!=')')

B[1][j]= B[0][j];

}

}

qkh2(双B[4][40])

{

int a,b,c,d,e,f,j;

for(b = 0;b & ltw;b++)

{

if(B[1]== '(')

{

for(c = b;B[1][c]!=')';c++)

b[1]= 0;b[1][c]= 0;

for(e = b;e & ltc;e++)

{

if(B[3][e]=='* ')

{

B[2][e+1]= B[2][e]* B[2][e+1];

if(B[3][e-1]= = '-' & amp;& amp(e & gt0))

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

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]= = '-' & amp;& amp(e & gt0))

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

b[2][e]= 0;

b[3][e]= '+';

}

}

}

for(f = b;f & ltc;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]= = ' * ' & amp;& ampb & gt0)

{

for(;b & ltc;b++)

{

b[3]= ' * ';

b[2]= 1.0;

}

}

if(B[3][B-1]= = '/' & amp;& ampb & gt0)

{

for(;b & ltc;b++)

{

b[3]= '/';

b[2]= 1.0;

}

}

}

}

}

jshjg(双B[4][40])

{

int b,d,e,f;

for(e = 0;e & ltw;e++)

{

if(B[3][e]=='* ')

{

B[2][e+1]= B[2][e]* B[2][e+1];

if(B[3][e-1]= = '-' & amp;& ampe & gt0)

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

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]= = '-' & amp;& ampe & gt0)

{

b[2][e]= 0;

b[3][e]= '-';

}

其他

{

b[2][e]= 0;

b[3][e]= '+';

}

}

}

for(f = 0;f & ltw;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(双B[4][40],char *p)

{

printf("答案%f\n ",B[2][w]);

}

主()

{

char *p,A[100];

舒如(一);

p = & ampa[0];

tlchli(p);

jgh(B,p);

qkh 1(B);

qkh 2(B);

jshjg(B);

舒初(B,p);

}

#包含" string.h "

#包含“graphics.h”

#包含“conio.h”

#包含“dos.h”

#包含“time.h”

#包含" stdlib.h "

#包含“stdio.h”

#包含“math.h”

/*调用一系列库函数*/

int py/*定义一个全局变量*/

Void mode(int py)/*mode函数,用于设置和使用计算器的各种运算功能*/

{ double x1,x2,ans,ans 2;

if(py & lt;11)

{ printf("input x1,x2:");

scanf("%lf,%lf ",& ampx1。x2);}

else { printf(" input x:");scanf("%lf ",& ampx 1);}

开关(py)

{案例6:ans = x 1+x2;printf("=%.3lf ",ans);打破;

情况7:ans = x 1-x2;printf("=%.3lf ",ans);打破;

情况8:ans = x 1 * x2;printf("=%.3lf ",ans);打破;

情况9:ans = x 1/x2;printf("=%.3lf ",ans);打破;

案例10 : ans=pow(x1,x2);printf("x^%.1lf=%.3lf",x2,ans);打破;

case 11:ans = sqrt(x 1);printf("=%.3lf ",ans);打破;

案例12:ans = sin(x 1);ans2 = cos(x 1);printf("sin x=%.3lf,cos x=%.3lf ",ans,ans 2);打破;

案例13:ans = asin(x 1);ans 2 = acos(x 1);printf("asin x=%.3lf,acos x=%.3lf ",ans,ans 2);打破;

}

getch();clr SCR();

}

Int join(char *ps) /*join函数是输入用户名和密码,可以匹配注册用户。注册用户可以使用高级功能*/

{ char name[30],pass[20];

int len,I;

printf(" ID:");

scanf("%s ",名称);

printf(" \ n pass word:");

scanf("%s ",通过);

clr SCR();

for(I = 0;我& ltstrlen(PS);i++)

if(pass[i]!=*(ps+i))返回0;

返回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(" & lt;-");

if(pass) {gotoxy(1,10);printf(" inv ^\n ");

printf(" EVO ~ \ n ");

printf(" SIN COS \ n ");

printf("阿辛·ACOS \ n ");

printf(" modify \ n ");

printf(" QUIT ");}

else {gotoxy(1,10);printf(" QUIT ");}

而(键!=13) /*以下是控制选择箭头位置的所有语句*/

{ key = getch();

开关(钥匙)

{案例80 : gotoxy(10,py);printf(" ");如果(!通过)py = py % 5+6;else { ++ py;if(py = = 16)py = 6;}破;

案例72 : gotoxy(10,py);printf(" ");-py;if(py = = 5)py = 10+5 *通过;打破;

}

gotoxy(10,py);printf(" & lt;-");

}

返回py;

}

Main() /*主函数,关于函数分配和启动动画的语句*/

{ int gd=DETECT,gm,x=320,y=10,I,l=10,h=10,t,co=3,v = 0;

int pass

FILE * fpchar PS[20];

init graph(& amp;gd,& ampgm,“”;/*初始化图形模式*/

registerbgidriver(EGA VGA _ driver);

for(I = 1;我& lt31;co=(co++%10),v++,y++ = 2+v,i++)

{ delay(9e 10);clear device();

set color(co);

setfillstyle(1,co);

扇形(x,y,0,360,l,h);/*画一个圆*/

}

for(I = 1;我& lt300;i++)

{ set color(I % 10);

circle(x,y,I);

延时(1000);/*延迟*/

}

clear device();/*清空屏幕*/

closegraph();

fp=fopen("file1 "," r ");

if(FP = = NULL)pass = 1;

else {fgets(ps,20,FP);

pass = join(PS);}

LD:py =菜单(pass);

if(py = = pass * 5+10){ clrscr();printf("拜拜!");getch();返回0;}

else if(py!= 14){ clrscr();模式(py);} else { fp=fopen("file1 "," w ");

printf(" \ n pass word:");

scanf("%s ",PS);

fputs(ps,FP);

fclose(FP);getch();clr SCR();

}

goto ld/*函数内跳转*/

}

# include & ltstdio.h & gt/*库函数*/

结构节点

{

int数据;

struct s _ node * next

};

typedef结构s _ node s _ list

typedef s _ list * link

链接运算符= NULL

链接操作数= NULL

链接推送(链接堆栈,int值)

{

链接newnode

new node =(link)malloc(sizeof(s _ list));

如果(!新节点)

{

printf(" \ n内存分配失败!!!");

返回NULL

}

新节点-& gt;数据=值;

新节点-& gt;next =堆栈;

stack = newnode

返回堆栈;

}

链接弹出(链接栈,int *value)

{

链接顶部;

如果(堆栈!=空)

{

top =堆栈;

stack = stack-& gt;接下来;

* value = top-& gt;数据;

免费(上);

返回堆栈;

}

其他

* value =-1;

}

int empty(链接栈)

{

if(stack==NULL)

返回1;

其他

返回0;

}

int is_operator(字符运算符)

{

开关(操作员)

{

大小写'+':大小写'-':大小写' * ':大小写'/':返回1;

默认值:返回0;

}

}

int优先级(字符运算符)

{

开关(操作员)

{

大小写'+':大小写'-':返回1;

case“*”:case“/”:返回2;

默认值:返回0;

}

}

int two_result(int operator,int operand1,int operand2)

{

开关(操作员)

{

case '+':return(operand 2+operand 1);

case '-':return(operand 2-operand 1);

case ' * ':return(operand 2 * operand 1);

case '/':return(operand 2/operand 1);

}

}

void main()

{

char表达式[50];

int position = 0;

int op = 0;

int operand 1 = 0;

int operand 2 = 0;

int evaluate = 0;

printf(" \ n请输入顺序表达式:");

gets(表达式);

while(表情[位置]!= ' \ 0 ' & amp& amp表情[位置]!='\n ')

{

if(is_operator(表达式[位置]))

{

如果(!空(运算符))

while(优先级(表达式[位置])& lt;=优先级(运算符-& gt;数据);& amp

!空(运算符))

{

操作数=pop(操作数& ampoperand 1);

操作数=pop(操作数& amp操作2);

运算符=pop(运算符& ampop);

操作数=push(操作数,two_result(op,operand1,operand 2));

}

运算符=push(运算符,表达式[位置]);

}

其他

操作数=push(操作数,表达式[位置]-48);

position++;

}

而(!空(运算符))

{

运算符=pop(运算符& ampop);

操作数=pop(操作数& ampoperand 1);

操作数=pop(操作数& amp操作2);

操作数=push(操作数,two_result(op,operand1,operand 2));

}

操作数=pop(操作数& amp评估);

printf("表达式[%s]结果为' %d ' ",表达式,求值);

getch();

}