标签:
一.要求:
1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数:
是否有乘除法、
是否有括号、
数值范围、
加减有无负数、
除法有无余数、
否支持分数 (真分数, 假分数, …)、
是否支持小数 (精确到多少位)、
打印中每行的间隔可调整;
二.思路分析:
(1)实现了1,2以及是否有乘除法、数值范围、加减有无负数、除法有无余数、打印中每行的间隔可调整等控制参数;
(2)用srand((unsigned)time(NULL));函数题目避免重复;
(3)利用for循环输出控制数目;
(4)用户可以输入数字来选择打印方式,输入的数字代表列数;
编译环境:vs2013
三.源代码:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<time.h>
int main(int argc,char *argv[])
{
srand((unsigned)time(NULL));
int i, j;
int judge;
int ph[20]; //建立数组存放输入选择
int Pway, num1, num2; //打印方式
do
{
printf("###################四则运算出题系统######################\n");
printf(" 欢迎使用本系统,请按要求依次输入以下控制条件\n题目数量(tip:请输入正整数):");
scanf_s("%d", &ph[0],1); //a[0]存放打印的题目数量
printf("打印方式(tip:请输入正整数表示列数):");
scanf_s("%d", &ph[1],1); //a[1]输入的列数
printf("否有乘除法(tip:请输入数字0或者1选择,0表示无乘除法/1表示有乘除法):");
scanf_s("%d", &ph[2],1); //a[2]有无乘除法
printf("数值范围(tip:请输入一个正整数,如99表示数值范围为0~99):");
scanf_s("%d", &ph[3],1);
printf("负数(tip:请输入数字0或者1选择,0表示无负数/1表示有负数):");
scanf_s("%d", &ph[4],1);
printf("每行间隔数(tip:输入自然数控制每行间隔):");
scanf_s("%d", &ph[6],1);
if (ph[2] == 1)
{
printf("除法运算题的结果中能否有余数出现(tip:请输入数字0或者1选择,0表示无余数/1表示有余数):");
scanf_s("%d", &ph[5],1);
}
for (i = 0; i<ph[0]; i++)
{
num1 = rand() % (ph[3] + 1);
num2 = rand() % (ph[3] + 1);
switch (ph[2])
{
case 0: //选择0没有乘除法
Pway = rand() % 2; //构造随机函数,输出仅含加减法的四则运算
if (Pway == 0) //以下是加法
{
printf("<%d>%d+%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0) //ph[6]每行间隔的数量
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
else
{
if (ph[4] == 0) //若不允许出现负数
{
if (num1<num2) //比较被减数减数的大小
{
i = i - 1;
}
else
{
printf("<%d>%d-%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0) //判断是否换行
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
}
else //若可以有负数
{
printf("<%d>%d-%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
}
break;
case 1: //有乘除法
Pway = rand() % 4;
switch (Pway)
{
case 0: //加法
printf("<%d>%d+%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
break;
case 1:
if (ph[4] == 0)
{
if (num1<num2) //比较减数被减数
{
i = i - 1;
}
else
{
printf("<%d>%d-%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
}
else
{
printf("<%d>%d-%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
break;
case 2: //乘法
printf("<%d>%d×%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
break;
case 3: //除法
if (num2 == 0) //除数不为零
{
i = i - 1;
}
else
{
if (ph[5] == 1) //判断选择余数
{
printf("<%d>%d÷%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
else //无余数情况下
if (num1%num2 != 0)
{
i = i - 1;
}
else
{
printf("<%d>%d÷%d=\t", i + 1, num1, num2);
if ((i + 1) % ph[1] == 0)
{
printf("\n");
if (ph[6] != 0)
{
for (j = 0; j<ph[6]; j++)
{
printf("\n");
}
}
}
}
}
break;
default:
printf("出错了!\n");
break;
}
break;
default:
printf("出错了!\n");
break;
}
}
printf("\n");
printf("需要继续出题吗?(tip:输入1或0,1表示继续/0表示退出)");
scanf_s("%d", &judge,1);
}
while(judge==1);
printf("\n################欢迎下次使用,再见!####################\n\n");
system("pause");
return 0;
}
四.结果截图:
输入1继续出题,输入0退出系统
五.实验总结:
(1)srand(time(NULL))编译时出错,改为了srand((unsigned)time(NULL));
(2)scanf改为scanf_s;
(3)#include"stdafx.h"编译时出现错误,经过多次修改终于通过;
(4)总的来说,出现了许多问题,收获很大。
六.PSP0过程文档 :
周活动总结表
姓名:孔维春 日期:2015.3.15
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
100 |
30 |
10 |
|
|
|
140 |
周三 |
|
20 |
|
|
|
|
20 |
周四 |
|
20 |
15 |
|
|
|
35 |
周五 |
100 |
25 |
15 |
|
|
|
140 |
周六 |
|
|
35 |
|
|
|
35 |
周总结 |
200 |
95 |
75 |
|
|
|
375 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
200 |
201 |
45 |
|
|
|
446 |
平均 |
200 |
201 |
45 |
|
|
|
446 |
最大 |
200 |
201 |
45 |
|
|
|
446 |
最小 |
200 |
201 |
45 |
|
|
|
446 |
以前各周的累计时间
总计 |
200 |
201 |
45 |
|
|
|
446 |
平均 |
200 |
201 |
45 |
|
|
|
446 |
最大 |
200 |
201 |
45 |
|
|
|
446 |
最小 |
200 |
201 |
45 |
|
|
|
446 |
二、时间记录表:
学生 孔维春 日期 2015年3月15日
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3.10 |
20:00 |
21:00 |
无 |
60 |
编程序 |
作业 |
3.11 |
19:00 |
21:00 |
无 |
120 |
编程序 |
作业 |
3.12 |
19:10 |
20:00 |
无 |
50 |
编程序 |
作业 |
3.13 |
15:00 |
16:00 |
无 |
60 |
编程序 |
作业 |
3.14 |
10:10 |
10:40 |
无 |
30 |
完善程序 |
作业 |
3.15 |
10:00 |
14:00 |
无 |
240 |
完善程序 |
作业 |
三、缺陷记录日志:
学生 孔维春
日期 2015年3月15日
教员 王建民
程序号 2
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3.10 |
1 |
a2 |
编译 |
编译 |
1min |
|
在输入scanf中,漏掉了一处地址符号& |
||||||
3.10 |
2 |
a3 |
运行 |
运行 |
10min |
|
在jurge == 1漏写了一个= |
||||||
3.10 |
3 |
B1 |
运行 |
运行之后 |
5min |
|
列行比较乱 |
||||||
3.12 |
4 |
a1 |
编译 |
编译 |
1min |
|
漏掉一个} |
||||||
3.13 |
5 |
B2 |
运行 |
运行之后 |
45min |
|
没有按要求输入控制条件时无反应 |
标签:
原文地址:http://www.cnblogs.com/littilsaber/p/4339794.html