一、代码复审

       首先我从代码风格规范和程序修改两方面进行审查。

(一)代码风格规范修改###

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的更多相关文章

  1. 作业三 代码规范 代码复审 PSP

    1.是否需要有代码规范(5分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反对.我并不认为代码规范都 ...

  2. 201871030112-贾傲羊 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 学习PSP流程并运用于结对项目:学习GitHub代码的管理;学习结对编程的流程与内容 这个作业在哪些方 ...

  3. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  4. 作业三:代码规范、代码复审、PSP

    一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...

  5. 作业三(代码规范、代码复审、PSP)

    1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...

  6. 代码规范、代码复审、PSP

    作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作  一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...

  7. 高级四则运算器—结对项目反思(193 & 105)

    高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 P ...

  8. WordCount结对项目

    合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...

  9. 结对项目-WordCount

    结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...

随机推荐

  1. .NET Core采用的全新配置系统[1]: 读取配置数据

    提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...

  2. SQL Tuning 基础概述07 - SQL Joins

    N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1, ...

  3. Vertica集群单节点宕机恢复方法

    Vertica集群单节点宕机恢复方法 第一种方法: 直接通过admintools -> 5 Restart Vertica on Host 第二种方法: 若第一种方法无法恢复,则清空宕机节点的c ...

  4. Oracle 中的操作符

    1.union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: SELECT * FROM emp WHERE sal < UNION SELECT * FROM emp WH ...

  5. c# socket

    好久没有写CS端代码,今天有空复习一下SOCKET. 功能说明: 1.服务端向客户端发送信息 2.客户端向服务端发送信息 效果如下图: 服务端代码: Socket serverSocket = new ...

  6. 在Winform界面菜单中实现动态增加【最近使用的文件】菜单项

    在我们一些和文件处理打交道的系统中,我们往往需要记录下最近使用的文件,这样方便用户快速打开之前浏览或者编辑过的文件,这种在很多软件上很常见,本文主要介绍在Winform界面菜单中实现[最近使用的文件] ...

  7. 浅析linux内核中的idr机制

    idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起的机制.这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁.现在, ...

  8. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  9. 记录一次bug解决过程:mybatis中$和#的使用

    一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...

  10. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...