小学生数学算数游戏

题目要求:
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,不及格!nn要好好学习啊!nnnnnn", score);
            menu(10);
        }
        else if (score < 95)
        {
            system("cls");
            printf("你的分数为:%d,成绩良好!nn但还差%d分才能进阶噢!nnnnnn", score, 10 - score);
            menu(10);
        }
    }

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

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>