• 四则运算2


    一、问题描述:

      要求:
        1、题目避免重复
        2、可定制(数量/打印方式)
        3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),

             是否支持小数(精确到多少位),打印中每行的间隔。

    二、问题分析:

      问题一:题目避免重复

        srand(time(NULL))函数;
      问题二:可定制(数量/打印方式)

        数量:将输入的题目数量的n以一个for循环挨个输出;
        打印方式:以用户的输入数字来选择打印方式,1代表一行输出三道题,2代表...;

      问题三:可以控制:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数、是否支持分数(真假分数,、、、)
          是否支持小数(精确带多少位)、打印中每行间隔可调整

        在选则有无上述各种数,用数字表示有无,每行的间隔和数字的有无一样。

    三、源代码:

    //作者:田永涛
    //2015.3.13
    //代码实现功能:能随机的生成用户输入四则运算题的数目,且能做相应的控制
    
    #include "stdafx.h"
    #include<iostream.h>
    #include<stdlib.h>
    #include<time.h>
    int main(int argc, char* argv[])
    {
        srand(time(NULL));
        int    ph[10];                     //建立捕获数组,用以存放输入的选则  
        int Pway,num1,num2;                      //用来表示打印方式
        int i,j;
        int judge;
        do
        {
            printf("以下均用0表示输入“否”,用1表示输入“是”
    ");
            printf("请输入要打印的题目数量:");
            scanf("%d",&ph[0]);                      //a[0]存放打印题的数量
            printf("请输入打印的方式(列数):");
            scanf("%d",&ph[1]);                                    //a[1]代表输入的列数
            printf("请输入是否有乘除法:");
            scanf("%d",&ph[2]);                                          //a[2]代表有无乘除法
            printf("请输入数值范围:");
            scanf("%d",&ph[3]);
            printf("请输入加减是否有负数:");
            scanf("%d",&ph[4]);
            printf("请输入间隔数:");
            scanf("%d",&ph[6]);
            if(ph[2] == 1)
            {
                printf("请输入除法的算式中是否有余数出现(0/1):");
                scanf("%d",&ph[5]);
            }
            for(i=0; i<ph[0]; i++)
            {
                num1 = rand()%(ph[3]+1);
                num2 = rand()%(ph[3]+1);
                switch(ph[2])
                {
                case 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)                         //ph[6]表示每行间隔的数量
                                    {
                                        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)                         //ph[6]表示每行间隔的数量
                                {
                                    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)                       //ph[6]表示每行间隔的数量
                            {
                                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)                   //ph[6]表示每行间隔的数量   
                                    {
                                        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)                            //ph[6]表示每行间隔的数量
                                {
                                    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)                              //ph[6]表示每行间隔的数量
                            {
                                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)                         //ph[6]表示每行间隔的数量
                                    {
                                        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)                                   //ph[6]表示每行间隔的数量
                                        {
                                            for(j = 0;j<ph[6];j++)
                                            {
                                                printf("
    ");
                                            }
                                        }
                                    }
                                }
                        }
                        break;
                    default:
                        printf("出错!
    ");
                        break;
                    }
                    break;
                default:
                    printf("出错!
    ");
                    break;
                }
            }
            printf("
    ");
            printf("是否继续打印:");
            scanf("%d",&judge);
        }while(judge == 1);
        return 0;
    }

    四、运行结果

    五、总结

      在这次的作业中,回顾了大一的c语言的知识,在过程中遇到的问题并不是算法或者数据结构的问题,而是语法和简单的标点

     或者是语句插入位置的问题。当然,这次的作业并没有完全视线全部的功能,这也是为什么没有遇到数据和算法问题的原因。

      除上述的问题外,在作业中,遇到中文字符加减乘除和英语字符加减乘除的输出方面有点不明白。希望在以后的学习中可以

     明白其中的问题,提高自己。

    六、周活动总结表

    周活动总结表

    姓名:田永涛                                            日期:2015.3.13

    日期       任务

    听课

    编写程序

    阅读课本

    准备考试

     

     

    日总计

    周日

     

     

     

     

     

     

     

    周一

     

     

     

     

     

     

     

    周二

     100

     30

     15

     

     

     

     145

    周三

     

     68

     

     

     

     

    68

    周四

     

    50

     15

     

     

     

    65

    周五

     100

     69

     15

     

     

     

     184

    周六

     

     34

     

     

     

     

     34

    周总结

     200

     251

     45

     

     

     

     496

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

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

    总计

     

     

     

     

     

     

     

    平均

     

     

     

     

     

     

     

    最大

     

     

     

     

     

     

     

    最小

     

     

     

     

     

     

     

    以前各周的累计时间                                                                                    

    总计

     200

     251

      45

     

     

     

     496

    平均

     200

     251

      45

     

     

     

     496

    最大

     200

     251

      45

     

     

     

     496

    最小

     200

     251

      45

     

     

     

     496

    二、时间记录表:

    学生        田永涛                                             日期   2015313 

    教师        王建民                                             课程           PSP       

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     3.10

     19:12

     19:42

     无

    30

    编程序 

    作业 

     3.11

    19:03

    20:11

     无

     68

     编程序

    作业

     3.12

    19:10

    20:00

    50

    编写程序

    作业

    3.13

    15:02

    16:11

    69

    完善程序

    作业

     3.14

     10:10

    10:44

     无

    34

    完善程序

     作业

     

     

     

     

     

     

     

     

    三、缺陷记录日志:

    学生     田永涛       

    日期     2015313 

    教员       王建民   

    程序号                

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

     3.10

     1

     a2

    运行

    运行之后马上

    1min

     

     在输入scanf中,漏掉取地址符号&

     3.10

     2

    a3

    编译

     编译

    1min

     

     在判断if(ph[] == 1)条件时,将==写成=

     3.10

     3

    B1

    运行

    运行之后

    3min

     

     在运行时,输出的结果虽然正确,但格式却不正确,行间距混乱

     3.12

    4

    a1

    编译

    编译

    1min

     

    漏掉;

    3.13

    5

    B2

    运行

    运行之后

    15min

     

    在运行时,输出的格式不是按要求的输出的,原因是if语句插入的位置不正确

  • 相关阅读:
    简化SpringBoot框架打包体积
    深究1.8版本HashMap源码
    一次面试题,将 字符串 保存在 Byte 数组中
    记一次linux磁盘清理
    Alibaba Cloud Toolkit 使用心得(IDEA版)
    Mybatis 一对多分页踩坑 对collection的分析
    MySQL中update修改数据与原数据相同会再次执行吗?
    与 MySQL 因“CST” 时区协商误解导致时间差了13 小时
    Druid数据源
    mybatis自动生成代码 mybatis-generator
  • 原文地址:https://www.cnblogs.com/littlechar/p/4338326.html
Copyright © 2020-2023  润新知