个人作业1:小学四则运算——基于控制台

 

a.需求分析:

  自动生成小学四则运算题目的命令行 “软件”,满足以下需求:   

    1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
    2. 运算符为 +, −, ×, ÷
    3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
    4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
    5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
      Myapp.exe -n 10

b.功能设计:

  生成整数四则运算和分数四则运算,并判断对错,打分统计正确率

c.设计实现:

  分函数zs()主要负责整数四则运算,随机产生两个随机数和随机运算符并计算;分函数gys是求最大公约数函数;分函数fs()主要负责分数四则运算随机产生两个随机数和随机运算符并调用第三个分函数gys()进行计算;主函数main()主要实现随机调用两个分函数zs()和fs()并统计正确率

d.代码说明:

#include "stdio.h"

#include "stdlib.h"

#include "time.h"
#include "string.h"
 
int gcd(int x,int y)
{
    int r;
    r=x%y;
    while(r!=0)
    {
        x=y;
        y=r;
        r=x%y;
    }
    return y;
}
int zhengshu(){
    int left,mid,right,result,int_number;
    srand((unsigned)time(NULL));
    left=rand()%10;
    mid=rand()%4;
    right=rand()%10;
    printf("%d",left);
    switch(mid)
    {
        case(0):result=left+right;
        printf(" + ");break;
        case(1):result=left-right; 
        printf(" - ");break;
        case(2):result=left*right;
        printf(" ×");break;
        case(3):result=left/right;
        printf(" ÷");break;
    }
    printf("%d =",right);
    scanf("%d",&int_number);
    if(int_number == result)
        {
            printf("回答正确!    下一题:\n");
            score=score+1; 
        }
    else{
            printf("回答错误!    下一题:\n");
        }
}
 
int fenshu(){
    int left_x,left_y,mid,right_x,right_y,x,y,GYS,int_number1,int_number2;
    srand((unsigned)time(NULL));
    do{
    left_x=rand()%10+1;
    left_y=rand()%10+1;
    mid=rand()%4;
    right_x=rand()%10+1;
    right_y=rand()%10+1;
    }while(!(left_x<left_y&&right_x<right_y));
    printf("%d/%d",left_x,left_y);
        switch(mid)
        {
            case(0):x=left_x*right_y+left_y*right_x;
                    y=left_y*right_y;
            printf(" + ");break;
            case(1):x=left_x*right_y-left_y*right_x;
                    y=left_y*right_y;  
            printf(" - ");break;
            case(2):x=left_x*right_x;
                    y=left_y*right_y;
            printf(" ×");break;
            case(3):x=left_x*right_y;
                    y=left_y*right_x;
            printf(" ÷");break;
        }
        printf("%d/%d =",right_x,right_y);
    GYS=gcd(x,y);
    x=x/GYS;
    y=y/GYS;
    scanf("%d/%d",&int_number1,&int_number2);
    if(int_number1==x&&int_number2==y)
    {
        printf("回答正确!    下一题:\n");
        score=score+1; 
    }
    else{
        printf("回答错误!    下一题:\n");
    }
}
int main(){
    int h,count;
      int score=0;
    printf("请输入题目数?");
    scanf("%d",&count);
    for(int i=0;i<count;i++)
    {
        h=rand()%2;
        if(h==0)
        {zs();}
        else
        {fs();}
    }
    printf("正确率为:%lf",score*1.0/count);
}
posted @ 2017-03-08 09:10  Xshopping  阅读(198)  评论(1编辑  收藏  举报