第三次作业

  • 作业要求地址:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166
  • Github地址:https://github.com/zhong666/test
  • 一、时间计划与实际使用时间

    PSP2.1

    Personal Software Process Stages

    Time Senior Student

    Time

    Planning

    计划

    5

    10

    · Estimate

    估计这个任务需要多少时间

    10

    5

    Development

    开发

    20

    40

    · Analysis

    需求分析 (包括学习新技术)

    5

    6

    · Design Spec

    生成设计文档

    5

    7

    · Design Review

    设计复审

    9

    6

    · Coding Standard

    代码规范

    4

    4

    · Design

    具体设计

    10

    12

    · Coding

    具体编码

    36

    21

    · Code Review

    代码复审

    7

    9

    · Test

    测试(自我测试,修改代码,提交修改)

    15

    30

    Reporting

    报告

     5

     6

    ·

    测试报告

     5

     6

    ·

    计算工作量

    3

    2

    ·

    并提出过程改进计划

    4

    3

    二、题目要求

      任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数。 

  • 三、代码提交
    #include <stdio.h>
    #include <stdlib.h>
    
    char token; /*全局标志变量*/
    
    /*递归调用的函数原型*/
    int exp( void );
    int term( void );
    int factor( void );
    
    void error( void ) /*报告出错信息的函数*/
    {
        fprintf( stderr, "错误\n");
        exit( 1 );
    }
    
    void match( char expectedToken ) /*对当前的标志进行匹配*/
    {
        if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/
        else error(); /*匹配不成功,报告错误*/
    }
    void Message(void)
    {
        printf("================================================================\n");
        printf("*               递归实现的四则运算表达式求值程序               *\n");
        printf("****************************************************************\n");
        printf("使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n");
        printf("*****************************************************************\n\n");
    }
    main()
    {
        int result;  /*运算的结果*/
        Message();
        printf(" >> 请输入表达式: ");
        token = getchar(); /*载入第一个符号*/
        
        result = exp(); /*进行计算*/
        if( token == '\n' ) /* 是否一行结束 */
            printf( " >> 表达式的计算结果为 : %d\n", result );
        else error(); /* 出现了例外的字符 */
        puts("\n\n                  请按任意键退出 ...\n");
        getch();
        return 0;
    }
    
    int exp( void )
    {
        int temp = term(); /*计算比加减运算优先级别高的部分*/
        while(( token == '+' ) || ( token == '-' ))
            switch( token ) {
            case '+': match('+');     /*加法*/
                  temp += term();
                  break;
            case '-': match('-');
                  temp -= term(); /*减法*/
                  break;
            }
        return temp;
    }
    
    int term( void )
    {
        int div; /*除数*/
        int temp = factor();   /*计算比乘除运算优先级别高的部分*/
        while(( token == '*' ) || ( token == '/' ))
            switch( token ) {
            case '*': match('*');  /*乘法*/
                  temp *= factor();
                  break;
            case '/': match('/');   /*除法*/
                  div = factor();
                  if( div == 0 ) /*需要判断除数是否为0*/
                  {
                      fprintf( stderr, "除数为0.\n" );
                      exit(1);
                  }
                  temp /= div; 
                  break;
            }
        return temp;
    }
    
    int factor( void )
    {
        int temp; 
        if( token == '(' ) /*带有括号的运算*/
        {
            match( '(' );
            temp = exp();
            match(')');
        }
        else if ( isdigit( token )) /*实际的数字*/
        {
            ungetc( token, stdin ); /*将读入的字符退还给输入流*/
            scanf( "%d", &temp ); /*读出数字*/
            token = getchar();  /*读出当前的标志*/
        }
        else error(); /*不是括号也不是数字*/
        return temp;
    }
    

      

    四、需求分析

    用户控制生成题目的个数,并能够自动随机生成加减乘除四则运算,运算包括整数的运算,答完题后生出正确答案,并在最后能统计答题正确数与正确率。

    五、设计

    开发工具:Visio c++ 6.0

    编程语言:C语言

  • 、遇到的问题与解决
  • c语言的学习已经是在大一的时候了,很久没有使用这种语言了,有些生疏了,要多使用让自己回忆起来
posted @ 2018-10-11 15:52  钟金晖  阅读(255)  评论(1编辑  收藏  举报