单位电气与电子工程分院(系) 专业电气与电子工程
学号
学生姓名彭东林
指导教师刘辉
完成日期年月日
摘要
课程设计语言类课程的指导思想:使学生通过学习高级编程语言的知识、编程技术和基本算法,掌握课程设计的思想和方法,具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。
其实认真学习一门语言并不难,关键是所追求的学习方法和途径。通过C 语言程序设计,可以使我们掌握软件开发过程的难题分析、系统设计、程序编码、测试程序等基本方法和技能。同时,还能加强我们的时间管理意识,锻炼对难题的发现、分析和处理能力。我认为遇到难题并不可怕,可怕的是你不去解决,这可能是C语言课程设计的主要目的之一。
现时学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器。人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。这些大大方便了我们的生活给我们更多的选择和实现方式。本程序的编写基础是Tubro C2.0汉化版,它在tubro c的原有基础上实现了多汉字的支持方便了我们的使用。生成的程序可移植性强兼容性好稳定!本程序实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,求阶乘,取整,求正切,以及进制之间的相互转换。它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。但是,每次只能运算一个表达式,按 CE清空后再计算下一组式子。本程序在进制转换方面有一些漏洞,但一般的进制转换结果还是准确的。
关键字:C语言程序设计基本算法高级编程语言思想和方法计算器
Tubro c 2.0汉化版
目录
第1章选题的意义 (4)
1.1自我介绍 (4)
1.2选题 (4)
第2章系统功能需求分析 (5)
2.1系统的基本要求 (5)
2.2数据结构和用法 (5)
第3章系统设计 (6)
第4章系统实现 (7)
第5章总结 (8)
第1章选题的意义
1.1 自我介绍
我的名字是彭东林,就读于石家庄铁道大学,电0905-2班,电气与电子工程分院。
1.2 选题
1.我选的题目是:简单计算器的设计
2.我选这道题的原因如下:
计算器对我们每一的学生都很熟悉,从初中到高中再到大学。但是我们只知道按下几个按钮计算器便会显示出结果,很少有学生分析过计算器究竟是如何运行的。C语言课程设计便是一个很好的机会,让我去亲自写计算器的运行代码,尽管是简单计算器的设计,但其背后的知识那是相当多的,对我是个挑战,我接受!
3.运用的数据结构和知识点
TuborC 绘图知识数学函数选择结构循环结构数组指针顺序结构进制间的转换
4.时间安排
5.主要参考文献:
《C语言绘图与计算机仿真技术》王强如北京航空航天大学
[1]科钦.C语言程序设计.北京:电子工业出版社,1987:56-58
[2]徐君毅.C语言程序设计基础.上海:复旦大学出版社,1992:87-98
[3]李成付.C语言程序设计基础.北京:科学出版社,1992:42-67
[4]郝玉洁.C语言程序设计.北京:机械工业出版社,2000:63-88
[5]钱启平.C语言程序设计基础.北京:中国铁道出版社,2000:91-99
[6]李大友.C语言程序设计基础.北京:清华大学出版社,1999:58-98
[7]黄迪明.C语言程序设计.北京:电子科技大学出版社,1998:78-98
[8]姜仲秋.C语言程序设计基础.南京:南京大学出版社,1998:16-100
[9]李国昌.C语言程序设计基础.北京:科学出版社,1998:78-120
[10]谭浩强.C语言程序设计.北京:清华大学出版社,2000:74-129
第2章系统功能需求分析
2.1系统的基本要求
1. 算术运算功能。能够实现+、-、*、、mod、int运算。
2. 函数运算功能。能够实现exp、ln、sin、x^y、log、cos、x^3、n!、tan、x^2、1x等运算。
3. 进制之间的转换功能。能够实现十六、十、二、八进制数据之间的转换。
4.通过键盘控制字符和数字的输入。
2.2数据结构设计及用法说明
此程序调用的函数主要有 正切:输入一个数,按“tan”,按“=”,输出结果。 阶乘:输入一个数,按“n!”,按“=”,输出结果。 倒数:输入一个数,按“1x”,按“=”,输出结果 十进制转二进制:输入一个十进制数,按“10->2”,输出二进制结果。 十进制转八进制:输入一个十进制数,按“10->8”,输出八进制结果。 八进制转十进制:输入一个八进制数,按“10->8”,输出十进制结果。 第3章系统设计 第4章系统实现 本系统采用 C语言开发,生成可执行文件在任何系统下都可以执行,具有很好的数据处理能力和稳定性。并且使用Turbo C 2.0汉化版在原有基础上实现了多汉字的支持,方便了我们的使用。生成的程序可移植性强、兼容性好。这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。 本程序通过调用int specialkey(void) 和#include { float num1=0,num2=0,result; int x,y,x0=315,y0=160,i,j,v,m,n,act,t1=0,t2=0,cd=0,zj=0,zj1=0,num=0,cd1= 0,a[25]; int flag1,flag2=1,flag3=1,flag4=1,flag5=1; char str2[5]={""},temp[20]={""},c,str3[10]={""},str4[10]={""},str5[20]={" "},str7[20]={""}; char str1[]={'A','1','2','3','4','5','6','7','B','8','9','=','+','-','*', '','C', 'G','H','I','J','K','L','0','D','M','N','O','P','Q','.','$','E','R', 'S','T','U', 'V','@','(','F','W','X','Y','Z','&',')','|'}; int sj1[]={0,250}; int sj2[]={}; int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,""); *初始化* setcolor(0); *绘画* setlinestyle(0,0,3); setfillstyle(1,13); sector(); setfillstyle(1,2); setcolor(2); fillpoly(4,sj1); setcolor(4); setfillstyle(1,6); pieslice(360,80); setfillstyle(1,15); line(255); line(255); pieslice(0,5); pieslice(0,5); fillpoly(4,sj2); ellipse(); setlinestyle(0,0,3); *标题* settextstyle(4,0,8); outtextxy("PENGDONGLIN CACULATOR"); setbkcolor(3); setcolor(5); setfillstyle(5,9); bar3d(); *键盘外框三维* setlinestyle(0,0,1); setfillstyle(1,8); bar3d(); *键盘内框三维* setcolor(2); *绿色* setfillstyle(1,7); *画按钮轮廓三维* bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); setcolor(2); bar3d(); setcolor(2); bar3d(); setcolor(2); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); bar3d(); setcolor(1);*按钮字符蓝色* outtextxy("A"); outtextxy("1"); outtextxy("2"); outtextxy("3"); outtextxy("4"); outtextxy("6"); outtextxy("7"); outtextxy("B"); outtextxy("8"); outtextxy("9"); outtextxy("="); outtextxy("+"); outtextxy("-"); outtextxy("*"); outtextxy(""); outtextxy("C"); outtextxy("mod"); outtextxy("x^y"); outtextxy("log"); outtextxy("ln"); outtextxy("int"); outtextxy("16"); outtextxy("|"); outtextxy("2"); outtextxy("0"); outtextxy("D"); outtextxy("cos"); outtextxy("x^3"); outtextxy("n!"); outtextxy("tan"); outtextxy("x^2"); outtextxy("."); outtextxy("8"); outtextxy("2"); outtextxy("E"); outtextxy("1x"); outtextxy("sin"); ; outtextxy("exp"); outtextxy("10"); outtextxy("|"); outtextxy("2"); outtextxy("8"); outtextxy("|"); outtextxy("16"); outtextxy("2"); outtextxy("|"); outtextxy("16"); outtextxy("F"); outtextxy("10"); outtextxy("|"); outtextxy("8"); outtextxy("10"); outtextxy("|"); outtextxy("16"); outtextxy("2"); outtextxy("|"); outtextxy("10"); outtextxy("QIT"); outtextxy("CE"); outtextxy("2"); outtextxy("8"); outtextxy("8"); outtextxy("|"); outtextxy("10"); setcolor(4); outtextxy("sft"); outtextxy("16"); outtextxy("|"); outtextxy("10"); outtextxy("16"); outtextxy("|"); outtextxy("8"); setlinestyle(0,0,3); setcolor(1); setfillstyle(1,7); bar3d(00,2,1); setlinestyle(0,0,1); line(0); line(0); line(8); setcolor(5); setfillstyle(1,3); bar(9);*填充x* outtextxy("x="); setcolor(6); bar(9); *填充y* outtextxy("y="); setfillstyle(1,6); bar(9);*填充符号* outtextxy("Result="); setcolor(5); setfillstyle(1,15); bar(8);*填充结果* *开始* x=x0; y=y0; gotoxy(x,y); setcolor(6); arrow();*显示光标* putimage(x,y,rar,XOR_PUT); m=0; n=0; strcpy(str2,""); while((v=specialkey())!=45) { while((v=specialkey())!=ENTER) *当压下键不是回车时* { putimage(x,y,rar,XOR_PUT); *显示光标图象* if(v==RIGHT) *向右* if(x>=595) { x=x0; m=0; }else { x=x+40; m++; } if(v==LEFT) *向左* if(x<=x0) { x=595; m=8-1; } else { x=x-40; m--; } if(v==UP) *向上* if(y<=y0) { y=410; n=6-1; } else { y=y-50; n--; } if(v==DOWN) *向下* if(y>=410) { y=y0; n=0; } else { y=y+50; n++; } putimage(x,y,rar,XOR_PUT); } c=str1[n*8+m]; if(isxdigit(c)||c=='.') *判断是否是十六进制的数字、字母或小数点* { if(flag1==-1) *flag1为负数标志* { strcpy(str2,"-"); flag1=1; } sprintf(temp,"%c",c);*将字符保存到字符串变量temp中* strcat(str2,temp); *将temp中的字符串连接到str2中* if(flag2==1) *flag2为填充x或y的标志* { setfillstyle(1,3); bar(9);*填充x* setcolor(5); outtextxy("x="); outtextxy(str2);*显示字符串x的值* } if(flag2==0) { setcolor(6); setfillstyle(1,3); bar(9); *填充y* outtextxy("y="); outtextxy(str2);*显示字符串y的值* flag2=1; } } if(c=='+') { num1=atof(str2);*将第一个操作数转换为浮点数* strcpy(str2,""); *清空str2* act=1; setfillstyle(1,6); setcolor(9); bar(9); outtextxy("+"); *显示'+'* flag2=0; } if(c=='-') { if(strcmp(str2,"")==0) flag1=-1; else { num1=atof(str2); strcpy(str2,""); *将str2清空* act=2; *做计算减法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("-"); *显示'-'* flag2=0; } } if(c=='*') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=3; *做计算乘法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("*"); *显示'*'* flag2=0; } if(c=='') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=4; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy(""); *显示''* flag2=0; } if(c=='Q') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=7; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("x^2"); *显示'x^2'* flag2=0; } if(c=='H') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=5; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("x^y"); *显示"x^y"* flag2=0; } if(c=='N') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=6; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("x^3"); *显示"x^3"* flag2=0; } if(c=='R') { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str2,""); *将str2清空* act=8; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("1x"); *显示"1x"* flag2=0; } if(c=='S') { if(flag3==0) { num1=atof(str2); *将第二个操作数转换为浮点数* strcpy(str7,str2); strcpy(str2,""); *将str2清空* act=28; *做计算除法标志值* setfillstyle(1,6); setcolor(9); bar(9); outtextxy("jz:16->10"); *显示"jz:16->10"* flag3=0; flag5=0; } else {