一、设计思想:

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. 【若泽大数据实战第二天】Linux命令基础

    Linux基本命令: 查看IP: ifconfig 或者 hostname -i(需要配置文件之后才可以使用) ipconfig(Windows) 关闭防火墙: Service iptables st ...

  2. python生成器函数中return的作用

    当生成器函数中含有return时,return不会返回任何值,会直接终止当前生成器,对yield的作用没有影响,当函数执行到return时候,调用next()来执行生成器则会报错,如果使用for循环遍 ...

  3. 用Turtle库画一个爱心

    ---恢复内容开始--- 用Python中的turtle库画一个爱心 这个学期,我学了Python语言,并学到其中的一个库:turtle库.用turtle库可以画一些你想画的图片,所以我就想画一个爱心 ...

  4. python类的封装

    Python之类的封装 1. 什么是封装 装:往容器/名称空间里存入名字 封:代表将存放于名称空间中的名字给藏起来,这种隐藏对外不对内(怎么做到的,在下文解释) 2. 为何要封装 封数据属性:不想要给 ...

  5. SQL条件判断中字符串后面有空格的问题

    也不知何时才有的概念,还是以前一直没有注意,从哪也没有听说过的定义,今天又遇见了一个小坑,特记录下来,防止再陷坑! 才疏学浅,文笔有限,简单点说吧,就是在写SQL Server语句时,以前使用了 WH ...

  6. 如何在两个jsp页面之间传值,在另外一个页面用EL表达式获取值

    第一个jsp页面 <% String ids=request.getParameter("id"); int id=Integer.parseInt(ids); %> ...

  7. 模仿淘宝首页写的高仿页面,脚本全用的原生JS,菜鸟一枚高手看了勿喷哈

    自己仿照淘宝首页写的页面,仿真度自己感觉可以.JS脚本全是用原生JavaScript写得,没用框架.高手看了勿喷,请多多指正哈!先上网页截图看看效果,然后上源码: 上源码,先JavaScript : ...

  8. Sublime Text 3 新手上路:必要的安裝、設定與基本使用教學

    http://blog.miniasp.com/post/2014/01/07/Useful-tool-Sublime-Text-3-Quick-Start.aspx

  9. Java设计模式(3)——创建型模式之抽象工厂模式(Abstract Factory)

    一.概述 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象. UML图: 其他的过多概念不再 ...

  10. 20145209 2016-2017-2 《Java程序设计》第10周学习总结

    20145209 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 计算机网络概述 计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physi ...