四则运算升级版

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int cc,i,n,z;//操作数
int count;//题目数目
int max,min;//数据的最大值、最小值
int dt=0;//记录做对题目的数目
int shu[4];
char fh[4]={‘+‘,‘-‘,‘*‘,‘/‘};
void zhengshu();
void fenshu();
int main(void)
{
    int xz;//操作数
    srand((unsigned)time(NULL));

    printf("输入题目题数!--");//输入题目总数
    scanf("%d",&count);

    printf("是否有乘除法!(1/否,2/是.)--");//决定是否产生乘除法
    scanf("%d",&cc);

    printf("数值范围!(1 100)--");//输入数值范围
    scanf("%d %d",&min,&max);

    printf("\n请选择!");
    printf("\n1)整数运算.");
    printf("\n2)分数运算.--");
    scanf("%d",&xz);

    if(xz==1)
    {
        zhengshu();
    }
    else
    {
        fenshu();
    }
    printf("\n一共%d道题,答对%d道题!\n",count,dt);

}
void zhengshu()
{
    int x=0,y=0;//用户输入答案、正确答案
    int fz0,fm0;//已约分正确分子、分母
    int fz,fm;//用户输入分子、分母
    int jlfz,jlfm;//操作数
    int ys;
    char ch;
    for(i=0;i<count;i++)
    {
        for(n=0;n<2;n++)//生成等式
        {
            shu[n]=rand()%(max-min+1)+min;
            printf(" %d ",shu[n]);
            if(n<1)
            {
                z=rand()%(cc*2);
                printf("%c",fh[z]);
            }
            else
            {
                printf("=");
            }
        }
        switch(z)//算数正确答案
        {
        case 0:
            y=shu[0]+shu[1];
            break;
        case 1:
            y=shu[0]-shu[1];
            break;
        case 2:
            y=shu[0]*shu[1];
            break;
        case 3:
            y=shu[0]/shu[1];
            break;
        default:
            break;
        }
        if(z==3)
        {
            jlfz=shu[0];//约分
            jlfm=shu[1];

            while(shu[1]!=0)
            {
                ys=shu[0]%shu[1];
                shu[0]=shu[1];
                shu[1]=ys;
            }
            fz0=jlfz/shu[0];
            fm0=jlfm/shu[0];
            if(fm0<0)
            {
                fz0=fz0*-1;
                fm0=fm0*-1;
            }

            scanf("%d%c%d",&fz,&ch,&fm);
            if(fz==fz0&&fm==fm0)
            {
                printf("答对了!\n");
                dt++;
            }
            else
            {
                printf("答错了!\n");
            }
        }
        else
        {
            scanf("%d",&x);
            if(x==y)
            {
                printf("答对了!\n");
                dt++;
            }
            else
            {
            printf("答错了!\n");
            }
        }
    }
}
void fenshu()
{
    int fz,fm;//用户输入分子、分母
    int fz0,fm0;//已约分正确分子、分母
    int fz1,fm1;//未约分正确分子、分母
    int jlfz,jlfm;//操作数
    int temp,ys;//操作数
    char ch;
    for(i=0;i<count;i++)
    {
        for(n=0;n<4;n++)//产生四个随机数
        {
            shu[n]=rand()%(max-min+1)+min;
        }
        if(shu[0]>shu[1])//确保分母大于分子
        {
            temp=shu[1];
            shu[1]=shu[0];
            shu[0]=temp;
        }

        if(shu[2]>shu[3])//确保分母大于分子
        {
            temp=shu[3];
            shu[3]=shu[2];
            shu[2]=temp;
        }
        z=rand()%(cc*2);

        switch(z)
        {
        case 0:
            fz1=shu[0]*shu[3]+shu[1]*shu[2];
            fm1=shu[1]*shu[3];
            break;
        case 1:
            fz1=shu[0]*shu[3]-shu[1]*shu[2];
            fm1=shu[1]*shu[3];
            break;
        case 2:
            fz1=shu[0]*shu[2];
            fm1=shu[1]*shu[3];
            break;
        case 3:
            fz1=shu[0]*shu[3];
            fm1=shu[1]*shu[2];
            break;
        default:
            break;
        }

        jlfz=fz1;//约分
        jlfm=fm1;
        while(fm1!=0)
        {
            ys=fz1%fm1;
            fz1=fm1;
            fm1=ys;
        }
        fz0=jlfz/fz1;
        fm0=jlfm/fz1;
        if(fm0<0)
        {
            fz0=fz0*-1;
            fm0=fm0*-1;
        }

        printf("%d/%d %c %d/%d = ",shu[0],shu[1],fh[z],shu[2],shu[3]);//打印分式
        printf("----|%d/%d|----",fz0,fm0);
        scanf("%d%c%d",&fz,&ch,&fm);
        if(fz==fz0&&fm==fm0)
        {
            printf("答对了!\n");
            dt++;
        }
        else
        {
            printf("答错了!\n");
        }

    }
}

这是实验一的升级版,在编程时遇到的主要问题是分数很难去判断,不过到后面,自己仔细琢磨和参考资料还是搞定了。

时间: 2024-11-05 16:04:43

四则运算升级版的相关文章

RIGHT-BICEP单元测试——“二柱子四则运算升级版”

RIGHT-BICEP单元测试 ——“二柱子四则运算升级版” ”单元测试“这对于我们来说是一个全新的专业含义,在上了软件工程这门课,并当堂编写了简单的"求一组数中的最大值"函数的单元测试之后,我们对它有了全新的认识. 单元测试:即为, 老师让我们回去之后将“二柱子四则运算升级版”的程序进行单元测试(二柱子程序的源码我已经上传,这里不再重复,只列举单元测试的部分和分析),如下: PS.这里附上老师上课讲的关于RIGHT-BICEP测试的方法: 6个值得测试的具体部位,他们能够提高我们的测

四则运算-升级版--1

import java.util.*; import java.util.Random; public class SiZe { /** * @param args */ public static void main(String[] args) { String[] str_1 = new String[] {"0", "1", "2", "3", "4", "5", "6

实验二--四则运算-升级版--2

import java.util.*; import java.util.Random; import java.text.DecimalFormat; public class SiZe { public static void main(String[] args) { String[] str_1 = new String[] {"0", "1", "2", "3", "4", "5&quo

BICEP单元测试——随机四则运算升级版

一.测试方法 6个值得测试的具体部位: Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求? 二.测试部分 case 3: if(c[5] == 1) //判断选择是否有余数,如果能有余数 { printf("%d/%d = ",a, b ); } else if(a%b!=0) //如果不能有余数 { i = i-1; } else { printf(&

四则运算升级版课堂思路

1,题目避免重复则在输出是判断随机数和随机符号是否全部相同.全部相同则break:2,定制,m为定制份数,n为定制每份题的题数 for(j=0;j<m;j++) {   for(i<0;i<n;i++)   {      a=rand()%100; //产生100以内随机数      b=rand()%100;      d=rand()%4; //产生随机运算符      switch(d)      {          case 0:              cout<&l

“进度条”博客3

“进度条”博客 ——第三周 第三周 所花时间(包括上课) 上课时间:一周两节课,共3个小时左右 课下时间:周二晚上8::30到晚上10点左右(熟悉同伴.制定规范.搜集相关资料并构思) 周三下午3:30点到7:30左右(两个人一起编写函数并测试) 晚上9:00到11点(自己编程,查阅资料,修改函数的bug) 周五下午2点到5点半(继续编写部分的函数) 晚上7点到9点半(修改程序,查资料) 周六早上8:10-11:00:然后吃饭午休:下午2:15-6:00:然后吃晚饭:晚上7:45—9:45左右(将

“进度条”博客——第二周

“进度条”博客——第二周 第二周 所花时间(包括上课) 上课时间:一周两节课,共3个小时左右 课下时间:周三下午4点到晚上6点左右(搜集相关资料并构思) 周五下午4点到9点40左右(当然中间包括吃饭.休息和与室友讨论问题解法 的时间) 周六早上8:10-11:00:然后吃饭午休:下午2:15-6:00:然后吃晚饭:晚上7:45—9:45左右修改代码测试 周日8:15—11:30单元测试发表博客 总计:20个小时左右(这周的任务比较艰巨……) 代码量(行) 839行(不包含单元测试代码) 博客量(

二柱子四则运算定制版+升级版

题目:在上次程序的基础上,实现对连除的判断,并且实现多个数的混合运算,要求可以输入结果,并进行判断. 思路:基于上次程序,首先思考混合运算,这里运用两个数组,分别记录随机产生的运算数和运算符号.然后对连除进行判断,,检查运算符号数组里是否有连续的除号,有的话加上括号,避免歧义.最后对运算结果进行计算,并对用户输入的结果进行比较,给出相应提示,回答,计算方面,要优先对括号,乘除进行运算,然后再进行加减运算,每次运算完后都要记录下运算的结果. 代码: //吕广浩 3/19 #include<iost

四则运算生成器升级版1.0代码规范与测试程序

一.程序设计题目要求和设计思想 1.题目 (1).题目避免重复:    (2).可定制(数量/打印方式):    (3).可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 2.设计思想 要求1:题目避免重复    设计思想:(1)通过srand(time(NULL));来控制.    要求2:可以定制(数量/打印方式)    设计思想:(1)定义一个参数,利用用户