资源描述
目录 简单计算器设计 .1 一、系统开发的背景 .1 二、系统分析与设计 .1 (一) 系统功能要求 .1 (二) 系统模块结构设计 .1 三、 系统的设计与实现 .4 (一)菜单选项:VOID MENU1() ; .5 (二)标准型:MENU4() 、ADD() 、SUB() 、PRO() 、DIV() ; .5 (三)科学型:MENU2() 、ADD1() 、SUB1() 、PRO1() 、DIV1() 、FUN() ; .8 四、系统测试 .11 (一) 测试 MENU4() 、ADD() 、SUB() 、PRO() 、DIV()函数 .11 (二) 测试 FUN() 、ADD1() 、SUB1() 、PRO1() 、DIV1()函数 .12 五、总结 .13 六、附件(代码、部分图表) .13 (一)程序代码 .13 (二)部分图表 .20 1 1 简单计算器设计 一、系统开发的背景 当今社会是信息社会,科技经济高速发展的社会!为了更方便人们 的工作生活和加速人们处理信息的速度,计算器应运而生。由于它体积 小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的 必备品! 随着科技的发展计算器的种类变得更多,功能变得更强大,体 积变得更小!电脑的出现改变人们的生活习惯,很多事情都可以电脑来 完成!电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功 能的外延!因此我们将用我们学习的 c 语言编写一个简易的计算器程序! 实现简单的初步的计算功能! 二、系统分析与设计 (一) 系统功能要求 可以实现两个数加、减、乘、除的基本运算同时也可以实现多个数的加、 减、乘、除的混合运算以及实现了一些基本的进制之间的互相转换。 1、进制转换(包括二进制、十进制、十六进制) ; 2、混合运算可以实现用上一次的计算结果接着用进行下一步运算; 3、两个数之间的基本运算只能计算两个数; (二) 系统模块结构设计 通过对系统功能的分析,简单计算器功能如图 1 所示。 2 图 1 简单计算器系统功能图 通过上图的功能分析,把整个系统划分为标准型、科学型 2 大模块,标 准型之中只有一个算数运算模块,科学型之中包括算数运算和进制转换 2 个 模块: 1.标准型,该模块主要实现:两个数加、减、乘、除的基本运算,借助函数 add () 、sub() 、pro() 、div()来实现; 2.科学型,该模块主要实现:多个数的加、减、乘、除的混合运算以及实现 了一些基本的进制之间的互相转换,算术运算借助函数 add1 ()、sub1()、 pro1() 、div1()来实现;进制转换借助函数 fun()来实现。 三、 系统的设计与实现 简单计算机系统 标准型 科学型 算 术 运 算 进 制 转 换 算 术 运 算 3 (一)菜单选项:void menu1() ; 分析:首先输出表头,然后依次输出供用户选择的菜单。流程图如图 2 所示。 图 2:void meun1()流程图 该模块的具体代码如下所示。 void menu1() printf( |=|n); printf( | 1.标准型; 5.科学型; |n); printf( |=|nn); (二)标准型:menu4() 、add() 、sub() 、pro() 、div() ; 分析:1.首先用 menu4()输出供用户选择的加、减、乘、除四个菜单。 流程图如图 3 所示。 图 3:menu4()流程图 该模块的具体代码如下所示。 void menu4() printf( |=|n); printf( | 1.加法; 2.减法; 3.乘法; 4.除法 |n); printf( |=|nn); 2.之后用 add() 、sub() 、pro() 、div()四个函数进行运算;流 标准型 1、加法 2、减法 3、乘法 简单计算器 1、标准型 2、科学型 4、除法 4 程图如图 4 所示。 图 4:add()流程图 3.sub() 、pro() 、div()三个函数的流程图与 add()函数相同, 只需将图四中的处理框的表达式做相应的改动。 该模块的具体代码如下所示。 int add() int add(int x,int y); int a,b,c; printf(请输入所要计算的数); scanf(%d,%d, c=add(a,b); printf(计算结果是:%dn,c); return 0; int add(int x,int y) 开始 输入两数 a,b c=a+b 输出 c 值 结束 5 int z; z=x+y; return (z); float sub() float sub(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, c=sub(a,b); printf(计算结果是:%fn,c); return 0; float sub(float x,float y) float z; z=x-y; return (z); float pro() float pro(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, c=pro(a,b); printf(计算结果是:%fn,c); return 0; float pro(float x,float y) float z; z=x*y; return (z); float div() float div(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, 6 c=div(a,b); printf(计算结果是:%fn,c); return 0; float div(float x,float y) float z; z=x/y; return (z); (三)科学型:menu2() 、add1() 、sub1() 、pro1() 、div1() 、 fun() ; 分析:1.首先用 menu2()输出供用户选择的算术运算、与进制转换两个菜 单。流程图如图 5 所示。 图 5:menu2()流程图 该模块的具体代码如下所示。 void menu2() printf( |=|n); printf( | 1.算术运算; 2.进制转换; |n); printf( |=|nn); 科学型 1.算数运算 2进制转 换 7 2.之后用 add1() 、sub1() 、pro1() 、div1()四个函数进行运算;流程 图如图 6 所示。 图 6:add1()流程图 Sub1() 、pro1() 、div1()三个函数的流程图与 add()函数相同。 该模块的具体代码如下所示。 void add1(double x,double y) double n,z; char t,c; 开始 输入数据 输出结果 结束 c=getchar(+) c=getchar(-) c=getchar(*) c=getchar(/) z=x+y z=x-y z=x*y z=x/y break break break break 输入 0 Y Y Y Y N N N N break 8 z=x+y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; / 返回一般计算 void sub1(double x,double y) double n,z; char t,c; z=x-y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; void pro1(double x,double y) double n,z; char t,c; z=x*y; printf(=%lf,z); c=getchar(); scanf(%c, 9 if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; void div1(double x,double y) double n,z; char t,c; z=x/y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; 四、系统测试 (一) 测试 menu4() 、add() 、sub() 、pro() 、div()函数 10 图 7 menu4() 、add() 、sub() 、pro() 、div()函数 (二) 测试 fun() 、add1() 、sub1() 、pro1() 、div1()函 数 图 8 add1() 、sub1() 、pro1() 、div1()函数 11 图 9 fun()函数 五、总结 系统完成了两数之间的加、减、乘、除最基本运算和多个数的加、减、 乘、除的混合运算以及实现了一些基本的进制之间的互相转换的功能。系统 虽然完成了简单的运算达到了基本的目的但是系统还存在着许多不足之处, 系统完成的运算项目太少,只能完成加、减、乘、除四个运算项目的运算, 不能满足实际生活中的需要,以及在进制转换方面互相转换的进制类型比较 少。同时系统在设计中主次没能很好地把握,使系统显得比较生硬。这些方 面在以后的学习中我们都要加强了解。 通过这次课程设计发现了要想做好一个是比较难的,仅仅有一些基本的 从课堂上学到 c 语言基础是不够的还需要我们查阅更多的资料。这次课程设 12 计不仅让我找到了自己在程序设计方面存在的问题与不足,同时还让我对 C 语言的认识程度上升到了另一个高度,理解更加深刻了,为以后的学习找 到了方向。同时此次课程设计我熟悉并掌握了模块化程序设计方法,理解和 运用结构化程序设计的思路和方法。 六、附件 (一)程序代码 #include #include void add1(double x,double y); void sub1(double x,double y); void pro1(double x,double y); void div1(double x,double y); void menu1() printf( |=|n); printf( | 1.标准型; 5.科学型; |n); printf( |=|nn); void menu2() printf( |=|n); printf( | 1.算术运算; 2.进制转换; |n); printf( |=|nn); void menu3() printf( |=|n); printf( | 算术运算 |n); printf( |=|nn); void menu4() 13 printf( |=|n); printf( | 1.加法; 2.减法; 3.乘法; 4.除法 |n); printf( |=|nn); void add1(double x,double y) double n,z; char t,c; z=x+y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; / 返回一般计算 void sub1(double x,double y) double n,z; char t,c; z=x-y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; 14 void pro1(double x,double y) double n,z; char t,c; z=x*y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; void div1(double x,double y) double n,z; char t,c; z=x/y; printf(=%lf,z); c=getchar(); scanf(%c, if(t!=0) scanf(%lf, switch(t) case +:add1(z,n);break; case -:sub1(z,n);break; case *:pro1(z,n);break; case /:div1(z,n);break; case 0:return;break; int add() 15 int add(int x,int y); int a,b,c; printf(请输入所要计算的数); scanf(%d,%d, c=add(a,b); printf(计算结果是:%dn,c); return 0; int add(int x,int y) int z; z=x+y; return (z); float sub() float sub(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, c=sub(a,b); printf(计算结果是:%fn,c); return 0; float sub(float x,float y) float z; z=x-y; return (z); float pro() float pro(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, c=pro(a,b); printf(计算结果是:%fn,c); return 0; float pro(float x,float y) 16 float z; z=x*y; return (z); float div() float div(float x,float y); float a,b,c; printf(请输入所要计算的数); scanf(%f,%f, c=div(a,b); printf(计算结果是:%fn,c); return 0; float div(float x,float y) float z; z=x/y; return (z); void fun2()/进制转换 int choice,value,i,j=0,k,t; char s50; int a4; printf( *n); printf( 1.十进制转换成二进制; 2.十进制转换成十六进制 ;n); printf( 3.二进制转换成十进制; 4.二进制转换成十六进制 ;n); printf( 5.十六进制转换成二进制; 6.十六进制转换成十进制 ;n); printf( *n); printf(请选择:); scanf(%d, switch(choice) case 1:printf(请输入十进制数值:);scanf(%d, while(value=2) if(value%2!=0) sj+=1; else sj+=0; value=value/2; if(value=1) 17 sj=1; printf(结果为:); for(i=j;i=0;i-) printf(%c,si); break; case 2:printf(请输入十进制数值:);scanf(%d, printf(结果为:%x,value);break; case 3:printf(请输入二进制数:);scanf(%s,s); for(i=0;si!=0;i+); i-;value=0; for(j=0;j0;k-) t*=2; value+=t; printf(结果为:%dn,value);break; case 4:printf(请输入二进制数:); scanf(%s,s); for(i=0;si!=0;i+); i-;value=0; for(j=0;j0;k-) t*=2; value+=t; printf(结果为:%xn,value);break; case 5:printf(请输入十六进制数值:); scanf(%x, while(value=2) if(value%2!=0) sj+=1; else sj+=0; value=value/2; if(value=1) sj=1; 18 printf(结果为:); for(i=j;i=0;i-) printf(%c,si); break; case 6:printf(请输入十六进制数值:); scanf(%x,value); printf(结果为:%dn,break; default:printf(选择有误!n); break; void main() printf( * n); printf( * 欢迎使用简单计算器 * n); printf( * n); int choice; while(choice!=0) menu1(); printf(请选择(0 退出):); scanf(%d, if(choice=1) menu3(),menu4(); printf(请选择(0 退出):); scanf(%d, if(choice=1) add(); if(choice=2) sub(); if(choice=3) pro(); if(choice=4) div(); if(choice=5) menu2(); printf(请选择(0 退出):); scanf(%d, if(choice=1) 19 printf(选择0退出n); double a,b; char c; scanf(%lf%c, if(c!=0) scanf(%lf, switch(c) case +:add1(a,b);break; case -:sub1(a,b);break; case *:pro1(a,b);break; case /:div1(a,b);break; case 0:return;break; else fun2(); printf(n); printf(n); (二)部分图表 图 10 程序总体运行情况
展开阅读全文