1、实验一 多功能计算器 一、问题描述 设计一个多功能计算器,可以完成基本的计算。 设计要求: 1.具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘R’返回 菜单。 例如:输入:2 + 5 输出:7 2.实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。输入表达式如下: 例如:输入:2+5 输出:7 二、算法说明 1.数据结构说明(可以图示说明,也可以文字说明) 本程序主要根据选择菜单编写了六个自定义函数
2、用于在main()函数中调用,在main()中,用一个字符变量num1来记录下菜单选项的标号,根据num1的值来决定调用哪个函数。 程序要完成的功能及所要用到的函数如下: 下面是整个程序的流程图: 2.算法说明(即函数说明) void suanshuyunsuan() //做算术运算时调用的函数 void suanshuyunsuan2() //选择继续做算术运算调用的函数,将上次运算的结果做为下次算术运算的第一个操作数 //判断算术运算是否继续 void panduan() //判断算术运算是否继续 void biaodashiyunsuan()
3、//单运算符表达式实现函数 void qingping() //清除屏幕 void fanhuicaidan() //显示菜单 三、测试结果(这部分需文字与图示结合) 1.第一组测试用例 (1)测试输入: 测试目的:测试算术运算的功能 结果输出: (2)再一次输入:1 测试目的:测试算术运算是否能继续 结果输出: (3)这时输入:0 测试目的:退出算术运算 结果输出: 2.第二组测试用例 测试输入: 测试目的:测试单运算符表达式函数 结果输出: 3.第三组测试用例
4、测试输入:c
测试目的:测试输入c是否能清屏
测试输出:
4.第四组测试用例
测试输入:r
测试目的:测试返回菜单函数
测试输出:
5. 第五组测试用例
测试输入:t
测试目的:测试是否能正确退出程序
测试输出:
附录:源代码(附上全部源代码,且不能雷同)
#include
5、 { char fh,hh1,hh2; //hh1与hh2是用来存放回车字符的 double num1,num2; printf("输入:"); scanf("%lf%c%c%c%lf",&num1,&hh1,&fh,&hh2,&num2); switch(fh) //判断是做什么运算 { case '+':z=num1+num2;break; case '-':z=num1-num2;break; case '*':z=num1*num2;break; case '/':z=num1/num2;break;
6、 } printf("结果:="); printf("\n%lf\n",z); } //选择继续做算术运算调用的函数,将上次运算的结果做为下次算术运算的第一个操作数 void suanshuyunsuan2() { double num1; char fh; printf("%lf\n",z);//首先输出前一次算术运算的结果 rewind(stdin); scanf("%c%lf",&fh,&num1); switch(fh) { case '+':z=z+num1;break; case '-':z=z-num1;break;
7、 case '*':z=z*num1;break; case '/':z=z/num1;break; } printf("结果:="); printf("\n%lf\n",z); } //判断算术运算是否继续 void panduan() { printf("是否结束运算?\n"); printf("0.是 "); printf("1.否\n"); printf("请选择0或1>:"); } //单运算符表达式实现函数 void biaodashiyunsuan() { int num1,num2,num3; char
8、fh; printf("输入:"); scanf("%d%c%d",&num1,&fh,&num2); printf("结果:="); switch(fh) { case '+':num3=num1+num2;break; case '-':num3=num1-num2;break; case '*':num3=num1*num2;break; case '/':num3=num1/num2;break; } printf("%d",num3); } //清除屏幕 void qingping() { system("cls"); }
9、 //显示菜单 void fanhuicaidan() { printf(" 菜单\n"); printf("a.算术运算\n"); printf("b.表达式运算\n"); printf("c.清屏重做\n"); printf("r.返回菜单\n"); printf("t.退出程序\n"); } void main() { char num1; //用于存放选择的菜单选项 int pd; //用于存放是否继续算术运算的选择项 printf(" 菜单\n"); //先显示菜单 printf("a.算
10、术运算\n"); printf("b.表达式运算\n"); printf("c.清屏重做\n"); printf("r.返回菜单\n"); printf("t.退出程序\n"); while(1) { rewind(stdin); //清除键盘缓冲区 printf("\nplease chose one letter from \"a,b,c,r,and t\"\n"); scanf("%c",&num1); //输入一个数用于判断是选择了哪一个菜单项 if(num1=='a') //选择了做算术运算
11、 { suanshuyunsuan(); panduan(); scanf("%d",&pd); while(pd) //继续做算术运算时就循环 { suanshuyunsuan2(); panduan(); scanf("%d",&pd); } } if(num1=='b') //选择了做单运算符表达式运算 biaodashiyunsuan(); if(num1=='c') //清屏 qingping(); if(num1=='r') //显示菜单 fanhuicaidan(); if(num1=='t') //退出程序 break; } }






