一、题目

每个同学选一个方向,把程序扩展一下:
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<<"="<<'\t';
		   
		   }
           
        }
        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<<"="<<'\t';

			 }
        }
        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<<"="<<'\t';
			 }

        }
        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<<"="<<'\t';
			 }
        }
    }
	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

程序结果不稳定

 

 

未解决

 

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

 

 

 

 

 

 

 

                                                                

 

posted on 2015-03-22 10:26  掬雪煮茶  阅读(353)  评论(1编辑  收藏  举报