计算器软件设计和计算机软件设计区别,求一个模拟计算器程序

# include

# include

# include

# include

# define MAX_OPERATOR_NUM 100//运算符栈数组长度

# define MAX_DATA_NUM 100//运算数栈数组长度

typedef struct OPStack//定义运算符栈

{

char opStack[MAX_OPERATOR_NUM];

int top;

}OPStack, *pOPStack;

typedef struct DATAStack//定义操作数栈

{

double stack[MAX_DATA_NUM];

int top;

}DATAStack, *pDATAStack;

void InitpOPStack(pOPStack &pOStack)//初始化运算符栈

{

if( !(pOStack = (pOPStack)malloc(sizeof(OPStack))))//为运算符栈分配空间

{

printf("分配内存空间失败!\n");

exit(-1);

}

pOStack->top = -1;

}

void InitpDATAStack(pDATAStack &pDStack)//初始化运算数栈

{

if( !(pDStack = (pDATAStack)malloc(sizeof(DATAStack))))//为运算数栈分配空间

{

printf("分配内存空间失败!\n");

exit(-1);

}

pDStack->top = -1;

}

void PushOPStack(pOPStack &pOStack, char ch)//运算符进栈

{

pOStack->opStack[++(pOStack->top)] = ch;

}

void PopOPStack(pOPStack &pOStack, char &ch)//运算符出栈

{

ch = pOStack->opStack[pOStack->top];

pOStack->top--;

}

void PushDATAStack(pDATAStack &pDStack, double d)//运算数进栈

{

++(pDStack->top);

pDStack->stack[pDStack->top] = d;

}

void PopDATAStack(pDATAStack &pDStack, double &d)//运算数出栈

{

d = pDStack->stack[pDStack->top];

pDStack->top--;

}

void ClearpOPStack(pOPStack &pOStack)//清空运算符栈

{

pOStack->top = -1;

}

void ClearpDATAStack(pDATAStack &pDStack)//清空运算数栈

{

pDStack->top = -1;

}

char GetToppOPStack(pOPStack &pOStack)//获取运算符栈顶元素

{

return pOStack->opStack[pOStack->top];

}

double GetToppDATAStack(pDATAStack &pDStack)//获取运算数栈顶元素

{

return pDStack->stack[pDStack->top];

}

bool IsOP(char &ch)//区分 运算符 和 运算数 的函数,是运算符时返回true,否则返回false

{//判断是否为符号

if ( (ch == '+') || (ch == '-') || (ch == '*') || (ch == '/') || (ch == '=') || (ch == 'A') || (ch == 'S') || (ch == 'a') || (ch == 's') || (ch == '(') || (ch == ')') )

return true;

else

return false;

}

char Precede(char op1, char op2) //参考《数据结构》(C语言版)第53页 3。

2。5表达式求值 表 3。1

{

char tab[9][10];//定义字符串的二维数组来存放运算符优先级的关系

strcpy( tab[0], ">>" );

strcpy( tab[1], ">>" );

strcpy( tab[2], ">>>><>" );

strcpy( tab[3], ">>>><>" );

strcpy( tab[4], ">>>E>>>>" );

strcpy( tab[6], ">>>><>>>>" );

strcpy( tab[7], ">>>><>>>>" );

strcpy( tab[8], "= 0)//判断被开方数是否为0,若为0,退出程序

{

s = sqrt(b);//调用SQRT()函数

break;

}

else

{

printf("\n#### 求负数的平方根是非法运算。

程序终止! ####\n");

exit_E();//打印结束菜单

exit(-1);

}

}

return s;

}

char ChangeChar(char &c)//通过ChangeChar函数来把a、s的小写字母改为大写的

{

if( c == 'a' )

c = 'A';

else if( c == 's' )

c = 'S';

return c;

}

//参考《数据结构》(C语言版)第53页 3。

2。5表达式求值 算法3。4EvaluateExpression()函数

void EvaluateExpression()//计算函数:读入表达式,并计算结果

{

pOPStack pOStack;//声明运算符栈

pDATAStack pDStack;//声明运算数栈

double result;//存运算的结果

char x, theta, c;//c存放读取的字符,x、theta存放运算符栈的栈顶元素

int flag, data;//标识符,用来读入连续的数字

double s;

double getd;//存放GetTop***的结果

double a, b, cc;//a,b存放数据栈出栈的栈顶元素, c存放运算结果

flag = 0;//初始化标识符,用来判断字符串中的连续数字

data = 0;//

InitpOPStack(pOStack);//初始化运算符栈

InitpDATAStack(pDStack);//初始化运算数栈

PushOPStack(pOStack, '=');//在运算符栈底放入'='

printf("&请输入表达式以'='结束:");

c = getchar();//读入字符

ChangeChar(c);//通过调用函数来实现把小写的a、s改为大写的A、S

while( c != '=' || GetToppOPStack(pOStack) != '=')

{

if( !IsOP(c) )//不是运算符进栈

{

s = c - '0';//把字符转化为数字

if ( flag == 1 )

{

PopDATAStack(pDStack, getd);

s = getd*10 + s;

}

PushDATAStack(pDStack, s);

flag = 1;

c = getchar();

ChangeChar(c);

}

else

{

flag = 0;

switch( Precede(GetToppOPStack(pOStack), c) )//输入元素和运算符栈顶元素比较

{

case ''://退栈并将运算结果进栈

PopOPStack(pOStack, theta);

PopDATAStack(pDStack, b);

PopDATAStack(pDStack, a);

cc = Operate(a, theta, b);

PushDATAStack(pDStack, cc);

break;

}//switch

}//else

}//while

result = GetToppDATAStack(pDStack);//运算结束时,运算数栈的栈底元素就是计算结果

ClearpOPStack(pOStack);//清空运算符栈

ClearpDATAStack(pDStack);//清空运算数栈

printf("->计算结果为:%。

2f\n\n", result);//输出运算结果

return ;

}

void print_user()//欢迎界面

{

printf("\n欢迎使用C语言版模拟计算器\n\n");

printf("************************************************************************\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|模拟计算器使用说明|\n\n");

printf("| 作者:谢先斌|\n\n");

printf("|本程序包括对'+'、'-'、'*'、'/'、'()'的运算|\n");

printf("|本程序中ABS()算用A()替代、SQRT()运算用S()代替|\n");

printf("|本程序中的一切字母均不区分大小写|\n");

printf("正确的表达式如:1+A(7-8)+S(9*8)=\n");

printf("|输入'='表示表达式输入结束!!|\n\n");

printf("| 欢迎使用!!!-->--> |\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("************************************************************************\n\n");

}

int main()//主函数

{

char in;

bool b;//标识符,用来标识是否结束程序

b = true;//初始化,不结束

print_user();//打印欢迎界面

printf("*请确认使用计算器Y/N:");

while(1)

{

scanf("%c", &in);//确认是否继续操作

getchar();//吃掉会车,避免干扰

switch(in)

{

case 'Y':

case 'y':

{

EvaluateExpression();//进入计算函数:读入表达式,并计算结果

break;

}

case 'N':

case 'n':

{

exit_E();

b = false;

break;

}

//default:

//printf("**输入错误,请重新输入Y/N:");

//break;

}

if(b==false)//如果 b==false ,退出整个程序

break;

printf("*您确定要继续使用计算机Y/N:");

getchar();//用getchar吃掉回车,避免对后续输入中in的干扰

}

return 0;

}

全部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中print语句

学习链接1 学习链接2 1. 如果print语句后面什么符号都没有是个换行语句&#xff0c;也就是是要另起一行。 2. 分号表示下次输出是紧挨着这个光标位置输出. 3. 而逗号是下次输出与这次输出有一定的空格之后接着输出. namekk salutationMr. greetingHello, print greeting,sa…

计算机应用基础论坛贴子怎么发,网络课程论坛中长尾现象的应对策略——以《计算机应用基础》网络课程为例...

摘要&#xff1a;进入21世纪以来,互联网就备受关注.由于我国信息设施资源建设稳步推进,互联网的基础更为坚实,发展更为迅速.据权威数据统计,中国至2009年约拥有130万个BBS论坛,数量为全球第一,然而,作为分享和参与类应用的典型代表(更新博客,发帖/回帖)的使用率仍然偏低.笔者在…

解析Json需要设置Mime

IIS6.0 1.打开IIS添加Mime项 关联扩展名&#xff1a;*.json内容类型(MIME)&#xff1a;application/x-javascript 2.添加映射&#xff1a; 位置在IIS对应站点右键属性&#xff1a;”主目录”-”应用程序设置”-”配置”-”映射”-”添加”&#xff0c;会打开”添加/编辑应用程序…

Using the Transient Fault Handling Application Block

http://msdn.microsoft.com/en-us/library/dn440719(vpandp.60).aspx转载于:https://www.cnblogs.com/fengye87626/p/3772555.html

让python脚本像普通程序一样运行

有些时候像运行其他程序一样运行python程序&#xff08;也叫做脚本&#xff09;&#xff0c;而不是显式使用python解释器。在UNIX中有个标准的实现方法&#xff1a;在脚本首行前面加上#&#xff01;&#xff08;叫做pound bang或者shebang&#xff09;&#xff0c;在其后加上用…

Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)

Function 类型 函数是对象 具有属性和方法&#xff0c;函数名实际上是一个指向函数对象的指针 没有重载&#xff1b; 函数声明和函数表达式 函数声明&#xff1a; function sum (num1, num2){ return num1 num2; } 函数表达式&#xff1a; var sum function(num1, num2){ ret…

PS图片删除需要计算机管理权限,如何使用PsTools工具执行本地/远程PC管理任务

大多数刚入门的管理员都习惯使用 RDP 或其它类似的工具连接到远程 Windows 中进行图形化管理。而 PowerShell 及 PsTools 等工具可以帮助我们在命令行中执行相当多的管理任务&#xff0c;更主要的是可以将其写成脚本来执行周期性重复任务或在管理大批量服务器时提高效率。在企业…

LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 打印螺旋矩阵 逐个环…

TCP为什么需要三次握手和四次挥手

网上已经有很多解释了&#xff0c;就不瞎说了&#xff0c;Mark一些链接作为自己的学习笔记吧。 学习参考链接1 学习参考链接2 学习参考链接3 学习参考链接4 为什么要3次握手 防止已过期的连接请求报文突然又传送到服务器&#xff0c;因而产生错误。 Client发生一个请求连…

不属于个人计算机范围的是,计算机应用基础模拟试卷2

一、1.单项选择题单项选择题每小题1分。在每小题列出的四个备选项中只有一个是符合题目要求的&#xff0c;请将其选出并将“答题卡”的相应代码涂黑。未涂、错涂或多涂均无分。0. 个人计算机属于A&#xff0e;小巨型机B&#xff0e;小型计算机C&#xff0e;微型计算机D&#xf…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图&#xff0c;容易难度&#xff1a;中地图&#xff0c;中等难度&#xff1a;大地图&#xff0c;困难难度&#xff1a; 四、完整代码链接总结 前言 这是一个Python实验作业&#xff0c;内容如下&#xff1a; 题目要求&am…

解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率

通常这种情况发生。在System Settings -> display 你会发现多出了一个 unknown display。这往往是因为你使用质量低劣的视频电缆&#xff0c;例如&#xff0c;几美元VGA线。解决方案有&#xff12;&#xff0c;质量好的一个改变钢带&#xff08;有磁场干扰&#xff09;VGA线…

基础练习 - 数值交换

题目 1 声明两个变量&#xff1a;int n1 10,n2 20,要求将两个变量叫唤&#xff0c;最后输出n1为20,n2为10. (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python计算圆的面积

用Python创建一个脚本&#xff0c;要求&#xff1a; 能计算半径为2的圆的面积保留10位小数可以直接执行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))计算圆的面积要用到pi&#xff0c;所以我们引用模块math

Visual Studio 配色方案

字体&#xff1a;Fixedsys Excelsior 字体大小&#xff1a;12 配色方案&#xff1a;http://studiostyles.info 导入步骤&#xff1a; 工具->导入和导出设置->导入选定的环境设置->否&#xff0c;仅导入新设置->“浏览”->下载的vssetings文件->完成。 转载于…

昆明学院计算机专业在哪个校区,昆明学院有几个校区及校区地址

昆明学院有几个校区及校区地址2017-06-19 11:15:56文/韩竞仪最近有很多考生和家长咨询小编&#xff0c;昆明学院有几个校区&#xff0c;今年新生会被分配到哪个校区?哪个校区好?等相关问题&#xff0c;下面小编统一回复一下考生们的问题。昆明学院有3个校区&#xff0c;分别是…

python列表总结

列表方法append()&#xff1a;在列表末尾添加元素列表方法insert()&#xff1a;在列表任意位置插入元素&#xff0c;a.insert(0,1)&#xff0c;在列表的0号位置插入元素1.列表方法count(s)&#xff1a;返回s在列表中出现的次数列表方法remove(s)&#xff1a;移除列表中的第一个…

Swift基本语法

Swift基本语法 原文:Swift基本语法Swift基本语法 简介 1.什么是Swift Swift是苹果于2014年WWDC&#xff08;苹果开发者大会&#xff09;发布的全新编程语言 Swift在天朝译为“雨燕” 跟Objective-C一样&#xff0c;可以用于开发iOS、Mac应用程序 苹果从2010年7月开始设计Swift语…

2018华工计算机应用基础作业,计算机应用基础平时作业2019

计算机应用基础平时作业2019Tag内容描述&#xff1a;1、1.简述启动控制面板的常用方法。(至少列出三种) 答&#xff1a;常用打开控制面板的方法&#xff1a;1)点开始&#xff0c;选择控制面板打开&#xff1b;2)打开我的电脑&#xff0c;选择控制面板&#xff1b;3)点开始运行&…

计算机系统组织结构,第4章 操作系统计算机组织结构.ppt

第4章 操作系统计算机组织结构第4章 计算机组织结构 前言 操作系统提供了抽象以简化对硬件的使用&#xff0c;单线程是冯?诺依曼计算机的操作抽象&#xff0c;如果理解了一个冯?诺依曼计算机是如何执行程序的&#xff0c;就能理解进程背后的知识&#xff0c;对操作系统的深入…