鱼C论坛

 找回密码
 立即注册
查看: 1577|回复: 3

[已解决]C语言随机10道四则运算

[复制链接]
发表于 2020-2-16 17:15:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。
编程要求:
1.较好的用户输入输出提示
2.使用子函数实现两个数相加的测试。此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。
int  AddTest(int a, int b) ;


以下是我写的代码,如何改的和题目一样……例如在哪加循环……

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int a = 0;
int hanshu()
{
        int num1,num2,num4,b,result;
        int num5=0;
        srand(time(0));
        num1=rand()%11;
        num2=rand()%11;
        
        b=rand()%5;
        if(b==1)
        {
                printf("%d + %d =\n",num1,num2);
                num4=num1+num2;
        }
        if(b==2)
        {
                printf("%d - %d = \n",num1,num2);
                num4=num1-num2;
        }
        if(b==3)
        {
                printf("%d * %d = \n",num1,num2);
                num4=num1*num2;
        }
        if(b==4 && num2!=0)
        {
                printf("%d / %d = \n",num1,num2);
                num4=num1/num2;
        }
        printf("请输入答案");
        scanf("%d",&result);
        if (result==num4)
        {
                printf("Right!\n");
                num5++;
        }
        else
        {
                printf("Not correct\nThe result is:%d\n",num4);
        }
        printf("%d题目错误",10-num5);
        printf("%d分数",num5*10);
        
        return 0;
}  
最佳答案
2020-2-16 19:58:35
本帖最后由 major_lyu 于 2020-2-16 21:42 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>

  5. int problem_gen_verif(void); //问题生产与答案验证
  6. int AddTest(int a, int b);

  7. int main(void)
  8. {
  9.         int i = 10;
  10.         srand(time(0));
  11.         int correct = 0;
  12.         while(i--)
  13.         {
  14.                 correct += problem_gen_verif();
  15.                                
  16.         }
  17.         printf("%d Errors\n", 10-correct);
  18.         printf("Your Score: %d", correct*10);
  19.        
  20.                
  21.         return 0;       
  22. }

  23. int problem_gen_verif(void)
  24. {
  25.   int num1;
  26.         int num2;
  27.         float answer;
  28.         float rslt;
  29.        
  30.         unsigned int flag = rand()%4;
  31.        
  32.         switch(flag)
  33.         {
  34.                 case 0: // '+'
  35.                         num1 = rand()%11;
  36.                         num2 = rand()%11;
  37.                         rslt = num1 + num2;
  38.                         printf("%d + %d = ?\n", num1, num2);
  39.                         break;               
  40.                 case 1: // '-'
  41.                         num1 = rand()%11;
  42.                         num2 = rand()%11;
  43.                         rslt = num1 - num2;
  44.                         printf("%d - %d = ?\n", num1, num2);
  45.                         break;
  46.                 case 2: // '*'
  47.                         num1 = rand()%11;
  48.                         num2 = rand()%11;
  49.                         rslt = (float)num1 * (float)num2;
  50.                         printf("%d * %d = ?\n", num1, num2);
  51.                         break;
  52.           case 3: // '/'
  53.                         num1 = rand()%11;
  54.                         do
  55.                         {
  56.                                 num2 = rand()%11;
  57.                         } while(num2==0);
  58.                         rslt = (float)num1 / (float)num2;
  59.                         printf("%d / %d = ?\n", num1, num2);
  60.                         break;
  61.                 default:
  62.                         break;       
  63.         }
  64.         printf("Your Answer: ");
  65.         scanf("%f",&answer);
  66.         if(fabs(rslt-answer) < 0.01) //精度0.01
  67.                 {
  68.                         printf("Right\n");
  69.                         return 1;                       
  70.                 }
  71.         else
  72.                 {
  73.                         printf("Not correct! The correct answer is %f\n", rslt);
  74.                         return 0;
  75.                 }
  76.                        
  77. }

  78. int AddTest(int a, int b)
  79. {
  80.         int rslt = a + b;
  81.         int answer;
  82.         printf("Please input you answer of %d + %d:", a, b);
  83.         scanf("%d", &answer);
  84.         return (answer==rslt);
  85.        
  86. }
复制代码

问题2没太明白。如果是要用 AddTest()判断加法问题是否正确,可以吧case 0:中的代码块改成:

  1. if (AddTest(num1, num2) == 1)
  2. {
  3.             printf("Right\n");
  4.             return 1;
  5. }
  6. else
  7. {
  8.         printf("Not correct\n");
  9.         return 0;
  10. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-16 17:21:36 | 显示全部楼层

回帖奖励 +1 鱼币

是哪方面一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 19:58:35 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 major_lyu 于 2020-2-16 21:42 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>

  5. int problem_gen_verif(void); //问题生产与答案验证
  6. int AddTest(int a, int b);

  7. int main(void)
  8. {
  9.         int i = 10;
  10.         srand(time(0));
  11.         int correct = 0;
  12.         while(i--)
  13.         {
  14.                 correct += problem_gen_verif();
  15.                                
  16.         }
  17.         printf("%d Errors\n", 10-correct);
  18.         printf("Your Score: %d", correct*10);
  19.        
  20.                
  21.         return 0;       
  22. }

  23. int problem_gen_verif(void)
  24. {
  25.   int num1;
  26.         int num2;
  27.         float answer;
  28.         float rslt;
  29.        
  30.         unsigned int flag = rand()%4;
  31.        
  32.         switch(flag)
  33.         {
  34.                 case 0: // '+'
  35.                         num1 = rand()%11;
  36.                         num2 = rand()%11;
  37.                         rslt = num1 + num2;
  38.                         printf("%d + %d = ?\n", num1, num2);
  39.                         break;               
  40.                 case 1: // '-'
  41.                         num1 = rand()%11;
  42.                         num2 = rand()%11;
  43.                         rslt = num1 - num2;
  44.                         printf("%d - %d = ?\n", num1, num2);
  45.                         break;
  46.                 case 2: // '*'
  47.                         num1 = rand()%11;
  48.                         num2 = rand()%11;
  49.                         rslt = (float)num1 * (float)num2;
  50.                         printf("%d * %d = ?\n", num1, num2);
  51.                         break;
  52.           case 3: // '/'
  53.                         num1 = rand()%11;
  54.                         do
  55.                         {
  56.                                 num2 = rand()%11;
  57.                         } while(num2==0);
  58.                         rslt = (float)num1 / (float)num2;
  59.                         printf("%d / %d = ?\n", num1, num2);
  60.                         break;
  61.                 default:
  62.                         break;       
  63.         }
  64.         printf("Your Answer: ");
  65.         scanf("%f",&answer);
  66.         if(fabs(rslt-answer) < 0.01) //精度0.01
  67.                 {
  68.                         printf("Right\n");
  69.                         return 1;                       
  70.                 }
  71.         else
  72.                 {
  73.                         printf("Not correct! The correct answer is %f\n", rslt);
  74.                         return 0;
  75.                 }
  76.                        
  77. }

  78. int AddTest(int a, int b)
  79. {
  80.         int rslt = a + b;
  81.         int answer;
  82.         printf("Please input you answer of %d + %d:", a, b);
  83.         scanf("%d", &answer);
  84.         return (answer==rslt);
  85.        
  86. }
复制代码

问题2没太明白。如果是要用 AddTest()判断加法问题是否正确,可以吧case 0:中的代码块改成:

  1. if (AddTest(num1, num2) == 1)
  2. {
  3.             printf("Right\n");
  4.             return 1;
  5. }
  6. else
  7. {
  8.         printf("Not correct\n");
  9.         return 0;
  10. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 22:35:23 | 显示全部楼层

回帖奖励 +1 鱼币

进来学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 04:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表