当前位置:文档之家› 数据结构课程设计(简单计算器C语言)

数据结构课程设计(简单计算器C语言)

数据结构课程设计(简单计算器C语言)
数据结构课程设计(简单计算器C语言)

郑州师范学院

信息科学与技术学院

《简单计算器》课程设计报告

设计题目:简单计算器

班级:B15计科二班

组长:

组员:

指导教师:

完成日期:2016 年12 月23 日

成绩:

摘要

本次选做的课程设计是实现简单计算器的问题。计算器是一个常用的运算工具,本次课题要求用程序语言的方式解决问题。此问题仅使用数据结构中的栈操作就可以解决此问题。而在为了方便使用,添加了easyx图形库实现了UI设计。

为了接近平常使用的计算器,特地创建死循环而且添加了“CE”清空输入和“<-”删除键来控制输入错误或者循环使用的问题。在UI方面主要是实现按键和点击响应等交互,方便输入和修改,在程序框上面有输入和显示结果的文本框。在计算过程中,以栈出栈进站的特性把中缀形式的算数表达式转化为计算机方便计算的后缀表达式,最后计算出结果以文本方式显示在结果输出框内。

目录

摘要 .............................................................................................................................. I 目录 ............................................................................................................................ II 1需求分析 .. (3)

1.1功能简介及分析 (3)

1.2设计平台 (3)

2概要设计 (3)

2.1 Trans函数 (3)

2.2 Compvalue 函数 (4)

2.3 GetKey函数 (4)

3详细设计和实现 (4)

3.1转化为逆波兰式 (4)

3.2计算逆波兰式 (6)

3.3实现流程图 (7)

3.3部分具体程序 (8)

4调试与操作说明 (13)

4.1调试情况 (13)

4.2操作说明 (14)

5设计总结 (15)

参考文献 (16)

1需求分析

1.1功能简介及分析

本次选做的课程设计是实现简单的计算器并且添加UI的交互。此计算器是以软件的形式实现的计算器,运行在windows系统。计算器在功能上分为三类,分别是:常见计算器,专用计算器,综合功能计算器。常见的计算器又分为四种:

①简单型计算器:只实现基本的加减乘除和括号运算。

②科学型计算器:可以进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。

③程序员计算器:专门为程序员设计的计算器, 主要特点是支持And, Or, Not, Xor:最基本的与或非和异或操作, 移位操作Lsh, Rsh:全称是Left Shift和Right Shift,也就是左移和右移操作,你需要输入你要移动的位数(不能大于最大位数)RoL, RoR:全称是Rotate Left和Rotate Right,对于RoL来讲,就是向左移动一位,并将移出的那位补到最右边那位上,RoR类似。

④统计型计算器:为有统计要求的人员设计的设计的计算器。

本次课程设计只是实现了常见的简单计算器:

在界面上:简单的计算器需要有简单的按键和按键响应,有输入和结果的显示。

在功能上:能进行加减乘除混合运算,可以使用括号,有“M”键可以存储结果,以便下次计算使用,可以对输入的文本删除和重置。并且可以在重置后继续使用。

1.2设计平台

Windows7操作系统;Visual Studio 2015

2概要设计

2.1 Trans函数

主要功能中缀算术表达式转化成后缀表达式,然后存到栈里,以便计算时使用,转化时包括对小括号的匹配。

2.2 Compvalue 函数

主要功能是对栈中的后缀表达式进行计算,然后返回float类型的结果。2.3 GetKey函数

GetKey主要是在UI界面中获取按键然后保存成字符数组或者对字符数组的增减操作的函数。此函数为内置死循环,可以重复使用。

3详细设计和实现

实现软件形式的常用简单计算机,主要用到栈的特点,把平常使用的表达式,转化为能够让计算机计算的逆波兰表达式。

中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。

与前缀表达式(例:+ 3 4)或后缀表达式(例:3 4 +)相比,中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。

与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。

例:(1)8+4-6*2用后缀表达式表示为:62*84+-

(2)2*(3+5)-4+7/1用后缀表达式表示为:35+2*71/4-+

3.1转化为逆波兰式

首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为输入逆波兰式的栈S2(空栈),S1栈可先放入优先级最低的运算符#,注意,中缀式应以此最低优先级的运算符结束。可指定其他字符,不一定非#不可。从中缀式的左端开始取字符,逐序进行如下步骤:

(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈

(2)若取出的字符是运算符,则将该运算符与S1栈栈顶元素比较,如果该运算符优先级大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,则将该运算符送入S1栈。

(3)若取出的字符是“(”,则直接送入S1栈底。

(4)若取出的字符是“)”,则将距离S1栈栈底最近的“(”之间的运算符,逐个出栈,依次送入S2栈,此时抛弃“(”。

(5)重复上面的1~4步,直至处理完所有的输入字符。

(6)若取出的字符是“#”,则将S1栈内所有运算符(不包括“#”),逐个出栈,依次送入S2栈。

完成以上步骤,S2栈便为逆波兰式输出结果。不过S2应做一下逆序处理。便可以按照逆波兰式的计算方法计算了!

例如转换:2-(1+2)*3+4

转换后的逆波兰表达式是:2 1 2 + 3 * - 4 +

3.2计算逆波兰式

逆波兰式的计算同样用到了栈的特点,首先需要建立一个空栈T,然后从头遍历逆波兰式,如果是数字则直接放到栈顶,如果遇到操作符则连续取出两个栈顶数据,分别赋值给n1,n2,再根据操作符计算n1和n2,把得到的结果放到T 栈栈顶,继续操作,直到遍历完毕。

以上面的例子计算过程如图:

最后得出的结果是-3,即2-(1+2)*3+4=-3;

所以计算的具体过程是先转化中缀表达式为逆波兰表达式,然后由逆波兰表达式计算出结果,在转化的过程和最后的计算过程都用到了栈的思想,利用栈的进栈和出栈的特点实现转换。

3.3部分具体程序

//界面显示文字,”$”表示结束位置

char KeyStr[][4] = { { "CE"} ,{ "<-"} ,{ "M" } ,{ "/" }

,{ "(" } ,{ ")" } ,{ "^" } ,{ "^" }

,{ "7" } ,{ "8" } ,{ "9" } ,{ "*" }

,{ "4" } ,{ "5" } ,{ "6" } ,{ "+" }

,{ "1" } ,{ "2" } ,{ "3" } ,{ "-" }

,{ "00"} ,{ "0" } ,{ "." } ,{ "=" },{ "$" } };

void Trans(STR *InStr , char Lasts[])

{/*将算术表达式转化为后缀表达式*/

int i = 1;

char Stack[MAX];/*作为栈使用*/

char ChStr = InStr->Str[i]; //用于保存数组里的临时元素

i++;

int LastStrPos = 1, StackTop = 0; //StackTop用于表示栈顶

while (ChStr != '#'){

switch (ChStr){

case'(': /*判定为左括号*/

StackTop++;

Stack[StackTop] = ChStr;

break;

case')': /*判定为右括号*/

while (Stack[StackTop] != '('){

Lasts[LastStrPos] = Stack[StackTop];

StackTop--;

LastStrPos++;

}

StackTop--; //扔掉(

break;

case'+': /*判定为加减号*/

case'-':

while (StackTop != 0 && Stack[StackTop] != '('){

Lasts[LastStrPos] = Stack[StackTop];

StackTop--;

LastStrPos++;

}

StackTop++; //保留(

Stack[StackTop] = ChStr;

break;

case'*': /*判定为乘除号*/

case'/':

while (Stack[StackTop] == '*' || Stack[StackTop] == '/'){ Lasts[LastStrPos] = Stack[StackTop]; //如果栈顶是*或者/弹出,放到后缀数组里

StackTop--;

LastStrPos++;

}

StackTop++;

Stack[StackTop] = ChStr;

break;

case' ':break; //忽略空格

default:

while (ChStr >= '0' && ChStr <= '9' || ChStr == '.'){ /*判定为数字*/

Lasts[LastStrPos] = ChStr;

LastStrPos++;

ChStr = InStr->Str[i];

i++;

}

i--;

Lasts[LastStrPos] = ' '; //输出的时候隔开元素

LastStrPos++;

}

ChStr = InStr->Str[i]; i++;

}

while (StackTop != 0){

Lasts[LastStrPos] = Stack[StackTop];

LastStrPos++;

StackTop--;

}

Lasts[LastStrPos] = ' ';

LastStrPosT = LastStrPos;

}

float Compvalue(char LastStrTemp[]){ /*计算后缀表达式的值*/

float Stack[MAX]; /*作为栈使用*/

char ChStr; //临时栈元素

int StackTop = 0; /*LastStrPos为Lasts下标,StackTop为Stack

下标*/

int LastStrPos = 1;

ChStr = LastStrTemp[LastStrPos];

LastStrPos++;

while (ChStr != ' '){

switch (ChStr){

case'+':

Stack[StackTop - 1] = Stack[StackTop - 1] + Stack[StackTop];

StackTop--;

break;

case'-':

Stack[StackTop - 1] = Stack[StackTop - 1] - Stack[StackTop];

StackTop--;

break;

case'*':

Stack[StackTop - 1] = Stack[StackTop - 1] * Stack[StackTop];

StackTop--;

break;

case'/':

if (Stack[StackTop] != 0)

Stack[StackTop - 1] = Stack[StackTop - 1] /

Stack[StackTop];

else{

exit(0);/*异常退出*/

}

StackTop--;

break;

default:

float NumStr = 0; //把数字字符转化为数字

bool FlNum = 0;

while (ChStr >= '0' && ChStr <= '9' || ChStr == '.'){

if (ChStr == '.') {

FlNum = 1;

}

else if (!FlNum) {

NumStr = 10 * NumStr + ChStr - '0';/*将数字字符转化为对应的数值*/

}

else if (FlNum) {

NumStr += 0.1 * (ChStr - '0'); /*计算小数*/

}

ChStr = LastStrTemp[LastStrPos];

LastStrPos++;

}

StackTop++;

Stack[StackTop] = NumStr;

}

ChStr = LastStrTemp[LastStrPos];

LastStrPos++;

}

return Stack[StackTop];

}

void GetKey() {

/*FlushMouseMsgBuffer 清空鼠标消息缓冲区。

GetMouseMsg 获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待。

MouseHit 检测当前是否有鼠标消息。

MOUSEMSG 保存鼠标消息的结构体。 */

MOUSEMSG Msg;

RECT r = { 0 , WINKEYY * 2 / 3 , WINSIZEX, WINKEYY * 2 };

IMAGE ClearImgUp , ClearImgDown;

int ProPos = 0; //上一个点击的按钮

int temp = 0; //当前点击的按钮

int InCon = 0; //输入的字符数

int TempI = 0;

float LastStrTemp = LastV;

char StrTemp[MAX];

char M_Str[20] = { '/0' };

FlushMouseMsgBuffer();

getimage(&ClearImgUp, 1, 1, WINSIZEX , WINKEYY * 2 / 3); //获得输入区域的截图,用于覆盖原先输入的内容

getimage(&ClearImgDown, 1, WINKEYY * 2 / 3, WINSIZEX, WINKEYY * 2);

//获得输出区域的截图,用于覆盖原先输入的内容

while (TRUE) {

Msg = GetMouseMsg();

if (Msg.uMsg) {

temp = JudgePos(Msg.x, Msg.y);

switch (Msg.uMsg) {

case WM_LBUTTONDOWN:

setlinecolor(YELLOW);

rectangle(Pos[temp].x[0], Pos[temp].y[0], Pos[temp].x[1], Pos[temp].y[1]);

switch (temp) {

case 1:

GetStr[0] = '\0';

putimage(1, 1, &ClearImgUp);

putimage(1, WINKEYY * 2 / 3, &ClearImgDown);

InCon = 0;

PrintStr();

break;

case 2:

if(InCon > 0) //判断是否有输入的字符

GetStr[InCon - 1] = '\0';

putimage(1, 1, &ClearImgUp);

InCon--;

PrintStr();

break;

case 3:

strcat_s(GetStr, M_Str);

InCon++;

PrintStr();

break;

case 24:

settextstyle(50, 0, _T("Prestige Elite Std")); //设置字体大小,宽度,文字样式

putimage(1, WINKEYY * 2 / 3, &ClearImgDown);

GiveStr(GetStr, TheLastStr);

drawtext(_T(TheLastStr), &r, DT_RIGHT | DT_VCENTER | DT_SINGLELINE);

break;

case 7:

case 8:

break;

default:

strcat_s(GetStr, KeyStr[temp - 1]);

InCon++;

PrintStr();

}

Sleep(50);

break;

case WM_RBUTTONDOWN:

setlinecolor(BLUE);

rectangle(Pos[temp].x[0], Pos[temp].y[0], Pos[temp].x[1], Pos[temp].y[1]);

switch (temp) {

case 3:

strcpy(M_Str, TheLastStr);

break;

}

break;

}

}

setlinecolor(BLACK);

rectangle(Pos[ProPos].x[0], Pos[ProPos].y[0], Pos[ProPos].x[1], Pos[ProPos].y[1]);

if (temp != 0) {

setlinecolor(RED);

rectangle(Pos[temp].x[0], Pos[temp].y[0], Pos[temp].x[1], Pos[temp].y[1]);

ProPos = temp;

}

}

}

4调试与操作说明

4.1调试情况

这次的课程设计的代码很冗长,在实现整个思路之后难免会有很多错误。编写代码过程中遇到很多错误和难题。不过经过一点点的改正和攻克,错误也慢慢地变少,难题也逐个解开。在计算机领域代码无论在逻辑上还是在编写上都不允许有一点错误,因为一点的错误就会使整个程序崩溃,有时即便能够成功运行,得出的结果也有可能和预期的结果千差万别,但是也是因为这样的严谨编写和工作学习中,使得调试或者编写代码的人逐渐培养出了有耐心,有毅力,并且严谨细心的心境。一般在编写代码过程留下的逻辑错误或者编写错误都会在调试的时候遇到,这个时候就体现出了调试的重要性。调试可以使程序的可运行性、健壮

性、效率性上大幅度提高。本程序在调试中遇到了很多问题,如计算结果的准确性、显示结果的准确性或者显示位置等等。

本程序还存在的问题是对计算的精确度支持低,只支持两位小数点,并且在应对错误计算或者错误输入没有进行匹配,这些问题都会在使用的过程中可能造成程序的崩溃,但是这些问题都会在以后的设计中进行完善和增强。

4.2操作说明

生成界面如图所示:

生成界面

当程序运行的时候会出现如上图所示,要求使用者通过按键输入运算表达式,使用者只需点击输入想要计算的表达式,最后点击“=”键后,系统便会计算出结果并且显示出来。然后可以点击“<-”键删除修改表达式,或者通过“CE”键清空表达式和显示的结果,当然也可以通过点击“M”键暂时保存当前计算的结果,

以便于下次计算使用(右键M把当前结果存到M中,默认是0,左键M输入当前M内的值)。

5设计总结

本次课程设计大概花费了两周的时间,其中10天左右用来编写和调试程序代码,4天左右用来对程序编写报告。

在此之间,遇到了许多编写上的难题和遇到错误的抓狂,但是这些都在耐心的,一次一次的调试中解决和攻克。当再次总结后感觉收获很大,首先在编写代码上,增加自己的代码量,提高了编写的熟练度。其次增加了对栈的使用和理解,也有了一些在使用栈的方法和经验。然后是对界面设计的认识,如按键反馈、按键响应速度、颜色的搭配、字体的格式等等。最后是对在修改和调试代码的经验,代码调试的过程是最辛苦的但也是最能体现编写代码能力的地方,看一个人代码编写能力怎么样,不是说让实现一个功能,而是在拿到一个存在诸多BUG时能一步步解决这些问题。

当然,在编写这个报告时,程序可能还是存在一些错误没被发现,这些都需要在后继的补充完善中慢慢发现和更正,还有是本程序功能少,只是实现了常用的简单计算器,对于和科学计算器或者程序员计算器等功能都为涉及,这些也将会成为我在后续的设计中一点点添加上去,因为我相信,每一个复杂的庞大的系统或者程序都是在简单的基础上一点点完善的。也希望我能在后续的开发设计中能学习更多,收获更多,并且能一直坚持下去。

参考文献

[1]栾大成. 大话数据结构[M]. 北京清华大学学研大厦A座:清华大学出版社, 2011. 1-433

[2]甘勇, 李晔, 卢冰. C语言课程设计[M]. 北京市西城区右安门西街8号:中国铁道出版社, 2014. 1-340

[3]严蔚敏,吴伟民. 数据结构[M]. 北京清华大学学研大厦A座:清华大学出版社, 2007.

1-334

[4]张宏林,孔艳,王哲等编著按实例学Microsoft Visual Studio 2005 6.0[M].北京:人民邮电出版社,2000

[5]Brian W Kernighan , Dennis M Ritchie. The C Programming Language[M].

Pubilished:Prentice-Hall , 2004.

[6]陈朔鹰, 陈英. C语言趣味程序百例精解[M]. 北京理工大学:北京理工大学出版社, 1996. 1-435

[7]谭浩强. C 程序设计(第二版)[M]. 清华大学:清华大学出版社, 2014. 1-350

[8]谭浩强. C 语言程序设计题解与上机指导[M]. 清华大学:清华大学出版社, 2014. 1-245

[9]白中英, 戴志涛. 计算机组成原理[M]. 北京东黄城根北街16号:科学出版社, 2013.

1-350

全部代码如下:VS2015调试通过(未加入错误检测)使用C11新标准

/***********************************

*** 数据结构期末课程设计 ***

************************************

*** 作业名称:多项式计算器 ***

*** 使用的数据结构:栈 ***

*** UI:使用easyx实现 ***

***********************************/

#include

#include

#include

#include

#include// 就是需要引用这个图形库

#include

#define WINSIZEX 401 //窗口大小

#define WINSIZEY 471

#define WINKEYY (WINSIZEY - 1) / 8 //行间距

#define WINKEYX (WINSIZEX - 1) / 4

#define MAX 100

#define TRUE 1

#pragma warning(disable:4996)

typedef struct {

char Str[MAX];/*存储原算术表达式*/

int Long;

}STR;

struct {

int x[2]; //对象的左上坐标x和右下坐标x,x[0]表示坐上x、x[1]表示右下x int y[2]; //同上

}Pos[25];

char KeyStr[][4] = { { "CE" } ,{ "<-" } ,{ "M" } ,{ "/" }

,{ "(" } ,{ ")" } ,{ "^" },{ "^"}

,{ "7" } ,{ "8" } ,{ "9" } ,{ "*" }

,{ "4" } ,{ "5" } ,{ "6" } ,{ "+" }

,{ "1" } ,{ "2" } ,{ "3" } ,{ "-" }

,{ "00" } ,{ "0" } ,{ "." } ,{ "=" },{ "$" } };

int LastStrPosT = 1; //LastStrPos表示后缀表达式存的数量

char GetStr[MAX * 5];

char TheLastStr[MAX];

float LastV = 0; //计算结果

void Trans(STR *InStr, char LastStr[]);

float Compvalue(char LastStrTemp[]);

void Trans(STR *InStr , char LastStr[])

{/*将算术表达式转化为后缀表达式*/

int i = 1;

char Stack[MAX];/*作为栈使用*/

char ChStr = InStr->Str[i]; //用于保存数组里的临时元素i++;

int LastStrPos = 1, StackTop = 0; //StackTop用于表示栈顶

while (ChStr != '#'){

switch (ChStr){

case'(': /*判定为左括号*/

StackTop++;

Stack[StackTop] = ChStr;

break;

case')': /*判定为右括号*/

while (Stack[StackTop] != '('){

LastStr[LastStrPos] = Stack[StackTop];

StackTop--;

LastStrPos++;

}

StackTop--; //扔掉(

break;

case'+': /*判定为加减号*/

case'-':

while (StackTop != 0 && Stack[StackTop] != '('){

LastStr[LastStrPos] = Stack[StackTop];

StackTop--;

LastStrPos++;

}

StackTop++; //保留(

Stack[StackTop] = ChStr;

break;

case'*': /*判定为乘除号*/

case'/':

while (Stack[StackTop] == '*' || Stack[StackTop] == '/'){

LastStr[LastStrPos] = Stack[StackTop]; //如果栈顶是*或者/弹出,放到后缀数组里

StackTop--;

LastStrPos++;

}

StackTop++;

Stack[StackTop] = ChStr;

break;

case' ':break; //忽略空格

default:

while (ChStr >= '0' && ChStr <= '9' || ChStr == '.'){ /*判定为数字*/ LastStr[LastStrPos] = ChStr;

LastStrPos++;

ChStr = InStr->Str[i];

i++;

}

i--;

LastStr[LastStrPos] = ' '; //输出的时候隔开元素

LastStrPos++;

}

ChStr = InStr->Str[i]; i++;

}

while (StackTop != 0){

LastStr[LastStrPos] = Stack[StackTop];

LastStrPos++;

StackTop--;

}

LastStr[LastStrPos] = ' ';

LastStrPosT = LastStrPos;

}

float Compvalue(char LastStrTemp[]){ /*计算后缀表达式的值*/

float Stack[MAX]; /*作为栈使用*/

char ChStr; //临时栈元素

int StackTop = 0; /*LastStrPos为LastStr下标,StackTop为Stack下标*/

int LastStrPos = 1;

ChStr = LastStrTemp[LastStrPos];

c语言程序设计课程计算器设计报告

课程设计说明书 题目计算器程序设计 起讫日期 2006 年 7月 3日至 2006 年 8月 6日 所在院系软件学院 专业机械+软件班级 04-2 学生姓名偶偶哦学号 指导教师 2006年 8 月日

摘要 当今社会是信息社会,科技经济高速发展的社会!为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品! 随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小!电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成!电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延!下面我们将用我们学习的c语言编写一个简易的计算器程序!实现简单的初步的计算功能! 本程序的编写基础是Tubro 汉化版,它在tubro c的原有基础上实现了多汉字的支持方便了我们的使用。生成的程序可移植性强兼容性好稳定!现在只实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,以及一个时钟原代码。这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。但是,每次只能运算一个表达式。不能运算多个表达式。在程序里面在添加一组选择函数即可。本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。 关键词:C语言 Tubro c 汉化版计算器时钟

目录 第一章综述 (1) 1.1 课题的现实意义 (1) 1.2 软件环境 (1) 1.3 硬件环境 (1) 第二章系统设计流程图 (2) 2.1 系统流程图 (2) 2.2 主要功能表 (2) 第三章系统分析和设计 (3) 3.1 图形的绘制和输出 (3) 3.2 文本的输出显示 (3) 3.3 计算函数的调用 (4) 3.4 程序的运行和退出 (5) 第四章系统测试 (6) 4.1 系统测试 (6) 4.2 调试 (6) 4.3 错误原因分析一 (6) 4.4 错误原因分析二 (6) 第五章用户使用说明书 (8)

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

c语言计算器源代码

c语言计算器源代码 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

#i n c l u d e<> #include<> #include<> #definemaxsize100 typedefdoubledatatype1; typedefchardatatype2; typedefstructstack1 { datatype1data1[maxsize]; inttop1; /*栈顶元素*/ }seqstack1,*pseqstack1;/*顺序栈*/ typedefstructstack2 { datatype2data2[maxsize]; inttop2; /*栈顶元素*/ }seqstack2,*pseqstack2;/*顺序栈*/ /*栈的初始化*/ pseqstack1init_seqstack1(void) { pseqstack1S; S=(pseqstack1)malloc(sizeof(pseqstack1)); if(S) S->top1=-1; returnS; } pseqstack2init_seqstack2(void) { pseqstack2S; S=(pseqstack2)malloc(sizeof(pseqstack2)); if(S) S->top2=-1; returnS; } /*判断栈空*/ intempty_seqstack1(pseqstack1S)

if(S->top1==-1) return1; else return0; } intempty_seqstack2(pseqstack2S) { if(S->top2==-1) return1; else return0; } /*X入栈*/ intpush_seqstack1(pseqstack1S,datatype1X) { if(S->top1==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top1++; S->data1[S->top1]=X; return1; } } intpush_seqstack2(pseqstack2S,datatype2X) { if(S->top2==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top2++; S->data2[S->top2]=X; return1; }

C语言实现计算器功能

实验一多功能计算器 一、问题描述 设计一个多功能计算器,可以完成基本的计算。 设计要求: 1、具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘R’返回菜单。 例如:输入:2 + 5 输出:7 2、实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。输入表达式如下: 例如:输入:2+5 输出:7 二、算法说明 1.数据结构说明(可以图示说明,也可以文字说明) 本程序主要根据选择菜单编写了六个自定义函数,用于在main()函数中调用,在main()中,用一个字符变量num1来记录下菜单选项的标号,根据num1的值来决定调用哪个函数。 程序要完成的功能及所要用到的函数如下:

下面就是整个程序的流程图:

2.算法说明(即函数说明) void suanshuyunsuan() //做算术运算时调用的函数 void suanshuyunsuan2() //选择继续做算术运算调用的函数,将上次运算的结果做为下次算术运算的第一个操作数//判断算术运算就是否继续 void panduan() //判断算术运算就是否继续 void biaodashiyunsuan() //单运算符表达式实现函数 void qingping() //清除屏幕 void fanhuicaidan() //显示菜单 三、测试结果(这部分需文字与图示结合) 1.第一组测试用例 (1)测试输入: 测试目的:测试算术运算的功能 结果输出:

(2)再一次输入:1测试目的:测试算术运算就是否能继续 结果输出: (3)这时输入:0 测试目的:退出算术运算 结果输出:

C语言课程设计计算器图形界面

C语言课程设计计算器图形界面

扬州大学 C语言课程设计报告 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 年 6 月 25 目录

一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11 1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。

经过课程设计能够达到综合设计C语言程序的目的。 (2)经过本课程设计,能够培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)经过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log (x),lnx,e的x次方等。(4)其它运算:如X!,x的累加等。(4)不允许调用库函数,使用自行开发的程序实现常见函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操

大学计算机c语言计算器源代码

C++语言编写。。 #include #include #include using namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) { char data; node *next; }node; typedef struct stack_num//存储数的栈 { double *top; double *base; }stack_num; typedef struct stack_char//存储运算符号的栈 { char *top;

char *base; }stack_char; stack_num S_num;//定义 stack_char S_char;//定义 char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^', 'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('}; int compare[1000];//表现出各运算符号的优先级 double shu[1000];//存储"数"的数组 double dai_result;//运算的结果,是为了处理M运算(简介函数里有M的定义) int biao = 0;//和dia_result一样,为了处理M运算 char line[SIZE];//输入的所要计算的表达式 void init()//初始化 { compare[fu[0]] = -2;//用数字的大小表现出符号的优先级 compare[fu[1]] = -1; compare[fu[2]] = 2; compare[fu[3]] = 2; compare[fu[4]] = 4; compare[fu[5]] = 4; compare[fu[6]] = 4;

速算,简易计算器c语言代码,可实现加减乘除

#include"stdio.h" #include"math.h" #include"stdlib.h" struct optrstyle { int top; char stack[20]; } struct opndstyle { int top; int stack[20]; } void main() { char ch; while(1) { printf("-----------------------------------------\n"); printf("|-----------欢迎来到速算24--------------|\n"); printf("|----------是否开始游戏?????------------|\n"); printf("|--------- 开始游戏请按'Y'-------------|\n"); printf("|--------- 退出游戏请按其他键-------------|\n"); printf("-----------------------------------------\n"); scanf("%c",&ch); if(ch=='Y' or ch=='y') { } else break; } } int EvaluateExpression() { // 算术表达式求值的算符优先算法。设OPTR 和OPND 分别为运算符栈和运算数栈,OP 为运算符集合。 InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c = getchar(); while(c!='#' || GetTop(OPTR)!='#') { if(!In(c,OP))

简易计算器设计-msp430-C语言

简易计算器

目录 摘要…………………………………………………………………………………P3 关键字………………………………………………………………………………P3 一、设计要求………………………………………………………………………P3 二、方案论证与选择………………………………………………………………P3 2.1 单片机选择………………………………………………………………P3 2.2 LCD显示屏选择…………………………………………………………P3 2.3 键盘选择…………………………………………………………………P4 2.4 CPU工作方式选择………………………………………………………P4 三、系统实现………………………………………………………………………P4 3.1 硬件设计…………………………………………………………………P4 3.1.1系统框图……………………………………………………………P4 3.1.2 盘的电平设计以及与单片机的连接 键……………………………P5 3.2.3单片机与显示器的连接…………………………………………… P5 3.2软件设计…………………………………………………………………… P6 四、作品性能测试与分析…………………………………………………………P10 4.1试性能概览………………………………………………………………P10 4.2误差分析…………………………………………………………………P12

五、参考文献………………………………………………………………………P12 六、附录……………………………………………………………………………P13 6.1计算器功能介绍…………………………………………………………P13 6.2仿真电路图………………………………………………………………P13 6.3元件清单…………………………………………………………………P13 6.4原程序代码………………………………………………………………P14 摘要:本设计以低功耗单片机MSP430V136T、1602字符型液晶屏和4*4简易键盘为主要器件,来实现加、减、乘、除、开根号、平方、求倒数等运算。设计中分别采用P1口低4位和P2口低4位与键盘的行列线相连,用于采集中断信号并分析键值;键盘规格为4*4,由于所需的功能键数大于16,因此需要进行按键复用;单片机的P3口连接显示器的D0~D7端,用于输出显示数据或控制命令;选用P4口中的3、4和5口用于实现显示屏的控制功能:使能、控制/数

C语言制作简单计算器

C语言制作简单计算器 一、项目介绍 我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2 项目效果图 编写这个程序的步骤如下: ?获得用户要求计算机执行计算所需的输入。 ?检查输入,确保输入可以理解。 ?执行计算。 ?显示结果。 三、解决方案 1.步骤1

获得用户输入是很简单的,可以使用printf()和scanf()。下面是读取用户输入的程序代码: #includeint main(){ double number1=0.0; //定义第一个操作值 double number2=0.0; //定义第二个操作值 char operation=0; //operation必须是'+''-''*''/'或'%' printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&number1,&operation,&number2); return0; } 2.步骤2 接着,检查输入是否正确。最明显的检查是要执行的操作是否有效。有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。 还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。如果右操作数是0,这些操作就是无效的。这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。 switch(operation) { case'+': printf("=%lf\n",number1+number2); break; case'-': printf("=%lf\n",number1-number2); break; case'*': printf("=%lf\n",number1*number2); break; case'/': if(number2==0) printf("\n\n\aDavision by zero error!\n"); else printf("=%lf\n",number1/number2); break;

C语言课程设计--计算器(图形界面)

扬州大 学 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 2010 年6 月25

目录 一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11

1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。通过课程设计可以达到综合设计C语言程序的目的。 (2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log(x),lnx,e的x次方等。(4)其他运算:如X!,x 的累加等。(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。 3 课题设计的补充知识 本程序通过int specialkey(void)和#include来实现对屏幕的操作,通过调用int arrow()函数,int specialkey(void)和#include来实现对光标的操作。计算机图形采用Turbo C 2.0绘图程序制作。因此涉及C的图形程序设计知识。此外,由于不允许调用库函数,则要自行开发程序实现sinx,cosx,e的x次方函数运算,则可以根据幂级数的展开式来设计实现其运算的算法,而x的阶乘和x的累加则可用for语句来实现。 最后,不得不说说四则运算的算法,有两种方法可以实现:(1)利用堆栈实现四则运算(2)还可以用递归整数的四则运算。 sinx函数 #include

简易计算器C语言代码

简易四则运算计算器 计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。 项目设计目的 掌握模块的划分; 掌握结构体定义; 掌握栈的操作; 掌握函数的定义; 掌握栈的基本操作; 掌握VC的基本绘图库; 掌握鼠标的响应操作; 目设计内容 设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。 项目设计要求 根据分析,系统要求实现以下几点基本功能: 可通过按钮输入数字、运算符; 能通过按钮实现退格、清除功能; 实现加、减、乘、除、开方运算功能; 实现括号运算; 显示运算结果; 良好的交互界面。

项目详细设计 功能模块图 根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。 计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。 计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。 计算器计算处理模块。计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。计算处理模块在按键控制模块中被调用执行。处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈,一个用来存放操作数栈。 计算器记忆处理模块。记忆处理模块使计算其具有记忆功能。记忆当前输入的表达式,给出一个最后的运算结果。可以清楚部分或全部记忆的值。 图简易计算器模块图 数据结构 该系统主要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集,操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操作符,一个用来存放操作数。 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2}, {2,2,1,1,1,2,2}, {2,2,2,2,1,2,2}, {2,2,2,2,1,2,2}, {1,1,1,1,1,3,0}, {2,2,2,2,0,2,2}, {1,1,1,1,1,0,3}}; typedef struct { char elem[Stack_Size]; int top; }SeqStack; typedef struct { int elem[Stack_Size]; int top; }SeqStackOperand;

(完整word版)C语言简易计算器课程设计.doc

C语言课程设计报告书题目:简易计算器 院系: 班级: 学号: 姓名:

摘要 该软件为用户提供在windows 系统上的简易计算器,能进行简单的加、减、 乘、除四则运算与混合运算。目的是为了巩固和加深 C 语言课程的基本知识的理 解和掌握,利用 C语言进行基本的软件设计,掌握 C 语言的编程和程序调试 的基本技能,掌握书写程序设计说明文档的能力,提高运用 C 语言解决实际问 题的能力。 关键词: C; 简易计算器 ; 程序 ; 基本算法;混合运算 SUMMARY the software provides a simple calculator in Windows system for users ,can be a simple add,subtract,multiply,divide.The purpose is to consolidate and deepen the basic knowledge of C language courses to understand and master, The use of C language for software design basic, To master the basic skills of C language programming and program debugging, Master the writing program design documentation ability,improve the ability to use C language to solve practical problems.

C语言_程序设计_计算器

C语言_程序设计_计算器 课程设计说明书 题目多功能计算器起讫日期 2006 年 7月 3日至 2006 年 8月 6日 所在院系 专业班级 学生姓名学号 指导教师 2006年 8 月 1 日 摘要 当今社会,随着人们物质生活的不断提高,电子产品已经走进家家户户,无论是生活和学习还是娱乐和消遣几乎样样都离不开电子产品,计算器可谓是我们最亲密的电子伙伴之一。 随着科技的发展,人们对计算要求的精确度越来越高,各种不同功能的计算器已经悄悄走进我们的生活和学习中。对于学生来说一个功能齐全的计算器对我们的学习有着莫大的帮助。借着C语言程序设计的机会,我决定自己动手来研究一下计算器。在练习巩固C语言学习的同时又可以从中体会到计算器的强大功能,然而由于学习的内容和时间有限,至今为止我只能实现四则运算加、减、乘、除、平方、立方和开方的一些简单功能,并且在计算器的里面加了一个漂亮的时钟,用来方便我们的学习。在今后的学习中,我会继续研究,争取进一步来完善它的功能。 本系统采用Turbo C语言开发,生成可执行文件在任何系统下都可以执行,具有很好的数据处理能力和稳定性。本论文主要介绍了该课题的开发背景以及过程和

所要完成的功能。并且重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。由于“初来乍到”,这个程序设计还有一些漏洞和缺陷,希望您多多提出~关键字:Turbo c c语言计算器程序四则数值运算 目录 第一章综述...........................................................................1 1(1 课题的现实意义...............................................................1 1(2 软件环境........................................................................1 1(3 硬件环境 (1) 第二章系统设计流程图............................................................2 2(1 系统流程图.....................................................................2 2(2 主要功能表.....................................................................2 第三章系统分析和设计............................................................3 3(1 图形的绘制和输出............................................................3 3(2 文本的输出显示...............................................................3 3(3 计算函数的调用...............................................................4 3(4 程序的运行和退出 (5) 第四章系统测试.....................................................................6 4(1 缺少变量定义,定义位置不正确..........................................6 4(2 语法错误........................................................................6 4(3 注释的位置.....................................................................6 4(4 逻辑错误 (6) 第五章用户使用说明书……………………………………………………8 5(1 运行Turbo C程序进入计算器界面…………………………………8 5(2 计算器的使

C语言简单计算器的编写课程设计

2013-2014学年第二学期 《高级语言程序设计》 课程设计报告 题目:简单计算器 专业:数字媒体技术 班级:13级1班 姓名:邢洪波 指导教 师:王辉 成绩: 计算机与信息工程系 二0一四年二月二十日 1设计内容及要求 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。? 在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。在数据输入完成后,

如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。程序基本功能要求实现完整,并有简单的验证。程序还须有符合标准的 程序设计报告。

2概要设计 系统流程图 系统流程图主要功能表 主要功能表

3设计过程或程序代码 #include<> #include<> #include<> /*malloc的头文件代表在内存中开辟存储空间*/ double jisuan(char a[]) { int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0; /*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/ char nibo[50],zhan2[50]; /*定义字符型数组*/ double x,n,l,z=0,zhan3[50]; /*定义双精度变量x,n,l,z,zhan3[50]*/ typedef struct /*表示可以用con定义结构体变量*/ { double d1; int d2; }dd; typedef struct { dd data[50]; int top; }zhan1; zhan1 *shu; /*定义指针变量*/ shu=(zhan1 *)malloc(sizeof(zhan1)); shu->top=0; while(a[i]!='\0') /*外循环是用while语句*/ {

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

用C语言编写简易计算器

供应链管理 用C语言设计简易计算器 班级:工业工程1103班 姓名: 2014/5/6

一、设计内容 我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:1.以界面形式给出计算器功能 2.简单的四则混合运算(支持小括号、优先级) 3.弦、余弦函数计算 4.指数、对数的运算 二、总体设计 简单计算器由五大模块组成,模块设计如下: 模块调用图 1.主函数 void main() 功能:调用各个主要模块,实现简单计算器的整体功能。2. 主界面函数void JieMian() 功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。 3.四则混合运算函数void SiZeHunHeYunSuan() 功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。 4.三角运算函数void SanJiaoYunSuan() 功能:实现基本的三角函数运算:sin(x)和cos(x)。 5.指对数函数void ZhiDuiShuYunSuan() 功能:实现基本的指数和对数运算。

三、采取的解决措施: 1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。 2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。 3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。 四、详细代码: #include #include #include void main () { int i,flag; printf("*****欢迎使用简单计算器*******\n"); printf(" 1.加法运算\n"); printf(" 2.减法运算\n"); printf(" 3.乘法运算\n"); printf(" 4.除法运算\n"); printf(" 5.开方运算\n"); printf(" 6.平方运算\n"); printf(" 7.立方运算\n"); printf(" 8.正弦运算\n"); printf(" 9.余弦运算\n"); printf(" 10.正切运算\n"); printf(" 11.余切运算\n"); printf(" 12.平均值方差标准差运算\n"); printf("请输入i的值:\n"); scanf("%d",&i); switch(i) { case 1:flag=1;break; case 2:flag=2;break; case 3:flag=3;break; case 4:flag=4;break; case 5:flag=5;break; case 6:flag=6;break; case 7:flag=7;break; case 8:flag=8;break;

单片机C语言简易计算器

课程设计报告 课程名称单片机原理及应用设计题目简易计算器设计专业班级 姓名 学号

1.项目概述 中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 2.项目要求 基于AT89C51单片机的简易计算器,设计要求如下: (1)计算器至少能正常显示8位数。 (2)开机时,显示“0” (3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分 (4)运算结果超过可显示的位数时能进行出错提示。 3.小组人员组成及分工

4.系统设计1.框图设计 显示 录入 5.硬件设计 (1)电路原理图: AT89C51 八位七段数码管 按键录入模 块(0-9 +-*/=c)

(2)元件清单: 6.软件设计(1)算法流程图: 主函数

显示函数 按键函数

(2)程序清单: #include /***按键程序***/ char keyscan(); /***显示程序***/ void display(); char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组 /***计算程序***/ void calculate(char k,char c1[8],char c2[8]); /***片选***/ unsigned char code Select[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***码选***/ unsigned char code LED_CODES[]= {0xC0,0xF9,0xA4,0xB0,0x99, //0-4 0x92,0x82,0xF8,0x80,0x90, //5-9 0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,- /***main函数***/ void main(void) { char i,j,k,c; char a[8],b[8]; /***定时1ms***/ TMOD=0; //TL0=-(1000/256); //TH0=-(1000%256); EA = 1; //总中断开关

相关主题
文本预览
相关文档 最新文档