第一次作业——四则运算

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计划30m20m
Estimate估计这个任务需要多少时间2d3d
Development开发2h1.5h
Analysis需求分析 (包括学习新技术)20m10m
Design Spec生成设计文档20m10m
Design Review设计复审30m30m
Coding Standard代码规范40m30m
Design具体设计1h2h
Coding具体编码1d2d
Code Review代码复审10m8m
Test测试(自我测试,修改代码,提交修改)30m20m
Reporting报告20m30m
 测试报告20m15m
 计算工作量15m20m
 并提出过程改进计划10m10m

7小结

其实吧,这个作业我一开始写要么生成的题目有问题,要么计算的结果是小数,问题一大堆,适当的请教了一些同学的想法,如何解决这些问题的,才勉强符合要求吧,发现原来这个作业并不简单=-=。

coding地址:https://git.coding.net/hphone/size.git

转载于:https://www.cnblogs.com/wanghaifeng/p/7684194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值