c语言运用(1)口算比赛

这篇博客介绍了如何使用C语言编写一系列不同难度的口算比赛题目,包括难度一到难度三的题目实现,并提供了主函数的详细说明。
摘要由CSDN通过智能技术生成


某小学要进行口算比赛,针对不同年级要出不同类型的题目,现要求你编写 程序完成题目的随机生成,并有你来参加这个比赛。
功能:
(1)随机生成 20 道口算题,写入文件;
(2)从文件依次读取题目并作答,最终写入新文件,并以当前时间(年月 日时分秒)作为文件名;
(3)计算做题时间及得分;
(4)题目难度分类(只考虑 2 个操作数的情况,要求操作数和结果都不为 负数)(操作数的范围为2 31 ~0)
1)两个操作数为 2 31 以内的加减法;
2)结果为 100 以内的四则运算;
3)分子分母均小于 10 的分数的四则运算,要求操作数和结果均为不可 约的情况,即 2/6 应该花简称 1/3,6/3 应化简成 2。

难度一

1.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<math.h>
  FILE *fp;                                 //文件指针
  int i,j;
  int x1,x2,x3,x4,x5,x6;
  void intt1()
{
     time_t time1;                           //以时间命名文件  11-18
     char name[30];
     time1 = time(0);
     strftime(name,27,"%Y年%m月%d日%H时%M分%S秒",localtime(&time1));
     srand(time(0));
     char name2[30];
     strcpy(name2,name);
     strcat(name2,".txt");                                      //链接形成文件路径
     for(i = 0; i < 20 ;i ++)                                  //生成20个式子
   {
          fp = fopen("hello.txt","a");                       //打开文件,若文件不存在则创建文件
        if(fp==NULL)
       {
           printf ("                                               ");
           printf("无法打开文件");
            exit(0);                                           //退出文件
       }
           int len  = 2;
           int *num2=NULL;
           int *num1=NULL;
           num1 = (int*)malloc(len);                           //动态申请内存
           num2 = (int*)malloc(len-1);                         //动态申请内存
           char hh[5];
           num2[0]=rand()%2;                                    //产生0,1两种随机数作为buffer[]的下坐标
           num1[0]=rand()%10;
           num1[1]=rand()%10;
           char buffer[3];                                        //生成运算符号
           buffer[0]='+';
           buffer[1]='-';
       if(num2[0]==1&&num1[0]<num1[1])                            //防止出现负数,前面的数较小就交换二者
       {
           int ex = num1[0];
           num1[0] = num1[1];
           num1[1] = ex;
       }
          hh[0] = num1[0]+'0';                                   //生成式子
          hh[1] =  buffer[num2[0]];
          hh[2] = num1[1]+'0';
          hh[3] = '=';
          hh[4] = '\0';
          fprintf(fp,"%s\n",hh);                                      //存式子
          free(num1);
          free(num2);                                                   //释放空间
          fclose(fp);
  }
        printf ("                                               ");
        printf("题目准备就绪,准备答题:\n");
        FILE*fin,*fbn;
        double start,finish;                                           //时间参数
        int deit2 = 0,cj = 0;
        start = clock();                                               //开始的时间

   if((fin=fopen(name2,"a"))==NULL)                                //打开源文件
     {
        printf("打开文件出错!\n");
     }
       if((fbn=fopen("hello.txt","r"))==NULL)                            //打开源文件
     {
        printf("打开文件出错!\n");
     }
      int chan = 20;
      while(chan--)                                                   //计算20道题的答案
    {
        int answer;                                                     //暂时储存用户的答案
        int c1,c2,c3;
        char buf2[128];                                               //存题目
        memset(buf2,'\0',128);
        fseek(fbn,deit2,SEEK_SET);                                    //每次运行返回指针返回文件开头,然后在偏移deit2位
        fread(buf2,sizeof(unsigned char),4,fbn);
       printf ("                                        ");
       printf("题目:%s\n",buf2);
       c1 = buf2[0]-'0';
       c2 = buf2[2]-'0';
   if(buf2[1]=='*')                                             //乘法的情况
    {
        c3 = c1*c2;
    }
   else if(buf2[1]=='+')                                        //加法的情况
    {
       c3 = c1+c2;
    }
   else if(buf2[1]=='-')                                          //减法
    {
       c3 = c1 - c2;
    }
   else
    {
        c3 = c1/c2;
    }
       printf ("                                               ");
       printf("输入你的答案:\n");
       printf ("                                               ");
       scanf("%d",&answer);

   if(answer==c3)                                                       //答案对比
   {
       cj=cj+1;
   }
      fprintf(fin,"%d\n",answer);                                        //存入文件
       printf("\n");
      deit2 = deit2+6;
   }
   finish = clock();
      fclose(fin);
      fclose(fbn);
      printf ("                                               ");
      printf("成绩为:%d\n",cj*5);
      printf ("                                               ");
      printf("%.2f seconds\n",(finish - start) / CLOCKS_PER_SEC);
      printf("清空文件夹<1>\n");                                            //清空文件
      int n2;
      scanf("%d",&n2);
      if(n2==1)  remove("hello.txt");
}

难度二

2.c


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<math.h>
FILE *fp;                                 //文件指针
int i,j;
int x1,x2,x3,x4,x5,x6;

int gcd(int a,int b)                   //最大公约数
{
    return b?gcd(b,a%b):a;
}
void  intt2()
{
    time_t time1;
      char name[30];
      time1 = time(0);
      strftime(name,27,"%Y年%m月%d日%H时%M分%S秒",localtime(&time1));
      srand(time(0));
      char name2[30];
      strcpy(name2,name);
      strcat(name2,".txt");
     srand(time(0));
    for(j = 0; j < 20 ; j ++)
    {
        fp = fopen("hello.txt","a");                //打开文件,若文件不存在则创建文件
        if(fp==NULL)
        {
            printf("无法打开文件");
            exit(0);//退出文件
        }
        int len  = 2;
        int *num2=NULL;                            //同1
        int *num1=NULL;
        num1 = (int*)malloc(len);                  //动态申请空间
        num2 = (int*)malloc(len-1);                 //动态申请内存
        char h[20];                                 //每个式子将会是一个长度为12的字符串,0到4位预留保存第一个数字如果数字位数不够5位就在数字后面加空格
        num2[0]=rand()%4;                           //随机产生 0 1 2 3 作为buffer[]函数的下坐标
        char buffer[4];
        buffer[0]='*';                               //乘法
        buffer[1]='+';                               //加法
        buffer[2]='/';                                //除法
        buffer[3]='-';                                 //减法
        if(buffer[num2[0]]=='-')                     //减法的情况
        {
            int t,t1=0,t2=0;
            int x1,x2;
            num1[0] = rand()%1200;                    //可以不取模
            num1[1] = rand()%1200;                     //取0到1199的数
            if(num1[0]<num1[1])                         //防止出现负数,前者小于后者就进行交换
            {
                t = num1[0];
                num1[0] = num1[1];
                num1[1] = t;
            }
            if((num1[0]-num1[1])>=100)                   //防止出现大于等于100的情况
            {
                num1[1] = num1[0]-rand()%100;               //如果出现,第二个数字变成第一个数字再减去随机生成的1到100的数
            }
            x1 = num1[0],x2 = num1[1];
            while(x1)                                        //计算生成的随机数的位数
            {
                t1++;
                x1 = x1/10;                                   //累除求位数

            }
            while(x2)                                         //同上
            {
                t2++;
                x2 = x2/10;
            }
            x1 = num1[0];
            x2 = num1[1];
            for(i = 0; i < t1; i ++)                               //将0到4数字转化成字符串
            {
                h[i] =(int) (x1/pow(10,t1-i-1))%10 + '0';            //从高位到低位
            }
            for(i = t1; i < 5; i ++)                               //如果数字的位数不够5位数就在其后加空格,
            {
                h[i] = 32;//32是空格的acll码
            }
            for(i = 6; i <6+ t2; i ++)                             //将数字转化成字符串 6到10位置上的元素
            {
                h[i] =(int)(x2/pow(10,t2+6-i-1))%10 + '0';           //循环取模,数字每个数位的数,比如十位上的
            }
            for(i = 6+t2; i < 11; i ++)                        
一、产品概述 《豆豆小学生口算练习系统》适用于学前班、小学生口算练习。系统提供屏幕练习、制作口算题卡打印练习(保护儿童视力)两种口算练习方式。系统自动出题、自动打分。屏幕背景自动轮换并可自由定制,增加孩子练习兴趣。练习数值范围自由设置,题型包括形如:A±B=()、A±()=C、()±B=C、A×÷B=( )[乘法表内]、( )×÷B=C[乘法表内]、A×÷( )=C[乘法表内]、A×÷B=( )、( )×÷B=C、A×÷( )=C、A±B±C=( )、A±×÷B±×÷C=( )、A±B±C=( )[带括号]、A±×÷B±×÷C=( )[带括号]、随机混合题型共13种题型,满足不同水平口算需要。可自动制作生成标准的口算题卡,家长再也不用为出几百道甚至上千道口算题而发愁了。二、软件功能1、数值范围设置:根据孩子水平设置口算数值范围;2、题型设置:可设置13种题型,A±B=()、A±()=C、()±B=C、A×÷B=( )[乘法表内]、( )×÷B=C[乘法表内]、A×÷( )=C[乘法表内]、A×÷B=( )、( )×÷B=C、A×÷( )=C、A±B±C=( )、A±×÷B±×÷C=( )、A±B±C=( )[带括号]、A±×÷B±×÷C=( )[带括号]、随机混合题型等;3、时间设置:上机考试时,可规定一个时间,要求孩子在一定的时间内完成,到时系统会自动收卷并自动打分,减轻家长检查作业的麻烦;4、考试桌面背景每一张试卷可自动轮换背景,增加孩子口算学习兴趣。背景为一组图片,家长也可以把孩子的照片或其它孩子感兴趣的图片增加到轮换背景库;5、上机屏幕考试:根据上述设置的数值范围、题型设置、时间设置,系统自动出题,交卷后系统自动打分,可循环测试;6、制作口算题卡:买一本口算题卡需要3-5元,但它是一次的。而系统可根据我们的设置制作任意数量、任意类型的标准的口算题卡,并可保存为Word文件,随时随处打印,增加应用灵活性。作者网址:http://www.hdlh.com.cn下载地址:http://www.hdlh.com.cn/downloads/豆豆小学生口算练习系统.rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dearzcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值