资源描述
摘 要
课程设计语言类课程的指导思想:使学生通过学习高级编程语言的知识、编程技术和基本算法,掌握课程设计的思想和方法,具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。
其实认真学习一门语言并不难,关键是所追求的学习方法和途径。通过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、1/x等运算。
3. 进制之间的转换功能。能够实现十六、十、二、八进制数据之间的转换。
4.通过键盘控制字符和数字的输入。
2.2数据结构设计及用法说明
此程序调用的函数主要有<math.h> /*数学函数的定义*/<conio.h> /*屏幕操作函数*/<stdio.h> /*I/O函数*/<stdlib.h> /*库函数*/<stdarg.h> /*变量长度参数表*/<graphics.h> /*图形函数*/<string.h> /*字符串函数*/<ctype.h> /*字符操作函数*/。基本使用:用→←↑↓控制鼠标图形移动,当移动到相应得按钮时按回车键输入当前数字或执行对应的函数。
加法:输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。
减法:输入被减数数,按“-”,输入减数,按“=”,输出结果。
乘法: 输入一个数,按“*”,输入另个数,按“=”,输出结果。
除法: 输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。
求x的y次方: 输入数x,按“^”,输入数y,按“=”,输出结果。
求余:输入一个数,按“mod”,按“=”,输出结果。
取整:输入一个数,按“int”,按“=”,输出结果。
余弦:输入一个数,按“cos”,按“=”,输出结果。
正弦:输入一个数,按“sin”,按“=”,输出结果。
正切:输入一个数,按“tan”,按“=”,输出结果。
阶乘:输入一个数,按“n!”,按“=”,输出结果。
倒数:输入一个数,按“1/x”,按“=”,输出结果
十进制转二进制:输入一个十进制数,按“10->2”,输出二进制结果。
十进制转八进制:输入一个十进制数,按“10->8”,输出八进制结果。
八进制转十进制:输入一个八进制数,按“10->8”,输出十进制结果。
第3章 系统设计
显示结果
结束
mod、x^3、ln、exp、tan、
cos、x^2、1/x、n!、sin、
以及进制转换
输入第二个数y
+、-、*、/、x^y、log、等
输入第一个数x
开始
第4章 系统实现
本系统采用 C语言开发,生成可执行文件在任何系统下都可以执行,具有很好的数据处理能力和稳定性。并且使用Turbo C 2.0汉化版在原有基础上实现了多汉字的支持,方便了我们的使用。生成的程序可移植性强、兼容性好。这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
本程序通过调用int specialkey(void) 和#include <conio.h> 来实现对屏幕的操作,通过调用int arrow()函数,int specialkey(void) 和#include <conio.h>来实现对光标的操作。计算器图形采用Turbo C 2.0绘图程序制作。
第5章 总结
经过了五个星期的课程设计,在设计中我们遇到了很多编程问题,最后我们大家齐心合力的攻克一个个难关,我们组做得是计算器的设计,内容包括很多。运用的函数也很复杂。
测试阶段中发现了几处错误导致程序不能编译,去图书馆查找相关的资料, 又同学一起讨论。通过耐心的分析源代码终于编好了一个完整无误的程序。在这次的c语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。在实际的编程操作中发现自己c语言知识的不足,加深了对c语言的理解。在学习之余体验到收获的感觉.
善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高.课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
自从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相我们把前面所学过的知识又重新温故了一遍。
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。安排课程设计的基本目的,在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟。尤其是观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。作为整个学习体系的有机组成部分,课程设计虽然安排在一周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,受到同学的欢迎,其中这次的设计很受同学们的喜欢。课程设计达到了专业学习的预期目的。在一个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。
程序源代码:
#include <dos.h> /*DOS接口函数*/
#include <math.h> /*数学函数的定义*/
#include <conio.h> /*屏幕操作函数*/
#include <stdio.h> /*I/O函数*/
#include <stdlib.h> /*库函数*/
#include <stdarg.h> /*变量长度参数表*/
#include <graphics.h> /*图形函数*/
#include <string.h> /*字符串函数*/
#include <ctype.h> /*字符操作函数*/
#define UP 0x48 /*光标上移键*/
#define DOWN 0x50 /*光标下移键*/
#define LEFT 0x4b /*光标左移键*/
#define RIGHT 0x4d /*光标右移键*/
#define ENTER 0x0d /*回车键*/
void *rar; /*全局变量,保存光标图象*/
int specialkey(void) ; /*获取特殊键函数*/
int arrow(); /*设置箭头光标函数*/
main()
{
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[]={50,250,250,250,150,175,50,250};
int sj2[]={145,285,155,285,150,275,145,285};
int driver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,""); /*初始化*/
setcolor(0); /*绘画*/
setlinestyle(0,0,3);
setfillstyle(1,13);
sector(150,250,0,360,100,200);
setfillstyle(1,2);
setcolor(2);
fillpoly(4,sj1);
setcolor(4);
setfillstyle(1,6);
pieslice(150,250,180,360,80);
setfillstyle(1,15);
line(105,255,125,255);
line(175,255,195,255);
pieslice(115,265,0,360,5);
pieslice(185,265,0,360,5);
fillpoly(4,sj2);
ellipse(150,295,180,360,12,7);
setlinestyle(0,0,3); /*标题*/
settextstyle(4,0,8);
outtextxy(370,30,"PENGDONGLIN CACULATOR");
setbkcolor(3);
setcolor(5);
setfillstyle(5,9);
bar3d(280,120,630,440,5,3); /*键盘外框 三维*/
setlinestyle(0,0,1);
setfillstyle(1,8);
bar3d(290,130,620,430,5,1); /*键盘内框 三维*/
setcolor(2); /*绿色*/
setfillstyle(1,7); /*画按钮轮廓 三维*/
bar3d(300,140,330,180,2,1);
bar3d(340,140,370,180,2,1);
bar3d(380,140,410,180,2,1);
bar3d(420,140,450,180,2,1);
bar3d(460,140,490,180,2,1);
bar3d(500,140,530,180,2,1);
bar3d(540,140,570,180,2,1);
bar3d(580,140,610,180,2,1);
bar3d(300,185,330,225,2,1);
bar3d(340,185,370,225,2,1);
bar3d(380,185,410,225,2,1);
bar3d(420,185,450,225,2,1);
bar3d(460,185,490,225,2,1);
bar3d(500,185,530,225,2,1);
bar3d(540,185,570,225,2,1);
bar3d(580,185,610,225,2,1);
bar3d(300,235,330,275,2,1);
bar3d(340,235,370,275,2,1);
bar3d(380,235,410,275,2,1);
bar3d(420,235,450,275,2,1);
bar3d(460,235,490,275,2,1);
bar3d(500,235,530,275,2,1);
bar3d(540,235,570,275,2,1);
bar3d(580,235,610,275,2,1);
bar3d(300,285,330,325,2,1);
bar3d(340,285,370,325,2,1);
bar3d(380,285,410,325,2,1);
bar3d(420,285,450,325,2,1);
bar3d(460,285,490,325,2,1);
bar3d(500,285,530,325,2,1);
bar3d(540,285,570,325,2,1);
bar3d(580,285,610,325,2,1);
bar3d(300,335,330,375,2,1);
bar3d(340,335,370,375,2,1);
bar3d(380,335,410,375,2,1);
setcolor(2);
bar3d(420,335,450,375,2,1);
setcolor(2);
bar3d(460,335,490,375,2,1);
setcolor(2);
bar3d(500,335,530,375,2,1);
bar3d(540,335,570,375,2,1);
bar3d(580,335,610,375,2,1);
bar3d(300,385,330,420,2,1);
bar3d(340,385,370,420,2,1);
bar3d(380,385,410,420,2,1);
bar3d(420,385,450,420,2,1);
bar3d(460,385,490,420,2,1);
bar3d(500,385,530,420,2,1);
bar3d(540,385,570,420,2,1);
bar3d(580,385,610,420,2,1);
setcolor(1);/*按钮字符 蓝色*/
outtextxy(310,150,"A");
outtextxy(350,150,"1");
outtextxy(390,150,"2");
outtextxy(430,150,"3");
outtextxy(470,150,"4");
outtextxy(505,150,"5");
outtextxy(550,150,"6");
outtextxy(590,150,"7");
outtextxy(310,195,"B");
outtextxy(345,195,"8");
outtextxy(385,195,"9");
outtextxy(425,195,"=");
outtextxy(465,195,"+");
outtextxy(505,195,"-");
outtextxy(550,195,"*");
outtextxy(590,195,"/");
outtextxy(310,245,"C");
outtextxy(344,250,"mod");
outtextxy(385,245,"x^y");
outtextxy(425,245,"log");
outtextxy(465,245,"ln");
outtextxy(505,245,"int");
outtextxy(547,240,"16");
outtextxy(550,250,"|");
outtextxy(550,260,"2");
outtextxy(590,245,"0");
outtextxy(310,295,"D");
outtextxy(345,295,"cos");
outtextxy(385,295,"x^3");
outtextxy(430,295,"n!");
outtextxy(465,295,"tan");
outtextxy(505,295,"x^2");
outtextxy(550,295,".");
outtextxy(590,290,"8");
outtextxy(590,300,"|");
outtextxy(590,310,"2");
outtextxy(310,345,"E");
outtextxy(345,345,"1/x");
outtextxy(385,338,"sin");
;
outtextxy(425,338,"exp");
outtextxy(507,340,"10");
outtextxy(510,350,"|");
outtextxy(510,360,"2");
outtextxy(550,340,"8");
outtextxy(550,350,"|");
outtextxy(547,360,"16");
outtextxy(590,340,"2");
outtextxy(590,350,"|");
outtextxy(587,360,"16");
outtextxy(310,395,"F");
outtextxy(347,390,"10");
outtextxy(350,400,"|");
outtextxy(350,410,"8");
outtextxy(387,390,"10");
outtextxy(390,400,"|");
outtextxy(387,410,"16");
outtextxy(430,390,"2");
outtextxy(430,400,"|");
outtextxy(427,410,"10");
outtextxy(465,395,"QIT");
outtextxy(508,395,"CE");
outtextxy(550,390,"2");
outtextxy(550,400,"|");
outtextxy(550,410,"8");
outtextxy(590,390,"8");
outtextxy(590,400,"|");
outtextxy(587,410,"10");
setcolor(4);
outtextxy(465,350,"sft");
outtextxy(388,347,"16");
outtextxy(391,356,"|");
outtextxy(388,366,"10");
outtextxy(428,347,"16");
outtextxy(431,356,"|");
outtextxy(432,366,"8");
setlinestyle(0,0,3);
setcolor(1);
setfillstyle(1,7);
bar3d(350,40,550,100,2,1);
setlinestyle(0,0,1);
line(351,60,549,60);
line(450,40,450,60);
line(415,61,415,98);
setcolor(5);
setfillstyle(1,3);
bar(352,42,435,59);/*填充x*/
outtextxy(355,48,"x=");
setcolor(6);
bar(461,42,548,59); /*填充y*/
outtextxy(465,48,"y=");
setfillstyle(1,6);
bar(436,42,460,59);/*填充符号*/
outtextxy(355,75,"Result=");
setcolor(5);
setfillstyle(1,15);
bar(416,61,549,98);/*填充结果*/
/*开始*/
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(352,42,435,59);/*填充x*/
setcolor(5);
outtextxy(355,48,"x=");
outtextxy(372,48,str2);/*显示字符串x的值*/
}
if(flag2==0)
{
setcolor(6);
setfillstyle(1,3);
bar(461,42,548,59); /*填充y*/
outtextxy(465,48,"y=");
outtextxy(480,48,str2);/*显示字符串y的值*/
flag2=1;
}
}
if(c=='+')
{
num1=atof(str2);/*将第一个操作数转换为浮点数*/
strcpy(str2,""); /*清空str2*/
act=1;
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(445,47,"+"); /*显示'+'*/
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(436,42,460,59);
outtextxy(445,47,"-"); /*显示'-'*/
flag2=0;
}
}
if(c=='*')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=3; /*做计算乘法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(445,47,"*"); /*显示'*'*/
flag2=0;
}
if(c=='/')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=4; /*做计算除法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(445,47,"/"); /*显示'/'*/
flag2=0;
}
if(c=='Q')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=7; /*做计算除法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(437,45,"x^2"); /*显示'x^2'*/
flag2=0;
}
if(c=='H')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=5; /*做计算除法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(437,45,"x^y"); /*显示"x^y"*/
flag2=0;
}
if(c=='N')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=6; /*做计算除法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(437,45,"x^3"); /*显示"x^3"*/
flag2=0;
}
if(c=='R')
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=8; /*做计算除法标志值*/
setfillstyle(1,6);
setcolor(9);
bar(436,42,460,59);
outtextxy(437,45,"1/x"); /*显示"1/x"*/
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(436,42,548,59);
outtextxy(455,48,"jz:16->10"); /*显示"jz:16->10"*/
flag3=0;
flag5=0;
}
else
{
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=9; /*做计算除法标志值*/
setcolor(9);
setfillstyle(1,6);
bar(436,42,460,59);
outtextxy(437,45,"sin"); /*显示"sin"*/
se
展开阅读全文