计算器论文邵阳学院13级物联网工程C语言课程设计陈汝涛.doc

上传人:jian****018 文档编号:9163892 上传时间:2020-04-03 格式:DOC 页数:49 大小:277.50KB
返回 下载 相关 举报
计算器论文邵阳学院13级物联网工程C语言课程设计陈汝涛.doc_第1页
第1页 / 共49页
计算器论文邵阳学院13级物联网工程C语言课程设计陈汝涛.doc_第2页
第2页 / 共49页
计算器论文邵阳学院13级物联网工程C语言课程设计陈汝涛.doc_第3页
第3页 / 共49页
点击查看更多>>
资源描述
课程设计(论文)题 目 名 称 计算器 课 程 名 称 C语言程序设计 学 生 姓 名 陈汝涛 学 号 1341306005 系 、专 业 信息工程系、物联网工程 指 导 教 师 黄磊 2014年 5月 8日目 录1 前言12 需求分析12.1 课程设计目的12.3 设计环境12.4 开发语言13 分析和设计23.1 模块设计23.2 系统流程图53.3 主要模块的流程图64 具体代码实现75 课程设计总结395.1 程序运行结果395.2 课程设计体会47参考文献47致 谢481 前言设计一个简单有趣的多功能计算器,具有可视化的简单图形样式,该计算器除了实现基本的加减乘除四则混合运算之外,另新增三角函数、反三角函数、对数运算、幂运算、进制转换、阶乘运算、位运算等内容。该程序主要是依靠函数的定义与调用、while循环、switch语句实现循环计算的,另外使用system()函数进行了清屏、延时、格式控制等。该程序最大特点在于有趣界面、自动选项、误输提示、功能完善等。2 需求分析2.1 课程设计目的学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),将课本上的理论知识和实际有机结合起来,提高学生的分析解决实际问题的能力;加强学生适应实际,实践编程的能力;锻炼使用文献资料及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。2.2 课程设计任务设计具有图形样式的计算器,用鼠标按键方式实现数值运算。界面自行设计,要求显示计算器和实现加、减、乘、除等基本计算功能。1、 查阅相关文献资料;2、 按时完成系统的设计并且能够运行;3、 要求程序正确,功能可靠;操作简单,使用方便;4、 课程设计交流:认真写课程设计日志,每2天指导老师审查,通过邮件、电话或者面谈与导师沟通汇报情况;5、 按课程设计(论文)要求,写课程设计论文。2.3 设计环境(1)Windows 2000/2003/XP/7/Vista系统(2)Visual C+或TC集成开发环境2.4 开发语言C语言3 分析和设计首先定义好子函数,有三角函数、反三角函数、对数运算函数、幂运算函数、进制转换函数、阶乘运算函数、位运算函数、错误提示函数、进入界面函数、退出界面函数,子函数中使用while循环计算,使用switch()语句以实现选择欲选功能,其中使用赋值和getch()实现自动识别并进入相应功能界面,每循环一次就清屏一次。再编写main()函数,主函数中使用switch()调用子函数,getch()用来接收switch()中的常量表达式,子函数中while()循环中使用break终止本次循环进入下一次循环,当不满足循环条件时跳出循环并清屏一次,再返回主函数中的循环,当不满足主函数循环条件时跳出主函数中的循环。Sleep()延时函数使用在欲停留语句之后,且需添加windows.h头文件,getch()接收switch()中的表达式,使用在switch()之前,且需添加conio.h头文件。每次进入子函数时对主函数进行清屏,退出子函数时亦对子函数进行清屏。3.1 模块设计子函数与主函数的大体结构如下:void A() int i,c;system(title 计算器);while(i)printf(n); printf(请选择选项n);c=getch();switch(c)case 1:A();break;case 0:i=0;break;计算使用的每个子函数中使用system()函数命名程序名称、控制窗口大小、颜色和清除主函数界面:如system(title 对数运算-计算器);system(mode con cols=50 lines=40);system(color a1);system(cls);利用while(i)循环计算,当欲返回时通过“case 0:i=0;break;”跳出循环,while(i)循环体中使用switch(c)开关分支以控制选择,每个开关分支语句执行相应的计算语句,如case 1:printf(请输入真数x:n);scanf(%lf,&x);printf(ln x 的结果为:%lgn,log(x);system(pause);system(cls);break;c=getch()作为switch(c)的分支表达式,且“c=getch()”需放在switch(c)之前,这样即可通过输入自动识别开关分支,而无需输入选项之后需按“Enter”。当所输入的选项不满足switch(c)分支情况时,执行default :error();break;default进行错误提示,并继续循环,循环结束后需需进行清除该函数界面并返回,进入主函数界面。主函数结构与子函数相似,在主函数的开头使用begining();进入欢迎界面Sleep(3000);/延时3秒,末尾添加end();/结束界面。定义函数double readnum(),在四则混合运算中,将数字字符转化成浮点型实数进行计算。定义函数double evalpost(),在四则混合运算中,计算后缀表达式的值。定义函数int is_operation(),在四则混合运算中,判断字符是否为操作字符。定义函数int priority(),在四则混合运算中,判断字符的优先级。定义函数void postfix(),在四则混合运算中,将中缀表达式转化成后缀表达式。定义函数void zhuanhuan(),在四则混合运算中,实现去括号的转化。定义函数void A(),调用子函数,实现加减乘除混合运算。定义函数void B(),利用系统自带的对数运算,定义成函数B(),以实现对数的简单运算,其中参数需为实型。定义函数void C(),定义幂函数,利用系统自带的幂运算实现简单而方便的幂运算,其中开平方函数需判断参数是否小于0。定义函数void D(),利用系统自带的三角函数运算定义三角函数D(),参数需为实型,且tan()的参数不能为直角(即90度的奇数倍),计算之前需将角度制转换成弧度制,才能进行系统的三角函数运算。定义函数int conver(),在进制转换函数中,将字符型转化为整型,进制转换函数。定义函数void E(),利用系统的格式控制和相关函数定义进制转换函数,利用格式控制以自动转换,其中itoa()把一个整数转换为字符串,sprintf()函数把格式化的字符串写入一个变量中。定义函数void F(),通过for循环实现累加与累乘。定义函数void G(),通过系统自带的按位与、按位或、按位异或、按为取反、按位左移与右移运算,实现简单的位运算,其中参与运算的参数需为int类型。定义函数void H(),将系统自带的反三角函数定义成函数H(),需注意参数的取值范围,arcsin x中|x|=0&f*i=0&f*i0)x=x/10.0;return (x);/ 计算后缀表达式的值 /double evalpost(char f)double obst10;int top=0;int i=0;double x1,x2;while(fi!=)if(fi=0&fi=0&ei=priority(ei)fj+=opst-top;opsttop=ei;top+;i+;while(top) fj+=opst-top;fj=0;/ 转化 /void zhuanhuan(char g,char e)int k,i,j=0;for(i=0;gi!=;i+)k=i+1;if(gi=(&gk=-)ej+=gi;ej+=0;else ej+=gi;ej=;/定义四则混合运算函数void A()system(title 四则混合运算-计算器);/命名程序名称system(mode con cols=50 lines=40);/控制窗口大小system(color B1);/控制颜色 int wei; char e100,f100,g100; int sign;int flag; do system(cls);/清除主函数界面printf(n);printf(n n);printf( 使用步骤 n);printf( 1.输入带符号的表达式; n);printf( 2.输入=,如2+3= ; n);printf( 3.输入欲留小数的位数,; n);printf( 4.选择是否继续! n);printf( n);printf( n);printf( 除数不能为0 n);printf( 输入欲计算的表达式: n);printf( 如:1*2/(4-6)= n);printf( 按1继续 n);printf( 按0返回 n);printf( n);scanf(%s,g);zhuanhuan(g,e);/调用转化函数postfix(e,f);/调用中缀表达式转化成后缀表达式函数printf(输出保留几位小数:n);scanf(%d,&wei);/结果欲保留几位小数printf(%.*lfn,wei,evalpost(f);/调用计算后缀表达式的值函数 flag=3 ;printf(继续/返回? 1/0?);sign=getch();/用getch()接收开关分支(情况)switch(sign)case 1:flag=1;break;case 0:flag=0;break;/终止循环,返回主函数default: printf(输错了哦!请重新输入:n);if(flag=0)break; while(flag=1);system(cls);/退出时,清除此函数界面/定义对数运算函数B()void B()int i,c;system(title 对数运算-计算器);/命名程序名称system(mode con cols=50 lines=40); /控制窗口大小system(color a1);/控制颜色system(cls);/清除主函数界面 while(i)printf( n); printf( n); printf( 对数运算 n);printf( n); printf( n); printf( n); printf( n); printf( n);printf( ln x 运算 -1 n);printf( n);printf( n);printf( log10 x 运算 -2 n);printf( n);printf( n);printf( logx y 运算 -3 n);printf( n);printf( n);printf( 按 0 返回 -0 n);printf( n); printf( n); printf(请选择选项n);c=getch();switch(c)double x,y;/对数函数中参数需为实型case 1:printf(请输入真数x:n);scanf(%lf,&x);printf(ln x 的结果为:%lgn,log(x);/%lg为输出无效的0system(pause);system(cls);break;case 2:printf(请输入真数x:n);scanf(%lf,&x);printf(log10 x 的结果为:%lgn,log10(x);/%lg为输出无效的0system(pause);system(cls);break;case 3:printf(请输入底数x的值:n);scanf(%lf,&x);printf(请输入真数y的值:n);scanf(%lf,&y);printf(logx y 的结果为:%lgn,(log(y)/log(x);/%lg为输出无效的0system(pause);system(cls);break;case 0:i=0;break;/终止循环,返回主函数default :error();break;/输错时,调用error()函数进行错误提示system(cls);/退出时,清除此函数界面/定义幂运算函数C()void C()int i,c;system(title 幂运算-计算器);/命名程序名称system(mode con cols=50 lines=40); /控制窗口大小system(color F3);/控制颜色system(cls);/清除主函数界面 while(i)printf( n); printf( n); printf( 幂运算 n);printf( n);printf( ( *_* ) n);printf( n);printf( n);printf( X平方运算 -1 n);printf( n);printf( n);printf( x 立方 -2 n);printf( n);printf( n); printf( x 的y方运算 -3 n); printf( n); printf( n); printf( 自然常数e -4 n); printf( n); printf( n); printf( e的X方 -5 n); printf( n); printf( n); printf( x的开平方 -6 n);printf( n);printf( n); printf( 按0返回 -0 n);printf( n);printf( n);printf(请选择选项n);c=getch();/用getch()接收开关分支(情况)switch(c)double x,y;/x需为实型 case 1:printf(请输入一个数:n);scanf(%lf,&x);printf(x的平方的结果为:%lgn,x*x);system(pause);system(cls);break;case 2:printf(请输入一个数:n);scanf(%lf,&x);printf(x的立方的结果为:%lgn,x*x*x);system(pause);system(cls);break;case 3:printf(请输入底数x的值:n);scanf(%lf,&x);printf(请输入幂y的值:n);scanf(%lf,&y);printf(xy结果为:%lgn,pow(x,y);/利用系统pow()函数system(pause);system(cls);break;case 4:printf(e的值是:2.718281828459n);system(pause);system(cls);break;case 5:printf(请输入x的值:n);scanf(%lf,&x);printf(ex的结果为:%lgn,exp(x);/利用系统exp()函数system(pause);system(cls);break;case 6:printf(请输入x:n);scanf(%lf,&x);if(x=0)/只有非负数才能开平方printf(x的平方根为%lgn,sqrt(x);/利用系统sqrt()函数system(pause);system(cls);break;else printf(有错误哦!n);system(pause);system(cls);break;case 0:i=0;break;/终止循环,返回主函数default :error();break;/输错时,调用error()函数进行错误提示system(cls);/退出时,清除此函数界面/定义三角函数D()void D()int i,c;system(title 三角函数-计算器);/命名程序名称system(mode con cols=50 lines=40); /控制窗口大小system(color d2);system(cls);/清除主函数界面 while(i)printf( n); printf( n); printf( 三角函数 n);printf( n);printf( =_= n);printf( n);printf( n); printf( sin x 运算 -1 n); printf( n); printf( n); printf( cos x 运算 -2 n); printf( n); printf( n); printf( tan x 运算 -3 n); printf( n); printf( n); printf( 按 0 返回 -0 n); printf( n); printf( n);printf(请选择选项n); c=getch();/用getch()接收开关分支(情况)switch(c)double x,y; case 1:printf(请输入一个数(角度):n);scanf(%lf,&x);y=3.1415926535898*x/180;/将y由角度制转换为弧度制printf(sin x结果为:%lgn,sin(y);/y需为弧度制system(pause);system(cls);break;case 2:printf(请输入一个数(角度):n);scanf(%lf,&x);y=3.1415926535898*x/180;/将y由角度制转换为弧度制printf(cos x结果为:%lgn,cos(y);/y需为弧度制system(pause);system(cls);break;case 3:printf(请输入x的值(角度):n);scanf(%lf,&x);if(x=90|x=270|x=450|x=630|x=-90|x=-270|x=-450|x=-630)printf(错误了哦!n);/y不能为直角else y=3.1415926535898*x/180;/将y由角度制转换为弧度制printf(tan x结果为:%lgn,tan(y);/y需为弧度制system(pause);system(cls);break;case 0:i=0;break;/终止循环,返回主函数default :error();break;/输错时,调用error()函数进行错误提示system(cls);/退出时,清除此函数界面/字符型转化为整型,进制转换函数int conver(char acr)int s,sum=0;unsigned ai;for(ai=0;aistrlen(acr);ai+)s=acrai-0;sum=sum*2+s;return (sum);/定义进制转换函数void E()int i,c;system(title 进制转换-计算器);/命名程序名称system(mode con cols=50 lines=40); /控制窗口大小system(color e2);system(cls);/清除主函数界面 while(i)printf( n); printf( n); printf( n); printf( 进制转换 n); printf( n); printf( n); printf( n); printf( 2转8运算 1n); printf( 2转10运算 2n); printf( 2转16 3n); printf( 8转2运算 4n); printf( 8转10运算 5n); printf( 8转16运算 6n); printf( 10转2运算 7n); printf( 10转8运算 8n); printf( 10转16运算 9n); printf( 16转2运算 an); printf( 16转8运算 bn); printf( 16转10运算 cn); printf( 返回 0n); printf( n);printf(请选择选项n);c=getch();/用getch()接收开关分支(情况)switch(c)char str225;int num;int sum;char buffer30;case 1:printf(2转8 输入一个要转换的数:n);scanf(%s,buffer);printf(%on,conver(buffer);/2转8system(pause);system(cls);break;case 2:printf(2转10 输入一个要转换的数:n);scanf(%s,buffer);printf(%dn,conver(buffer);/2转10system(pause);system(cls);break;case 3:printf(2转16 输入一个要转换的数:n);scanf(%s,buffer);printf(%xn,conver(buffer);/2转16system(pause);system(cls);break;case 4:printf(8转2 输入一个要转换的数:n);scanf(%o,&sum);printf(%sn,itoa(sum,buffer,2);/itoa()把一个整数转换为字符串system(pause);system(cls);break;case 5:printf(8转10 请输入一个要转换的数n);scanf(%o,&num);sprintf(str, %d, num);/sprintf()函数把格式化的字符串写入一个变量中 printf(%sn,str);system(pause);system(cls);break;case 6: printf(8转16 请输入一个要转换的数n);scanf(%o,&num);sprintf(str, %x, num); printf(%sn,str);/利用格式控制以自动转换system(pause);system(cls);break;case 7:break;printf(十进制转二进制,请输入:n);scanf(%d,&sum);printf(%sn,itoa(sum,buffer,2);system(pause);case 8:printf(10转8 请输入一个要转换的数n);scanf(%d,&num);sprintf(str, %o, num);/sprintf()函数把格式化的字符串写入一个变量中 printf(%sn,str);system(pause);system(cls);break;case 9:printf(10转16 请输入一个要转换的数n);scanf(%d,&num);sprintf(str, %x, num);/sprintf()函数把格式化的字符串写入一个变量中 printf(%sn,str);system(pause);system(cls);break;case a: printf(16转2 输入一个要转换的数:n);scanf(%x,&sum);printf(%s,itoa(sum,buffer,8);/itoa()把一个整数转换为字符串system(pause);system(cls);break;case b:printf(16转8 请输入一个要转换的数n);scanf(%x,&num);sprintf(str, %o, num);/sprintf()函数把格式化的字符串写入一个变量中 printf(%sn,str);system(pause);system(cls);break;case c:printf(16转10 请输入一个要转换的数n);scanf(%x,&num);sprintf(str, %d, num);/sprintf()函数把格式化的字符串写入一个变量中 printf(%sn,str);system(pause);system(cls);break;case 0:i=0;break;/终止循环,返回主函数default :error();break;/输错时,调用error()函数进行错误提示system(cls);/退出时,清除此函数界面/定义阶乘函数void F()int i,c;system(title 阶乘运算-计算器);/命名程序名称system(mode con cols=50 lines=40); /控制窗口大小system(color 02);system(cls);/清除主函数界面 while(i)printf( n); printf( n); printf( 阶乘运算 n); printf( n); printf( () n); printf( n); printf( n); printf( n); printf( 阶乘运算 -1 n); printf( n); printf( n); printf( N 阶求和 -2 n); printf(
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!