zoukankan      html  css  js  c++  java
  • 四则运算生成器

    小学生四则运算生成器

    功能:随机生成加减乘除运算 只是功能还不算丰满  以后可以再加 

    代码如下:

    // test.cpp: 定义控制台应用程序的入口点。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    //函数原型
    int getChoice();
    void showMenu();
    void score(int);
    int test(int);

    /*
    功能:用户选择功能
    返回:用户的功能选择
    1、加法 2、减法 3、乘法 4、除法 0、退出
    */
    int getChoice()
    {
    int choice;
    scanf("%d", &choice);
    return choice;
    }

    /*
    功能:显示功能的菜单
    */

    void showMenu()
    {
    printf("*****************************************\n");
    printf(" 四则运算练习\n");
    printf("*****************************************\n");
    printf("\t1、加法\t2、减法\n");
    printf("\t3、乘法\t4、除法\n");
    printf("\t5、综合\t0、退出\n");
    printf("*****************************************\n");
    printf("连续练习十道题 计分 祝使用愉快\n");
    printf("请输入你的选择(0--5):\n");
    printf("*****************************************\n");
    }

    /*
    功能:计分器
    */
    void score(int n)
    {
    int sco = 0; //练习得分,初始化为0
    int i = 0; //练习题数的计数器

    for (i = 1; i <= 10; i++)
    {
    sco = sco + test(n); //间接递归调用test(n)
    }
    printf("你做对了%d道,得%d分\n", sco, sco);
    }

    /*
    功能:进行一道题的测试过程
    */
    int test(int n)
    {
    int answer0 = 0; //正确答案
    int answer1 = 0; //用户输入的答案
    int t = 0; //临时变量
    char operation; //运算类别
    int num1 = 0; //操作数1
    int num2 = 0; //操作数2

    srand(time(0)); //初始化随机数种子
    num1 = rand() % 100; //取0—100之间的随机数
    num2 = rand() % 100;

    //进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
    if (n == 5)
    {
    n = rand() % 4 + 1;
    }

    switch (n)
    {
    case 1:
    operation = '+';
    break;

    case 2:
    operation = '-';
    break;

    case 3:
    operation = '*';
    break;

    case 4:
    operation = '/';
    break;
    }

    //加入一条防止“不够减”的语句,当选择减法且num1小于num2时不够减
    //不够减的时候,用临时变量交换两个操作数
    if ((operation == '-') && (num1<num2))
    {
    t = num1;
    num1 = num2;
    num2 = t;
    }

    //防止“除数为0”的程序漏洞
    //当num2被随机取值到0时,就将num2强制置为1
    //做除法时,将num1的值强制赋值给num1*num2,防止不能整除
    if (operation == '/')
    {
    if (num2 == 0)
    {
    num2 = 1;
    }
    num1 = num1*num2; //防止num1不能被num2整除的语句
    }

    //输出测试题本身、提示用户输入
    printf("%d%c%d= ", num1, operation, num2);
    scanf("%d", &answer1);

    //程序计算正确结果
    switch (operation)
    {
    case '+':
    answer0 = num1 + num2;
    break;

    case '-':
    answer0 = num1 - num2;
    break;

    case '*':
    answer0 = num1*num2;
    break;

    case '/':
    answer0 = num1 / num2;
    break;
    }
    //评判,做对返回1,做错返回0
    if (answer0 == answer1)
    {
    printf("做对了!\n");
    return 1;
    }
    else
    {
    printf("做错了!\n");
    return 0;
    }
    }


    //主函数
    int main(void)
    {
    int choice = 0; //接收用户的选择

    //循环开始功能,本次用do……while循环
    do
    {
    showMenu(); //显示菜单
    choice = getChoice();

    //控制choice的范围
    if (choice<0 || choice>5)
    {
    choice = 1; //强制做加法
    }
    if (choice == 0)
    {
    break; //用户选择0,退出循环(退出系统)
    }

    score(choice); //做什么练习,并启动评分
    } while (choice != 0);

    printf("欢迎使用,再见!\n");
    return 0;
    }

    总结:本次代码并非原著 借鉴网上某位博客主的代码 然后自己改了些功能 showmenu() score() test() 函数都有改动 使得成为适合我看和使用的代码 不过本次代码并不复杂 本应该自己敲出来 只是功力并不深厚 所以 好好学习 天天向上 继续努力

  • 相关阅读:
    编写安全有效的 C# 代码
    模式匹配
    C#新特性
    转 C# .NET4.0 混合模式程序集异常
    win7 64位系统 注册 ocx控件
    TIFF图像文件格式详解
    GDALOGR读取数据示例 C#版本
    使用gdal C#封装库读取DEM数据
    编译C#环境下GDAL(支持HDF4、NetCDF)
    UML类图符号 各种关系说明以及举例
  • 原文地址:https://www.cnblogs.com/MaggieW/p/7571432.html
Copyright © 2011-2022 走看看