四则运算(第二版)

功能1. 四则运算

支持出题4个数的四则运算题目

#include<stdio.h>
#include<stack>
#include<stdlib.h>
#include<string>
#include<math.h>
using namespace std;
struct Number
{
	double a;
	bool b;//0数字 1字符
};
stack<Number>s3;
void houzhuibds(char str[100])//后缀表达式
{

	stack<char>s1;
	stack<Number>s2;
	int i=0,j=0;
	for(i=0;str[i]!=‘\0‘;i++)
	{
		if(str[i]>=‘0‘&&str[i]<=‘9‘)
		{
			Number num;
			num.a=0;
			num.b=0;
			while(str[i]<=‘9‘&&str[i]>=‘0‘)
			num.a=(str[i++]-‘0‘)+num.a*10;
			s2.push(num);
			i--;
		}
		else
		{
			if(str[i]==‘)‘)
			{
				while(s1.top()!=‘(‘)
				{
					Number num;
					num.b=1;
					num.a=s1.top();
					s2.push(num);
					s1.pop();
				}
				s1.pop();
			}
			else if(s1.empty()||s1.top()==‘(‘||str[i]==‘(‘)
			{
				s1.push(str[i]);
			}
			else
			{
				if((str[i]==‘*‘||str[i]==‘/‘)&&(s1.top()==‘+‘||s1.top()==‘-‘))
				s1.push(str[i]);
				else
				{
					Number num;
					num.b=1;
					num.a=s1.top();
					s2.push(num);
					s1.pop();
					i--;
				}
			}
		}
	}
	while(!s1.empty())
	{
		Number num;
		num.b=1;
		num.a=s1.top();
		s2.push(num);
		s1.pop();
	}
	while(!s2.empty())
	{
		s3.push(s2.top());
		s2.pop();
	}
    /*
	while(!s3.empty())
	{
		Number num=s3.top();
		s3.pop();
		if(num.b==0)
		printf("%d",num.a);
		else
		printf("%c",num.a);

	}
	printf("\n");
	*/
}
double qiuzhi()
{
	stack<double>s4;
	while(!s3.empty())
	{
		Number c1=s3.top();
		s3.pop();
		if(c1.b==0)
		s4.push(c1.a);
		else
		{
			double c2=s4.top();
			s4.pop();
			double c3=s4.top();
			s4.pop();
			double c4;
			switch((int)c1.a)
			{
				case ‘+‘:c4=c3+c2;break;
    			case ‘-‘:c4=c3-c2;break;
    			case ‘*‘:c4=c3*c2;break;
    			case ‘/‘:c4=c3/c2;break;
			}
			s4.push(c4);
		}
	}
	return s4.top();
}
void afterfh(char str[100],int t,int n);//+-*/之后
void aftersz(char str[100],int t,int n);
int main()
{
	char str[100];
	int s=0;
	for(int i=0;i<20;i++)
	{
		int t=0;
		int n=0;
		afterfh(str,t,n);
		//gets(str);//4个数3个符号
		houzhuibds(str);
		double ans=qiuzhi();
		for(int i=0;str[i]!=‘\0‘;i++)
		printf("%c",str[i]);
		printf("=\n?");
		double s;
		scanf("%lf",&s);
		if(abs(s-ans)<0.01)
		{
			s++;
		    printf("答对了,你真是天才\n");
	    }
		else
		printf("再想想吧,答案似乎是%.2lf喔!\n",ans);
    }
    printf("你一共答对%d道题,共20道题。\n",s);
	return 0;
}
void aftersz(char str[100],int t,int n)
{
	int num=rand()%4;
	switch(num)
	{
		case 0:str[t]=‘+‘;break;
		case 1:str[t]=‘-‘;break;
		case 2:str[t]=‘*‘;break;
		case 3:str[t]=‘/‘;break;
	}
	afterfh(str,++t,n);
}
void afterfh(char str[100],int t,int n)//+-*/之后
{
	int num=rand()%100;
	if(num>=10)
	{
		int a=num%10;
		str[t++]=num/10+‘0‘;
		str[t]=a+‘0‘;
	}
	else
	str[t]=‘0‘+num;
	n++;
	if(n==4)
	{
		str[++t]=‘\0‘;
		return ;
	}
	t++;
	aftersz(str,t,n);
}

  

时间: 2024-11-01 20:20:16

四则运算(第二版)的相关文章

作业四则运算第二版提交

1.题目要求: 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: (1).题目避免重复: (2).可定制(数量/打印方式): (3).可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 2.设计思想: 1.题目要求:题目避免重复 将每个算式的第一个数存到一个数组,每次生成第一个数组的时候回溯一遍如果有重复就重新生成. 2.可定制(数量.打印方式) 接受用户

四则运算第二版

题目要求:在第一次原有的功能的基础上增加以下功能: 1.避免题目的重复 2.可定制(可定制题目数量\打印方式) 3.控制参数的生成: a.是否允许乘除发的生成    b.是否允许有括号的生成(最多支持十个数参与运算)    c.可以设定数值范围的范围 d.是否负数参与运算   e.除法是否有余数 我的代码如下:

《Java面向对象编程第二版》今年出版以来获得读者一致好评。

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.在当当网上获得了1500多条好评: http://product.dangdang.com/9186890.html?point=comment_point 应广大读者的要求,为第一版进行了升级,第二版融合了最新的Java8的语言特性,它继续为Java开发人员们提供丰富全面的技术支持和帮助.在京东网上读者们对第二版的好评如潮,一致认为这是Java开发人员必

matlab 利用while循环计算平均值和方差(第二版)

第一版中因为公式中含有:分母项:n(n-1),而程序并没有对输入数进行判定,如果仅仅输入一个或者一个都不输入,将会出现除0的情况 基于此,进行第二版改进. 代码: % 脚本文件:states.m % % 目标: % 该程序首先累计输入未知的数(正数或者0),然后计算这个数据集的平均值和方差 % % 版本记录 % 日期 编者 描述 % ===== ========= ================ % 2015-10-4 21:21 泡泡 源码 % 2015-10-4 21:56 泡泡 纠正除0

《算法竞赛入门经典第二版》 P35 习题2-4 子序列的和(subsequence)

/* <算法竞赛入门经典第二版> P35 习题2-4: 输入两个正整数 n < m < 10^6,输出 (1/n)^2 + 1/(n+1)^2 +……+ 1/m^2,保留5位小数. 输入包含多组数据,结束标志为 m=n=0. 有错欢迎指出^_^ */ #include<stdio.h> int main() { int m,n,i,j=1; while(scanf("%d%d",&m,&n) != EOF) { double sum

阅读《代码大全》(第二版)体会小结

这一次阅读了著名的<代码大全>(第二版).全书虽然章节众多,但是主要就是几个大部分,这些部分我大多有一些浅显的了解但还未深入,当然也有一些全新的体验,例如表驱动法.全书内容丰富而详细,我在阅读的其中问题并不是太多,只不过很多的内容都觉得了解的还太浅,需要更多的实践以及阅读去体会.在这里记录下的也就是一些自己的体会,主要是对书中一些论断的不同看法与讨论,大部分是关于面向对象和结构化设计的内容:以及对于全新接触的表驱动法的学习体会. Question 1: “7.1 创建子程序的正当理由”中,提到

《Java面向对象编程第二版》即将出版

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.应广大读者的要求,在过去的几个月,为第一版进行了升级,第二版融合了最新的Java8的语言特性,希望它能继续为Java开发人员们提供丰富全面的技术支持和帮助. 本书技术支持网址为:www.javathinker.net

&lt;MySQL管理之道第二版元旦截稿

<MySQL管理之道第二版>元旦截稿,这周即可送往机械工业出版社排版订正,在这里感谢沃趣科技公司高级DBA邱文辉提供"MariaDB 10 Hash Join索引优化"一文.

王爽《汇编语言第二版》读后感。

读了王爽的<汇编语言第二版>已经快两个月了,前几章写的都是些好理解的,所以速度稍快,到了中间,需要运用前面所学知识才能消化,所以有些稍慢.中间章节是汇编的语言核心,所以后面几章是汇编语言组织方式(子程序,中断安装等)和编程技巧,最爽的是有大段大段的完整代码展示.如果认真读过,经过中间章节的彷徨,到最后几章略有大功告成之感,速度稍快,跟心情感觉有很大关系.书中每个章节的题目都认真分析了,在网上下载了<王爽<汇编语言>第二版的习题答案>.不说了,虽然理解了书中代码,但一些编

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo