结对编程:四则运算。组员:闫浩楠 杨钰宁 开发语言:C语言
需求分析:1.能够自动出题并给出答案
2.包含“+,—,*,/,()” 的四则运算。
3.显示题目的答案
结构设计:1.自动出题用随机数生成语句实现:包括随机生成数字、运算符号和题目长度
2.用变量约束左右括号顺序和同时存在的特点。
3.将题目输出并用字符串存储。
4.对字符串入栈进行运算。
部分核心代码:
随机生成题目长度:
a=rand()%+;
for(i=0;i<a;i++)
{
……
}
随机生成数字及符号:
c=rand()%+; //数字
printf("%d",c);
b=rand()%4; //符号
switch(b)
{
case 0: printf("+"); math[m]='+';m++;
if(i<a-3&&j==10) b=10;
else b=rand()%4; break;
case 1: printf("-"); math[m]='-';m++;
if(i<a-3&&j==10) b=10;
else b=rand()%4; break;
case 2: printf("*"); math[m]='*';m++;
if(i<a-3&&j==10) b=10;
else b=rand()%4; break;
case 3: printf("/"); math[m]='/';m++;
b=20; break;
}
if(b==10)
{
printf("(");
math[m]='(';m++;
j=3;
b=rand()%4;
}
if(j!=10)
j--;
if(j==0){
printf(")");
math[m]=')';
m++;
b=rand()%3;
j=10;
}
利用栈对表达式进行计算:
采用符号优先值对五种运算符号进行控制。
while(c!='='||x!='=') //循环处理表达式中的每一个字符
{
if(isOperator(c)) //如果是运算符
{
if(flag){
seqStackPush(StackData,q); //表达式入栈
q=; //操作数清零
flag=; //标志清零,表示操作数已经入栈
}
switch(PRI(x,c)) //判断运算符优先级
{
case -:
seqStackPush(StackOper,c); //运算符进栈
c=exp[i++];
break;
case :
c=seqStackPop(StackOper); //运算符括号,等号出栈,被抛弃
c=exp[i++]; //取下一个 字符
break;
case :
oper=seqStackPop(StackOper); //运算符出栈
b=seqStackPop(StackData);
a=seqStackPop(StackData); //两个操作数出栈
t=Calc(a,oper,b); //计算结果
seqStackPush(StackData,t); //将运算结果入栈
break; }
}else if(c>=''&&c<='') //如果输出的字符在0到9之间
{
c-=''; //把字符转换成数字
q=q*+c; //多位数的进位处理 c=exp[i++]; //取出下一位字符
flag=; //设置标志,表示操作数未入栈
}
else {
printf("输入错误\n");
getch();
exit();
}
x=seqStackPeek(StackOper); //获取栈顶操作符
}
q=seqStackPop(StackData);
seqStackfree(StackOper);
seqStackfree(StackData); //释放内存占用空间
return q; //出栈,返回结果 }
优先值的判定:
int PRI(char oper1,char oper2)
{
int pri;
switch(oper2) //判断优先级
{
case '+':
case '-':
if(oper1=='('||oper1=='=') //为左括号
pri=-; //oper1<oper2
else
pri=; //oper1>oper2
break;
case '*':
case '/':
if(oper1=='*'||oper1=='/'||oper1==')')
pri=; //oper1>oper2
else
pri=-; //oper1<oper2
break;
case '(':
if(oper1==')') //右括号右侧不能马上出现左括号
{
printf("语法错误\n");
exit();
} else
pri=-; //oper1<oper2
break;
case ')':
if(oper1=='(')
pri=;
else if(oper1=='=')
{
printf("括号不匹配\n");
exit();
}else
pri=;
break;
case '=':
if(oper1=='(')
{
printf("括号不匹配\n");
exit();
}else if(oper1=='=')
pri=; //等号匹配,返回0
else
pri=; //oper1>oper2
break;
}
return pri;
}
主函数控制题目数量:
char ans[]="\0";
int b,i;
srand(time());
while()
{
printf("当前功能:生成题库\n");
printf("请输入所需题目数量:");
scanf("%d",&b);
for(i=;i<b;i++){
exp();
printf("%d\n",CalcExp(math)); }
}
运行结果:
结对编程:四则运算。组员:闫浩楠 杨钰宁 开发语言:C语言的更多相关文章
- 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)
结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...
- 20175305张天钰Java结对编程四则运算(二)
Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...
- 20175305张天钰Java结对编程四则运算
Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...
- 结对编程--四则运算(Java)萧英杰 夏浚杰
结对编程--四则运算(Java)萧英杰 夏浚杰 Github项目地址 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目 ...
- 结对编程--四则运算(Java)梅进鹏 欧思良
结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...
- 王译潇20162314 实验报告三plus结对编程四则运算第一阶段
北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162314 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年5月12号 实验密级: 非 ...
- Java结对编程四则运算一周小结
Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...
- 结对编程四则运算gui
码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...
- 结对编程-四则运算-GUI
201421123022 王若凡 201421123026 欧阳勇 https://git.coding.net/ttoyy/sizeyunsuan-GUI.git a.需求分析: ...
随机推荐
- Python中re模块详细介绍
正则的介绍及应用实例详解 """ 1.什么是正则 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串, 正则就是用来去一个大的字符串中匹配 ...
- Merge语句中NULL的陷阱
NULL表示unknown,不确定值,所以任何值(包括null值)和NULL值比较都是不可知的,在on子句,where子句,Merge或case的when子句中,任何值和null比较的结果都是fals ...
- UWP 五星评价(不跳转到龟速商店)
之前写过一篇文章 UWP 五星好评 代码如下 var pfn = Package.Current.Id.FamilyName; await Launcher.LaunchUriAsync(new ...
- 不把DB放进容器的理由
原文地址:http://www.tuicool.com/articles/6VbqeqQ 原文为英文,以下是笔者的个人总结. 此处的DB包括但不限于Redis.ElasticSearch. 1.数据安 ...
- 一个很NB的404页面
一个带彩蛋的 404 页面 不得不说这个程序猿很有才 前往404页面 触发方法 按住鼠标左键 在页面中心不停的画圈 就可以进入神奇的地方了
- hadoop组件概念理解
一.HADOOP 二.HIVE 三.SQOOP 1.来由和作用 sqoop由一些封装好的MR程序的jar包构成,后演变成框架,但sqoop只有map任务没有reduce任务. 用于 hdfs.hive ...
- Hadoop源码编译环境搭建
准备工具: maven 3.0.0版本或者更高版本(配置中心库) protocbuff 2.5.0 http://www.zlib.net/ git bash(Windows环境可以用此工具执行编译命 ...
- 解决k8s出现pod服务一直处于ContainerCreating状态的问题的过程
参考于: https://blog.csdn.net/learner198461/article/details/78036854 https://liyang.pro/solve-k8s-pod-c ...
- Cocos2d-x的跨平台原理
为了充分发挥硬件性能,手机游戏通常使用Native App开发模式,这就造成开发商要为iOS 和Android平台用户开发不同的应用,无论是产品迭代还是运行维护都非常麻烦.Cocos2d-x在iOS, ...
- Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
1.Kubernetes的controller pattern 需要认识到Kubernetes操作Pod的逻辑,都是由控制器来完成的. 查看之前写过的nginx-deployment的YAML文件 [ ...