结对项目:代码复审+PSP
一、代码复审
首先我从代码风格规范和程序修改两方面进行审查。
(一)代码风格规范修改###
1 . 代码的部分未缩进:在用markdown粘贴代码时,需要后期tab,无形中加大工作量。
2 . 命名不确切:定义的有a,b,m,n等,在此用英文释义表示,更改为“分子numerator、分母denominator”。
int a,b,m,n; //修改前
char c;
int num1,den1,num2,den2,t;//修改后
char import;
3 . 注释过少:重要的语句并无解释,在此有加入,可移至博文底端附录代码部分。
(二)程序修改###
1 . 选取的分子随机数很可能会大于分母:使分子的取值范围缩小至分母数值内。
den1=rand()%100;
num1=rand()%den1;
den2=rand()%100;
num2=rand()%den2;
2 . 取分母的随机数可能为0:可添加if语句if(den1!=0||den2!=0),保证其取值为真分数时正常出题,再加以else语句,将分子与分母用 t 顺序转换,成为真分数。
switch(import){
if(den1!=0||den2!=0){
case 0:printf("%d+%d=\n",den1,den2);break;
case 1:printf("%d-%d=\n",den1,den2);break;
case 2:printf("%d*%d=\n",den1,den2);break;
case 3:printf("%d/%d=\n",den1,den2);break;
case 4:printf("(%d/%d)+(%d/%d)=\n",num1,den1,num2,den2);break;
case 5:printf("(%d/%d)-(%d/%d)=\n",num1,den1,num2,den2);break;
case 6:printf("(%d/%d)*(%d/%d)=\n",num1,den1,num2,den2);break;
case 7:printf("(%d/%d)/(%d/%d)=\n",num1,den1,num2,den2);break;
}
else{
t=den1;
den1=num1;
num1=t;
t=den2;
den2=num2;
num2=t;
switch(import){
case 0:printf("%d+%d=\n",den1,den2);break;
case 1:printf("%d-%d=\n",den1,den2);break;
case 2:printf("%d*%d=\n",den1,den2);break;
case 3:printf("%d/%d=\n",den1,den2);break;
case 4:printf("(%d/%d)+(%d/%d)=\n",num1,den1,num2,den2);break;
case 5:printf("(%d/%d)-(%d/%d)=\n",num1,den1,num2,den2);break;
case 6:printf("(%d/%d)*(%d/%d)=\n",num1,den1,num2,den2);break;
case 7:printf("(%d/%d)/(%d/%d)=\n",num1,den1,num2,den2);break;
}
}
}
3 .题目形式单一:只有真分数运算,所以我加入了整数与其混合。使用import=rand()%8 语句任取题目。
import=rand()%8;
(三)代码对比
注:修改后的程序,标记为(改)。
修改后代码:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j;
printf("请输入题目的数量:");
scanf("%d",&j);
int num1,den1,num2,den2,t;//分子numerator 分母denominator 转换t (改)
char import; //输入的数量
srand((unsigned)time(NULL)); //取随机数
for(i=0;i<j;i++){
den1=rand()%100;
num1=rand()%den1; //保证分子<分母 (改)
den2=rand()%100;
num2=rand()%den2;
import=rand()%8; //任取题目 (改)
switch(import){
if(den1!=0||den2!=0){
case 0:printf("%d+%d=\n",den1,den2);break;
case 1:printf("%d-%d=\n",den1,den2);break;
case 2:printf("%d*%d=\n",den1,den2);break;
case 3:printf("%d/%d=\n",den1,den2);break;
case 4:printf("(%d/%d)+(%d/%d)=\n",num1,den1,num2,den2);break;
case 5:printf("(%d/%d)-(%d/%d)=\n",num1,den1,num2,den2);break;
case 6:printf("(%d/%d)*(%d/%d)=\n",num1,den1,num2,den2);break;
case 7:printf("(%d/%d)/(%d/%d)=\n",num1,den1,num2,den2);break;
}
else{ //保证分子< 分母 (改)
t=den1;
den1=num1;
num1=t;
t=den2;
den2=num2;
num2=t;
switch(import){
case 0:printf("%d+%d=\n",den1,den2);break;
case 1:printf("%d-%d=\n",den1,den2);break;
case 2:printf("%d*%d=\n",den1,den2);break;
case 3:printf("%d/%d=\n",den1,den2);break;
case 4:printf("(%d/%d)+(%d/%d)=\n",num1,den1,num2,den2);break;
case 5:printf("(%d/%d)-(%d/%d)=\n",num1,den1,num2,den2);break;
case 6:printf("(%d/%d)*(%d/%d)=\n",num1,den1,num2,den2);break;
case 7:printf("(%d/%d)/(%d/%d)=\n",num1,den1,num2,den2);break;
}
}
}
}
}
原始代码:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j;
printf("请输入题目的数量:");
scanf("%d",&j);
int a,b,m,n;
char c;
srand((unsigned)time(NULL));
for(i=0;i<j;i++){
a=rand()%100;
b=rand()%100;
m=rand()%100;
n=rand()%100;
c=rand()%4;
switch(c){
case 0:c='+';break;
case 1:c='-';break;
case 2:c='*';break;
case 3:c='/';break;
}
printf("%d/%d%c%d/%d=\n",a,m,c,b,n);
}
}
二、PSP记录个人项目耗时情况
Data | Start | End | Total(min) | Task | Remarks |
2016/3/10 | 11:00 | 11:30 | 30 | 讨论程序需要的模块 | finish |
2016/3/11 | 10:00 | 10:40 | 40 | 对软件的使用者进行需求分析 | finish |
2016/3/11 | 10:40 | 11:10 | 30 | 生成设计文档 | 仅为初稿,在编写过程中会根据实际情况加入新元素 |
2016/3/12 | 13:00 | 15:00 | 120 | 编写程序主要模块 | 不停调试阶段 |
2016/3/13 | 9:00 | 11:00 | 120 | 调试代码至基本功能够运行 | finish |
2016/3/13 | 15:00 | 16:00 | 60 | 优化界面 | 使软件操作流畅 |
2016/3/14 | 9:30 | 10:30 | 60 | 博文总结 | finish |
2016/3/15 | 13:00 | 13:57 | 57 | 规范格式并上传博客 | Markdown |
2016-3-22 1:24:32
结对项目:代码复审+PSP的更多相关文章
- 作业三 代码规范 代码复审 PSP
1.是否需要有代码规范(5分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反对.我并不认为代码规范都 ...
- 201871030112-贾傲羊 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 学习PSP流程并运用于结对项目:学习GitHub代码的管理;学习结对编程的流程与内容 这个作业在哪些方 ...
- 作业三: 代码规范、代码复审、PSP
分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...
- 作业三:代码规范、代码复审、PSP
一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...
- 作业三(代码规范、代码复审、PSP)
1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...
- 代码规范、代码复审、PSP
作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...
- 高级四则运算器—结对项目反思(193 & 105)
高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格 PSP2.1 P ...
- WordCount结对项目
合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...
- 结对项目-WordCount
结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...
随机推荐
- .NET Core采用的全新配置系统[1]: 读取配置数据
提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...
- SQL Tuning 基础概述07 - SQL Joins
N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1, ...
- Vertica集群单节点宕机恢复方法
Vertica集群单节点宕机恢复方法 第一种方法: 直接通过admintools -> 5 Restart Vertica on Host 第二种方法: 若第一种方法无法恢复,则清空宕机节点的c ...
- Oracle 中的操作符
1.union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: SELECT * FROM emp WHERE sal < UNION SELECT * FROM emp WH ...
- c# socket
好久没有写CS端代码,今天有空复习一下SOCKET. 功能说明: 1.服务端向客户端发送信息 2.客户端向服务端发送信息 效果如下图: 服务端代码: Socket serverSocket = new ...
- 在Winform界面菜单中实现动态增加【最近使用的文件】菜单项
在我们一些和文件处理打交道的系统中,我们往往需要记录下最近使用的文件,这样方便用户快速打开之前浏览或者编辑过的文件,这种在很多软件上很常见,本文主要介绍在Winform界面菜单中实现[最近使用的文件] ...
- 浅析linux内核中的idr机制
idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起的机制.这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁.现在, ...
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 记录一次bug解决过程:mybatis中$和#的使用
一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...