软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)
一、设计思想:
1、根据题目新设要求,我将它们分为两类:一类是用户输入数目,根据这个数目改变一系列后续问题;另一类是用户输入0或1,分情况解决问题。
2、针对这两类要求,具体设计思路已在上篇博文中写出。有改动的地方:
①避免重复之前想的解决办法是比较,相同则重新产生,这样比较繁琐。经过上网查和询问同学,学到了一个函数,将问题解决了;
②是否有括号的问题,可用switch结构,分情况输出即可;
③分数和小数问题根本上是一个问题,在这里只说明一个,可以另设两个参数,随机生成作为小数部分,再输出即可;
④该程序有很多地方需要用户输入数值,有时会输入不符合逻辑的数,针对这个问题,我在每一次需要用户输入的地方都加了一个while循环语句,若不符合条件则需要重新输入。
二、源代码:
//信1201-1班——胡亚宝 2015/03/13 随机生成四则运算题目 #include "stdafx.h"
#include "stdlib.h"
#include <time.h> int _tmain( )
{
srand(time(NULL)); //避免题目重复
int x1,x2,flag,i,j;
int x3,x4;
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;
}
}
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;
}
}
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;
}
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;
}
}
} printf("------------------------------出题完毕,欢迎再次使用!--------------------------\n"); return ;
}
三、运行结果:


四、心得体会:
1、编程过程中,一些基础的内容经常弄错、遗漏,比如输入、函数的定义等,需要练习加以巩固;
2、开始我想的是将每一个新设功能写一个函数,再用主函数调用,但是真正编写的时候,由于功能之间有交叉,这样变量的引用和调用就出现了问题,最后我将它们都写到主函数中,各个参数都一次声明。这样的优点是编程方便、调用简单,缺点是不够清晰明了,当程序再大一些的时候非常不方便,以后需要找到别的方法去解决这个问题;
3、我用的语言是C++,它的界面不如C#美观、友好,但是编程简单、方便。
五、PSP0级相关日志
1、项目计划日志:
周活动总结表
姓名:胡亚宝 日期:2015/3/13
| 日期\任务 | 听课 | 编写程序 | 阅读书本 | 考研复习 | 日总计 | |
| 周日 | ||||||
| 周一 | ||||||
| 周二 | 300 | 60 | 60 | 420 | ||
| 周三 | 100 | 25 | 40 | 60 | 225 | |
| 周四 | 200 | 210 | 30 | 440 | ||
| 周五 | 200 | 30 | 230 | |||
| 周六 | ||||||
| 周总结 | 800 | 325 | 130 | 60 | 1315 |
阶段时间和效率 周数:1
不包括上一周在内的累计时间
| 总计 | |||||
| 平均 | |||||
| 最大 | |||||
| 最小 |
以前各周的累计时间
| 总计 | 800 | 325 | 130 | 60 | 1315 |
| 平均 | 800 | 325 | 130 | 60 | 1315 |
| 最大 | 800 | 325 | 130 | 60 | 1315 |
| 最小 | 800 | 325 | 130 | 60 | 1315 |
2、时间记录日志:
学生:胡亚宝 日期:3/13
教师:王建民 课程: PSP
| 日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
| 3/10 | 08:00 | 12:00 | 40 | 200 | 听课(软件工程、操作系统) | 课间休息 |
| 14:30 | 15:30 | 60 | 读书(梦断代码) | |||
| 16:10 | 18:00 | 10 | 100 | 听课(Windows高级编程) | 课间休息 | |
| 19:30 | 21:00 | 30 | 60 | 编写程序(升级版四则运算) | ||
| 3/11 | 08:00 | 09:50 | 10 | 100 | 听课(计算机网络) | 课间休息 |
| 10:00 | 11:10 | 10 | 60 | 考研复习 | ||
| 16:10 | 16:35 | 25 | 编写程序(升级版四则运算) | |||
| 21:00 | 21:40 | 40 | 读书(梦断代码) | |||
| 3/12 | 09:00 | 09:50 | 50 | 编写程序(升级版四则运算) | ||
| 10:10 | 12:00 | 10 | 100 | 听课(计算机接口技术) | 课间休息 | |
| 14:00 | 15:50 | 10 | 100 | 听课(嵌入式开发技术) | 课间休息 | |
| 16:10 | 19:50 | 60 | 160 | 编写程序(升级版四则运算) | 吃饭 | |
| 20:30 | 21:00 | 30 | 读书(梦断代码) | |||
| 3/13 | 08:00 | 12:00 | 40 | 200 | 听课(软件工程、操作系统) | 课间休息 |
| 14:30 | 15:00 | 30 | 编写程序(升级版四则运算) |
3、缺陷记录日志:
学生:胡亚宝 日期:3/13
教员:王建民 程序号:01
| 日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复阶段 | 修复缺陷 |
| 3/10 | 1 | 001 | 设计 | 编译 | 10min | |
| 描述:设计程序时调用函数传参错误 | ||||||
| 2 | 002 | 设计 | 编译 | 1min | ||
| 描述:使用了某一函数没有它的头文件 | ||||||
| 3/11 | 3 | 003 | 编码 | 调试 | 5min | |
| 描述:使用do while循环时结构用错 | ||||||
| 3/12 | 4 | 004 | 编码 | 编译 | 1min | |
| 描述: 使用scanf输入时漏掉了“&” | ||||||
| 5 | 005 | 编码 | 编译 | 1min | ||
| 描述:使用某一变量没有提前声明 | ||||||
| 6 | 006 | 编码 | 编译 | 2min | ||
| 描述:使用数组时 ,整个数组和数组中某一元素弄混,导致出错 | ||||||
| 7 | 004 | 编码 | 编译 | 1min | ||
| 描述:使用scanf输入时漏掉了“&” | ||||||
| 3/13 | 8 | 007 | 编码 | 编译 | 1min | |
| 描述:判断条件的等于应该是“==”,而我错用了“=” | ||||||
软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)的更多相关文章
- 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)
一.升级要求:让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 二.设计思想: 1.首先输入答案并判断对错.我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案.每输出一道 ...
- pyspider 示例二 升级完整版绕过懒加载,直接读取图片
pyspider 示例二 升级完整版绕过懒加载,直接读取图片,见[升级写法处] #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on ...
- 软件工程课堂作业(三)——Right-BICEP软件单元测试
一.测试方法:Right-BICEP Right-结果是否正确?B-是否所有的边界条件都是正确的?I-能查一下反向关联吗?C-能用其他手段交叉检查一下结果吗?E-你是否可以强制错误条件发生?P-是否满 ...
- 【软件工程Ⅱ】作业二 |分布式版本控制系统Git的安装与使用
本次作业的要去来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远程库地址:https://github.com/Mol ...
- C++课堂作业二之反转链表
1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...
- 软件工程课堂作业(十一)——NABC分析
一.团队开发项目:基于Android的重力感应的解锁APP 二.项目特点:区别于一般解锁软件用开机按钮开锁解锁,我们的重力解锁软件根据动作实现解锁,减少了开机按钮的使用频率,提高寿命. 三.NABC分 ...
- 软件工程课堂作业(一)——随机产生四则运算题目(C++)
一.设计思想: 1.首先主函数只用来调用随机产生并输出运算题目函数,随机产生并输出这一部分功能用一个randout函数实现: 2.随机产生运算数这一功能,两个运算数可以用随机函数生成,并将它们控制在1 ...
- C# winfrom调用摄像头扫描二维码(完整版)
前段时间看到一篇博客,是这个功能的,参考了那篇博客写了这个功能玩一玩,没有做商业用途.发现他的代码给的有些描述不清晰的,我就自己整理一下发出来记录一下. 参考博客链接:https://www.cnbl ...
- 课堂作业二 PAT1025 反转链表
MyGitHub 终于~奔溃了无数次后,看到这个结果 ,感动得不要不要的::>_<:: 题目在这里 题目简述:该题可大致分为 输入链表 -> 链表节点反转 -> 两个步骤 输入 ...
随机推荐
- sort的用法
早一段时间一直没有理解sort的用法,在早几天终于是研究的明白的,所以就来分享一下,如果你也被这个方法困扰,没懂原理,可以看一下这遍文章,希望有所帮助. 第一种,最简单的排序,纯数字排序: var a ...
- go加密算法:非对称加密(三)--Elliptic
看了2星期的区块链原理与运行机制,加密这里开始变得有些生疏,花了一天时间复习了一些;看到了之前忽略的,也学会了椭圆曲线加密. //基础板:浅显易懂package main import ( " ...
- Python支付接口汇总大全(包含微信、支付宝等)
微信接口 wzhifuSDK- 由微信支付SDK 官方PHP Demo移植而来,v3.37下载地址 weixin_pay- 是一个简单的微信支付的接口 weixin_pay- 微信支付接口(V3.3. ...
- day 24 内置模块re
1.正则表达式,匹配字符串 正则表达式是对字符串操作的一种逻辑公式.我们一般使用正则表达式对字符串镜子那个匹配和过滤,使用正则的优缺点: 优点: 灵活,功能性强,逻辑性强 缺点: 上手难.一旦上手,会 ...
- day 14 内置函数二
1.昨日的补充 reversed 翻转, 将一个序列翻转,返回翻转序列的迭代器 lst = ["河南话", "四川话", "东北", ...
- 如何分析Mysql慢SQL
内容摘要: 开启慢查询日志捕获慢SQL 使用explain分析慢SQL 使用show profile查询SQL执行细节 常见的SQL语句优化 一.开启慢查询日志捕获慢SQL ① 查询mysql是否开启 ...
- 昊合数据整合平台HHDI常见问题
Q: HaoheDI和Informatica PowerCenter.IBM DataStage的区别在哪里? A: Informatica和DataStage是比较重量级的ETL平台,其自身就是比较 ...
- 用树莓派3B+和 ITEAD PN532 读取、破解、写入M1卡
这是一篇介绍如何用树莓派使用PN532的随笔,介绍了具体的使用步骤. 首先介绍一下: ①.IC卡是非接触式的智能卡,里面一般是一个方形线圈和一个小芯片(用强光照着可以看到).M1卡是IC卡的一种,一般 ...
- 转载:隐藏bat窗口在后台运行(找了好久)
https://mp.weixin.qq.com/s?__biz=MzU4MjY1ODA3Nw==&mid=2247484277&idx=1&sn=8b5d98aab3827b ...
- 【数据结构】线性表&&顺序表详解和代码实例
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 预备知识 1.0 什么是线性表? 线性表(List)是零个或者多个数据元素的有限序列. 首先它是一个序列.里面的元素是有顺 ...