一 设计思路
将两个随机数字存入数组中,将四中运算符号存入数组中,利用rand()函数随机产生数字和符号,利用switch语句根据用户的需要选择输出四则运算。
(1)不重复
利用srand(time(NULL));可以是rand()产生的数不重复
(2)可定制
可以通过for循环输出一定的题目,通过求余判断是否换行
(3)范围
通过改变rand()%后面的数字来确定范围
(4)有无乘除
将四种运算存入数组中,使用switch判断是否有乘除
(5)是否有负数
比较两个数与0的大小,选择输出是否带括号
二 实验源程序
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>
int main()
{
using namespace std;
srand(time(NULL)); //使随机数不重复
int num[100]; //数组num存放所有的用户选择
cout<<"输入最大范围:";
cin>>num[7];
cout<<"输出多少道题:";
cin>>num[5];
cout<<"打印几列:";
cin>>num[6];
cout<<"是否有乘除法(0表示有,1表示没有):";
cin>>num[3];
switch(num[3])
{
case 0:
for(int i=0;i<num[5];i++) //循环输出题目个数
{
num[0]=rand()%num[7];
num[1]=rand()%num[7];
string str1[4]={"+","-","*","%"};
int a=rand()%4;
if((i+1)%num[6]==0)
{
cout<<num[0]<<str1[a]<<num[5]<<"="<<endl; //如果符合要求则换行
}
else
{
cout<<num[0]<<str1[a]<<num[5]<<"="<<" "; //否则继续在同一行输出
}
}
break;
case 1:
cout<<"加减有无负数(0表示有,1表示没有):";
cin>>num[4];
switch(num[4])
{
case 0:
for(int i=0;i<num[5];i++)
{
int c=-rand()%101+25; //随机产生负数赋予c
int d=-rand()%101+25; //随机产生负数赋予d
string str2[2]={"+","-"}; //只在加减之中选择输出
int b=rand()%2;
if(c<0&&d>=0) //if语句判断有无负数
{
if((i+1)%num[6]==0)
{
cout<<"("<<c<<")"<<str2[b]<<d<<"="<<endl;
}
else
{
cout<<"("<<c<<")"<<str2[b]<<d<<"="<<" ";
}
}
else if(c>=0&&d<0)
{
if((i+1)%num[6]==0)
{
cout<<c<<str2[b]<<"("<<d<<")"<<"="<<endl;
}
else
{
cout<<c<<str2[b]<<"("<<d<<")"<<"="<<" ";
}
}
else if(c<0&&d<0)
{
if((i+1)%num[6]==0)
{
cout<<"("<<c<<")"<<str2[b]<<"("<<d<<")"<<"="<<endl;
}
else
{
cout<<"("<<c<<")"<<str2[b]<<"("<<d<<")"<<"="<<" ";
}
}
else
{
if((i+1)%num[6]==0)
{
cout<<c<<str2[b]<<d<<"="<<endl;
}
else
{
cout<<c<<str2[b]<<d<<"="<<" ";
}
}
}
break;
case 1: //无负数则直接输出
for(int i=0;i<num[5];i++)
{
int c=-rand()%101+25;
int d=-rand()%101+25;
string str2[2]={"+","-"};
int b=rand()%2;
if((i+1)%num[6]==0)
{
cout<<num[0]<<str2[b]<<num[1]<<"="<<endl;
}
else
{
cout<<num[0]<<str2[b]<<num[1]<<"="<<" ";
}
}
}
}
}
三 实验截图
首先输入最大范围100
然后输入30道题
打印四列
选择有乘除
法
选择无乘除法
选择有负数
四、PSP0级 记录表
项目计划总结:
周活动总结表
姓名:石鹤 日期:15/3/14
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
290 |
|
20 |
|
|
|
310 |
周三 |
100 |
70 |
30 |
|
|
|
200 |
周四 |
210 |
100 |
5 |
|
|
|
315 |
周五 |
200 |
40 |
30 |
|
|
|
270 |
周六 |
|
43 |
10 |
|
|
|
53 |
周总结 |
800 |
253 |
95 |
|
|
|
1148 |
阶段时间和效率 周数(上一次周活动表的周数+1):1
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间
总计 |
800 |
253 |
95 |
|
|
|
1148 |
平均 |
800 |
253 |
95 |
|
|
|
1148 |
最大 |
800 |
253 |
95 |
|
|
|
1148 |
最小 |
800 |
253 |
95 |
|
|
|
1148 |
时间记录表:
学生 石鹤 日期 15/3/14
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
15/3/11 |
8:00 |
9:50 |
10 |
100 |
上计算机网络课 |
|
|
16:20 |
16:50 |
30 |
看高数 |
|
|
|
17: 44 |
18:37 |
20 |
33 |
编写四则运算程序 |
|
|
23:00 |
23:37 |
37 |
编写四则运算程序 |
|
|
3/12 |
10:10 |
12:00 |
10 |
100 |
上计算机接口技术课 |
|
|
14:00 |
15:50 |
10 |
100 |
上嵌入式开发技术课 |
|
|
16:50 |
17:50 |
60 |
背英语 |
|
|
|
22:35 |
23:30 |
55 |
看操作系统 |
|
|
3/13 |
8:00 |
12:00 |
40 |
200 |
上课 软件工程 操作系统 |
|
|
21:00 |
23:00 |
20 |
100 |
编写四则运算 |
|
3/14 |
12:12 |
12:55 |
|
43 |
排查代码错误 |
|
缺陷记录日志:
学生 石鹤
日期 3/14
教员 王建民
程序号 2
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
15/3/11 |
1 |
|
编码 |
执行 |
10min |
|
描述:case后忘了加空格了 |
||||||
3/12 |
2 |
|
编码 |
执行 |
15min |
|
描述:最后忘了一个右括号 |
||||||
3/13 |
3 |
|
编码 |
执行 |
15min |
|
描述:i未定义 |
||||||
3/14 |
4 |
|
编码 |
编译 |
10min |
|
描述:数组空间分配不当 |
五、心得体会
本次实验对我最大的帮助是使我能够静下心来进行编程,虽然程序变得比较粗糙,一些基本的错误也常犯,比如include前把#忘了,比如打括号总是不左右一起打,程序短没有问题,程序一长就开始出现错误了,而且还很难找,都是大一不动手留下的坏毛病,学到了如何用rand()函数随机产生负数,加深了对c++的印象(虽然本来也没什么印象,因为大一c++完全荒度了),是我对于编程有了那么一丢丢的信心。