第一次作业——四则运算

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.1Personal Software Process StagesTime Senior StudentTime
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

posted @ 2017-10-19 19:57  名字都被取光了  阅读(212)  评论(1编辑  收藏  举报