C语言课程设计报告书____简易计算器[1]

C语言课程设计报告书

        课程名称:C语言课程设计

        课题名称:简易计算器

          班级:      

          学号:   

          姓名:   

        指导老师: 

        成绩:

                            20##6

一、     课程设计目的

1.  通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。

2.  通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函数等。

3.  通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分析,并设计合理的模块化结构。提高程序开发能力。

二、设计内容

我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:

1.以界面形式给出计算器功能

2.简单的四则混合运算(支持小括号、优先级)

3.弦、余弦函数计算

4.指数、对数的运算

三、总体设计

简单计算器由五大模块组成,模块设计如下:

C语言课程设计报告书____简易计算器[1]

                  图1    模块调用图

1.  主函数 void main()

         功能:调用各个主要模块,实现简单计算器的整体功能。

2.  主界面函数void JieMian() 

功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。  

3.  四则混合运算函数void SiZeHunHeYunSuan()

功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。

4.  三角运算函数void SanJiaoYunSuan()

功能:实现基本的三角函数运算:sin(x)和cos(x)。         

5.  指对数函数void ZhiDuiShuYunSuan()

功能:实现基本的指数和对数运算。

四、详细设计

(一)数据结构设计

1.用initgraph函数初始化图形界面,用outtextxy函数在图形模式下显示需输出内容,用setcolor和setbkcolor函数设置边框颜色和填充颜色,用circle 和rectangle函数来画计算器界面的按键,用gotoxy将数字送入显示区。

函数原型为:

void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver)

void far outtextxy(int x, int y, char far *textstring)

void far setcolor ( int color)

void far setbkcolor ( int color)

void far circle (int x, int y, int r)

void far rectangle (int x, int y, int x, int y)

void far gotoxy(int x, int y)

具体形式:(按键以部分为例,其余相同)

 { initgraph(&driver,&mode,"c:\tc\\bgi");

 setcolor(GREEN);

 setbkcolor(BLUE);

 rectangle(18,18,500,300);

 rectangle(30,25,488,65);

 circle(50,105,20);

 circle(50,175,20);

 circle(50,245,20);

outtextxy(318,240,"/");

 outtextxy(435,135,"ln");

 outtextxy(365,135,"log");

 gotoxy(5,3)

2.将表达式转换成波兰式void change(char *work),用两个指针分别指向操作数和运算符。从字符串中依次分离出操作数与运算符。当操作符串为空时,直接存入。当不为空时,与指针最后一个元素,比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算。

(二)模块接口设计:

1.四则混合运算:void SiZeHunHeYunSuan()

首先判断优先级,其过程为

int compare(char symbol)

{ int      jud = 0;

switch (symbol)

{case '(': jud = 1: break;

 case '*':

 case '/':

 jud = sym[tops] == '/'?-1:1; break;case ')':

 jud=0; break;

 case '+':

case '-':

jud = (sym[tops] != '*' && sym[tops] != '/')?1:-1;break;

default:

break;}

return jud;}

四则混合运算包括的子函数的函数原型:

void sizeyunsuan(double num1, char symbol, double num2)

把表达式转化成波兰式

void change(char *work)

  

                         图2 四则混合运算函数调用图

2.三角运算:void SanJiaoYunSuan()

包括的子函数的函数原型:

1) double hudu(double x);      

把接受到的实数转化为弧度返回。

2) double to_double(char *p);      

将字符串转化为实数。

3) double read();                 

将连续输入的字符整合成一个浮点数并在屏幕上逆向输出将其返回。       

4) double sin(double x);          

求sinx,实数型参数,返回实数型值。

5) double cos(double x);           

求cosx,实数型参数,返回实数型值。

C语言课程设计报告书____简易计算器[1]

                         图3 三角运算函数调用图

4.指对数运算:void ZhiDuiShuYunSuan()

包括的子函数的函数原型:

1) double read();                  

将连续输入的字符整合成一个浮点数在屏幕上逆向输出将其返回。

2) double exp(double x);             

求e的x次方,返回双精度实数值。

3) double lnx(double x);             

求lnx的值,返回双精度实数值。

C语言课程设计报告书____简易计算器[1]

 图4 指数对数运算函数调用图

() 流程图:

1.  主函数流程图

C语言课程设计报告书____简易计算器[1]                                        

                                 图5   主函数调用图

1. 优先级:接收四则运算多项式的每相邻两个字符,并判断是否是操作符,如是操作符,与之前存入的操作符进行优先级比较。按顺序存入对应数组。

C语言课程设计报告书____简易计算器[1]

                     图6    运算级优先级流程图

2. 正弦函数

C语言课程设计报告书____简易计算器[1]

                        图7 正弦函数流程图

3. ln函数:

C语言课程设计报告书____简易计算器[1]

                          图8 lnx函数流程图

五、调试与测试

遇到的问题:

1.计算器的界面不会做,有时数字显示在边框外面。

2.在四则混合运算中,运算符号的优先级比较难判断。

3.编写ln函数遇到困难。

4.在做计算器界面的时候有些函数没有学过。

采取的解决措施:

1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。

2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。

3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。

界面截图及相关说明:

(1)主界面:

  

  等待输入表达式

(2)四则混合运算截图:

    

以上是对四则混合运算1+4*5-2*(3+2)运算结果的界面截图。

(3)三角函数截图:

以上是对Sin 30 运算结果的界面截图

 (4)指数函数截图:

 

以上是对对数函数ln0.999998运算界面的截图。

 

第二篇:C语言课程设计_语言代码_简易计算器设计[1]

石家庄铁道大学课程设计

简单计算器的设计

单 位 电气与电子工程 分院(系) 专 业 电气与电子工程 学 号 20092280 学生姓名 彭东林 指导教师 刘辉

完成日期 年 月 日

摘 要

课程设计语言类课程的指导思想:使学生通过学习高级编程语言的知识、编程技术和基本算法,掌握课程设计的思想和方法,具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计。

其实认真学习一门语言并不难,关键是所追求的学习方法和途径。通过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章 系统设计

C语言课程设计语言代码简易计算器设计1

第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"*/

setcolor(6);

setfillstyle(1,3);

bar(461,42,548,59); /*填充y*/

outtextxy(465,48,"y=");

flag2=0;

}

}

if(c=='M')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=10; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"cos"); /*显示"cos"*/ flag2=0;

}

if(c=='P')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=11; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"tan"); /*显示"tan"*/ flag2=0;

}

if(c=='I')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=12; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"log"); /*显示"log"*/ flag2=0;

}

if(c=='J')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=13; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"ln"); /*显示"ln"*/

flag2=0;

}

if(c=='T')

{

if(flag3==0)

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str7,str2);

strcpy(str2,""); /*将str2清空*/

act=29; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:16->8"); /*显示"jz:16->8"*/

flag3=0;

flag5=0;

}

else

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=14; /*做计算除法标志值*/

setcolor(9);

setfillstyle(1,6);

bar(436,42,460,59);

outtextxy(437,45,"exp"); /*显示"exp"*/ setcolor(6);

setfillstyle(1,3);

bar(461,42,548,59); /*填充y*/

outtextxy(465,48,"y=");

flag2=0;

}

}

if(c=='K')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=15; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"int"); /*显示"int"*/ flag2=0;

}

if(c=='O')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=16; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(442,45,"n!"); /*显示"n!"*/

flag2=0;

}

if(c=='U')

{

flag3=0;

}

if(c=='G')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=17; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,460,59);

outtextxy(437,45,"mod"); /*显示"mod"*/ flag2=0;

}

if(c=='V')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=18; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:10->2"); /*显示"jz:10->2"*/ flag3=0;

}

if(c=='W')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=19; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:10->8"); /*显示"jz:10->8"*/ flag3=0;

}

if(c=='X')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str2,""); /*将str2清空*/

act=20; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:10->16"); /*显示"jz:10->16"*/

flag3=0;

flag4=0;

}

if(c=='Y')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=21; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:2->10"); /*显示"jz:2->10"*/ flag3=0;

}

if(c==')')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=22; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:2->8"); /*显示"jz:2->8"*/ flag3=0;

}

if(c=='|')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=23; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:8->10"); /*显示"jz:8->10"*/ flag3=0;

}

if(c=='(')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=24; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:2->16"); /*显示"jz:2->16"*/ flag3=0;

}

if(c=='@')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=25; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:8->16"); /*显示"jz:8->16"*/ flag3=0;

}

if(c=='$')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ cd=strlen(str2);

strcpy(str2,""); /*将str2清空*/

act=26; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:8->2"); /*显示"jz:8->2"*/ flag3=0;

}

if(c=='L')

{

num1=atof(str2); /*将第二个操作数转换为浮点数*/ strcpy(str7,str2);

strcpy(str2,""); /*将str2清空*/

act=27; /*做计算除法标志值*/

setfillstyle(1,6);

setcolor(9);

bar(436,42,548,59);

outtextxy(455,48,"jz:16->2"); /*显示"jz:16->2"*/ flag3=0;

flag5=0;

}

if(c=='&')

{

num1=0;

num2=0;

strcpy(str2,"");

strcpy(str5,"");

setcolor(1);

setfillstyle(1,15);

bar(416,61,549,98);/*清空结果*/ setcolor(5);

setfillstyle(1,3);

bar(352,42,435,59);/*清空x*/ outtextxy(355,48,"x="); setcolor(6);

bar(450,42,548,59); /*清空y*/ outtextxy(465,48,"y="); setfillstyle(1,6);

bar(436,42,460,59);/*清空符号*/ strcpy(str7,"");

cd1=0;

num=0;

flag2=1;

flag3=1;

flag4=1;

flag5=1;

cd=0;

zj=0;

zj1=0;

}

if(c=='Z')

{

putimage(x,y,rar,XOR_PUT);

goto tie; /*退出*/

}

if(c=='=')

{

num2=atof(str2); /*将第二个操作数转换为浮点数*/ switch(act) /*根据运算符号计算*/

{

case 1:

result=num1+num2;break; /*做加法*/

case 2:

result=num1-num2;break; /*做减法*/

case 3:

result=num1*num2;break; /*做乘法*/

case 4:

result=num1/num2;break; /*做除法*/

case 5:

result=pow(num1,num2);break; /*做x的y次方*/ case 6:

result=pow(num1,3);break; /*做x^3*/ case 7:

result=pow(num1,2);break; /*做x^2*/ case 8:

result=1/num1;break; /*做1/x*/

case 9:

result=sin(num1);break; /*做sinx*/

case 10:

result=cos(num1);break; /*做cosx*/ case 11:

result=tan(num1);break; /*做tanx*/ case 12:

if(num2==0||num2==1)

result=0;

else

result=log(num1)/log(num2);break; /*做LOGxY*/ case 13:

result=log(num1);break; /*做lnx*/

case 14:

result=exp(num1);break; /*做e^x*/

case 15:

result=(int)num1;

if(result<0)

result--;break; /*做int x*/

case 16: result=1;

for(i=1;i<=num1;i++)

result=result*i;

break; /*做n!*/

case 17:

result=fmod(num1,num2);break; /*做x/y取余*/ case 18: zj=num1;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj/2);

t2=(int)(fmod(zj,2));

a[i]=t2;

zj=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i); }

break;/*十进制转二进制*/ case 19: zj=num1;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj/8);

t2=(int)(fmod(zj,8));

a[i]=t2;

zj=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i); }

break;/*十进制转八进制*/ case 21:

zj=num1;

result=0;

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(2,i); zj=(int)(zj/10);

}

break;/*2->10*/

case 22: result=0;

zj=num1;

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(2,i); zj=(int)(zj/10);

}

zj1=result;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj1/8);

t2=(int)(fmod(zj1,8));

a[i]=t2;

zj1=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i);

}

break;/*2->8*/

case 23:

zj=num1;

result=0;

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(8,i); zj=(int)(zj/10);

}

break;/*8->10*/

case 26:

zj=num1;

result=0;

setcolor(10);

gotoxy(100,100);

printf("%d",cd);

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(8,i); zj=(int)(zj/10);

}

zj1=result;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj1/2);

t2=(int)(fmod(zj1,2));

a[i]=t2;

zj1=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i);

}

break;/*8->2*/

case 20:

result=(int)num1;

flag4=0;

break;/*10->16*/

case 24:zj=num1;

result=0;

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(2,i); zj=(int)(zj/10);

}

flag4=0;

break;/*2->16*/

case 25:

zj=num1;

result=0;

for(i=0;i<=cd;i++)

{

result=result+fmod((int)(zj),10)*pow(8,i); zj=(int)(zj/10);

}

flag4=0;

break;/*8->16*/

case 27:

cd1=strlen(str7); /*测量字符串str7的长度*/ for(i=0,j=1;i<cd1;i++,j++)

{

if(str7[i]=='1')

num=num+1*pow(16,cd1-j);

else

if(str7[i]=='2')

num=num+2*pow(16,cd1-j);

else

if(str7[i]=='3')

num=num+3*pow(16,cd1-j);

else

if(str7[i]=='4')

num=num+4*pow(16,cd1-j);

else

if(str7[i]=='5')

num=num+5*pow(16,cd1-j);

else

if(str7[i]=='1')

num=num+1*pow(16,cd1-j);

else

if(str7[i]=='6')

num=num+6*pow(16,cd1-j);

else

if(str7[i]=='7')

num=num+7*pow(16,cd1-j);

else

if(str7[i]=='8')

num=num+8*pow(16,cd1-j); else

if(str7[i]=='9')

num=num+9*pow(16,cd1-j); else

if(str7[i]=='A')

num=num+10*pow(16,cd1-j); else

if(str7[i]=='B')

num=num+11*pow(16,cd1-j); else

if(str7[i]=='C')

num=num+12*pow(16,cd1-j); else

if(str7[i]=='D')

num=num+13*pow(16,cd1-j); else

if(str7[i]=='E')

num=num+14*pow(16,cd1-j); else

if(str7[i]=='F')

num=num+15*pow(16,cd1-j); }

zj=num;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj/2);

t2=(int)(fmod(zj,2)); a[i]=t2;

zj=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i); }

break;/*16->2*/ case 28:

cd1=strlen(str7);

for(i=0,j=1;i<cd1;i++,j++) {

if(str7[i]=='1')

num=num+1*pow(16,cd1-j); else

if(str7[i]=='2')

num=num+2*pow(16,cd1-j); else

if(str7[i]=='3')

num=num+3*pow(16,cd1-j); else

if(str7[i]=='4')

num=num+4*pow(16,cd1-j); else

if(str7[i]=='5')

num=num+5*pow(16,cd1-j);

else

if(str7[i]=='1')

num=num+1*pow(16,cd1-j); else

if(str7[i]=='6')

num=num+6*pow(16,cd1-j); else

if(str7[i]=='7')

num=num+7*pow(16,cd1-j); else

if(str7[i]=='8')

num=num+8*pow(16,cd1-j); else

if(str7[i]=='9')

num=num+9*pow(16,cd1-j); else

if(str7[i]=='A')

num=num+10*pow(16,cd1-j); else

if(str7[i]=='B')

num=num+11*pow(16,cd1-j); else

if(str7[i]=='C')

num=num+12*pow(16,cd1-j); else

if(str7[i]=='D')

num=num+13*pow(16,cd1-j); else

if(str7[i]=='E')

num=num+14*pow(16,cd1-j); else

if(str7[i]=='F')

num=num+15*pow(16,cd1-j); }

result=num;

break;/*16->10*/ case 29:

cd1=strlen(str7);

for(i=0,j=1;i<cd1;i++,j++) {

if(str7[i]=='1')

num=num+1*pow(16,cd1-j); else

if(str7[i]=='2')

num=num+2*pow(16,cd1-j); else

if(str7[i]=='3')

num=num+3*pow(16,cd1-j); else

if(str7[i]=='4')

num=num+4*pow(16,cd1-j); else

if(str7[i]=='5')

num=num+5*pow(16,cd1-j); else

if(str7[i]=='1')

num=num+1*pow(16,cd1-j); else

if(str7[i]=='6')

num=num+6*pow(16,cd1-j); else

if(str7[i]=='7')

num=num+7*pow(16,cd1-j); else

if(str7[i]=='8')

num=num+8*pow(16,cd1-j); else

if(str7[i]=='9')

num=num+9*pow(16,cd1-j); else

if(str7[i]=='A')

num=num+10*pow(16,cd1-j); else

if(str7[i]=='B')

num=num+11*pow(16,cd1-j); else

if(str7[i]=='C')

num=num+12*pow(16,cd1-j); else

if(str7[i]=='D')

num=num+13*pow(16,cd1-j); else

if(str7[i]=='E')

num=num+14*pow(16,cd1-j); else

if(str7[i]=='F')

num=num+15*pow(16,cd1-j);

}

zj=num;

t1=1;

for(i=0;t1!=0;i++)

{

t1=(int)(zj/8);

t2=(int)(fmod(zj,8));

a[i]=t2;

zj=t1;

}

result=0;

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

{

result=result+a[i]*pow(10,i);

}

break;/*16->8*/

}

setcolor(1);

setfillstyle(1,15);

bar(416,61,549,98); /*覆盖结果区*/

if(flag4==0) /*flag4为十进制和十六进制输出标识符*/ {

sprintf(str5,"%x",(int)result); /*转换为十六进制*/ outtextxy(440,76,str5); /*显示结果*/

flag4=1;

}

else

{

sprintf(temp,"%10.2f",result); /*将结果保存到temp中*/

outtextxy(440,76,temp); /*显示结果*/

}

sprintf(str3,"%.2f",num1);

setcolor(5);

setfillstyle(1,3);

bar(352,42,435,59);/*清空x*/

outtextxy(355,48,"x=");

if(flag5==0) /*涉及到十六进制转为其它进制时的标识符*/ {

outtextxy(372,48,str7);

flag5=1;

}

else

{

outtextxy(372,48,str3);

}

if(flag3==0)

{

flag3=1;

}

else

{

sprintf(str4,"%.2f",num2);

setcolor(6);

bar(461,42,548,59); /*覆盖y*/

outtextxy(465,48,"y=");

outtextxy(480,48,str4); /*填充y*/

}

}

}

getch(); /*停留*/

tie:

closegraph(); /*关闭*/

printf("\n\n\n\n\n\n\n\n\n\n\n Thank you for use !\n\n\n\t\t\t\t\t");

getch();

}

int specialkey(void)

{

int key;

while(bioskey(1)==0); /*等待键盘输入*/

key=bioskey(0); /*键盘输入*/

key=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为0*/ return(key); /*返回键值*/

}

int arrow()

{

int size;

int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定义多边形坐标*/

setcolor(1);

setfillstyle(1,3); /*设置填充模式*/

fillpoly(8,raw); /*画出一光标箭头*/

size=imagesize(4,4,16,16); /*测试图象大小*/

rar=malloc(size); /*分配内存区域*/

getimage(4,4,16,16,rar); /*存放光标箭头图象*/ putimage(4,4,rar,XOR_PUT); /*消去光标箭头图象*/ return 0;

}

相关推荐