1. 本章学习总结

1.1 思维导图

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

1.2.1 学习体会

  1. 这几周学习了函数,题目还是原样只是多了种做题的方法。一开始看书感觉声明,定义啊,还有全局变量那些,文绉绉的,都看不太下去,还不如直接做题。但是在做课堂派时,发现没有看书除了简答题填不出来,连选择题都可能会做错。可能实践都需要理论支撑吧。几周学习下来觉得掌握的还是可以,可以分得清不同变量的作用范围和生存周期,函数返回值该如何设定,函数该如何设计。

1.2.2 代码累计

2. PTA总分

2.1 截图PTA中函数题目集的排名得分

2.2 我的总分:145

3. PTA实验作业

3.1 PTA题目1

  1. 6-8 使用函数验证哥德巴赫猜想
  2. 哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。
  3. 其中函数prime当用户传入参数p为素数时返回1,否则返回0
  4. 函数Goldbach按照格式“n=p+q”输出n的素数分解,其中pq均为素数。
  5. 又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

3.1.1 算法分析

  • 判断素数函数
  • if p<2
    • 返回0
  • else
    • 定义i
    • for i=2 to i<p do
      • if p%i==0 then

        • 返回0
        • end if

          -返回1
    • end for
  • 输出哥德巴赫数函数
  • 定义i
  • for i=2 to i<=n/2 do
    • if prime(i)&&prime(n-i) then

      • 输出 n=i+(n-i)
      • break
    • end if
  • end for

3.1.2 代码截图

3.1.3 测试数据

测试数据1



测试数据2



测试数据3

3.1.4 PTA提交列表及说明

  1. Q1:编译错误???
  2. A1:觉得编译错误实在很不应该,在dev试过在copy过去都能错误掉,,,
  3. Q2:部分正确
  4. A2:一开始没有用break结束if语句导致连一个数有多种方法输出和题目要求不符,后来加了个break,就可以了

4.大作业

4.1函数关系图

4.2.函数功能介绍

1.函数1

void Screen();

int Menu(int n);

功能:生成界面让整个游戏看起来友好,比较有体验感

  1. void Screen()
  2. {
  3. printf("----------------------------------------------\n");
  4. printf(" 欢迎来到我们的游戏 ^_^ \n");
  5. printf(" 输入1进来游戏菜单,输入0退出游戏 \n");
  6. }
  7. int Menu(int n)
  8. {
  9. scanf("%d",&n);
  10. while(n!=0&&n!=1)
  11. {
  12. printf("操作错误哦,重新再输入吧\n");
  13. scanf("%d",&n);
  14. }//让输入是0或1
  15. if(n==1)
  16. {
  17. printf(" 菜单 \n");
  18. printf(" 1.等级1:1位数的一步加减乘除计算 \n");
  19. printf(" 2.等级2:2位数的2步加减运算 \n");
  20. printf(" 3.等级3:3位数的2步加减运算 \n");
  21. printf(" 清选择等级进入游戏吧 \n");
  22. }
  23. else
  24. {
  25. printf("希望你玩得愉快,下次再来哦");
  26. exit(0);
  27. }
  28. }

2.函数2

void LevelChoose();

void TitieNumber(int n);

功能:等级选择,然后这个等级选择将会是后续游戏的起点,并且在选择等级后让用户输入想做的题数

  1. void LevelChoose()
  2. {
  3. scanf("%d",&level);
  4. while(level!=1&&level!=2&&level!=3)
  5. {
  6. printf("你选择的等级不在我们的范围内,清重新输入哦\n");
  7. scanf("%d",&level);
  8. }//确保选择的等级在范围内
  9. TitieNumber(level);//调用TitieNumber函数,实参为level传入到该函数中作为输出
  10. }
  11. void TitieNumber(int n)
  12. {
  13. printf("欢迎来到%d级的游戏,清选择想做的题目数量:\n",n);
  14. scanf("%d",&number);
  15. }

函数3

void Number();

void Operation();

功能:利用srand()函数随机生成数字,运算符,来组成算式供给用户做题,并且各个等级不同

  1. void Number()
  2. {
  3. switch(level)
  4. {
  5. case 1:
  6. srand(time(NULL));
  7. num1=rand()%10;
  8. num2=rand()%10;
  9. break;
  10. case 2:
  11. srand(time(NULL));
  12. num1=rand()%100;
  13. num2=rand()%100;
  14. num3=rand()%100;
  15. break;
  16. case 3:
  17. srand(time(NULL));
  18. num1=rand()%1000;
  19. num2=rand()%1000;
  20. num3=rand()%1000;
  21. break;
  22. }
  23. }
  24. void Operation()
  25. {
  26. int operation_1,operation_2;
  27. srand(time(NULL));
  28. operation_1=rand()%4;
  29. operation_2=rand()%2;
  30. if(level==1)
  31. {
  32. switch(operation_1)
  33. {
  34. case 0:ch1='+';break;
  35. case 1:ch1='-';break;
  36. case 2:ch1='*';break;
  37. case 3:ch1='/';break;
  38. }
  39. }
  40. else
  41. {
  42. switch(operation_2)
  43. {
  44. case 0:ch2='+';ch3='+';break;
  45. case 1:ch2='-';ch3='-';break;
  46. }
  47. }
  48. }

函数4

void GameBegin();

double Gameresult();

功能:游戏开始了,根据选择的等级随机生成题目,并且调用Gameresult()函数来判断对错,并且统计正确和错误题数

  1. void GameBegin()
  2. {
  3. int response;
  4. if(level==1)
  5. {
  6. printf("你的题目是%.0f %c %.0f =\n",num1,ch1,num2);
  7. }
  8. else if(level==2)
  9. {
  10. printf("你的题目是%.0f %c %.0f %c %.0f =\n",num1,ch2,num2,ch3,num3);
  11. }
  12. else
  13. {
  14. printf("你的题目是%.0f %c %.0f %c %.0f =\n",num1,ch2,num2,ch3,num3);
  15. }
  16. scanf("%d",&response);
  17. if(response-Gameresult()<0.00001)//调用Gameresult()函数来判断对错
  18. {
  19. printf("太棒了,你做对啦\n\n");
  20. printf("你还想继续做题吗?是的话选1,不继续按任意键哦\n\n");
  21. right++;
  22. }
  23. else
  24. {
  25. printf("啊哦,做错了呢\n\n");
  26. printf("正确答案是%d\n\n",Gameresult());
  27. printf("别气馁,再来一题吗?是的话选1,不继续按任意键哦\n\n");
  28. wrong++;
  29. }
  30. int n;
  31. scanf("%d",&n);
  32. printf("\n");
  33. if(n!=1) //如果用户想提前退出按任意键即可
  34. {
  35. printf("希望你玩得愉快,下次再来哦");
  36. exit(0);
  37. }
  38. if(right+wrong>number)//如果用户做的题数超过了一开始输入的题数给出提示语
  39. {
  40. printf("你的做题数目到了呢\n");
  41. Accuracy();
  42. exit(0);
  43. }
  44. }
  45. double Gameresult()
  46. {
  47. double result;
  48. switch(ch1)//j一级难度的一步运算i
  49. {
  50. case '+':result=num1+num2;break;
  51. case '-':result=num1-num2;break;
  52. case '*':result=num1*num2;break;
  53. case '/':result=num1/num2;break;
  54. }
  55. switch(ch2)//二,三级难度的两步运算
  56. {
  57. case '+':result=num1+num2;break;
  58. case '-':result=num1-num2;break;
  59. }
  60. switch(ch3)
  61. {
  62. case '+':result=result+num3;break;
  63. case '-':result=result-num3;break;
  64. }
  65. return result;
  66. }

函数4

void Accuracy();

功能:根据之前统计的正确题数和错误题数计算正确率,正确率大于百分之75才输出正确率

  1. void Accuracy()
  2. {
  3. if(right/(right+wrong)>0.75)
  4. {
  5. printf("你的正确率有%d%%呢\n欢迎下次再来玩游戏呀\n",100*right/(right+wrong));
  6. }
  7. else
  8. {
  9. printf("你的正确率有点低啊,不过没关系,多加练习\n");
  10. }
  11. }

4.3 运行结果截图

测试结果1

测试结果2

测试结果3

测试结果4

4.4 调试碰到问题及解决办法

  1. Q1:一开始值的传递想用函数调用,没有想到全局变量,然后整个代码的思路都乱七八糟的
  2. A1:在大佬的提醒下,想到了还可以用全局变量,就不用函数调用来传值了
  3. Q2:在随机产生运算符这里愣了一下
  4. A2:想用数组解决来着,但是运算符也不多,于是用来switch
  5. Q3:在测试数据时,发现除法像5/2这种情况就会出错,因为一开始定义的随机数都是int
  6. A3:于是把它们都改成了double型,并且在判断是否正确时,让它们的误差在一定范围里是正确的

4.5 大作业总结

  • 我的编写过程

    • 先输出个界面让整个游戏比较友好
    • 进入主题,选择等级,随机得到算式
    • 然后判断用户输入的数是否正确
    • 这是大概的思路,然后在函数里面完善各个分支
  • 遇到的问题
    • 值的传递卡住了,后来用了全局变量
    • 代码量一大,有的这个地方错了改一下,另一个相对的地方会忘记改,老是编译错误
    • 产生随机数这个函数不常用,有些不熟悉,只好靠百度了
    • 直接要退出游戏的话,原本想用return 0;的,后来我的函数返回型都是void,就用了exit(0);来退出游戏
    • 整个游戏的代码打了挺久的,都是bug

C博客作业03--函数的更多相关文章

  1. C博客作业03——函数

    0.展示PTA总分 截图展示: 1.本章学习总结 1.1学习内容总结 (a)函数的定义 1)函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种,scanf(),printf()等为库函数 ...

  2. C博客作业03—函数

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...

  3. DS博客作业03——栈和队列

    1.本周学习总结 谈谈你对栈和队列结构的认识及学习体会. 栈和队列的本质就是线性表.所以,相应的栈跟队列都有两种存储结构:顺序存储结构.链式存储结构. 栈的特点是后进先出,根据栈时进时出的规则,出栈的 ...

  4. DS博客作业03—栈和队列

    1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...

  5. C语言I博客作业03

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...

  6. C语言1博客作业03

    这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 (https://edu.cnblogs.com) 我在这个课程的目标是 掌握函数运算 我在这个作业哪个具体方面帮助实现目标 编译一些基本生 ...

  7. c语言l博客作业03

    问题 答案 这个作业属于哪个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8727 我在这 ...

  8. C语言I 博客作业03

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 作业要求 我在这个课程的目标是 掌握关系运算.if-else语句.格式化输入语句scanf(),以及常用的数学库函数 这个作业在那个具体方 ...

  9. C语言Ⅰ博客作业03

    一. 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8718 我在这个课 ...

  10. xc语言l博客作业03

    问题 答案 这个作业属于那个课程 c语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/8719 我在 ...

随机推荐

  1. vue PC端项目中解决userinfo问题

    在vue2 中用脚手架建立的项目,后端提供接口获取数据.在公司做第一个项目的时候不清楚公司里的对接流程,结果后续代码被一个接口整的乱七八糟,这个接口是获取用户信息的接口——'usre/info'. 如 ...

  2. (63)Wangdao.com第十天_预处理、预解析_函数 上下文对象、参数列表对象

    预解析.预处理 1. 在全局代码执行之前,js 引擎 就会创建一个栈来存储管理所有的 执行上下文对象 2. 在 全局执行上下文 window 确定以后,进行压栈 3. 在 函数执行上下文对象 确定以后 ...

  3. [LeetCode] Short Encoding of Words 单词集的短编码

    Given a list of words, we may encode it by writing a reference string S and a list of indexes A. For ...

  4. 前端性能优化 —— reflow(回流)和repaint(重绘)

    简要:整个在浏览器的渲染过程中(页面初始化,用户行为改变界面样式,动画改变界面样式等)reflow(回流)和repaint(重绘) 会大大影响web性能,尤其是手机页面.因此我们在页面设计的时候要尽量 ...

  5. tp 5.0 mysql 事物

    mysql  默认 MyISAM存储引擎,不支持事物处理,InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多 ...

  6. CUDA相关问题

    之前装了GPU驱动后,再装了CUDA 9.0,再装了cuDNN,并且对样例mnistCUDNN进行执行,显示“Test passed!"通过.但是倒忘了有没有测试CUDA是否安装成功.驱动也 ...

  7. Linux命令行抓包及包解析工具tshark(wireshark)使用实例解析

    在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析. 最近才发现,原来wire ...

  8. cadence单一原理图库的设计

  9. static和extern的用法小结

    以前写程序是,基本不管static和extern,一个工程文件也只有一个c文件.今天尝试用多个文件来写,自然就涉及到这两个关键词的使用,自己查了些资料,并且做了些实验,总结如下. extern的用法 ...

  10. 织梦手机站下一篇变上一篇而且还出错Request Error!

    最新的织梦dedecms程序手机版下一篇变上一篇而且还出错Request Error!,这是因为官方写错了一个地方 打开 /include/arc.archives.class.php 找到 $mli ...