传奇凤凰

四则运算生成程序(基于控制台)

题目链接:http://www.cnblogs.com/HQL0301/p/7502315.htm

源码连接:https://gitee.com/jm-wmj/operation/tree/master

(我是用c++实现的)

一.需求分析

⦁可以根据输入的题数和数值范围自动生成四则运算表达式。

⦁表达式包括“+ - * /”这四种运算符。

⦁可以进行分数的运算,如果题目中出现假分数,则转换成真分数。

⦁对题目答案进行批改对错,给出正确率。

二.功能设计

(1)基本功能

1.输入参数n,程序生成 n道四则运算题目.

2.用参数来控制生成的四则运算的数值范围.

3.用户可以对相应的题目进行做答.

4.对用户的答案进行判断对错,并给出正确率.

(2)扩展功能

1.查重复,不出现重复的题目(没有实现)

2.对假分数转换成带分数表示

(3)高级功能

1.用户回答正确可以获得相应的积分,错误会扣除相应的积分,积分可以兑换一定的礼品。(后续完善的时候再实现)

三.设计实现

(由于是由C++实现的,所以都是函数,没有类)

1.transformation函数:对题目的答案进行保留小数点后两位的操作(四舍五入)。

2.operation函数:根据题目给的数值范围和题数进行随机出题。题目中如果出现假分数,就将分子分母对调,变成真分数。进行题目的计算,并进行答案的批改。

3.main函数:调用operation函数,计算结束后,提示是否继续。

四.代码说明

 写答案的时候以小数的形式表示,保留小数点后两位(四舍五入)

float transformation(float w)
{
	float b;
	b = floor(w * 100 + 0.5) / 100;//用floor函数对运算结果保留小数点后两位 
	return b; 
}

 

 整体的思想:用四个整数以两个分数的形式来构成两个操作数,当分子为一的时候,就变成整数了。

int first_num,second_num,third_num,fourth_num;//用四个整数以分数的形式来构成两个操作数 
    cout<<"需要列出多少道四则运算?"<<endl;
    cin>>n;
    cout<<"生成题目数值的范围" <<endl;
    cin>>m;
    cout<<"————————————————"<<endl;
    for(int i=0;i<n;i++)
    {
        z=rand()%4;
        first_num=rand()%m;
        second_num=rand()%m;
        third_num=rand()%m;
        fourth_num=rand()%m;
        if (second_num==1)
        {
            x=(float)first_num;//如果第一个分数的分母为1,则第一个操作数 就等于分子
        }
        else if(first_num>second_num)//第一个分数为假分数 ,则对调分子与分母,变成真分数
            {
                t=first_num;
                first_num=second_num;
               second_num=t;        
            }
            x=(float)first_num/second_num;
        if (fourth_num==1)//如果第二个分数的分母为1,则第二个操作数 就等于分子
        {
            y=(float)third_num;
        }
        else if(third_num>fourth_num)//第二个分数为假分数 ,则对调分子与分母,变成真分数
            {
                t=third_num;
                third_num=fourth_num;
                fourth_num=t;                
            }
            y=(float)third_num/fourth_num;

 随机生成四种运算符,当second_num==1和fourth_num==1时,表达式可以变成整数。(没有全部展示出来)

z=rand()%4;
        switch(z)
        {
        case 0://运行加法 
        	if(second_num==1 & fourth_num!=1)
        	{
			cout<<i+1<<"、 "<<first_num<<" + "<<third_num<<"/"<<fourth_num<<"="<<"     ";
			} 
             else if(fourth_num==1 & second_num!=1)
            {
            	cout<<i+1<<"、 "<<first_num<<"/"<<second_num<<" + "<<third_num<<"="<<"     ";
			}
            else if(second_num==1 & fourth_num==1)
            {
            	cout<<i+1<<"、 "<<first_num<<" + "<<third_num<<"="<<"     ";
			}             
             else
             {
             	cout<<i+1<<"、 "<<first_num<<"/"<<second_num<<" + "<<third_num<<"/"<<fourth_num<<"="<<"     ";
			 }
			 w=x+y;
            answer[i+1]=transformation(w);
            break;
            
        case 1:
        	if(second_num==1 & fourth_num!=1)
        	{
			cout<<i+1<<"、 "<<first_num<<" - "<<third_num<<"/"<<fourth_num<<"="<<"     ";
			} 
            else if(fourth_num==1 & second_num!=1)
            {
            	cout<<i+1<<"、 "<<first_num<<"/"<<second_num<<" - "<<third_num<<"="<<"     ";
			} 
			else if(second_num==1 & fourth_num==1)
            {
            	cout<<i+1<<"、 "<<first_num<<" - "<<third_num<<"="<<"     ";
			}             
             else
             {
             	cout<<i+1<<"、 "<<first_num<<"/"<<second_num<<" - "<<third_num<<"/"<<fourth_num<<"="<<"     ";
			 }
			 w=x-y;			 
            answer[i+1]=transformation(w);         
            break;
        

 对结果进行判断对错,并给出正确率。

for(int i=1;i<=n;i++)
    {
        cout<<"请作答:"<<endl;
        cout<<i<<"、";
        cin>>d;
        if(d==answer[i])
        {
            cout<<"恭喜您,回答正确!"<<endl;
            cout<<endl;
            right=right+1;
        }
        else
        {
            cout<<"回答错误,正确答案为:"<<setprecision(2)<<answer[i]<<endl;
            cout<<endl;
            error=error+1;
        }
    }
    k=(float)right/n;
    cout<<"回答正确的数量为:"<<" "<<right<<"个"<<endl;
    cout<<"回答错误的数量为:"<<" "<<error<<"个"<<endl;
    cout<<"正确率为:"<<" "<<k*100<<"%"<<endl;

.测试运行

1.输入参数

2.进行做答

3.得出正确率

 

六.PSP展示:

.小结

本次作业采用的是C++,对C++的使用掌握的还是挺灵活的,但是用C++实现有几个缺陷:语言比较赘述;实现高级的功能有些吃力(可能是我掌握的不够);要定义的东西实在太多了。

而且这次的查重并没有实现,在网上找了很多资料,但就是看不懂。另外,好多人都是用java实现的,但我对java有点恐惧,觉得用java写不出来,还是要继续努力学习。

 

posted on 2018-03-31 17:54  传奇凤凰  阅读(363)  评论(0编辑  收藏  举报

导航