设计一个简单计算器.docx
《设计一个简单计算器.docx》由会员分享,可在线阅读,更多相关《设计一个简单计算器.docx(10页珍藏版)》请在冰豆网上搜索。
![设计一个简单计算器.docx](https://file1.bdocx.com/fileroot1/2023-1/14/b2d36804-c0ad-41b0-bad4-852911b59287/b2d36804-c0ad-41b0-bad4-852911b592871.gif)
设计一个简单计算器
一、课程设计的内容
设计一个简单计算器
要求:
在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
二、课程设计的要求与数据
1、进一步掌握和利用C语言进行程设计的能力;
2、进一步理解和运用结构化程序设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图或N-S图表示算法;
6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作
1、编写完成相应题目的程序;
2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:
1)需求分析:
包括设计题目、设计要求以及系统功能需求分析;
2)总体设计:
包括系统总体设计框架和系统功能模块图;
3)详细设计:
包括主要功能模块的算法设计思路以及对应的工作流程图;
4)调试分析过程描述:
包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);
5)总结:
课程设计完成了哪些功能,有没有什么扩展功能?
还有哪些地方需要改进?
课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;
6)附录:
主要源程序代码,含必要的注释。
3、答辩:
在实验室建立程序运行的环境,并在指导教师的监督下,独立解
决问题、运行程序和回答教师提出的问题。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
下达任务书,说明设计要求;收集资料
实验3#517
6.18
2
总体方案设计、详细设计
实验3#517
6.19
3
编写程序,调试分析
实验3#517
6.20
4
撰写报告并上交,答辩
实验3#517
6.21
五、应收集的资料及主要参考文献
[1]谭浩强.C程序设计(第三版)[M],北京:
清华大学出版社,2005.9
[2]谭浩强.C程序设计题解与上机指导(第三版)[M],北京:
清华大学出版社,2005.7
[3]李春葆曾平刘斌。
C++语言程序设计题典第一版北京清华大学出版社2003年4月
[5]刘振安刘燕君C++程序设计课程设计第一版机械工业出版社2004年8月
发出任务书日期:
2007年6月18日指导教师签名:
计划完成日期:
2007年6月22日基层教学单位责任人签章:
主管院长签章:
1设计目的与要求………………………………………………………………5
2总体设计………………………………………………………………………6
3详细设计………………………………………………………………………6
4调试分析……………………………………………………………………7
5总结……………………………………………………………………………7
6附录…………………………………………………………………………8
6答辩记录(正文处请留出适当空白)………………………………………13
7指导教师意见(正文处请留出十行空白)…………………………………13
1目的与要求
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。
(1)总体要求
①对系统进行功能模块分析、控制模块分析正确;
②系统设计要实用;
③编程简练,可用,功能全面,具有较好的健壮性;
④说明书、流程图要清楚。
(2)课程设计报告要求
①需求和规格说明:
问题描述:
题目要解决的问题是什么?
②设计
⊕设计思路:
主要算法思想。
⊕总体设计:
程序设计组成框图、N-S流程图。
⊕详细设计:
模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描
述等)。
③调试与测试:
调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论
和分析;改进设想;经验和体会等。
④附录:
源程序清单和结果。
如果题目规定了测试数据,则结果要包含这些测试数据和
运行输出,当然还可以含其他测试数据和运行输出;清单中应有足够的注释。
7
2总体设计
3详细设计
(内容可以适当调整,清晰的有条理的把你的设计思路表达出来)
3.1功能模块设计
3.1.1XX功能模块(可选)
3.1.2YY功能模块(可选)
3.1.3ZZ功能模块(可选)
4调试分析
输入调试
输出调式
5总结
原来认为搞一个计算器很简单,加减乘除用一个switch语句就可以做出来。
最初做了一个如下程序
#include
main()
{inta,b,c;
chary;
system("cls");
scanf("%d%c%d",&a,&y,&b);
switch(y)
{case'+':
c=a+b;break;
case'-':
c=a-b;break;
case'*':
c=a*b;break;
case'/':
if(b==0)
{printf("inputerror!
");
exit(0);
}
elsec=a/b;
break;
defult:
printf("intputerror!
!
");break;
}
一写下来才知道他只能进行很简单的两个数的四则运算。
很来在图书馆和网上查了很多资料,最终选择了C++编,虽然这个程序自己也进行了修该但是很多方面还是用别人的成果。
经过这次编程我发现了许多自己以前不知道的知识。
找到了很多不足。
7.附录
#include
#include
usingnamespacestd;
enumToken_value{
NAME,NUMBER,END,
PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=';',ASSIGN='=',LP='(',RP=')'
};
Token_valuecurr_tok=PRINT;
//fuctionlist//////////////////////////////////////
doubleexpr(boolget);
doubleterm(boolget);
doubleprim(boolget);
Token_valueget_token();
doubleerror(conststring&s);
//////////////////////////////////////////////////////////
doubleexpr(boolget)//plusandminus
{doubleleft=term(get);
for(;;)
{switch(curr_tok){
casePLUS:
left+=term(true);
break;
caseMINUS:
left-=term(true);
break;
default:
returnleft;
}
}
}
doubleterm(boolget)//multiplyanddivide
{doubleleft=prim(get);
for(;;)
{switch(curr_tok){
caseMUL:
left*=prim(true);
break;
caseDIV:
if(doubled=prim(true)){//nozero!
!
left/=d;
break;
}
returnerror("dividebyzero!
!
\n");
default:
returnleft;
}
}
}
doublenumber_value;
doublestring_value;
doubleprim(boolget)
{if(get)get_token();
switch(curr_tok){
caseNUMBER:
{doublev=number_value;
get_token();
returnv;
}
caseNAME:
{doublev;
//double&v=table[string_value];
//thistablereservedthenamemappedwithvariable
//nowwedon'tuseit!
if(get_token()==ASSIGN)
v=expr(true);
returnv;
}
caseMINUS:
//negative
{return-prim(true);
}
caseLP:
{doublee=expr(true);
if(curr_tok!
=RP)returnerror(")expected");
get_token();//absorb)
returne;
}
default:
returnerror("primaryexpected");//noprimary
}
}
Token_valueget_token()
{charch=0;
cin>>ch;
switch(ch){
case0:
returncurr_tok=END;//returnandassignment
case';':
case'*':
case'/':
case'+':
case'-':
case'(':
case')':
case'=':
returncurr_tok=Token_value(ch);
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
case'.':
cin.putback(ch);
cin>>number_value;
returncurr_tok=NUMBER;
default:
if(isalpha(ch))
{cin.putback(ch);
cin>>string_value;
returncurr_tok=NAME;
}
error("badtoken!
");
returncurr_tok=PRINT;
}
}
intno_of_error;
doubleerror(conststring&s)
{no_of_error++;
cout<<"error:
"<return1;
}
intmain()
{while(cin)
{get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT)continue;
cout<}
returnno_of_error;
}
7答辩记录
序号
问题
回答
1
2
3
4
5
8指导教师意见
指导教师签名: