作业三
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业三相关的知识,希望对你有一定的参考价值。
1. 是否需要有代码规范
对于是否需要有代码规范,请考虑下列论点并反驳/支持:
-
这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。
-
我是个艺术家,手艺人,我有自己的规范和原则。
-
规范不能强求一律,应该允许很多例外。
-
我擅长制定编码规范,你们听我的就好了。
我的观点:对于说这些规范是浪费时间的人,只能说如果一个人出来工作,就是要对最基本的可维护性原则具有基本意识,这是一种规则,也是为别人复审或学习能够参考上着想。就和普通话一样,平时如果你写日记可以简写、串行、乱写,但一旦和别人说话或发表文章,就不能语无伦次、乱七八糟、不分格式了。所以,这所谓的“编程素养和意识”,还是有必要遵守的。
说自己是个艺术家,手艺人,有自己的规范和原则,我是半支持半反驳的。是的,我也喜欢有原则的人。包括我自己也在培养自己的个性(但对于编写代码这件事我真的没办法个性起来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语言教材翻出来了—_—# |
第四周 | ||||
...... |
以上是关于作业三的主要内容,如果未能解决你的问题,请参考以下文章