一、设计思想:

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  
描述:设计程序时调用函数传参错误
  002  设计   编译 1min   
描述:使用了某一函数没有它的头文件
 3/11  3 003  编码  调试  5min   
描述:使用do while循环时结构用错
 3/12 004  编码  编译  1min  
描述: 使用scanf输入时漏掉了“&”
    5  005 编码  编译  1min   
描述:使用某一变量没有提前声明      
    6  006 编码  编译  2min   
描述:使用数组时 ,整个数组和数组中某一元素弄混,导致出错     
    7  004 编码  编译  1min  
描述:使用scanf输入时漏掉了“&”      
  3/13  8 007  编码  编译  1min  
描述:判断条件的等于应该是“==”,而我错用了“=”

软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)的更多相关文章

  1. 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)

    一.升级要求:让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 二.设计思想: 1.首先输入答案并判断对错.我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案.每输出一道 ...

  2. pyspider 示例二 升级完整版绕过懒加载,直接读取图片

    pyspider 示例二 升级完整版绕过懒加载,直接读取图片,见[升级写法处] #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on ...

  3. 软件工程课堂作业(三)——Right-BICEP软件单元测试

    一.测试方法:Right-BICEP Right-结果是否正确?B-是否所有的边界条件都是正确的?I-能查一下反向关联吗?C-能用其他手段交叉检查一下结果吗?E-你是否可以强制错误条件发生?P-是否满 ...

  4. 【软件工程Ⅱ】作业二 |分布式版本控制系统Git的安装与使用

    本次作业的要去来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远程库地址:https://github.com/Mol ...

  5. C++课堂作业二之反转链表

    1问题链接: https://www.patest.cn/contests/pat-b-practise/1025 2解题想法: 这题原来用数组打过,现在是想保留暂存数据的数组,然后按顺序提取出来到创 ...

  6. 软件工程课堂作业(十一)——NABC分析

    一.团队开发项目:基于Android的重力感应的解锁APP 二.项目特点:区别于一般解锁软件用开机按钮开锁解锁,我们的重力解锁软件根据动作实现解锁,减少了开机按钮的使用频率,提高寿命. 三.NABC分 ...

  7. 软件工程课堂作业(一)——随机产生四则运算题目(C++)

    一.设计思想: 1.首先主函数只用来调用随机产生并输出运算题目函数,随机产生并输出这一部分功能用一个randout函数实现: 2.随机产生运算数这一功能,两个运算数可以用随机函数生成,并将它们控制在1 ...

  8. C# winfrom调用摄像头扫描二维码(完整版)

    前段时间看到一篇博客,是这个功能的,参考了那篇博客写了这个功能玩一玩,没有做商业用途.发现他的代码给的有些描述不清晰的,我就自己整理一下发出来记录一下. 参考博客链接:https://www.cnbl ...

  9. 课堂作业二 PAT1025 反转链表

    MyGitHub 终于~奔溃了无数次后,看到这个结果 ,感动得不要不要的::>_<:: 题目在这里 题目简述:该题可大致分为 输入链表 -> 链表节点反转 -> 两个步骤 输入 ...

随机推荐

  1. vue的实例

    vue的实例 创建一个vue实例的写法和创建一个变量一样 var vm = new Vue{{ //我们一般用vm来接收vue的实例,vm是 ViewModel的缩写 }} 然后,我们就可以给vue实 ...

  2. 企业IT架构转型之道 读后感

    放假三天,用部分时间阅读了企业IT架构转型之道这本书.第一遍潦草读完,就感觉收益颇多.这本书值得多读几遍,适合精度. 作为银行IT开发人员,在央企IT成本部门的大背景下,开发过程中遇到的诸多疑惑.困惑 ...

  3. 配置一个nginx反向代理&负载均衡服务器

    一.基本信息 系统(L):CentOS 6.9 #下载地址:http://mirrors.sohu.com 反代&负载均衡(N):NGINX 1.14.0 #下载地址:http://nginx ...

  4. 干货分享:QQ群排名霸屏优化规则靠前的新技术

    谈起QQ群排名的优化规则,很多人又爱又恨,原因很简单,爱他的都是引流效果是非常好的,通过关键词搜索排名好的技术,能排到全国默认前三,叫人怎能不爱他,恨的原因也恨简单,无论你的群完善的再怎么好,好像都无 ...

  5. STM32(1)——使用Keil MDK以及标准外设库创建STM32工程

    转载来自:http://emouse.cnblogs.com 1.1 开发工具与开发环境 1. 软件版本 本节所使用Keil MDK 为目前的最新版V4.21.其他版本差别不大,读者可以根据自己使用的 ...

  6. JS本地保存数据的几种方法

    1.Cookie 这个恐怕是最常见也是用得最多的技术了,也是比较古老的技术了.COOKIE优点很多,使用起来很方便 但它的缺点也很多: 比如跨域访问问题:无法保存太大的数据(最大仅为4KB):本地保存 ...

  7. 笔记-python-float(‘inf’)

    笔记-python-float(‘inf’) 看算法时发现了flaot(‘inf’). Python中可以用如下方式表示正负无穷: float("inf"), float(&quo ...

  8. elk6.3.2在线安装中文分词工具IK

    1.进入ES目录并执行安装(注意版本号改成你需要的版本) cd /usr/share/elasticsearch ./bin/elasticsearch-plugin install https:// ...

  9. [Real World Haskell翻译]第24章 并发和多核编程 第一部分并发编程

    第24章 并发和多核编程 第一部分并发编程 当我们写这本书的时候,CPU架构正在以比过去几十年间更快的速度变化. 并发和并行的定义 并发程序需要同时执行多个不相关任务.考虑游戏服务器的例子:它通常是由 ...

  10. [python3.x]win 7 下Pyinstaller库的安装与使用---探索之路

    一.下载安装包 cmd进入命令行,执行命令:pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz ...