编写加减乘除4个自定义函数add,sub,mul,div,在主函数中调用这4个函数

题目要求:

(1)随机生成5道四则运算题,题目的类型自加,减,乘,除中任意混合出题(即5道题目中有各种类型的题目),每个题目的2个整数是20以内的随机数,题目显示在屏幕上,由用户输入答案(如下图所示)。

(2)程序判断用户输入的答案是否正确,统计答题的正确率。运行结束时,询问是否继续练习,如果回答“Y”则继续进行练习,如果回答“N”则退出练习。

(3)把每次所做的题目和答题的准确率输出在屏幕上,同时也把每次的运行结果保存到result.txt文本文件中。

随机生成数函数:srand((unsigned)time(NULL));

生成随机数在[a,b]范围内:a=rand()%(b-a+1)+a;

生成的数在0-20以内:a=rand()%21;

但是由于在除法中除数不可以为0,生成随机数范围应该在1-20:a=rand()%20+1;

加法,减法,乘法函数:

int add()
{
	int a,b,c;
	srand((unsigned)time(NULL));
	a=rand()%21;
	b=rand()%21;
	printf("%d+%d=",a,b);
	scanf("%d",&c);
	if(c==a+b)
		return 1;
	else
		return 0;
}
int sub()
{
	int a,b,c;
	srand((unsigned)time(NULL));
	a=rand()%21;
	b=rand()%21;
	printf("%d-%d=",a,b);
	scanf("%d",&c);
	if(c==a-b)
		return 1;
	else
		return 0;
}
int mul()
{
	int a,b,c;
	srand((unsigned)time(NULL));
	a=rand()%21;
	b=rand()%21;
	printf("%d*%d=",a,b);
	scanf("%d",&c);
	if(c==a*b)
		return 1;
	else
		return 0;
}

除法函数中:由于会出现2/3,4/7之类除不尽的,要判断输入的与正确结果是否相同

方法一:让二者相减的绝对值小于某个数时判定为相等:

if(fabs(c-div(a,c))<=1e-2;

方法二:四舍五入(注意类型转换)

temp=((double)a/b+0.005)*100;

    p=(double)temp/100;

要将每次的运行结果保存到result.txt文本文件中:

FILE *fp=fopen("result.txt","a");

fprintf(fp,"%d*%d=%d\n",a,b,c);

fclose(fp);

每次生成五道题目可以利用for循环+switch

int main()
{
     int i,s,score,x=1;
     char ch;
     FILE *fp=fopen("result.txt","w");
     printf("计算练习,电脑随机生成5道题目\n二十以内加减乘除(四舍五入保留二位小数),请答题:\n");
     fprintf(fp,"计算练习,电脑随机生成5道题目\n二十以内加减乘除(四舍五入保留二位小数),请答题:\n");
     fclose(fp);
     while(x)
     {
        score=0;
        for(i=1;i<=5;i++)
        {
            srand((unsigned)time(NULL));
            s=rand()%4+1;
            switch(s)
            {
                case 1:score=score+add();	break;
				case 2:score=score+sub();	break;
				case 3:score=score+mul();	break;
				case 4:score=score+divv();	break;
             }
        }
        FILE *fp=fopen("result.txt","a");
        printf("正确率为%d%%\n",score*20);
        printf("是否继续,如果是输入Y,否则输入N:\n");
        fprintf(fp,"正确率为%d%%\n",score*20);
        fprintf(fp,"是否继续,如果是输入Y,否则输入N:\n");
        fflush(stdin);
        ch=getchar();
        if(ch=='N')
            x=0;
        fprintf(fp,"%c\n",ch);
        fclose(fp);
    }
    return 0;
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值