zoukankan      html  css  js  c++  java
  • 四则运算之给出解题答案

    一、题目

    每个同学选一个方向,把程序扩展一下:
    1、让程序能接受用户输入答案,并判定对错。并输出正确的错题数
    2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。
    3、把程序变成一个Windows 图形界面的程序。
    4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)
    5、选一个你从来没有学过的编程语言,试一试实现基本功能。

    选择1

    二、思路:1 用一个数组把结果存到里面去,用以计算结果

             2 用户输入的结果与正确答案相比对,给出提示信息并输出正确答案。

             3 有余数的情况是,先判断是否是除法,然后是的话就输入两个数,一个是商,一个是余数,判断答案是否正确。

    三、源代码

    #include<iostream.h>
    #include<stdlib.h>
    #include<time.h> 
    
     void main( )
     {
         srand(time(NULL));//避免题目重复
         int i,j, x,y,t[100],b;//x,y表示两个数随机数,i表示题目的数量,t,b是在两个数相减中保证结果为正定义的变量
         int a[7];
          cout<<"请输入要打印的题目数:"<<endl;   
          cin>>a[0];
          while(a[0]<=0)  //题目数必须为正数
          {
              cout<<"请重新输入有效的题目数:"<<endl;
              cin>>a[0];
          };
          cout<<"请选择否有乘除法(是1;否0):"<<endl;
          cin>>a[1];
          while((a[1]!=1)&&(a[1]!=0)) //只能选择1或0
          {
              cout<<"请重新输入有效的数值:"<<endl;
              cin>>a[1];
          };
          cout<<"请输入运算数的范围:"<<endl;
          cin>>a[2];
          while(a[2]<=0)  //运算数必须为正数
          {
              cout<<"请重新输入有效的范围:"<<endl;
              cin>>a[2];
          };
         cout<<"请选择结果有无负数(是1;否0):"<<endl;
         cin>>a[3];
         while((a[3]!=1)&&(a[3]!=0))  //只能选择1或0
         {
             cout<<"请重新输入有效的数值:"<<endl;
             cin>>a[3];
         };
         cout<<"请选择结果有无余数(是1;否0):"<<endl;
         cin>>a[4];
         while((a[4]!=1)&&(a[4]!=0))  //只能选择1或0
         {
             cout<<"请重新输入有效的数值:"<<endl;
             cin>>a[4];
         };
         cout<<"请输入要打印的列数: "<<endl;
         cin>>a[5];
         while(a[5]<=0)
         {
             cout<<"请重新输入有效列数:  "<<endl;
             cin>>a[5];
         };
         cout<<"请输入每行间隔数: "<<endl;
         cin>>a[6];
        
    	 int result[100],resulty[100]={0},daan[100],yushu[100]={0};
        for(i=0;i<a[0];i++)
        {
            if(a[1]==1)//有乘除法的运算
            {
                t[i]=rand()%4;
            }
            else//无乘除法的运算
            {
                t[i]=rand()%2;
            }
            x=rand()%a[2]+1;
            y=rand()%a[2]+1;
            if(t[i]==0)//加法
            {
                
              
               if((i+1)%a[5]==0)//判断是否换行
               {
                   cout<<i+1<<"·"<<x<<"+"<<y<<"=";
    			   result[i]=x+y;
               if(a[6]!=0)
               {
                   for(j=0;j<a[6];j++)
                   {
                      cout<<endl;
                   }
               }
               }
    		   else
    		   {
               cout<<i+1<<"·"<<x<<"+"<<y<<"="<<'	';
    		   
    		   }
               
            }
            if(t[i]==1)//减法,考虑是否存在负数
            {
                if(a[3]==0)//不存在结果负数
                {
                    b=x;
                    x=y;
                    y=b;
    
                }
                if(a[3]==1)//存在结果是负数
                {
    
                }
                
                
                 if((i+1)%a[5]==0)//判断是否换行
                 {
                     cout<<i+1<<"·"<<x<<"-"<<y<<"=";
    				 result[i]=x-y;
                 
                   
                   if(a[6]!=0)//如果间隔数不是零
                   {
    
                       for(j=0;j<a[6];j++)
                       {
                           cout<<endl;
                       }
                   }
                 }
    			 else
    			 {
                 cout<<i+1<<"·"<<x<<"-"<<y<<"="<<'	';
    
    			 }
            }
            if(t[i]==2)//乘法
            {
                
                
                 if((i+1)%a[5]==0)//判断是否换行
               {
                  cout<<i+1<<"·"<<x<<"*"<<y<<"=";
    			  result[i]=x*y;
                   if(a[6]!=0)
                   {
                       
                   
                       for(j=0;j<a[6];j++)
                       {
                           cout<<endl;
                       }
                   }
                 }
    			 else
    			 {
                 cout<<i+1<<"·"<<x<<"*"<<y<<"="<<'	';
    			 }
    
            }
            if(t[i]==3)//除法,考虑结果是否有余数
            {
                if(a[4]==1)//结果有余数
                {}
                else
                {
                    while(x%y!=0)//不能整除,重新生成随机函数
                    {
                        x=rand()%a[2]+1;
                        y=rand()%a[2]+1;
                    };
    
                }
            
                
                 if((i+1)%a[5]==0)//判断是否换行
               {
                   
    				cout<<i+1<<"·"<<x<<"/"<<y<<"=";
    				result[i]=x/y;
    				resulty[i]=x%y;
                   if(a[6]!=0)
                   {
                       for(j=0;j<a[6];j++)
                       {
                           cout<<endl;
                       }
                   }
                 }
    			 else
    			 {
            cout<<i+1<<"·"<<x<<"/"<<y<<"="<<'	';
    			 }
            }
        }
    	cout<<"请输入解题答案"<<endl;
    	for(i=0;i<a[0];i++)
    	{
    		cout<<i+1<<".";
    		if(t[i]==3)
    		{
    			cout<<"请输入商:";
    			cin>>daan[i];
    			cout<<"请输入余数:";
    			cin>>yushu[i];
    		}
    		else
    		{
    			cin>>daan[i];
    		}
    		if(t[i]==3)
    		{
    			if(daan[i]==result[i]&&yushu[i]==resulty[i])
    			{
    				cout<<"答案正确,请输入下一题答案"<<endl;
    			}
    			else
    			{
    				cout<<"答案错误,正确答案为:"<<result[i]<<"  "<<resulty[i]<<endl;
    			}
    		}
    		else
    		{
    			if(daan[i]==result[i])
    			{
    				cout<<"答案正确"<<endl;
    			}
    			else
    			{
    				cout<<"答案错误,正确答案为:"<<result[i]<<endl;
    			}
    		}
    	}
        cout<<"结束,欢迎使用"<<endl;
    }
    

     四、结果

    五、实验总结

    通过此次实验我收获颇多。第一,首先考虑结果的存放,我把她放到一个整形数组里,但是结果可能是有余数的,所以我就定义了两个数组一起作为结果

    第二,然后我又想,只有除法的时候需要用到两个结果,一个用来存商,一个用来存余数,所以还得判断题目是否为除法

    第三,此程序存在一定的不健壮性,因为我定义的数组为100,所以超过边界值就会出现溢出状况,会出现乱码

     第四,次程序存在一定的问题,还需继续改进。

    六、

    项目计划总结

    周活动总结表

    姓名:唐仙迪                                                       日期:2015/3/22

    任务

    日期

    听课

    编程

    阅读课外数目

    锻炼身体

    写老师留得作业

    业余活动

    日总计

    (分钟)

    周日

    180

    120

    300

    600

    周一

    400

    60

    60

    520

    周二

    300

    30

    120

    450

    周三

    100

    60

    30

    240

    430

    周四

    200

    30

    30

    120

    380

    周五

    200

    100

    30

    120

    450

    周六

    400

    400

    2,时间记录日志:

    学生:唐仙迪                                                                     日期:2015/3/22

    老师:王建民                                                                      课程:PSP

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    3/19

    08:00

    12:00

    40

    200

    上课

    14:30

    18:30

    240

    上网娱乐

    哈哈

    19:00

    20:00

    60

    写作业

    22:00

    22:30

    30

    读梦断代码

    3/20

    08:00

    10:00

    20

    100

    听课

    11:00

    12:00

    60

    在吃饭的路上和吃饭ing

    15:00

    19:00

    180

    肖申克的救赎

    22:00

    22:30

    30

    读梦断代码

    3/21

    10:00

    12:00

    20

    100

    听课

    15:00

    18:30

    270

    构思,编程

    19:00

    20:00

    60

    写作业

    21:00

    21:30

    30

    读梦断代码

    3/22

    08:00

    12:00

    200

    编程

    14:00

    15:40

    100

    改进代码

    21:00

    21:30

    30

    读梦断代码

    3,缺陷记录日志:

    学生:唐仙迪                                                                    日期:2015/3/22

    老师:王建民 

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复阶段

    修复缺陷

    3/21

    1

    结果的存储

    20min

    考虑到除法出现小数,不造怎么存,后来写成商和余数的形式,都是整数

    1

    依然是存数的问题

    2min

    商和余数定义成两个数组

    3/22

    2

    程序结果不稳定

    未解决

    有时候正确结果出现乱码,考虑是结果溢出

                                                                    

  • 相关阅读:
    Linux下安装MySql8
    root与alias主要区别
    TCP/UDP 常用端口列表
    kafka文档
    kafka监测工具(可视化)
    Kafka消息队列
    postgresql
    gulp babel 配置不报错也没有输出结果的原因
    gulp中常用的模块
    判断浏览器标签页是隐藏或者显示状态
  • 原文地址:https://www.cnblogs.com/tangxiandi/p/4356817.html
Copyright © 2011-2022 走看看