1:需求分析
I:能用参数控制生成式子的数目。
II:列出的式子运算符号是“+”、“-”、“x”、“÷”。
III:结果不能有小数,必须化成分数形式。
IV:能够判断答案的对错,并计算正确率,错误率。
2:功能设计
基本功能:
I:随机生成式子。
II:运算结果,并与输入结果相比较。
III:计算正确率和错误率。
3:设计实现
I:随机生成式子,并使式子生成在文件里。
II:计算式子的结果,并把结果输出到文件里,把每个数看成两部分(分子和分母,正数看成分母为1的分数),把计算的结果先放进分子分母两个数组里,再进行约分。
III:将在控制台输入的答案跟输出文件里的答案相比较,判断正误,在计算正确率。
4.代码说明
主函数:
int main(){ int max,sum;//最大值和题目数 int isRight[10001]; int i; printf("式子数目:"); scanf("%d",&sum); printf("最大值:"); scanf("%d",&max); for(i=0;i<sum;i++){ isRight[i]=0; } create(sum,max,"question.txt"); get(isRight,"question.txt",sum); system("pause"); return 0;
创建式子:
int create(int sum,int max,char*str){ FILE *f1,*f2; f1=fopen(str,"w+"); f2=fopen("Answers.txt","w+"); int zhengshu[3];//整数部分 int fz[4];//分子 int fenmu[4];//分母 char fuhao[3];//符号 char fuhaoSum[5]={‘+‘,‘-‘,‘3‘,‘4‘}; int kuohao; int i,j,gys; for(j=0;j<sum;j++){ while(1){ i=rand()%5; if(i==0){ kuohao=1; }else if(i==1){ kuohao=2; }else{ kuohao=0; } for(i=0;i<3;i++){ zhengshu[i]=rand()%max; } for(i=0;i<3;i++){ fenmu[i]=rand()%(max-2)+2; } for(i=0;i<3;i++){ if(rand()%4==2){ fz[i]=rand()%(fenmu[i]-1)+1; }else{ fz[i]=0;fenmu[i]=1; } } fuhao[0]=fuhaoSum[rand()%4]; fuhao[1]=fuhaoSum[rand()%4]; break; }
判断正误:
int get(int isRight[],char*str,int sum){ FILE *f1,*f2; f1=fopen(str,"r"); f2=fopen("Answers.txt","r"); char shizi[50],shizi2[50]; int i=0; float x,y; int length; int index; int suc,fal; index=0;suc=0;fal=0; while(1){ fscanf(f1,"%s",shizi); if(strcmp(shizi,"end")==0){ break; } printf("第%d题:%s=",index+1,shizi); scanf("%s",shizi2); if(strcmp(shizi2,"end")==0){ break; } fscanf(f2,"%s",shizi2); if(strcmp(shizi,shizi2)==0){ isRight[index]=1; suc++; }else{ isRight[index]=2; fal++; } index++; } x=suc/index; y=fal/index; printf("本次作业对题数:%d(",suc); for(i=0;i<index;i++){ if(isRight[i]==1){ printf("%d",i+1); break; } } for(i=i+1;i<index;i++){ if(isRight[i]==1){ printf("%d",i+1); } } printf(")\n"); printf("正确率为:%f\n",x); printf("本次作业错题数:%d(",fal); for(i=0;i<index;i++){ if(isRight[i]==2){ printf("%d",i+1); break; } } for(i=i+1;i<index;i++){ if(isRight[i]==2){ printf("%d",i+1); } } printf(")\n"); printf("错误率为:%f\n",y); fclose(f1); fclose(f2); return 0; }
5.运行测试
6.psp
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
---|---|---|---|
Planning | 计划 | 30m | 20m |
Estimate | 估计这个任务需要多少时间 | 2d | 3d |
Development | 开发 | 2h | 1.5h |
Analysis | 需求分析 (包括学习新技术) | 20m | 10m |
Design Spec | 生成设计文档 | 20m | 10m |
Design Review | 设计复审 | 30m | 30m |
Coding Standard | 代码规范 | 40m | 30m |
Design | 具体设计 | 1h | 2h |
Coding | 具体编码 | 1d | 2d |
Code Review | 代码复审 | 10m | 8m |
Test | 测试(自我测试,修改代码,提交修改) | 30m | 20m |
Reporting | 报告 | 20m | 30m |
测试报告 | 20m | 15m | |
计算工作量 | 15m | 20m | |
并提出过程改进计划 | 10m | 10m |
7小结
其实吧,这个作业我一开始写要么生成的题目有问题,要么计算的结果是小数,问题一大堆,适当的请教了一些同学的想法,如何解决这些问题的,才勉强符合要求吧,发现原来这个作业并不简单=-=。
coding地址:https://git.coding.net/hphone/size.git
原文:http://www.cnblogs.com/wanghaifeng/p/7684194.html