zoukankan      html  css  js  c++  java
  • 四则运算2

    一.要求:

    1、题目避免重复;

    2、可定制(数量/打印方式);

    3、可以控制下列参数:  

         是否有乘除法、

         是否有括号、  

         数值范围、

         加减有无负数、

         除法有无余数、

         否支持分数 (真分数, 假分数, …)、

         是否支持小数 (精确到多少位)、

         打印中每行的间隔可调整;

    二.思路分析:

       (1)实现了1,2以及是否有乘除法、数值范围、加减有无负数、除法有无余数、打印中每行的间隔可调整等控制参数;

       (2)用srand((unsigned)time(NULL));函数题目避免重复;

     (3)利用for循环输出控制数目;

     (4)用户可以输入数字来选择打印方式,输入的数字代表列数;

    编译环境:vs2013

    三.源代码:

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
    #include "stdafx.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
        return 0;
    }
    
    #include<iostream>
    using namespace std;
    #include<stdlib.h>
    #include<time.h>
    
    int main(int argc,char *argv[])
    {
        srand((unsigned)time(NULL));
        int i, j;
        int judge;
        int ph[20]; //建立数组存放输入选择
        int Pway, num1, num2; //打印方式
        do
        {
            printf("###################四则运算出题系统######################
    ");
            printf(" 欢迎使用本系统,请按要求依次输入以下控制条件
    题目数量(tip:请输入正整数):");
            scanf_s("%d", &ph[0],1); //a[0]存放打印的题目数量
            printf("打印方式(tip:请输入正整数表示列数):");
            scanf_s("%d", &ph[1],1); //a[1]输入的列数
            printf("否有乘除法(tip:请输入数字0或者1选择,0表示无乘除法/1表示有乘除法):");
            scanf_s("%d", &ph[2],1); //a[2]有无乘除法
            printf("数值范围(tip:请输入一个正整数,如99表示数值范围为0~99):");
            scanf_s("%d", &ph[3],1);
            printf("负数(tip:请输入数字0或者1选择,0表示无负数/1表示有负数):");
            scanf_s("%d", &ph[4],1);
            printf("每行间隔数(tip:输入自然数控制每行间隔):");
            scanf_s("%d", &ph[6],1);
            if (ph[2] == 1)
            {
                printf("除法运算题的结果中能否有余数出现(tip:请输入数字0或者1选择,0表示无余数/1表示有余数):");
                scanf_s("%d", &ph[5],1);
            }
            for (i = 0; i<ph[0]; i++)
            {
                num1 = rand() % (ph[3] + 1);
                num2 = rand() % (ph[3] + 1);
                switch (ph[2])
                {
                    case 0: //选择0没有乘除法
                    Pway = rand() % 2; //构造随机函数,输出仅含加减法的四则运算
                    if (Pway == 0) //以下是加法
                    {
                        printf("<%d>%d+%d=	", i + 1, num1, num2);
                        if ((i + 1) % ph[1] == 0)
                        {
                            printf("
    ");
                            if (ph[6] != 0) //ph[6]每行间隔的数量
                            {
                                for (j = 0; j<ph[6]; j++)
                                {
                                    printf("
    ");
                                }
                            }
                        }
                    }
                    else
                    {
                        if (ph[4] == 0) //若不允许出现负数
                        {
                            if (num1<num2) //比较被减数减数的大小 
                            {
                                i = i - 1;
                            }
                            else
                            {
                                printf("<%d>%d-%d=	", i + 1, num1, num2);
                                if ((i + 1) % ph[1] == 0) //判断是否换行
                                {
                                    printf("
    ");
                                    if (ph[6] != 0) 
                                    {
                                        for (j = 0; j<ph[6]; j++)
                                        {
                                            printf("
    ");
                                        }
                                    }
                                }
                            }
                        }
                        else //若可以有负数
                        {
                            printf("<%d>%d-%d=	", i + 1, num1, num2);
                            if ((i + 1) % ph[1] == 0) 
                            {
                                printf("
    ");
                                if (ph[6] != 0) 
                                {
                                    for (j = 0; j<ph[6]; j++)
                                    {
                                        printf("
    ");
                                    }
                                }
                            }
                        }
                    }
                    break;
                    case 1: //有乘除法
                    Pway = rand() % 4;
                    switch (Pway)
                    {
                        case 0: //加法
                        printf("<%d>%d+%d=	", i + 1, num1, num2);
                        if ((i + 1) % ph[1] == 0)
                        {
                            printf("
    ");
                            if (ph[6] != 0) 
                            {
                                for (j = 0; j<ph[6]; j++)
                                {
                                    printf("
    ");
                                }
                            }
                        }
                        break;
                        case 1:
                        if (ph[4] == 0)
                        {
                            if (num1<num2) //比较减数被减数
                            {
                                i = i - 1;
                            }
                            else
                            {
                                printf("<%d>%d-%d=	", i + 1, num1, num2);
                                if ((i + 1) % ph[1] == 0)
                                {
                                    printf("
    ");
                                    if (ph[6] != 0) 
                                    {
                                        for (j = 0; j<ph[6]; j++)
                                        {
                                            printf("
    ");
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            printf("<%d>%d-%d=	", i + 1, num1, num2);
                            if ((i + 1) % ph[1] == 0)
                            {
                                printf("
    ");
                                if (ph[6] != 0) 
                                {
                                    for (j = 0; j<ph[6]; j++)
                                    {
                                        printf("
    ");
                                    }
                                }
                            }
                        }
                        break;
                        case 2: //乘法
                        printf("<%d>%d×%d=	", i + 1, num1, num2);
                        if ((i + 1) % ph[1] == 0)
                        {
                            printf("
    ");
                            if (ph[6] != 0) 
                            {
                                for (j = 0; j<ph[6]; j++)
                                {
                                    printf("
    ");
                                }
                            }
                        }
                        break;
                        case 3: //除法
                        if (num2 == 0) //除数不为零
                        {
                            i = i - 1;
                        }
                        else
                        {
                            if (ph[5] == 1) //判断选择余数
                            {
                                printf("<%d>%d÷%d=	", i + 1, num1, num2);
                                if ((i + 1) % ph[1] == 0)
                                {
                                    printf("
    ");
                                    if (ph[6] != 0) 
                                    {
                                        for (j = 0; j<ph[6]; j++)
                                        {
                                            printf("
    ");
                                        }
                                    }
                                }
                            }
                            else //无余数情况下
                            if (num1%num2 != 0)
                            {
                                i = i - 1;
                            }
                            else
                            {
                                printf("<%d>%d÷%d=	", i + 1, num1, num2);
                                if ((i + 1) % ph[1] == 0)
                                {
                                    printf("
    ");
                                    if (ph[6] != 0) 
                                    {
                                        for (j = 0; j<ph[6]; j++)
                                        {
                                            printf("
    ");
                                        }
                                    }
                                }
                            }
                        }
                        break;
                        default:
                        printf("出错了!
    ");
                        break;
                    }
                    break;
                    default:
                    printf("出错了!
    ");
                    break;
                }
            }
            printf("
    ");
            printf("需要继续出题吗?(tip:输入1或0,1表示继续/0表示退出)");
            scanf_s("%d", &judge,1);
        } 
        while(judge==1);
        printf("
    ################欢迎下次使用,再见!####################
    
    ");
        system("pause");
        return 0;
    }

    四.结果截图:

    输入1继续出题,输入0退出系统

    五.实验总结:

       (1)srand(time(NULL))编译时出错,改为了srand((unsigned)time(NULL));

       (2)scanf改为scanf_s;

       (3)#include"stdafx.h"编译时出现错误,经过多次修改终于通过;

       (4)总的来说,出现了许多问题,收获很大。

    六.PSP0过程文档 :

     周活动总结表

    姓名:孔维春                                       日期:2015.3.15

    日期       任务

    听课

    编写程序

    阅读课本

    准备考试

     

     

    日总计

    周日

     

     

     

     

     

     

     

    周一

     

     

     

     

     

     

     

    周二

     100

     30

     10

     

     

     

     140

    周三

     

     20

     

     

     

     

    20

    周四

     

    20

     15

     

     

     

    35

    周五

     100

     25

     15

     

     

     

     140

    周六

     

     

     35

     

     

     

     35

    周总结

     200

     95

     75

     

     

     

     375

    阶段时间和效率                                            周数(上一次周活动表的周数+1):

    不包括上一周在内的累计时间                                                                         

    总计

     200

     201

     45

     

     

     

     446

    平均

     200

     201

     45

     

     

     

     446

    最大

     200

     201

     45

     

     

     

     446

    最小

     200

     201

     45

     

     

     

     446

    以前各周的累计时间                                                                                    

    总计

     200

     201

      45

     

     

     

     446

    平均

     200

     201

      45

     

     

     

     446

    最大

     200

     201

      45

     

     

     

     446

    最小

     200

     201

      45

     

     

     

     446

    二、时间记录表:

    学生        孔维春                                             日期   2015315日 

    教师        王建民                                             课程           PSP       

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     3.10

     20:00

     21:00

     

    60

    编程序 

    作业 

     3.11

    19:00

    21:00

     

     120

     编程序

    作业

     3.12

    19:10

    20:00

    50

    编程序

    作业

    3.13

    15:00

    16:00

    60

    编程序

    作业

     3.14

     10:10

    10:40

     

    30

    完善程序

     作业

     3.15

     10:00

     14:00

     无

     240

    完善程序

     作业

     

    三、缺陷记录日志:

    学生     孔维春       

    日期     2015315日 

    教员       王建民   

    程序号      2          

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

     3.10

     1

     a2

    编译

    编译

    1min

     

     在输入scanf中,漏掉了一处地址符号&

     3.10

     2

    a3

    运行

     运行

    10min

     

     jurge == 1漏写了一个=

     3.10

     3

    B1

    运行

    运行之后

    5min

     

     列行比较乱

     3.12

    4

    a1

    编译

    编译

    1min

     

    漏掉一个}

    3.13

    5

    B2

    运行

    运行之后

    45min

     

    没有按要求输入控制条件时无反应

  • 相关阅读:
    stata如何建立交互项
    PSM的stata实现
    Stata结果输出:outreg2命令详解
    stata固定效应
    【C++/Qt】cmake生成可执行文件流程(Windows/Linux)
    【数学相关】概率论手写笔记
    【搜索】dfs&bfs
    【C/C++】对拍教程
    【MySQL】MySQL基础操作(下)
    【Linux】ubuntu初始配置
  • 原文地址:https://www.cnblogs.com/littilsaber/p/4339794.html
Copyright © 2011-2022 走看看