一、设计思想:

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. react基本demo详解

    一.react的优势 1.React速度很快:它并不直接对DOM进行操作,引入了一个叫做虚拟DOM的概念,安插在javascript逻辑和实际的DOM之间,性能好. 2.跨浏览器兼容:虚拟DOM帮助我 ...

  2. JSON与Delphi Object的互换

    Delphi自从增强了RTTI后,语言的可灵活性多大增强,Delphi的dbExpress中提供了DBXJSON,和DBXJSONReflect两个单元,可提供JSON序列化 下面的例子是实现Delp ...

  3. transform Vs Udf

    在鞋厂的第一个任务,拆表.需要把订单表按照开始日期和结束日期拆分成多条记录,挺新鲜的~ transform方式,使用到了python. (1)把hive表的数据传入,通过python按照日期循环处理, ...

  4. Python在线编程环境

    除了安装Python的IDE之外,也可以使用在网页中随时随地编写Python程序. Python官网:https://www.python.org/shell Python123:https://py ...

  5. 关于指针的笔记【1】【C语言程序设计-谭浩强】

    指针是什么? 一个 变量的地址称为该变量的"指针"[将地址形象化的称为“指针”].(指针是什么百度百科) 注意区分储存单元的地址和内容这两个概念的区别. 直接访问:直接按变量名进行 ...

  6. Java Web开发后端常用技术汇总

    技术名称及官网 Spring Framework Spring容器 http://projects.spring.io/spring-framework/ SpringMVC Spring MVC框架 ...

  7. 【blockly教程】Blockly编程案例

    案例一 原码反码和补码  我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值.机器数有固定的位数,具体是多少位与机器有关,通常是8位或16位.原码:是指符号位用0或1表示,0 ...

  8. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...

  9. Java中syso的封装

     将syso设置为由开关切换确实是个很不错的思想,这样就不用傻傻的一个个去找不用的syso进行删除或者注释 当然了,由网友所说,这叫日志系统情何以堪,这里想说的是这个开关的思想值得我这小白学习 此为看 ...

  10. Mac iTem2 自动登录服务器配置

    假设你要连接的服务器地址为123.123.123.123,端口号为8888,用户名为root,密码为mimamima 编写shell文件"login_server.sh",并放置于 ...