项目一简易计算器项目要求:C语言具有功能强大,灵活,可移植性好等特点,可用其开发各类应用系统。
本项目要求用C语言完成一个简易计算器的开发。
相关要求如下:1.能够实现两个数的算术运算功能(加、减、乘、除)。
即依次输入第一个操作数、运算符、第二个操作数,然后输出运算结果。
例如:输入:2+5输出:2+5=72.能实现单运算符表达式运算功能。
例如:输入:13*8输出:13*8=1043.开发工具与运行环境。
●操作系统:windows xp/2000/ME等。
●开发工具:VC++ 6.0。
4.附加功能。
●实现各类进制之间的转换,输入/输出格式根据个人理解确定;●带函数功能;●良好的操作界面与提示信息。
教学目标:1.能力目标。
●进一步熟悉自顶向下,逐步细化的程序设计方法;●掌握结构化程序开发过程。
2.知识目标。
●函数的定义、说明、调用方法;●局部变量、全局变量的概念。
3.核心能力目标。
●成员之间的交流沟通能力;●成员之间的协调配合意识与能力。
教学方法:1.直观教学法。
将需要完成的简易计算器展示给各位同学,演示各项功能。
启发学生思考系统的整体结构与模块划分和各个功能的实现方法,调动学生学习的积极性与主动性。
2.学法。
(1)模仿练习;(2)通过网络查找其它计算器的功能及实现方法,小组讨论改善系统功能,力求实现更多的功能。
课时及教学环境:1.课时:课内8+课外8;2.教学环境:机房+网络。
项目实施前准备:复习C语言的基本数据类型,运算符,表达式,基本语句,上网查找与计算器相关的资料,了解软件系统开发的过程。
引导文(函数):函数是实现模块化设计的基础,C语言中用函数来实现模块功能。
C语言函数分为两类,一类是系统函数,一类是用户自定义函数。
系统函数只要按照格式进行调用即可,用户函数需要用户进行定义之后,才能进行调用。
1.函数定义函数定义格式:[返回值类型标识符] 函数名([形式参数列表]){函数体}返回值类型标识符说明函数返回值的类型,省略时,表示返回int类型。
形式参数列表是表示函数要进行相应数据处理时,必须从主调函数里获取相应的数据。
函数体是实现函数功能的语句序列。
例:编写求两个整数和的函数。
分析:每次调用函数时,能根据用户给定的两个整数,求出他们的和。
因此此函数需要两个整型的形式参数,结果也是一个整型,所以返回值也是整型。
其定义如下:int add(int iNum1,int iNum2){int iSum;iSum=iNum1+iNum2;return(iSum);}函数返回值是用return(表达式);形式返回的。
Add是函数名,iNum1、iNum2是形式参数。
函数的功能就是求两个int型数据的和,并将所求的和返回给主调函数。
2.函数调用不管是系统函数还是用户自定义函数,一旦定义好了之后,只需要按照格式进行调用即可。
调用格式如下:函数名(实际参数列表);函数调用过程:首先将实际参数的值依次传递给形式参数变量,然后运行函数体语句,最后返回主调函数,如果有return()语句则由些返回,并且将返回值返回给主调函数,如果没有,则从函数最外层的“}”返回到主调函数。
如:iResult=add(56,78);就是对add()函数的调用,首先将实参78传递给形式参数变量iiNum2,将56传递给形式参数变量iNum1;然后执行函数体,计算两个整数的和,最后由return语句返回所求的和134。
本例最后是将134赋给变量iResult。
函数调用一定注意是将实际参数的值依次传递给形式参数变量。
3.函数说明通常函数的定义是放在被调用之后,所以需要在被用之前对此函数进行声明以告诉编译系统函数的返回值以及形式参数。
声明格式如下:[函数返回值类型符] 函数名(形式参数列表/形式参数类型列表);如:int add(int iNum1,int iNum2);或者是int add(int ,int);注:函数的说明一定要放在函数被调用之前,一般放在main()之前。
4.函数设计要设计一个函数,首先要确定函数的功能;然后是确定函数的形式参数,即函数需要的输入数据;再确定函数的返回值,即输出结果,也就是函数调用之后希望得到的结果;最后根据上述信息,设计函数的算法。
例:请设计一个函数,计算n!。
分析:(1)功能:求任意数的阶乘;(2)输入:n,即要求阶乘的那个数,整型;(3)输出:n!,长整型;(4)算法:A1:设定循环控制变量的初值为1,存放阶乘变量的初值也为1;A2:求当前循环控制变量所对应值的阶乘;A3:循环控制变量加1;A4:判断循环控制变量的值是否超过n,如果是的,则结果循环,转A5,否则转A2;A5:返回所求的n!。
根据上述分析,编写代码如下:long int factorial(int iNum){long lFact=1;int iRep=1;for(;iRep<=n;iRep++){lFact*=iRep;}return(lFact);}项目总体设计:1.项目总体设计思想。
模块化的程序设计思路。
根据项目要求,将需要实现的功能分解为多个模块,各模块要求内聚性高,偶合性低,具有单入口和单出口。
2.系统工作流程。
3.模块划分(5)主函数模块(main)(6)显示主界面(菜单)模块(disp)(7)基本算术运算模块(base_cal)(8)单运算符表达式运算模块(exp_cal)(9)进制转换模块(num_conver)4.界面设计本系统由于比较简单,所以用户界面只有主菜显示一个界面,其它模块功能直接通过提示符显示相关提示信息。
主界面菜单如下:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 简易计算器&& 丁辉&& 常州轻工职业技术学院&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1. 基本算术运算&& 2. 单运算符表达式运算&& 3. 进制转换&& 0. 退出&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请选择相应功能代码(0~3):模块设计、代码编写与调试:模块设计中,采用自顶向下,逐步细化的方法,每个模块从输入、输出和算法三个方面进行分析与设计。
1.主函数模块(main)(1)输入(形参):无。
(2)输出(返回值):无。
(3)算法:A1: 调用主界面显示模块;A2: 等用户输入功能选择;A3:根据用户的选择,调用相应的模块;A3.1:调用基本算术运算模块;A3.2:调用单运算符表达式运算模块;A3.3:调用进制转换模块;A3.4:退出系统A4:返回A1。
代码编写:main(){char cChoice;disp(); //显示主界面(菜单)scanf(“%c”,&cChoice);//等待用户选择功能模块代号while(1){switch(cChoice) //调用相应的模块{case ‘1’: base_cal(),break;case ‘2’: exp_cal (),break;case ‘3’: num_conver),break;case ‘0’:exit(0),break;}system(“cls”);//清屏disp();getchar();//空读scanf(“%c”,&cChoice); //等待用户选择功能模块代号}}代码调试:自顶向下的程序设计方法,在调试时要对没有代码的模块用printf()函数来替换,以模拟调用逻辑是否正确。
因此主函数调试时,要把base_cal()、exp_cal ()、num_conver()分别用printf(“base-cal\n”)、printf(“exp-cal\n”)、printf(“num-conver\n”)替换,disp()用printf(“1. 基本算术运算\n2. 单运算符表达式运算\n 3. 进制转换\n0. 退出\n请选择相应功能代码(0~3):\n”)代替,以验证主函数的逻辑关系。
替换后的代码如下:/*简易计算器程序*//*程序名:calculate.c*//*作者:dinghui*//*编程日期:2011-2-28*/#include <stdio.h>#include <stdlib.h>main(){char cChoice;printf(“1. 基本算术运算\n2. 单运算符表达式运算\n 3. 进制转换\n0. 退出\n请选择相应功能代码(0~3):\n”);scanf(“%c”,&cChoice);while(1){switch(cChoice){case ‘1’:printf(“ base_cal\n”),break;case ‘2’: printf(“exp_cal\n”),break;case ‘3’:printf(“ num_conver\n”),break;case ‘0’:exit(0),break;}system(“cls”);printf(“1. 基本算术运算\n2. 单运算符表达式运算\n 3. 进制转换\n0. 退出\n 请选择相应功能代码(0~3):\n”);getchar();scanf(“%c”,&cChoice);}}2.显示主界面模块(disp)(1)输入:无。
(2)输出:显示主界面,函数没有返回值。
(3)算法:A1:依次显示主界面的每一行;A2:返回。