C语言课程设计报告简易计算器设计.docx

上传人:b****7 文档编号:8747644 上传时间:2023-02-01 格式:DOCX 页数:20 大小:100.15KB
下载 相关 举报
C语言课程设计报告简易计算器设计.docx_第1页
第1页 / 共20页
C语言课程设计报告简易计算器设计.docx_第2页
第2页 / 共20页
C语言课程设计报告简易计算器设计.docx_第3页
第3页 / 共20页
C语言课程设计报告简易计算器设计.docx_第4页
第4页 / 共20页
C语言课程设计报告简易计算器设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告简易计算器设计.docx

《C语言课程设计报告简易计算器设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告简易计算器设计.docx(20页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告简易计算器设计.docx

C语言课程设计报告简易计算器设计

 

《C语言课程设计》报告

 

设计题目:

简单计算器设计

学院名称:

电子与信息工程学院

专业:

计算机科学与技术

班级:

计科09-1

姓名:

朱凯迪学号19

指导教师:

宋宏图

 

定稿日期:

2010年03月10日

 

一、设计题目

简单计算器设计

 

二、设计要求

在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

 

三、设计目的

1通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!

更加了解了c语言的好处和其可用性!

同时增加了同学之间的团队合作精神!

更加也体会到以后在工作中团队合作的重要性和必要性!

 

2通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础。

 

四、设计思想及过程

1由于需要使功能尽量模仿Windows下的计算器,而很多功能要以图形界面实现,故用BorlandC++Builder编写。

所以用的是面向对象程序设计。

但因为这是C语言的课程设计,所以除了面向对象的使用以外,所有语法都是按照C语言的格式编写。

 

2采用工程模式,文件包括(运算主函数头文件,包括各运算符的操作以及其辅助函数)、(窗体类的声明头文件)、(工程初始化文件)、(代码主文件,包括各空间操作的函数)以及一些其它附属文件,包括dll动态链接库。

 

3在参考了Windows里的计算器以后,决定在我的课程设计中实现:

10~9的数字输入功能(小数点除外)

2实现加、减、乘、整除、取模、阶乘、位运算左移、x的y次方、与、异或、x立方、x平方运算功能,二进制、八进制、十进制、十六进制转换功能,正负转换功能,退格、归零等功能。

3数字显示最多为40位,超过即用科学表示法表示(例如1E50)。

4运算时因最高能对5000位的数字进行运算,故所有功能建立在自行编写代码的高精度运算基础上。

 

4在按键操作中,先判断用户按的是数字键还是功能键。

功能键分运算符键、进制转换键以及清空键。

然后记录下来用户当前的按键,然后对上次按的功能键键进行运算。

如按了1、+、5,再按任何功能键即对1+5进行运算。

如果按的是进制转换键,就记录当前进制,则在以后每次操作中,都将显示结果转换为当前进制再显示。

如:

以下是按5以及*号时的函数代码

void__fastcallTMainForm:

:

bt_5Click(TObject*Sender)/*输入5*/

{

if(_lastKey==key_sym)initNum(&actNum);/*初始化当前动作数字*/

if(_lastKey==key_sym&&nowSym=='N')/*如果最后的按键是符号而且按的是等号*/

{

initNum(&ans);/*让答案等于0*/

lastSym='N';

}

incMed(&actNum,5);/*将活动数字加一位,并且最后一位是5*/

ShowText(actNum);/*显示当前活动数字*/

_lastKey=key_num;/*记录最后按键为数字键*/

}

void__fastcallTMainForm:

:

bt_mulClick(TObject*Sender)/*输入*号*/

{

doAns(&ans,actNum,&nowSym,'*',lastSym,_lastKey);

/*↑做出上一步答案(不是按乘号这一步)*/

ShowText(ans);/*显示答案*/

lastSym=nowSym;/*现在即将运算的符号赋值给最后的符号*/

nowSym='*';/*将*号现在即将运算*/

actNum=ans;/*将答案赋值给活动数字*/

//initNum(&actNum);

_lastKey=key_sym;/*将最后的按键转换为符号按键*/

}

 

5对于高精度,采用结构体structhigh{intnum[MAXN];};的形式,数组的一个元素存一位。

个位为num[1],将符号存在num[0]之中。

1对于高精度加法,先判断两个数符号,如果为异号,则进行高精度减法,否则将各位逐个相加,然后逐位进位,返回答案即可。

2对于高精度减法,先判断两个数符号,如果为异号,则进行高精度加法,否则用大数减小数,逐个相减,然后逐位退位,判断符号、返回答案即可。

3对于高精度乘法,用第二个数的各位乘以第一个数的各位。

然后错位相加,相当于小学生摆竖式。

最后将各位相乘的结果相加,逐位进位,判断符号、返回答案即可。

4对于高精度整除,采用各位从0~9枚举形式,如果此位与0~9相乘刚好小于等于相应数字,则为此位答案为这个数。

最后返回答案即可。

5对于高精度取模,则只需求出高精度整除,然后将数字减去整除的结果即可。

6对于n阶乘,做n次乘法,每乘一次,乘数减一。

7对于左移,虽然是建立在位运算基础上,但其效果只是乘以二,所以只需高精度乘以二即可。

8对于x的平方、立方、y次方,只需将x高精度相乘2次、3次或者更多次即可。

9对于与运算,先将两个数转换为二进制,然后对每位进行与运算,最后转换回十进制即可。

10对于异或运算,原理同与运算。

 

6对于进制转换,采用除n取余法。

将其转换为相应进制。

 

7对于清零键,按按键功能对actNum、ans、nowSym等变量清空或者减少一位即可。

 

8我对于程序容错性做了很大程度上的优化。

对于超出位数的运算会跳出“数字太大”提示。

对于各按键混合使用会导致的程序混乱用了极大程度上的优化,也就是说对于按键的随意性有很好的兼容性。

比如说可以直接按2再按*然后按=,就会算出2的平方。

9对于显示函数,先判断当前进制数,然后再将需要显示的数字转换为当前进制数再显示。

如果位数超过40,则取前几位,采用科学计数法显示。

10未能实现部分:

小数部分。

由于时间关系,未能实现复制粘贴数字功能。

 

五、

流程图

 

六、运行过程

打开,模拟Windows下的计算器功能。

1基本功能为输入数字,再输入运算符,然后输入运算符对应数字,按等号。

2输入数字,再输入运算符,输入等于号的结果为“当前输入的数字→运算符→当前输入的数字”。

可以调节正负号。

3输入“数字,运算符,数字,运算符...数字,运算符”亦可。

 

七、心得体会

这次“简单计算器制作”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度,而且在一定意义上对面向对象设计的理解更加深刻了。

是我在编程路途上的一次质的飞跃。

而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。

当看着一个具有图形界面的计算器的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。

 

附源程序清单:

1(运算函数集头文件)

#include<>

#include

#include<>

#defineHIGHstructhigh

#defineMAXN5000

#defineMAXSHOW40

#definekey_num0

#definekey_sym1

structhigh{

intnum[MAXN];

};

HIGHans,actNum,nowShow;

charnowSym='N',lastSym='N';

bool_isincMed=true,_lastKey=key_num;

intjz=10;

bool_isbig(HIGHa,HIGHb)

{

inti;

for(i=MAXN-1;i>0;i--)

{

if[i]>[i])returntrue;

else

if[i]<[i])returnfalse;

}

returnfalse;

}

voidcopy(char*str,char*rstr,intop,intlen)um[1];

a=div(a,eight);

if(getMed(r)>MAXSHOW)

{

initNum(&r);

Application->MessageBox("数字太大!

","错误",MB_OKCANCEL);

nowShow=zero;

nowSym='N';

_lastKey=key_num;

lastSym='N';

returnr;

}

}

returnr;

}

HIGHbin(HIGHa).)

{

try

{

throwException("");

}

catch(Exception&exception)

{

Application->ShowException(&exception);

}

}

return0;

}

fm"

usingnamespacestd;

TMainForm*MainForm;

;

}

str+="E+"+IntToStr(e);

Show_Editor->Text=str;

}

}

void__fastcallTMainForm:

:

FormCreate(TObject*Sender)/*窗体创建*/

{

initNum(&actNum);

initNum(&ans);

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_7Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,7);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_8Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,8);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_0Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,0);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_1Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,1);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_2Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,2);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_3Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,3);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_4Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,4);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_5Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,5);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_6Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,6);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_9Click(TObject*Sender)

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')

{

initNum(&ans);

lastSym='N';

}

incMed(&actNum,9);

ShowText(actNum);

_lastKey=key_num;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_iAndmClick(TObject*Sender)

{

turnSym(&actNum);

ShowText(actNum);

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_incClick(TObject*Sender)

{

doAns(&ans,actNum,&nowSym,'+',lastSym,_lastKey);

ShowText(ans);

lastSym=nowSym;

nowSym='+';

actNum=ans;

//initNum(&actNum);

_lastKey=key_sym;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_eqClick(TObject*Sender)

{

doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);

if(nowSym!

='N')lastSym=nowSym;

ShowText(ans);

nowSym='N';

//actNum=ans;

//initNum(&actNum);

_lastKey=key_sym;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_decClick(TObject*Sender)

{

doAns(&ans,actNum,&nowSym,'-',lastSym,_lastKey);

ShowText(ans);

lastSym=nowSym;

nowSym='-';

actNum=ans;

//initNum(&actNum);

_lastKey=key_sym;

}

//---------------------------------------------------------------------------

 

void__fastcallTMainForm:

:

bt_mulClick(TObject*Sender)

{

doAns(&ans,actNum,&nowSym,'*',lastSym,_lastKey);

ShowText(ans);

lastSym=nowSym;

nowSym='*';

actNum=ans;

//initNum(&actNum);

_lastKey=key_sym;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

bt_divClick(TObject*Sender)

{

doAns(&ans,actNum,&nowSym,'/',lastSym,_lastKey);

ShowText(ans);

lastSym=nowSym;

nowSym='/';

actNum=ans;

//initNum(&actNum);

_lastKey=key_sym;

}

//---------------------------------------------------------------------------

void__fastcallTMainForm:

:

Show_EditorKeyPress(TObject*Sender,char&Key)

{

if(Key>='0'&&Key<='9')

{

if(_lastKey==key_sym)initNum(&actNum);

if(_lastKey==key_sym&&nowSym=='N')initNum(&ans);

incMed(&actNum,Key-'0');

ShowText(actNum);

_lastKey=key_num;

}

else

if(Key=='+')bt_incClick(Sender);

else

if(Key=='-')bt_decClick(Sender);

else

if(Key=='*')bt_mulClick(Sender);

else

if(Key=='/')bt_divClick(Sender);

else

if(Key=='^')bt_xycfClick(Sender);

else

if(Key=='!

')bt_njcClick(Sender);

else

if(Key==13)bt_eqClick(Sender);

else

if(Key==8)bt_bkspaceClick(Sender);

}

//------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1