C语言博客作业03--函数
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
- 函数的声明:在main函数之前进行函数声明,如int abc(int a); (分号切记不能漏),其中‘int’表示函数返回值的类型是int,‘()’ 可传入参数,当不声明 ‘()’中内容时,不可传入参数。
此外,当类型为void时无返回值,但可以返回函数(即return;)。 - 函数的定义:通常于main函数结尾进行函数定义,如int abc(int a){ (语句) },(切记这里大括号外均无‘;’)。
- 全局变量:在程序开头main定义的变量,生存周期为程序开始到结束,其变量在所有函数中都能使用。
- 局部变量:在某一函数中定义的变量,生存周期仅在这一函数中,一旦离开此函数,变量也就消失,再一次调用函数时该变量不会保留初值,仅在此函数中使用。
- 静态局部变量:在局部变量的基础上,当再一次调用该函数时,静态变量会保留原先的值并在本次函数调用中仍能使用。
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 也不难吧,只是把主函数语句放到其他函数再进行调用,只不过多了一些函数的返回、如何调用等等的判断吧。
1.2.2 代码累计
- 如图;最后一个函数展开时为427行
题目:小学生口算表达式自动生成系统
暂无设计扩展功能。
函数关系图如下:
3.函数功能及全局变量介绍
3.1.全局变量
- 如图:
- grade跟number为用户输入的年级以及题目数量。
- count为出题过程中判断是否达到出题数量。
- right为用户答对的题目数量,计数正确率用。
3.2.ListMenu()函数
- 我直接在菜单函数中读取用户输入的年级跟题数,以便用户返回菜单重新开始时读取参数。
3.3 grade1()函数
- 功能:根据要求出题。
- 思路:通过随机数挑选题目类型,并在相应的题目类型下随机相应的运算数后调用适当的函数。
3.4 grade2()函数
- 功能:根据要求出题。
- 思路:同grade1()函数。
3.5 grade3()函数
- 功能:根据要求出题,
- 思路:同grade1()函数。
3.6 plus();times();reduce();devide();函数
plus();
times();
reduce();
devide();
- 功能:对传入的参数进行对应的加、减、乘、除运算。
- 思路:四者整体一样,即:
1.输出算式
2.读取用户答案
3.判断正误
4.输出话语 - 其中reduce我添加了判断答案若为负数,则将减数于被减数换位。
- devide我添加了判断答案若有余数,则需输入余数,若无,则无需输入。
3.7 Threenumbers()函数
- 功能:实现三个数的所有混合运算
- 思路:传入进行运算的三个数跟对应的题型(1:三个数连加。2:加减混合。3:一位数的四则运算。)
- 若是题型1,仅有加法
- 若是题型2,通过随机数跟switch函数随机运算符。
- 若是题型3,通过随机数先随机乘除再随机加减。
3.8 Accuracy_rate()函数
- 功能:计算正确率。
3.9 Rightsentence();Wrongsentence();函数
- 功能:答题完输出鼓励的话
4.运行结果截图,测试用例。
一年级:
二年级:
三年级:
5. 调试碰到问题及解决办法
1.问题:遇到三个数混合运算时,仅通过我的四个运算函数无法实现。办法:我又写了一个专门进行三个数混合运算的函数来实现该功能。
2.问题:返回主菜单重新开始做题发现正确率大于1。办法:忘了重新定义right=0;在ListMenu();中添加right=0;。
3.问题:1年级遇到减法时出现了负数。办法:在减法函数添加了对减数和被减数大小的判断。
6.大作业总结
- 这个程序刚开始毫无头绪,只写了简单的菜单以及相应的输入等等,对于各个函数是否需要返回值和如何定义都是边写边解决的,这也导致我的代码显得较粗糙。
- 对于要求的各个题型,绝大部分都能实现,但有的题型并不是很理想。
- 从这次综合作业中,我觉得在以后编写代码过程中需先要有个清晰的思路,不妨拿笔来写一写,这也在编写代码过程定会更加清楚,简单。也会使得代码易于修改阅读。