zoukankan      html  css  js  c++  java
  • 四则运算出题器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

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

  • 相关阅读:
    《构建之法》第1.2.3章读后感
    回顾并总结关于复利计算器的三次实验
    实验0、了解和熟悉操作系统实验
    0302思考并回答一些问题
    递归下降语法分析程序设计
    1203有穷自动机的构造与识别
    评论集锦
    C语言文法定义与C程序的推导过程
    Vue简介教程(四)[自定义指令 | 路由 | 过渡 & 动画]
    Vue简介教程(三)[事件处理 | 表单 | 组件]
  • 原文地址:https://www.cnblogs.com/zgsxh/p/4355404.html
Copyright © 2011-2022 走看看