(精c语言)多功能计算器大工作作业_第1页
(精c语言)多功能计算器大工作作业_第2页
(精c语言)多功能计算器大工作作业_第3页
(精c语言)多功能计算器大工作作业_第4页
(精c语言)多功能计算器大工作作业_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(精!c语言)多功能计算器大作业(精!c语言)多功能计算器大作业PAGE13(精!c语言)多功能计算器大作业#include#include#include#include #pragma comment(lib, )#define pi void zhuanhua() .请选择菜单上的选项n); flag=1; /*int check(char *c)输入参数: char *c: 输入的字符串 返回参数: 0:字符串中有不符合规定的字符 1: 字符串字符符合规定,没有不符合规定的字符.功能: 检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符, 如果有,则返回0, 表示出

2、现错误。 若没有,则返回1,表式字符串符合规定。*/int check(char *c) int k=0; while(*c!=0) if(*c=s&*(c+1)=i&*(c+2)=n)|(*c=c&*(c+1)=o&*(c+2)=s)|(*c=t&*(c+1)=a&*(c+2)=n)|(*c=c&*(c+1)=o&*(c+2)=t) c+=3; if(*c=e&*(c+1)=) c+=2; if(*c=0 & *c=9) | *c=+ | *c=- | *c=* | *c=/ | *c=. | *c=( | *c=) |(*c=p&*(c+1)=i)|(*c=i&*(c-1)=p); els

3、e 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: 当前运算符数组

4、位置。 返回参数: 无 功能: 将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。 传入值p若为3 则当前符号的数组位置为3. f3=f3+1flen-2=flen-1 flen-1=0; si=si+1slen-1=slen 因为数值比运算符多一个。*/void move(char *f, double *s,int p) int i=0,len=strlen(f); for(i=p; ilen; i+) /*将已经运算过的符号,空出来的位置用后面的符号来填充,*/ /*即把乘和除号的位置用后面的加和减号填充*/ fi=fi+1; si=si+1; si=si+1;

5、flen-1=0; /* double convnum(char *c)输入参数: char *c :由数字和小数点组成的字符,用以转换成double型的数值。 返回参数: num:返回转换好的值。 功能: 将输入的字符串先将其小数点以前的部分复制到temp数组中, 若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中 计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。*/double convnum(char *c) double num=; double a=; int i=0,p=0,len=0; char temp100; int tempi=0

6、; int start=0; int f=1; /*正负符号指示器,若为1则为正数,为1,此数为负数*/ len=strlen(c); if(c0=-) start=1; f=-1; for(i=start; ilen; i+) if(ci=p&ci+1=i) return pi; if(ci=s) return (sin(atof(c+3); if(ci=c&ci+2=s) return (cos(atof(c+3); if(ci=t) return (tan(atof(c+3); if(ci=c&ci+2=t) return (1/tan(atof(c+3); if(ci=e&ci+1=)

7、 return(pow,atof(c+2); if(ci=.) p=i; break; temptempi+=ci; /*将整数部分复制到temp中*/ temptempi=0; if(p!=0) for(i=p+1;i=0; i-) num=num+(a*(tempi-48); a*=10; num=num*f; return num; /* double good(char *c)输入参数: char *c :即将进行运算的字符串型数学表达式。如+(2*3/5)返回参数: s0:计算结果将放入s0中 功能: 将输入的字符串中的数字分别调用convnum(char *c)函数进行数值变换,再

8、将其依 次存入doulbe si中,将加减乘除运算符依次存入字符串符号数组 char fi中, 然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此 good(char *c) 递归函数进行递归运算。 然后根据先乘除,后加减的顺序对已 存入数组的数值根 据存入字符串符号数组的运算符进行运算。结果存入s0中。 返回最终结果。*/double good(char *c) /*可递归函数*/ /*取得数值字符串,并调用convnum转换成double*/ char g100,number30; /*g,保存当前的表达式串,number保存一个数的所有字符*/ char f80; /*保存

9、所有的符号的堆栈*/ int fi=0; /*保存符号的位置指针*/ double s80; /*保存当前所有的数的一个堆栈*/ 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时,表示已经把括号里的内容全部复制到g100中了*/ k=0; num=0; switch(*c) case +: /*当前字符为+-乘除时

10、则表示*/ case -: case *: case/: ffi+=*c; if(*c=* | *c=/) cc+; else jj+; if(*(c-1)!=) numberi=0; i=0;/*完成一个数字的复制,其位置指针i=0*/ ssi+=convnum(number); break; case(: /*有括号,则将当前括号作用范围内的全部字符保存,作为*/ k+; /*一个新的字符表达式进行递归调用good函数计算。*/ while(k0) c+; gnum+=*c; if(*c=) k-; else if(*c=() k+; gnum-1=0; num=0;/*完成一个括号内容的

11、复制,其位置指针num=0*/ ssi+=good(g); break; default: numberi+=*c; if(*(c+1)=0) numberi=0; ssi+=convnum(number); break; c+; ffi=0; i=0; while(cc0) switch(fi) case *: cc-; si+1=si*si+1; move(f,s,i); break; case /: cc-; si+1=si/(float)si+1; move(f,s,i); break; default: i+; break; i=0; while(jj0) switch(fi) ca

12、se +: si+1=si+si+1; jj-; move(f,s,i); break; case -: si+1=si-si+1; jj-; move(f,s,i); break; default: printf(operator error!); break; return s0; void hunhe() char str100; double sum=0; int p=1; while(1) printf(输入表达式: (提示:输入exit退出)n); scanf(%s,str); p=strcmp(str,exit); if(p=0) break; p=check(str); if(

13、p=0) continue; sum=good(str); printf(%s=%f,str,sum); printf(n); printf(返回菜单!n); void ping() .请选择菜单上的选项n); flag=1; void kai(float x) .请选择菜单上的选项n); flag=1; void leijia() .请选择菜单上的选项n); flag=1;void qingchu() .请选择菜单上的选项n); flag=1; else if(b0=c&b1=o&b2=s) c=convnum(b+3); printf(%s=%fn,b,cos(c); printf(Con

14、tinue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; else if(b0=t&b1=a&b2=n) c=convnum(b+3); printf(%s=%fn,b,tan(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; else if(b0=c&b1=o&b2=t) c=convnum(b+3); printf(%s=%fn,b,1/tan(c); printf(C

15、ontinue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; else printf(输入错误!请重新输入n); void fansanjiao() .请选择菜单上的选项n); flag=1; else if(b0=a&b1=r&b2=c&b3=c&b4=o&b5=s) c=convnum(b+6); printf(%s=%fn,b,acos(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n)

16、; flag=1; else if(b0=a&b1=r&b2=c&b3=t&b4=a&b5=n) c=convnum(b+6); printf(%s=%fn,b,atan(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; else if(b0=a&b1=r&b2=c&b3=c&b4=o&b5=t) c=convnum(b+6); printf(%s=%fn,b,atan(1/c); printf(Continue ); getchar(); d=getchar();

17、 if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; else printf(输入错误!请重新输入n); void jiecheng() int flag=0;char d;long x;for(;flag=0;)printf(求多少的阶乘(直接输入一个数):);scanf(%ld,&x); int num100000 = 1, len = 0, rem = 0, i, j; for(i = 2; i = x; i+) for(j = 0; j = 0; i-) printf(%d, numi); printf(nContinue ); getchar();

18、d=getchar(); if(d=n|d=N) printf(已退出请选择菜单上的选项n); flag=1; void fangcheng() .请选择菜单上的选项n); flag=1; void shexingjuzhen()int a,b,flag=0;char d;for(;flag=0;)printf(几行几列(x,x)n);scanf(%d,%d,&a,&b);int c100100=0,i,j,n=1;for(j=0;jb;j+)for(i=0;ia;i+)if(j%2=0)cij=n+;if(j%2!=0)cij=n+a-(i+1);if(i=a-1)n=n+a;for(i=0

19、;ia;i+)for(j=0;jb;j+)printf(%5d ,cij);printf(n); printf(nContinue );getchar();d=getchar();if(d=n|d=N)printf(已退出请选择菜单上的选项n); flag=1;void juzhen() char choice;printf(1.输出s形矩阵n);printf(2.输出奇数魔方阵n);getchar();scanf(%c,&choice);switch(choice)case1:shexingjuzhen();break;case2:mofangzhen();break;default:pri

20、ntf(输入错误,请再次输入n);scanf(%c,&choice);int main() mciSendString(open sound/ alias mymusic_1, NULL, 0, NULL); /添加音乐mciSendString(play mymusic_1, NULL, 0, NULL); float x,y,z;char choice; printf( *欢迎使用*n);printf( *=本计算器功能菜单如下:=*n);printf( * 输入a:转化16以内的任意进制 输入f:进行正数的开根运算*n); printf( * 输入b:进行三角函数运算 输入g:求前n项和 *n);printf( * 输入c:进行求余 输入i:阶乘运算 *n); printf( * 输入d:进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论