小学生数学算数游戏

Posted 唐汉宫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小学生数学算数游戏相关的知识,希望对你有一定的参考价值。

题目要求:
1 、实现一个小型的算术游戏 CAI 软件系统,要求具有友好的界面设计(良好的人
机交互),操作方便,帮助小学生进行一位数(初级)或两位数(高级)的四则运算。
2 、主界面给出游戏规则,提示小学生可以选择加、减、乘和除四则运算的任一种运
算进行挑战。游戏开始,屏幕上随机出现两个数(一位数),提示小学生给出答案,答
错了请求重新输入,每题只有 5 次答题机会,机会用完后直接进入下一题。
3 、统计得分,达到一定分数值(如: 95 分以上)后可进级,即进行两位数计算的
挑战。同样,可设置试题数目上限(如:一共 50 题),完成 50 题得分不及格者,提醒
好好学习
4 、相关知识点:面向过程结构化程序设计思想,子函数的设计,菜单设计,分支 /
循环结构设计,随机函数 rand() 应用,程序结束函数 exit() 应用,清屏函数应用等。
5 、提供程序测试方案,程序功能强弱可以因人而异,但程序必须经得起各种测试数
据的考验。
注:出现差值为负数或除不尽时,直接跳到下一题。
分析:
代码分为以下模块:
1.加法模块:add()
2.减法模块:sub()
3.除法模块:divi()
4.乘法模块:mult()
5.菜单模块:menu()
6.判断模块:trial()
思路:
(1)前四个函数需要在结尾处加入判断模块的引用。
(2)这里的等级用来取余获取随机数,所以低等级是10,高等级是100。
(3)菜单模块用与用户进行人机交互。
#include<stdio.h>
#include <stdlib.h>

void add(int level);
void sub(int level);
void mult(int level);
void divi(int level);
void trial(int score, int level);
void menu(int level); 

int main()

    printf("欢迎来到计算练习系统!!!\\n");
    menu(10);
    return 0;


//菜单界面
void menu(int level)

    int flag = 1, choice;
    while (flag)
    
        printf("******** 菜单 *********\\n");
        printf("*     1.加法运算      *\\n");
        printf("*     2.减法运算      *\\n");
        printf("*     3.乘法运算      *\\n");
        printf("*     4.除法运算      *\\n");
        printf("***********************\\n");
        printf("请输入对应序号并回车开始游戏:\\n");
        scanf("%d", &choice);
        switch (choice)
        
            case 1:  
                add(level);
                flag = 0;
                break;          
            case 2:          
                sub(level);
                flag = 0;
                break;           
            case 3:            
                mult(level);
                flag = 0;
                break;            
            case 4:          
                divi(level);
                flag = 0;
                break;
            default:
                printf("请输入正确的序号!!!\\n");
                break;
            
    

//加法运算
void add(int level)

    int doing, bedone, result, score = 0;
    for (int i = 0; i < 50; i++)
    
        printf("请输入以下算式的结果:\\n");
        //如果升级了,将数值设置为2位数
        if (level == 100)
        
            do
            
                doing = rand() % level, bedone = rand() % level;
             while (doing < 10 || bedone < 10);
        
        else
            doing = rand() % level, bedone = rand() % level;

        printf("%d + %d =", doing, bedone);
        for (int n = 5; n > 0; n--)
        
            scanf("%d", &result);
            if (result == (doing + bedone))
            

                printf("答对了,真不戳!\\n");
                score += 2;
                break;
            
            else
            
                if ((n - 1) > 0)
                
                    printf("答案错误!!!\\n你还有%d次机会\\n请输入正确答案:\\n", (n - 1));
                
            
        
    
    //调用判分函数
    trial(score, level);


//减法
void sub(int level)

    int doing, bedone, result, score = 0;
    for (int i = 0; i < 50; i++)
    
        printf("请输入以下算式的结果:\\n");
        //如果升级了,将数值设置为2位数
        if (level == 100)
        
            do
            
                doing = rand() % level, bedone = rand() % level;
             while (doing < 10 || bedone < 10 || bedone - doing < 0);
        
        else
            //没升级前
            do
            
                doing = rand() % level, bedone = rand() % level;
             while (bedone - doing < 0);

            printf("%d - %d =", bedone, doing);
            for (int n = 5; n > 0; n--)
            
                scanf("%d", &result);
                if (result == (bedone - doing))
                

                    printf("答对了,真不戳!\\n");
                    score += 2;
                    break;
                
                else
                
                    if ((n - 1) > 0)
                    
                        printf("答案错误!!!\\n你还有%d次机会\\n请输入正确答案:\\n", (n - 1));
                    
                
            
    
    //调用判分函数
    trial(score, level);


//乘法
void mult(int level)

    int doing, bedone, result, score = 0;
    for (int i = 0; i < 50; i++)
    

        printf("请输入以下算式的结果:\\n");
        //如果升级了,将数值设置为2位数
        if (level == 100)
        
            do
            
                doing = rand() % level, bedone = rand() % level;
             while (doing < 10 || bedone < 10);
        
        else
            doing = rand() % level, bedone = rand() % level;

        printf("%d * %d =", doing, bedone);
        for (int n = 5; n > 0; n--)
        
            scanf("%d", &result);
            if (result == (doing * bedone))
            
                printf("答对了,真不戳!\\n");
                score += 2;
                break;
            
            else
            
                if ((n - 1) > 0)
                
                    printf("答案错误!!!\\n你还有%d次机会\\n请输入正确答案:\\n", (n - 1));
                
            
        
    
    //调用判分函数
    trial(score, level);


//除法
void divi(int level)

    double doing, bedone, score = 0;
    int result;
    for (int i = 0; i < 50; i++)
    
        printf("请输入以下算式的结果:\\n");

        //如果升级了,将数值设置为2位数
        if (level == 100)
        
            do
            
                doing = rand() % level, bedone = rand() % level;
             while (doing < 10 || bedone < 10);
        
        else
            doing = rand() % level, bedone = rand() % level;

        //让结果为正整数 分母不为零
        do
        
            doing = rand() % level, bedone = rand() % level;
         while ((bedone / doing) - (int)(bedone / doing) > 0 || doing == 0);

        printf("%.0f / %.0f =", bedone, doing);
        for (int n = 5; n > 0; n--)
        
            scanf("%d", &result);
            if (result == (int)(bedone / doing))
            
                printf("答对了,真不戳!\\n");
                score += 2;
                break;
            
            else
            
                if ((n - 1) > 0)
                    printf("答案错误!!!\\n你还有%d次机会\\n请输入正确答案:\\n", (n - 1));
            
        
    
    //调用判分函数
    trial(score, level);


//判分函数
void trial(int score, int level)

    //判断是否升级
    if (level == 10)
    
        if (score >= 95)
        
            int choicelevel, choiced = 0;
            system("cls");
            printf("你已经很棒了,是否进入下一等级的测试?\\n是请输入1,返回主菜单请输入0,结束请按-1:\\n");

            while (!choiced)
            
                scanf("%d", &choicelevel);
                switch (choicelevel)
                
                    case 1:
                        menu(100);
                        break;
                    case 0:
                        menu(10);
                        break;
                    case -1:
                        exit(0);
                    default:                
                        system("cls");
                        printf("请输入正确的数值:");
                        break;   
                
            
        

        if (score < 60)
        
            system("cls");
            printf("你的分数为:%d,不及格!\\n\\n要好好学习啊!\\n\\n\\n\\n\\n\\n", score);
            menu(10);
        
        else if (score < 95)
        
            system("cls");
            printf("你的分数为:%d,成绩良好!\\n\\n但还差%d分才能进阶噢!\\n\\n\\n\\n\\n\\n", score, 10 - score);
            menu(10);
        
    

    if (level == 100)
    
        if (score >= 95)
        
            system("cls");
            printf("你已经很棒了快去试试其它运算吧!\\n\\n\\n\\n");
            menu(100);
        
        else if (score > 60)
        
            system("cls");
            printf("你的分数为:%d,成绩良好!\\n\\n但离优秀还有一定距离!\\n\\n\\n\\n\\n\\n", score);
            menu(100);
        
        else if (score > 0)
        
            system("cls");
            printf("你的分数为:%d,不及格!\\n\\n要好好学习啊!\\n\\n\\n\\n\\n\\n", score);
            menu(100);
        
    
 

以上是关于小学生数学算数游戏的主要内容,如果未能解决你的问题,请参考以下文章

讲丶数学

用java语言做一个简单的小学生算数测试器

算数达人小小小游戏,小白写,轻喷。

小学生100以内算数

小学生算数题大全

大一c语言 小学生算数出题系统 的设计与实现?