C语言博客作业03--函数

展示PTA总分

  • 函数

1.本章学习总结

1.1 学习内容总结

  • 函数结构

    • 函数声明:函数声明 “函数类型 函数名(形参);”

      :函数声明后面要记得加;,调用时则不用

    • 函数调用

    • 函数定义:1.设置局部变量 2.进行操作 3.通过函数类型判断是够需要返回return

  • 函数类型

    voidintdouble:分别为 不返回结果省略return,返回一个整型,返回一个双精度浮点数。

    • 关于不返回结果的函数类型void
    函数声明;
        函数定义:
       (函数调用) void 函数名(形参)
    {   
        //定义内容 例如:
            printf("Hello,World");//此大括号内不需要进行return。
    }
    
    • 关于int double返回一个数的类型

      函数声明;
          函数定义:
       (函数调用)  int 函数名(形参)
      {
          //定义内容 例如:
          int ret,a,b;
          if(a>b) ret=a;
          else ret=b;
          return ret;
          //返回ret 说明这个函数的调用结果会输出ret值
      }
      //其中 返回的ret值是int类型的 所以定义函数类型也要是 int 类型的
      /*如果 返回的 ret值是int类型 但是定义的函数是 double类型 则返回输出的数会被C语言强制
      转换为double类型,如果不提前想好,定义函数的类型和返回类型是否相同就很容易出错*/
              
      
  • 变量类型

    • 全局变量:可以作用于整个函数范围内

    • 局部变量函数内/复合语句:例如:

      if(int i)
          //这里的i只作用在if语句中 
      

      :局部变量和全局变量互不影响。但语句中的局部变量不能与函数内的全局部变量名称相同,否则 语句中定义的局部变量则失效,同时一个语句中的局部变量也不能重复定义,否则会出错。

      
      
  • 变量类型

    • 全局变量:可以作用于整个函数范围内

    • 局部变量函数内/复合语句:例如:

      if(int i)
          //这里的i只作用在if语句中 
      

      :语句中的局部变量不能与函数内的全局部变量名称相同,否则 语句中定义的局部变量则失效,同时一个语句中的局部变量也不能重复定义,否则会出错。

    • 静态变量:只作用于定义的函数内,与主函数中的变量是两个不一样空间的数。

      //例如:
      int main()
      {
          int a=5,b=6;
          swap(a,b)
          printf("a=%d,b=%d",a,b);
      }
      void swap(int a,int b)
      {
          int temp;
          temp=a;
          a=b;
          b=temp;
      }
      /*它并不能交换a,b的值,虽然他们的变量名字都一样,但是是两个空间的东西,如果想交换,需要继引入指针*/
      
  • 函数传递

    • 函数传递时不管有没有形参 都要在末尾加()

      //例如
      void cheer()
      {
          printf("cheer");
      }
      int main()
      {
          cheer();
          //如果是cheer 则函数不会被传递
      }
      
  • 参数传递

    • 形参和实参:声明时是形参,调用时是实参

      //例如
      int abc(int a)//形参 int a
      {
          int ret = a;
          return ret;
      }
      int main()
      {
          abc(5)//调用时 abc(实参)
      }
      
  • 函数调用

    • 函数调用就是 在主函数中遇到定义函数 则主函数停止 进入定义函数 操作完后又返回主函数

1.2 本周学习体会及代码量学习体会

1.2.1 学习体会

本章学习了函数有关知识,老师上课讲的有点快,我没有做好预习,导致跟不上老师进度,这次的pta也很松懈,因为要面临检查还抄了别人的pta,认识到错误后,我重新自学函数后,重新将pta的题集自己独立刷一遍,才开始写博客作业,每一次的博客作业对于我来说都是一次学习的总结,如果连学习都没有也算不上总结,所以我明白了,预习一定要做好,pta一定要自己做,上课也不能犯困。

这章内容我我觉得首先要分清函数声明和定义

其次就是三种变量的关系 不能搞混 特别是全局变量和静态局部变量。


我认识到错误了~~~给你小心心~

1.2.2 代码累计

周次 代码量(行)
9 453
10 679
合计 1132

代码量没有达到开学前预期的效果,没有做到一天一题,几乎都是堆在一起做的,希望新的一周能做到一天一题

综合作业

题目:小学生口算表达式自动生成系统

功能要求:

  • 完成1-3年口算题自动出题系统
  • 注意每个年级运算数要求,运算数和运算符要随机生成
  • 用户每选择一个难度级别后必须输入题目数量,能统计用户的正确率。用户每算一题,若错误,给出正确答案。 用户中途退出,不继续做题,需要有个提示操作可中途退出。
    注意
    • 软件界面必须友好,多加文字提示,能让用户自己当前做什么,接下来怎么做,每步操作可以退 到主菜单界面。
      -注意异常数据处理,如除0错误、不合法数据、临界数据,系统保证运行时候不崩溃。
      -注意函数封装,不管是几位数的加减乘除运算,相同功能的代码应该都封装都一函数,通过参数传递实现代码覆盖。也可以考虑数据输入、输出等函数封装,尽量不要把代码都放main中。各种异常情况也可以单独封装函数处理,让程序的扩展性更强。
  • 扩展功能:
    可以设置答题时间,用户超过答题时间,提示不能继续做题,重新选抽题。请查阅C的时间函数。
    扩展难度级别,比如出现2步加减乘除,然后乘除优先计算。比如2+3*4运算

2.本次作业的函数关系图

我太喜欢粉色的 我觉得我上辈子就是一直粉红猪

3.函数的功能及全局变量介绍

其实注释已经写得很清楚了,就不做多余的解释了

  • 主函数

3.1 全局变量

  • int类型
  • grade和total分别记录年级和题量
  • select 用来存储是否继续答题的函数 是则函数返回1,否则函数返回0,结束循环 !

3.2 ListMenu()函数

3.3 等级函数

3.4 题量函数

3.5 题目函数(同时计算正答率)


3.6 一年级函数(计算过程)


3.7 二年级函数(计算过程)



3.8 三年级函数(计算过程)



3.9 判断函数(判断答案是否正确)

3.10 选择函数 (判断是否要继续)

4.运行结果截图,测试用例。




5.调试遇到的问题及解决方法

Q1:出现scanf("%d\n") 的情况 导致输入的时候出现异常
A1:一般scanf不需要换行符 因为对于scanf来说 换行符对于scanf来说是意味着结束输入。
Q2:难度题数情况做不完,例如每个年级好像都少了几种题型
A2:这个问题目前我的解决方案就是设置了好多个变量好多种随机数和字符数组来列出每种情况,最后来判断结果,但是发现还是会漏掉
一下情况,有点崩溃,但是暂时也想不清楚要如何解决这个问题。
Q3:出现除数为零的情况。
A3:除数为零的情况,我目前是用if来判断如果随机数生成的除数是0,则将结果的除数替换成另外一个数,后来发现它输出题目的时候还是会有除数为零的情况,但是答案是已经变换了除数后的,导致题目答案不一致,这个bug我目前还没有进行修改....因为年级太多和情况太多,时间限制,没有进行一一修改,我认为应该在题目输出的时候也要进行修改。

6.大作业总结

思路

  • 菜单展示
  • 输入年级和题量
  • 在题目函数中 我定义了三个年级的函数 在输出题目之前记录初始时间,输出题目之后记录结束时间,最后在判断函数中进行判断是否超时和答案是否确定
    • 每个年级的题型,我几乎是一种一种列出来的,例如一年级 我通过设置一个随机数n来判断一年级有几种情况,再通过switch来输出这几种题目,再运用字符数组来控制 +-*/ ,然后再嵌套switch来记录result 返回result
    • 再答完题目之后进行正确率的计算,我是利用每答对一题令count对于1,然后返回count到题目函数中进行sum+=count来计算正确题数,count要每次都初始化为0,否则无法计算出正确的正答率。
  • 由于我在主函数中设置的是循环之后才进行各种操作,是为了每次答题结束当用户选择结束则退出循环,否则重新输出菜单,所以后面我加入了选择函数来判断是否该输出菜单!
posted @ 2019-11-03 22:23  雪梨wink  阅读(302)  评论(1编辑  收藏  举报