作业三

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业三相关的知识,希望对你有一定的参考价值。

1. 是否需要有代码规范

 

  对于是否需要有代码规范,请考虑下列论点并反驳/支持:

 

  1. 这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。
  2. 我是个艺术家,手艺人,我有自己的规范和原则。
  3. 规范不能强求一律,应该允许很多例外。
  4. 我擅长制定编码规范,你们听我的就好了。

 

  我的观点:对于说这些规范是浪费时间的人,只能说如果一个人出来工作,就是要对最基本的可维护性原则具有基本意识,这是一种规则,也是为别人复审或学习能够参考上着想。就和普通话一样,平时如果你写日记可以简写、串行、乱写,但一旦和别人说话或发表文章,就不能语无伦次、乱七八糟、不分格式了。所以,这所谓的“编程素养和意识”,还是有必要遵守的。

     说自己是个艺术家,手艺人,有自己的规范和原则,我是半支持半反驳的。是的,我也喜欢有原则的人。包括我自己也在培养自己的个性(但对于编写代码这件事我真的没办法个性起来T-T)。但是我们生活在这个公共的世界,就要遵守公共的原则。代码是写给别人看的,如果自顾自写,一点都不考虑其他人的阅读感受,那写这代码也就没啥意义了。总而言之,编写代码不用追求像参考书那么标准,但至少可读性也要好。

     规范不能强求一律,我同意。应该允许很多例外,这里的“很多”我不敢苟同。还是那句话,可以有自己的个性,但过于追求个性,换来的只是你写的代码没人看得懂或看着很吃力。本人考研党,最近看到考研政治马哲有说“凡事都要追求度”,这里的“度”,也是指编写代码不要太过灵活了,自己一时爽了,换来的就是他人不愿看你写的代码了,这世界你也没办法融入进去了。

    “我擅长制定编码规范,你们听我的就好了。”说出这句话的一定是个大学霸吧!真的很羡慕这种很会写代码的人。但从我自己的角度来看,此人有点过于膨胀了。首先,你代码写得再好,你也不是世界最好,全宇宙最好,凭什么让大家都听你的?就算你是全宇宙最好吧,你也要遵守规则吧?考过驾照的人都知道,开车上路不遵守规则是要吃苦头的。写代码也是,自顾自写出的代码运行结果再牛叉,也不会被世俗所接受。做人还是姿态放低些,可以高调做事,但是,也要低调做人。

     以上个人观点,理科生没怎么读过书所以没什么深刻的见解,求轻喷。

 

 

2. 代码复审

 

代码规格审核

 

1.命名:在修改后的程序中,所添加的变量是以英文缩写表示,可以一眼看出变量类型。

2.注释:基本注释过多,看起来杂乱。简明扼要,重点标注即可。

3.代码冗长:可用函数分离,使其看起来整洁,可读性强。(未解决)

 

 

程序审核

 

1. 整数运算后,不能立即退出。

2. 真分数运算无法正常计算。

3. 除数是未约分的分数,可否使其约分为最简式?或保留2位小数?(未解决)

 

解决办法:

 

1. 程序内,整数和真分数的运算是以switch语句区分开的,但每个case语句后并未加上break语句,所以造成无退出继续运行的状况。

2. 函数progress(int f1,int f2),求取最大公约数,在之后的运算中可调用使用。

 

    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>                                        



    // 求最大公约数 
    //(参考:http://www.zybang.com/question/e431cf54c7fabec2ffae8691e3dcfaba.html
    int process(int f1,int f2)
    {
        int fx;
        while(f2!=0){
            fx=f1%f2;
            f1=f2;
            f2=fx;
        }
        return f1;
    }
     
    
    int main()
    {
    int a,b,x,y,s=0,r=0,e=0,result;  //s总题数  r正确数 e错误数 
    float fen1,fen2; //真分数 
    char c;  //答题者输入的值 (比如其中的a+b=c) 
    int m,n; //输入的数值,确定性 
    printf("\n\t\t【小朋友~又到了检验自己实力的时候啦!让我们开始吧!】\n\n");
    
    printf("输入要练习的题型吧(1整数 / 2真分数):");      
    scanf("%d",&n);
    
    printf("\n根据下面序列号,可以选择试题哦\n");
    printf("1.+ 加法\n");
    printf("2.- 减法\n");
    printf("3.* 乘法\n");
    printf("4./ 除法");
    printf("\n 提示:1.整数间运算 要保留到小数点到整数部分!\n") ;  
    printf("       2.按q键退出哦!\n") ;  
        
    printf("\n输入要练习的对应序号吧:");      
    scanf("%d",&m);
    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
    
    printf("\n小测试开始啦!认真答题吧!\n"); 
    srand( (unsigned)time( NULL ) );    //取随机数 

    switch(n){

    /*整数开始*/
    case 1:{
         while ((c=getchar())!=q)   //按q退出
        {
          s++;
          a=rand()%100;
          b=rand()%100;
          x=rand()%100;  
          y=rand()%x; //保证减法、除法 可应用 
      

    //加法 + 
        if(m==1)
        {
           printf("%d+%d=",a,b);       
           scanf("%d",&c);
           if (a+b==c) r++;
           else{
                   printf("要细心呀!正确答案为:%d\n",a+b);
                e++;
                }
         }
         
    //减法 -         
        else if(m==2)
        {                           
            printf("%d-%d=",x,y);
            scanf("%d",&c);
            if (x-y==c) r++;
            else{
                 printf("要细心呀!正确答案为:%d\n",x-y);
                 e++;
                }
        }
    
    //乘法 *    
        else if(m==3)
        {                             
            printf("%d*%d=",a,b);
            scanf("%d",&c);
            if (a*b==c) r++;
            else{
                 printf("要细心呀!正确答案为:%d\n",a*b);
                 e++;
                 }
        }

    //除法 / 
        else if(m==4)
        {   
            if(y!=0){                 //排除 除数=0的情况 
                printf("%d/%d=",x,y);
                scanf("%d",&c);
                float shang=x/y;
                if (x/y==c) r++;
                else{
                     printf("要细心呀!正确答案为:%.2f\n",shang);  
                     e++;
                 }//else结束 
            }//if(y!=0)结束                     
        } 
        else    
            printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
            result=100*r/s; //整体得分 
        }
    }//整数结束 
    break;

    /*真分数 开始*/
    case 2:{    
        while ((c=getchar())!=q)     

        {
          s++;    
          float t;      //t做转换的中间因子。fen1,fen2转换         
          x=rand()%100;   
          y=rand()%x; 
          a=rand()%100;
          b=rand()%a;
          fen1=y/x;  //设定两个不同的真分数 
          fen2=b/a;
          int f1,f2,min,result2;  //求最大公约数所设定的值 
      
    //加法 + 
        if(m==1)
         {
           printf("%d/%d+%d/%d=",y,x,b,a);       
           scanf("%d",&result2); 
           f1=y*a+x*b;
           f2=a*x;
           min=process(f1,f2);
           if (fen1+fen2==result2) r++;
           else{
                   printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
                  e++;
                }
         }
         
    //减法 -         
        else if(m==2)
        {         
            if(fen1>fen2)
            {
                printf("%d/%d-%d/%d=",y,x,b,a);       
                   scanf("%d",&result2);
                   f1=y*a+x*b;
                   f2=a*x;
                   min=process(f1,f2);
                if (fen1-fen2==result2) r++;
                   else{
                           printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
                        e++;
                }
            }
            else{
                    t=fen1;
                    fen1=fen2;
                    fen2=t;       //减数>被减数,则转换 
                    printf("%d/%d-%d/%d=",y,x,b,a);       
                       scanf("%d",&result2);
                       f1=y*a+x*b;
                       f2=a*x;
                       min=process(f1,f2);
                    if (fen1-fen2==result2) r++;
                       else{
                         printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
                        e++;
                }
            }                  
        }
    
    //乘法 *    
        else if(m==3)
        {
            int j=y*b,k=x*a; //分子or分母间的相乘 
           printf("%d/%d*%d/%d=",y,x,b,a);       
           scanf("%d",&result2);
           f1=y*a+x*b;
            f2=a*x;
               min=process(f1,f2);
           if (j*k==result2) r++;
           else{
                   printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
                e++;
                }
         }

    //除法 / 
        else if(m==4)
        {
            int o=y*a,p=x*b; //相除等于乘于一个倒数 
            if(p!=0){       //防止分母=0,即p!=0 
                       printf("(%d/%d)/(%d/%d)=",y,x,b,a);       
                       scanf("%d",&result2);
                       f1=y*a+x*b;
                    f2=a*x;
                       min=process(f1,f2);
                       if (o*p==result2) r++;
                      else{
                               printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
                            e++;
                    }
          }
        }
         else    
            printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
            result=100*r/s;      //得分
        }
    }//真分数结束 
    break;
    }
 

    //成绩显示 
    printf("\n本次答题成绩:%d\n\n",result);
    printf("本次共有%d道题。\n回答正确有 %d 道\n回答错误有 %d 道\n",s,r,e);

    //评语     
    if(result>60&&result<80)
    {
     printf("\n\n评语:还差一点就要满分咯!继续前进吧!");  
    }
    else if(result>80&&result<100)
    {
     printf("\n\n评语:就差一丢丢了!再接再厉!");  
    }  
    else if(result==100)
        {
            printf("非常棒哦!为你点赞!"); 
        }
        else
        {
          printf("\n\n评语:要多加练习哟!你的潜力很大呢!");  
        } 
    }

 

 

 程序截图:

技术分享

技术分享

 

 

3. PSP记录个人项目耗时情况

PSP2.1

Personal software Process stages

 
 

Time(%)

Senior student

Time(%)SDE

 
 

Planning

 

计划

 9          7
 

·Estimate

 

·估计这个任务需要多长时间

 9  8
 

Development

 

开发

 89  73
 

·Analysis

 

·需求分析

 4  15
 

·Design Spec

 

·生成设计文档

 4  6
 

·Design Review

 

·设计复审

 4  6
 

·Coding Standard

 

·代码规范

 3  2
 

·Design

 

·具体设计

 14  17
 

·Coding

 

·具体编码

 38  22
 

·Code Review

 

·代码复审

 7  9
 

·Test

 

·测试

 20  19
 

Reporting

 

报告

 6  9
 

·Test Report

 

·测试报告

 1  3
 

·Size Measurement

 

·计算工作量

 3  1
·Postmortem&Process

Improvement Plan

 

·事后总结,并提出过程改进计划

 2  4

 

 

每周更新学习进度表:

  学习时间 新增代码行 博客量(篇) 知识总结
第一周  7h  80  2  对于软件工程这门课有个大致的了解,并在学习代码上步入正轨。
第二周  8h  100  4  四则运算;还有很多不足的地方,需要继续改进。
第三周  12h  100  5

 课上对C语言各种语句重新复习了下,把不少渐渐生疏的语句又过了一遍,并尝试着编写简单语句i

后来看别人的四则运算发现需要回忆的太多,回宿舍把大一的C语言教材翻出来了—_—#

第四周        
......

以上是关于作业三的主要内容,如果未能解决你的问题,请参考以下文章

作业三: 代码规范代码复审PSP

作业三: 代码规范代码复审PSP

作业三

作业三

作业三:代码规范

作业三: 代码规范代码复审PSP