C语言课程设计简易计算器设计带所有代码Word文档下载推荐.docx
- 文档编号:14546476
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:42
- 大小:64.91KB
C语言课程设计简易计算器设计带所有代码Word文档下载推荐.docx
《C语言课程设计简易计算器设计带所有代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言课程设计简易计算器设计带所有代码Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。
三、设计目的
1通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
更加了解了c语言的好处和其可用性!
同时增加了同学之间的团队合作精神!
更加也体会到以后在工作中团队合作的重要性和必要性!
2通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
四、设计思想及过程
1由于需要使功能尽量模仿Windows下的计算器,而很多功能要以图形界面实现,故用BorlandC++Builder编写。
所以用的是面向对象程序设计。
但因为这是C语言的课程设计,所以除了面向对象的使用以外,所有语法都是按照C语言的格式编写。
2采用工程模式,文件包括calc.h(运算主函数头文件,包括各运算符的操作以及其辅助函数)、Main.h(窗体类的声明头文件)、Calc.cpp(工程初始化文件)、Main.cpp(代码主文件,包括各空间操作的函数)以及一些其它附属文件,包括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='
;
}
incMed(&
actNum,5);
/*将活动数字加一位,并且最后一位是5*/
ShowText(actNum);
/*显示当前活动数字*/
_lastKey=key_num;
/*记录最后按键为数字键*/
}
bt_mulClick(TObject*Sender)/*输入*号*/
doAns(&
ans,actNum,&
nowSym,'
*'
lastSym,_lastKey);
/*↑做出上一步答案(不是按乘号这一步)*/
ShowText(ans);
/*显示答案*/
lastSym=nowSym;
/*现在即将运算的符号赋值给最后的符号*/
nowSym='
/*将*号现在即将运算*/
actNum=ans;
/*将答案赋值给活动数字*/
//initNum(&
_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未能实现部分:
小数部分。
由于时间关系,未能实现复制粘贴数字功能。
五、流程图
六、运行过程
打开Calc.exe,模拟Windows下的计算器功能。
1基本功能为输入数字,再输入运算符,然后输入运算符对应数字,按等号。
2输入数字,再输入运算符,输入等于号的结果为“当前输入的数字→运算符→当前输入的数字”。
可以调节正负号。
3输入“数字,运算符,数字,运算符...数字,运算符”亦可。
七、心得体会
这次“简单计算器制作”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度,而且在一定意义上对面向对象设计的理解更加深刻了。
是我在编程路途上的一次质的飞跃。
而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。
当看着一个具有图形界面的计算器的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。
附源程序清单:
1Calc.h(运算函数集头文件)
#include<
stdio.h>
string>
string.h>
#defineHIGHstructhigh
#defineMAXN5000
#defineMAXSHOW40
#definekey_num0
#definekey_sym1
structhigh{
intnum[MAXN];
HIGHans,actNum,nowShow;
charnowSym='
lastSym='
bool_isincMed=true,_lastKey=key_num;
intjz=10;
bool_isbig(HIGHa,HIGHb)
inti;
for(i=MAXN-1;
i>
0;
i--)
if(a.num[i]>
b.num[i])returntrue;
else
if(a.num[i]<
b.num[i])returnfalse;
returnfalse;
voidcopy(char*str,char*rstr,intop,intlen)//将str的从op开始的len个字符复制到rstr中
inti=0,j=op-1;
for(;
i<
=len-1||str[j]=='
\0'
i++,j++)rstr[i]=str[j];
rstr[i]='
voidcopyint(HIGHnum,HIGH*rint,intop,intlen)//将str的从op开始的len个字符复制到rstr中
inti=1,j=op;
=len&
j<
MAXN;
i++,j++)rint->
num[i]=num.num[j];
voidinitNum(HIGH*numb)//初始化
HIGHtmp;
memset(tmp.num,0,sizeof(tmp.num));
*numb=tmp;
intabsCmp(HIGHa,HIGHb)//比较绝对值大小
if(a.num[i]!
=b.num[i])return(a.num[i]>
b.num[i]);
return-1;
intgetMed(HIGHa)//获取位数
inti,med;
=0)
med=i;
break;
if(i==0)med=1;
returnmed;
voidturnSym(HIGH*a)//变号
a->
num[0]=a->
num[0]==0?
-1:
voiddecMed(HIGH*a)//减去一位
inti,med=getMed(*a);
if(med==MAXN-1)med--;
for(i=1;
=med;
i++)a->
num[i]=a->
num[i+1];
num[med]=0;
voidincMed(HIGH*a,intb)//加一位
HIGHr;
r);
if(med<
MAXSHOW)
for(i=2;
=med+1;
i++)r.num[i]=a->
num[i-1];
r.num[1]=b;
r.num[0]=a->
num[0];
elser=*a;
*a=r;
HIGHmul(HIGHa,HIG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 简易 计算器 设计 所有 代码