c语言设计课程输入,C语言课程的设计输入一个表达式,输出其的的结果.doc

本文档详细描述了一项C语言课程项目,涉及将用户输入的中缀表达式转换为后缀形式,然后运用栈实现算法进行计算。通过建立数栈和运算符栈,遵循运算符优先级规则,最终输出表达式结果。项目包括算法流程图和调试分析,旨在提升学生的程序设计和理解能力。
摘要由CSDN通过智能技术生成

C语言课程的设计输入一个表达式,输出其的的结果

课 程 设 计 报 告

课程名称 C语言程序设计

课题名称 输入一个表达式,输出其结果

专 业 通信工程

班 级 通信1101

学 号 27

姓 名 皮锋

指导教师 罗雅博 彭祯 曹燚

2012年 6月 29 日

湖南工程学院

课 程 设 计 任 务 书

课程名称 C语言程序设计

课 题 输入一个表达式,输出其结果

专业班级 通信1101

学生姓名 皮锋

学 号 27

指导老师 罗雅博 彭祯 曹燚

审 批

任务书下达日期 2012 年 6 月 15 日

任务完成日期 2012 年 6 月 29日

一、设计思想

两种算法首先都要建立两个栈,一个是存放操作数的数栈OdStack,一个是存放运算符的符栈OpStack。数栈采用double型的用来存放浮点数,符栈采用char型的用来存放运算符,由于考虑到运算符有优先级的问题,所以事先做了一个Type用来存储运算符的优先级。栈建立好了之后做栈的相关操作,初始化栈,入栈,出栈,看栈顶。其中入栈要判满,出栈和看栈顶要判空。

中缀转后缀再计算的算法。

此算法的基本思路是先将中缀表达式转换成后缀表达式,之后再利用后缀表达式的算法对表达式进行计算。

首先,用一个char数组将中缀表达式读入,对数组中的每一个元素进行处理,区分哪些是数,哪些是运算符。如果是数元素(或小数点元素),则依次存入用来存储后缀表达式的char数组,直到一个整合数存完之后用空格将其与后面的元素分开。如果是运算符元素,则根据当前运算符的优先级和栈里面的运算符的优先级进行处理。如果栈内元素的优先级小于当前元素的优先级或者栈内为空,则将当前运算符入栈;如果栈内元素的优先级大于等于当前元素的,则依次将出栈元素存入后缀表达式,并用空格将其与后面的元素分开,直到栈内元素的优先级小或者栈内为空。对于左括号来说,无条件进栈,并只在有右括号出现的时候才有可能出栈。对于右括号来说,无条件让栈内元素出栈,直到左括号出栈。依次将每个元素进行处理直到中缀表达式索引完毕。至此,已经实现了将中缀表达式转换成了后缀表达式,在数组的最后加上结束符以便下一步的调用。

第二步,读出后缀表达式并进行计算。如果索引到空格则将索引标志后推1位。之后要先对char型的数字元素进行整合,从后缀表达式中依次取出数字元素(连同小数点)存入一个新的char型数组,直到一整个数取完后通过atof函数将char型转换成浮点型存入数栈,并将新数组初始化用来存储下一个数。如果是索引到运算符,则在数栈中出栈两个数字与当前运算符进行运算,先出栈的数字放在运算符后面,后出栈的数字放在运算符的前面,将运算以后的结果再次存入数栈。依次进行计算直到后缀表达式索引完毕。此时对栈内剩余元素进行操作。每在符栈出栈一个运算符,就从数栈出栈两个数进行计算,算法同上,将运算以后的结果再次存入数栈。循环操作直到符栈栈空,此时数栈出栈元素即为最后结果。

二、算法流程图

中缀转后缀再计算的算法分两个流程,第一步是中缀表达式转换成后缀表达式;

图1 中缀转后缀算法流程图

第二步是将后缀表达式进行计算输出。

三.调试分析过程描述

1.首先,设计的程序每运行一次只能进行一次计算:

int main()

{

printf(" ******欢迎进入小型计算器******\n请输入算术表达式:");

char str[N];

double result;

scanf("%s",str);

result=Calu(str);

printf("输出计算结果: %f\n",result);

}

为了改进程序,我在主函数里加了一个循环:

int main()

{

int a;

printf(" ******欢迎进入小型计算器******\n请输入算术表达式:");

for(a=0;;a++)

{

char str[N];

double result

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值