一、题目
每个同学选一个方向,把程序扩展一下:
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 | 程序结果不稳定 |
|
| 未解决 |
|
有时候正确结果出现乱码,考虑是结果溢出 | ||||||
|
|
|
|
|
| |
|