软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)
一、升级要求:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。
二、设计思想:
1、首先输入答案并判断对错。我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案。每输出一道题目,就算出该题目正确答案存入数组中,当所有题目出完,用户输入结果时,再将结果与答案对比,并为用户输出提示,提醒正确或错误。
2、最后给出总共对/错的数量。在比较用户输入的结果和答案时,若相等,输出提示时,将正确计数器加1;若不等,将错误提示器加1。最后输出两个计数器的值,并提示用户正确/错误的数值。
三、源代码:
//信1201-1 胡亚宝 #include "stdafx.h"
#include "stdlib.h"
#include <time.h> int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL)); //避免题目重复
//存放正确答案和用户结果的数组
int daan[],jieguo[];
int x1,x2,flag,i,j,k;
int x3,x4;
//正确计数器和错误计数器
int count1=;
int count2=;
int a[];
printf("---------------------------欢迎使用本系统打印题目!----------------------------\n");
//可定制打印的题目数
printf("请输入要打印的题目数:");
scanf("%d",&a[]);
while(a[]<=) //题目数必须为正数
{
printf("请重新输入有效的题目数:");
scanf("%d",&a[]);
};
//可定制运算数的范围
printf("请输入运算数的范围:");
scanf("%d",&a[]);
while(a[]<=) //运算数必须为正数
{
printf("请重新输入有效的范围:");
scanf("%d",&a[]);
};
//可定制题目中是否有乘除法
printf("请选择否有乘除法(是->1;否->0):");
scanf("%d",&a[]);
while((a[]!=)&(a[]!=)) //只能选择1或0
{
printf("请重新输入有效的数值:");
scanf("%d",&a[]);
};
//可定制题目结果是否有负数
printf("请选择结果有无负数(是->1;否->0):");
scanf("%d",&a[]);
while((a[]!=)&(a[]!=)) //只能选择1或0
{
printf("请重新输入有效的数值:");
scanf("%d",&a[]);
};
//可定制结果是否有余数
printf("请选择结果有无余数(是->1;否->0):");
scanf("%d",&a[]);
while((a[]!=)&(a[]!=)) //只能选择1或0
{
printf("请重新输入有效的数值:");
scanf("%d",&a[]);
}; //可定制是否支持小数
printf("请选择是否支持小数(是->1;否->0):");
scanf("%d",&a[]);
while((a[]!=)&(a[]!=)) //只能选择1或0
{
printf("请重新输入有效的数值:");
scanf("%d",&a[]);
}; //可定制是否加括号
printf("请选择是否加括号(是->1;否->0):");
scanf("%d",&a[]);
while((a[]!=)&(a[]!=)) //只能选择1或0
{
printf("请重新输入有效的数值:");
scanf("%d",&a[]);
}; //循环打印符合要求的题目
for(i=;i<a[];i++)
{
switch(a[])
{
case :j=rand()%;break; //有乘除法
case :j=rand()%;break; //无乘除法
}
x1=rand()%a[]+;
x2=rand()%a[]+; //循环打印
if(j==)
{ switch(a[])
{
case :
switch(a[])
{
case :printf("%d+%d=\t\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("%d.%d+%d.%d=\t\t",x1,x3,x2,x4);break;
}
break; case :
switch(a[])
{
case :printf("(%d+%d)=\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("(%d.%d+%d.%d)=\t",x1,x3,x2,x4);break;
}
break;
}
//计算当运算法则为加法时的正确结果,并存入数组
jieguo[i]=x1+x2;
}
if(j==)
{
switch(a[])
{
case :
break;
case : //结果无负数
if(x1<x2) //被减数比减数小则交换
{
flag=x1;
x1=x2;
x2=flag;
}
break;
}
switch(a[])
{
case :
switch(a[])
{
case :printf("%d-%d=\t\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("%d.%d-%d.%d=\t\t",x1,x3,x2,x4);break;
}
break; case :
switch(a[])
{
case :printf("(%d-%d)=\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("(%d.%d-%d.%d)=\t",x1,x3,x2,x4);break;
}
break;
}
//计算当运算法则为减法时的正确结果,并存入数组
jieguo[i]=x1-x2;
}
if(j==)
{ switch(a[])
{
case :
switch(a[])
{
case :printf("%d*%d=\t\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("%d.%d*%d.%d=\t\t",x1,x3,x2,x4);break;
}
break; case :
switch(a[])
{
case :printf("(%d*%d)=\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("(%d.%d*%d.%d)=\t",x1,x3,x2,x4);break;
}
break;
}
//计算当运算法则为乘法时的正确结果,并存入数组
jieguo[i]=x1*x2;
}
if(j==)
{
switch(a[])
{
case : //结果可有余数
break;
case : //结果无余数
while(x1%x2!=) //如果不能整除,则重新生成
{
x1=rand()%a[]+;
x2=rand()%a[]+;
};
break;
}
switch(a[])
{
case :
switch(a[])
{
case :printf("%d/%d=\t\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("%d.%d/%d.%d=\t\t",x1,x3,x2,x4);break;
}
break; case :
switch(a[])
{
case :printf("(%d/%d)=\t",x1,x2);break;
case :
x3=rand()%+;
x4=rand()%+;
printf("(%d.%d/%d.%d)=\t",x1,x3,x2,x4);break;
}
break;
}
//计算当运算法则为除法时的正确结果,并存入数组
jieguo[i]=x1/x2;
}
} for(k=;k<a[];k++)
{ printf("请输入第%d个答案:",k+);
scanf("%d",&daan[k]);
//比较结果是否正确,并计数
if(daan[k]==jieguo[k])
{
printf("正确!\n");
count1++;
}
else
{
printf("错误!\n");
count2++;
} }
printf("\n正确答案有%d个,",count1);
printf("错误答案有%d个。\n",count2);
printf("------------------------------出题完毕,欢迎再次使用!--------------------------\n");
return ;
}
四、运行结果:
五、心得体会:
1、首先看到这个要求时,我首先想到的是在现有的循环中加判断条件,每确定一种运算法则就计算出结果并比较,但是在实现的过程中,我发现这样非常繁琐,而且输出时每出一道题就会要求输出答案,这样页面很不美观。于是我新加了for循环,在所有题目出完后,一起写答案。
2、我发现在代码编写的过程中,出现的语法问题大大减少,并不像开始的时候那样有很多细小错误,之前出现的错误我也有意识注意。但是还是有两个小问题:使用数组没有提前定义、计算数值的算式位置放错,通过编译也都解决。
六、PSP0级相关日志:
1、项目计划日志
周活动总结表
姓名:胡亚宝 日期:3/20
日期\任务 | 听课 | 编写程序 | 阅读书本 | 考研复习 | 安装软件 | 日总计 |
周日 | ||||||
周一 | ||||||
周二 | ||||||
周三 | ||||||
周四 | 300 | 50 | 30 | 90 | 80 | 550 |
周五 | 200 | 60 | 30 | 290 | ||
周六 | ||||||
周总结 | 500 | 110 | 60 | 90 | 80 | 840 |
阶段时间和效率 周数:1
不包括上一周在内的累计时间
总计 | |||||
平均 | |||||
最大 | |||||
最小 |
以前各周的累计时间
总计 | 500 | 110 | 60 | 90 | 80 | 840 |
平均 | 500 | 110 | 60 | 90 | 80 | 840 |
最大 | 500 | 110 | 60 | 90 | 80 | 840 |
最小 | 500 | 110 | 60 | 90 | 80 | 840 |
2、时间记录日志
学生:胡亚宝 日期:3/20
教师:王建民 课程:PSP
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/19 | 08:00 | 12:00 | 40 | 200 | 听课(嵌入式系统、接口技术) | 课间休息 |
14:00 | 15:50 | 10 | 100 | 听课(嵌入式软件开发技术) | 课间休息 | |
16:00 | 17:30 | 90 | 考研复习 | |||
18:30 | 20:00 | 10 | 80 | 安装软件 | 休息 | |
20:10 | 21:00 | 50 | 编写程序(终极版四则运算) | |||
21:00 | 21:30 | 30 | 阅读(梦断代码) | |||
3/20 | 08:00 | 12:00 | 40 | 200 | 听课(软件工程、操作系统) | 课间休息 |
14:30 | 15:40 | 10 | 60 | 编写程序(升级版四则运算) | 休息、问题 | |
21:00 | 21:30 | 30 | 阅读(梦断代码) |
3、缺陷记录日志
学生:胡亚宝 日期:3/20
教员:王建民 程序号:02
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复阶段 | 修复缺陷 |
3/19 | 1 | 001 | 设计 | 编译 | 20min | |
描述:判断语句位置错误 | ||||||
2 | 002 | 编码 | 编译 | 1min | ||
描述:使用数组之前没有定义 | ||||||
3/20 | 3 | 003 | 设计 | 编译 | 5min | |
描述:计算数值的算式位置放错 |
软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)的更多相关文章
- 软件工程课堂作业(一)——随机产生四则运算题目(C++)
一.设计思想: 1.首先主函数只用来调用随机产生并输出运算题目函数,随机产生并输出这一部分功能用一个randout函数实现: 2.随机产生运算数这一功能,两个运算数可以用随机函数生成,并将它们控制在1 ...
- 软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)
一.设计思想: 1.根据题目新设要求,我将它们分为两类:一类是用户输入数目,根据这个数目改变一系列后续问题:另一类是用户输入0或1,分情况解决问题. 2.针对这两类要求,具体设计思路已在上篇博文中写出 ...
- js实现随机的四则运算题目
老师给出的题,写一个小程序,可以生成随机的四则运算题目给给小学生用.以前自己就写了一个四则运算的简单js小程序,是这样的: 事件 + - * / 这是个自己输入的算法,但要求是自动产生随机数.于是我用 ...
- 软件工程课堂作业(十一)——NABC分析
一.团队开发项目:基于Android的重力感应的解锁APP 二.项目特点:区别于一般解锁软件用开机按钮开锁解锁,我们的重力解锁软件根据动作实现解锁,减少了开机按钮的使用频率,提高寿命. 三.NABC分 ...
- 软件工程课堂作业(三)——Right-BICEP软件单元测试
一.测试方法:Right-BICEP Right-结果是否正确?B-是否所有的边界条件都是正确的?I-能查一下反向关联吗?C-能用其他手段交叉检查一下结果吗?E-你是否可以强制错误条件发生?P-是否满 ...
- js实现随机的四则运算题目(2)-更新界面
上次的代码提交完成后,有很多bug.比如函数会重复调用执行,每点击一次按钮都会在生成题目的下方直接生成新的题目,于是我在代码前面添加了如下的代码: function play_allE() { doc ...
- 30道四则运算题目---课堂作业--软件工程c++
问题:设计一程序,给二年级小学生随机产生四则运算题目. 一.设计思考问题: 1.四则运算需要俩个运算数和一个运算符. 2.如何产生随机数? 3.如何实现随机产生四则运算? 4.题目是否符合小学生学习范 ...
- 17秋 软件工程 团队第五次作业 Alpha 测试报告
用户反馈博客:17秋 软件工程 团队第五次作业 Alpha 用户反馈 团队项目软件的总体测试计划 测试模块: 用户登录 部门信息模块 活动模块 部员管理模块 短信通知模块 测试计划: 注:测试结果Y代 ...
- 17秋 软件工程 团队第五次作业 Alpha
题目:团队作业--Alpha冲刺 17秋 软件工程 团队第五次作业 Alpha 12次Scrum 第一次Scrum 第二次Scrum 第三次Scrum 第四次Scrum 第五次Scrum 第六次Scr ...
随机推荐
- Dubbo 改造普通单体项目
一.新建普通maven项目 1.首先,新建3个普通maven商城项目,模拟以往常见的Java单体应用开发,mall-interface是存放接口和公共代码部分,order-service-consum ...
- jQuery实现简单的拼图游戏
一,实现拼图的搭建: <div class="box"> <table id="table1" class="mytable&quo ...
- 【Spark】Spark性能优化之Whole-stage code generation
一.技术背景 Spark1.x版本中执行SQL语句,使用的是一种最经典,最流行的查询求职策略,该策略主要基于 Volcano Iterator Model(火山迭代模型).一个查询会包含多个Opera ...
- ffmreg thinkphp 控制器 获取音频视频详细信息(获取时长)
FFmpeg下载:http://ffmpeg.zeranoe.com/builds/ 下载并解压FFmpeg文件夹: 打开你想安装的任意磁盘,例如:d盘.新建一个名为“ffmpeg”的文件夹,将第二步 ...
- vue分页组件重置到首页问题
分页组件,可以借用这个老哥的@暴脾气大大https://www.cnblogs.com/sebastian-tyd/p/7853188.html#4163272 但是有一个问题就是下面评论中@ Mrz ...
- tcp/ip五层协议
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族.互联网协议(Internet Protocol Suite)是一个网络通信模型,以及一整个网络传输协议家族,为互联 ...
- Python 爬虫 (四)
requests: 练手 雪qiu网 import requests import json import re import pymysql url = 'https://xueqiu.com/v4 ...
- java 递归打印20个斐波那契数
class Test { public static void main(String[] args) { // feibo j=new feibo(); for (int n = 1; n < ...
- C++中引用的本质分析
引用的意义 引用作为变量别名而存在,因此在一些场合可以代替指针 引用相对于指针来说具有更好的可读性和实用性 swap函数的实现对比: void swap(int* a, int* b) { int t ...
- Git使用列表(四)
最近,由于自己的一个项目,导致自己的关于自己的要使用Git的很多的命令,突然发现自己的git的还有许多不知道的东西 不过,在这个工作的过程中,也发现自己的一些很大的缺陷,就是自己题目理解力有限,明明就 ...