四则运算出题器3

一、实验题目

    这次我的程序,是对四则运算2的进一步扩展

    我选的是第一个方向:程序能够接受用户输入的答案,并能判定对错,最后还可以给出总共对/错的数量。

二、实验扩展思想

    1、因为我给每个题目都编了序号,所以再输入答案的时候只需按着题目的顺序输入就可以了。

    2、判断对错,我是事先定义了一个数组,来存放正确答案,最后把用户输入的答案和正确答案做比较即可

    3、给出对/错的数量,这个比较容易,只需要设计两个变量,一个用来计算正确的个数,一个用来计算错误的个数,最后给出答案即可。

三、实验代码

//作者: 信1201-2班  司新红
#include<iostream.h>
#include<stdlib.h>
#include<time.h>

void hycc()
{
	int f;//定义要测试的是四则运算是几进制
	cout<<"请输入要测试的四则运算是几进制?"<<endl;
	cin>>f;	
	int x,y,z,t;   //x,y分别表示所产生的两个数,z来控制做加减乘除
	int e;//输入每行算数题的个数
	srand(time(NULL));
	int n;
	int b;//表示有无负数
	int a;//用来输入行间距
	int d;//代表输入的答案
	float daan[100];//代表正确答案
	int zq=0;//用来表示正确答案的个数
	int cw=0;//用来表示错误答案的个数
	cout<<"需要列出多少到数学题?"<<endl;
	cin>>n;      //n代表出题的个数
	cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl;
	cin>>b;
	cout<<"每行需要打印几个算数题?"<<endl;
	cin>>e;
	cout<<"打印时行间距是多少?"<<endl;
	cin>>a;
	
	cout<<"********************************"<<endl;
	for(int i=0;i<n;i++)
	{
		x=rand()%f;
		y=rand()%f;
		z=rand()%4;
		switch(z)
		{
		case 0:
			cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<"     ";
			daan[i+1]=x+y;
			break;
			
		case 1:
			if(b==1)
			{
			if(x<y)
			{
				t=x;
				x=y;
				y=t;
			}
			cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<"     ";
			
			}
			else if(b==0)
			{
			cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<"     ";
			}
			daan[i+1]=x-y;
			break;
		case 2:
			cout<<i+1<<"、 "<<x<<"*"<<y<<"="<<"     ";
			daan[i+1]=x*y;
			break;
		case 3:
			if(y!=0)
			{
			cout<<i+1<<"、 "<<x<<"÷"<<y<<"="<<"     ";
			}
			else
			{
				i=i-1;
			}
			daan[i+1]=(float)x/y;
			break;
		default:
			cout<<"超出测试范围"<<endl;
			break;
		}
		if((i+1)%e==0)
		{
			for(int c=0;c<=a;c++)
			{
				cout<<endl;
			}
		}
		if((i+1)==n)
		{
			cout<<endl;
		}
	}
	for(i=1;i<=n;i++)
	{
		cout<<"请作答:"<<endl;
		cout<<i<<"、";
		cin>>d;
		if(d==daan[i])
		{
			cout<<"恭喜您,回答正确!"<<endl;
			cout<<endl;
			zq=zq+1;
		}
		else
		{
			cout<<"回答错误,正确答案为:"<<"  "<<daan[i]<<endl;
			cout<<endl;
			cw=cw+1;
		}
	}
	cout<<"回答正确的数量为:"<<" "<<zq<<"个"<<endl;
	cout<<"回答错误的数量为:"<<" "<<cw<<"个"<<endl;
}

void bhycc()
{

	int f;
	cout<<"请输入要测试的四则运算是几进制?"<<endl;
	cin>>f;	
	int e;//输入每行算数题的个数
	int x,y,z,t;   //x,y分别表示所产生的两个数,z来控制做加减乘除
	srand(time(NULL));
	int n;//n代表出题个数
	int b;//代表加减有无负数
	int a;//用来输入行间距
	int d;//代表输入的答案
	int daan[100];//代表正确答案
	int zq=0;//用来表示正确答案的个数
	int cw=0;//用来表示错误答案的个数
	cout<<"需要列出多少到数学题"<<endl;
	cin>>n;      //n代表出题的个
	cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl;
	cin>>b;
	cout<<"每行需要打印几个算数题?"<<endl;
	cin>>e;
	cout<<"打印时行间距是多少?"<<endl;
	cin>>a;
	cout<<"********************************"<<endl;
	for(int i=0;i<n;i++)
	{
		x=rand()%f;
		y=rand()%f;
		z=rand()%2;
		switch(z)
		{
		case 0:
			cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<"     ";
			daan[i+1]=x+y;
			break;
		case 1:
			if(b==1)
			{
			if(x<y)
			{
				t=x;
				x=y;
				y=t;
			}
			cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<"     ";
			}
			else if(b==0)
			{
				cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<"     ";
			}
			daan[i+1]=x-y;
			break;
		default:
			cout<<"超出测试范围"<<endl;
			break;
		}
		if((i+1)%e==0)
		{
			for(int c=0;c<=a;c++)
			{			
				cout<<endl;
			}
		}
		if((i+1)==n)
		{
			cout<<endl;
		}
	}
		for(i=1;i<=n;i++)
	{
		cout<<"请作答:"<<endl;
		cout<<i<<"、";
		cin>>d;
		if(d==daan[i])
		{
			cout<<"恭喜您,回答正确!"<<endl;
			cout<<endl;
			zq=zq+1;
		}
		else
		{
			cout<<"回答错误,正确答案为:"<<"  "<<daan[i]<<endl;
			cout<<endl;
			cw=cw+1;
		}
	}
	cout<<"回答正确的数量为:"<<" "<<zq<<"个"<<endl;
	cout<<"回答错误的数量为:"<<" "<<cw<<"个"<<endl;
}

int main()
{
	int c;//c代表输入是否继续的数字
	char ch;
	cout<<"是否支持乘除?(Y/N)"<<endl;
	cin>>ch;
	if(ch=='Y'||ch=='y')
	{
		hycc();	
		cout<<"********************************"<<endl;
	}
	
    else if(ch=='N'||ch=='n')
	{
		bhycc();
		cout<<"********************************"<<endl;
	}
	else 
	{
		cout<<"输入错误,无法为您出题!"<<endl;
	}

	cout<<"要继续答题吗?(0:继续  1:退出)"<<endl;
	cin>>c;
	if(c==0)
	{
		cout<<endl;
		main();
	}
	else
	{
		cout<<endl;
		return 0;
	}
	
	return 0;
}

四运行结果

五、总结

  这次的题目有几个选向,由于我的编程能力不强,所以 我选择了第一个方向,在编写程序时还遇到了一定的困难,比如在做除法的时候,由于定义的正确答案的数组是整形,所以导致除法计算一直不正确,所以我选择了把数组定义为浮点型。我在以后的时间里一定会多加联系,争取再实现另外一个方向

PSP 

学生     司新红      

日期  2014.3.17

教师  王建民         

程序号_______________

                                                                                                      项目计划总结

编程

阅读书籍

课后复习

日总计

周日

周一

周二

30

30

90

150

周三

90

30

120

周四

120

30

150

周五

周六

周总计

240

90

90

420

                                                                                                时间记录总结

日期

开始

结束

中断时间

净时间

活动

备注

C

U

317

400

500

160

编程

800

930

30

60

复习

写作业

1000

1030

30

阅读书籍

318

1000

1130

15

75

编程

休息

1000

1030

30

阅读书籍

319

700

900

120

编程

                                                                                                          缺陷记录日志

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

317

01

程序

编码

编译

20min

求几个数中最大值时一直报错,最后我把所求的和放在了一个数组中

318

02

程序

编码

编译

10min

忘记给正确答案的个数和错误答案的个数赋值

03

程序

编码

编译

30min

计算除法的正确答案时,不能是浮点型,然后我就把答案这个数组定义成了浮点型

319

04

程序

编码

编译

10min

在不含有乘除的函数中,忘了给正确答案赋值,导致结果报错

05

程序

编码

编译

10min

变量用错,运行时运行无响应了。

原文地址:https://www.cnblogs.com/zgsxh/p/4355404.html