小学生口算练习

#include<stdio.h>
#include<time.h>
void main()
{
  int maxNum,quesNum,mathCnt,num1,num2,temp;
  int opChar,opNum1,opNum2,answer,result,rightCnt;
  char yesOrNo;
  //生成随机种子 
  srand(time(NULL));
  //重复执行,直到不愿继续 
  do{
  //(1)设置上限及题目个数 
  printf("请先输入运算数的范围上限:");
  while(scanf("%d",&maxNum)!=1) while(getchar()!='\n');//解决输入错误的问题 
  
  printf("请输入一轮运算的题目个数:");
  while(scanf("%d",&quesNum)!=1) while(getchar()!='\n'); 
  printf("下面将依次给出%d个算式,请输入你的答案后回车!\n",quesNum);
  //(2)依次自动给出quesNum个算术运算算式
  for(mathCnt=1;mathCnt<=quesNum;mathCnt++)
  { //(2-1)随机生成两个运算数
    num1=rand()%maxNum;
    num2=rand()%maxNum;
    //使num1保存较大的数,
    if(num1<num2)
    {//num1、num2互换
	    temp=num1;
	    num1=num2;
	    num2=temp;
    }
    //(2-2)生成运算符,根据运算符确定运算数及运算结果
    switch(rand()%5)
    {
      case 0:opChar='+';
             opNum1=num2;
             opNum2=num1-num2;
	         answer=num1;
	         break;
      case 1:opChar='-';
             opNum1=num1;
             opNum2=num2;
	         answer=num1-num2;
	         break;
	  case 2:opChar='*';             
	         answer=num1*num2;
             while(answer>=maxNum)
             {
               num1--;
               answer=num1*num2;
             }
             opNum1=num1;
             opNum2=num2;
	         break;
      case 3:opChar='/';
             opNum1=num1-num1%num2;
             opNum2=num2;
	         answer=opNum1/num2;
	         break;
      case 4:opChar='%';
             opNum1=num1;
             opNum2=num2;
	         answer=num1%num2;
	         break;
    }
    //(2-3)输出算式
    printf("(%d) %d %c %d = ? ", mathCnt,opNum1,opChar,opNum2);
    //(2-4)接收键盘输入
    while(scanf("%d",&result)!=1)while(getchar()!='\n');
    //(2-5)评判结果  
    if(answer==result)
    {
	     printf("恭喜你,答对了,你真棒!\n");
	     rightCnt++;
    } 
    else        
      printf("很遗憾,答错了,加油哦!\n");  
  }
  //(3)结果统计
  printf("\n宝贝一共做对了%d道题!\n",rightCnt); 
  printf("%d\n",10*rightCnt/quesNum);
  switch(10*rightCnt/quesNum)  //注意学习这里的处理方式 
  {
  	 case 10:
     case 9:printf("你真的很厉害哦!\n");break;
     case 8:printf("你做的挺好的!\n");break;
	 case 7:printf("你也不错的啦!下次一定会更好的!\n");break;
     case 6:printf("加油吧,一定会有进步的!\n");break;
     default:printf("遇到事情不能坐以待毙!多练习一定会好起来的!\n");
  }
  //(4)是否继续 
  printf("\n你还要继续吗!输入Y或y,继续,否则,结束程序:");
  getchar();
  yesOrNo=getchar();
  }while(yesOrNo=='Y'||yesOrNo=='y');
  //(5)说再见 
  printf("\n记得下次见哦!\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值