南京理工大学
VC++课程设计实验报告
姓名 刘书源 学号 0616150128 班级 06161501 任课教师 刘永 时间 9月 教师指定题目 3-1计算器 评定难易级别 B 实验报告成绩 1.实验内容:
1.1 程序功能介绍
实现计算器的功能。用户根据程序的提示,输入数字,选择要进行的计算,可以进行加、减、乘、除运算,简单的四则运算及其测试,开平方,华氏温度与摄氏温度之间的相互转换。
1.2 程序设计要求
(1) 完善计算器程序,改为可对实数操作。
(2) 完善程序,改为多个操作数基本四则运算,遇到0为止。
(3) 增加函数,完成四则混合运算,注意算法要考虑运算符的优先级,增加相应的主菜单选
项。
(4) 添加语句,使四则运算具有测试功能,即计算机能够自动出题,并要求用户计算,同时
南京理工大学
计算机判断用户的计算的对错并打分,要求十题为一个单元,加减运算时最高为两位数运算,乘法为两位数乘一位数,除法是两位数除一位数,且要求没有余数。
1.3本人承担主要任务
本人在此次C++程序设计工作中与芮奕欣同学一组,共同完成了此次课程设计。在实验中,我们共同合作完成了两个主要的函数功能:四则运算的实现和测试。我自己主要负责了程序的后期调试工作,发现并改正程序中出现的错误,使程序顺利的运行。
本人添加的主要任务如下:
1. 四则运算功能的实现(void oopcalc) 2. 四则运算的测试(void calctest) 3. 程序的后期调试。
2. 源程序结构流程框图与说明(含新增子函数的结构框图)
南京理工大学
入开程始序进进入主菜单 选择所需要的运算界面 计算界面 四则运算的测试界面 简单的+ — * / √ 运算 复杂的整数四则运算 选择测试的难易 输入选择 输入运算表达式 根据提示输入所给出算式的结果 输入需要运算的数字 进行运算 输出结果 进行判断输出判断结果并记分 进行运算输出结果 做完十题后输出总得分 是否继续 执行程序 YES NO 结束退出
南京理工大学
3. 程序运行结果界面
图1,程序主界面,选择功能
图2,简单四则运算的测试功能 图3,复杂四则运算的实现
南京理工大学
4.关键源代码及注释
1. 四则运算功能的实现(void oopcalc)
void oopcalc :: calcmixed() { pos=0;
cout<<\"请输入整数表达式\"<>shizi; answer2=mixed(); if(answer2!=0)cout<cout<<\"Press any key to continue\\n\" ; getch(); menu(); }以上是四则运算的共有成员函数代码。 int oopcalc::mixed() {
int rtn=mul();
while(shizi[pos]=='+'||shizi[pos]=='-') {
int op=shizi[pos++];
int opr2=mul(); if(op=='+')
rtn+=opr2;
南京理工大学
else
rtn-=opr2; }
return rtn; }
int oopcalc::mul() {
int rtn=number();
while(shizi[pos]=='*'||shizi[pos]=='/') {
int op=shizi[pos++];
int opr2=number(); if(op=='*')
rtn*=opr2;
else
rtn/=opr2; }
return rtn; }
int oopcalc::number() { int rtn;
if(shizi[pos]=='(') {
pos++;
南京理工大学
rtn=mixed();
pos++; return rtn; }
rtn=atoi(shizi+pos); while(isdigit(shizi[pos]))
pos++;
return rtn; }
以上是实现四则运算功能的函数代码
以上是整数四则运算的全部程序,整数四则运算首先是通过调用公有成员函数void calcmixed()实现表达式的输入及储存,然后函数void calcmixed()再调用私有成员函数void mixed()以实现对表达式的运算,其原理是先找到()运算符再依次找* / + -运算符,按照他们的优先级进行运算。
2 四则运算的测试 (void calctest)
void oopcalc :: calctest() {
cout<<\"简单四则运算的测试\\n:\" ;
cout<<\"请选择题目的难易程度:易-请按1,难-请按2\\n\" ; int n ; cin>>n ; switch(n) {
case 1 : {
int i,a,b,c,d,e,f,h,sum=0 ;
南京理工大学
int m ;
for(i=0;i<10;i++) {
a=rand()%10 ; b=rand()%10 ;
c=rand()%10 ; d=rand()%10 ;
m=rand()%3 ; switch((int)m) {
case 0 :
cout<cout<cout<e=(a*10+b)*d;cout<南京理工大学f=a*10+b ; break ; } cin>>h ; if(h==f) {
cout<<\"正确,得十分!\\n\" ; sum+=10 ; }
else cout<<\"不正确,不得分!\\n\" ; }
cout<<\"十题中,答对:\"<以上是四则运算的测试中易的部分(case1),在易的部分中计算机出的是简单的两个数的加,减,乘,除的运算。case2则是四则运算的测试中难的部分,在这部分中计算机出的是含有两个运算符及括号的混合四则运算,因为case2与case的程序大致相似,故略去。
在以上两个程序中我们调用了头文件#include与#include并分别运用了他们的库函数rand()与isdigit(),以实现取随机数及{}的功能。南京理工大学
5. 此次程序设计过程中的感想感想
此次程序设计的过程可以说对我来说是一次相当的锻炼。我和芮奕欣在确定程序设计方法后,便进入输入工作。可在连续几小时的输入结束后,运行时发现了几十个错误。我主要负责程序的调试及改错,这是我的责任。于是我在机房呆了整整一天,才将程序改好。这个过程是痛苦的,当错误减少到十几个时,突然一次改动又多出了几十个错误,那时真的快要崩溃了,真想停下来,但最后还是咬牙坚持住了,两眼紧紧盯着屏幕,不敢放松一毫,最后结束时,我长长地出了一口气,那一刻,感觉付出再多也值得了。所以,这次程序设计不仅仅是学到了知识,还学到了许多课堂上得不到的东西。在整个过程中,我和芮奕欣配合默契,虽然在过程中遇到了难题,但最后我们还是成功了。当最后看到程序顺利运行时,我们都十分高兴。
这次经历是艰苦的,可也是快乐的。我们收获了喜悦,也增强了我们的自信。感谢此次程序设计!