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

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

·函数的定义
·函数包括库函数和自定义函数
例如:scanf()、printf()...等为库函数;cylinder(),fact()...属于自定义函数。
·函数定义的一般形式:

·函数的首部
由函数类型、函数名和形式参数表组成。
函数类型指函数结果返回的类型,一般和return语句中的表达式类型一致。
格式为:类型1 形参1,类型2 形参2....
例如:int gcd(int x, int y)
若为void型则表示不用返回值,例如:void PrintFN(int m, int n)
注:在函数首部后面不能加分号
·函数体
由一对大括号内的若干条语句组成,用以计算完成特定的工作。
·函数的调用
来看看书本上的例题:

首先我们要进行函数声明,再来是函数调用,最后为函数定义。
首先C语言程序执行会先从main()函数开始,按顺序往下走,函数调用当遇到cylinder()函数调用时,main()函数也就是主调函数暂停执行,转而执行cylinder()函数。参数传递在进行cylinder()函数时所得出的结果会通过result来返回到main()函数中使之判断继续执行。
·实参与形参
·实参:主调函数的参数
实参可以是常量、变量和表达式,在上述例题中可知radius和height为实参
·形参:调用函数的参数
形参必须是变量,从而能够接受实参的值,其使用方法大致与普通变量一致
两者联系
形参和实参可同名也可不同名但必须一一对应,两者数量相同,类型尽量一致。
应用案例(利用函数来求输入数值number以内的全部素数)

·局部变量和全局变量
·局部变量
使用范围:所在的函数内(形参即为)
优点:确保了各函数之间的独立性,避免函数之间相互干扰
缺点:自由度较小,不同函数之间的数据交流较不方便。
·全局变量
使用范围:从定义开始到程序所在文件结束,即所有函数都起作用。
优点:解决多个函数间的变量共用。
缺点:过多的使用全局变量会使得各函数间相互干扰
注:在局部中,局部变量优先于全局变量
来看个例子更加了解局部变量和全局变量

此时输入结果为4 7,我们可以知道在局部变量中,局部变量优先于全局变量
·变量生存周期和静态局部变量
变量生存周期:
(1)对于局部量来说
函数调用时,系统自动为其局部变量分配存储单元。一旦函数调用结束,所有分配的储存单元将会被收回。
自动变量定义:
auto 类型名 变量表(auto可以省略)
即我们定义的局部变量都是自动变量。
(2)对于全局变量来说
它的生存周期为整个程序执行周期。
静态变量:
在静态储存区还具有静态局部变量。它的生存周期会持续到程序结束,一旦被再次调用,则静态局部变量会被重新激活。
静态变量定义格式:
static 类型名 变量表

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

1.2.1 学习体会

我认为函数这一章主要要弄懂关于数值传递,以及建立新的函数声明,明白如何去调用函数这几个方面吧。在pta上的作业我觉得函数要比循环的简单,循环的题目有时候我一个晚上都写不出一道题来...害...emmmm,反正再怎么样,我都会保持我当初的那一份初心坚持下去的。

1.2.2 代码累计

函数这一部分:997

2.综合作业

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

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

·InputTips():进行友好提示
·RandomNumbers():用于生成随机数和随机符号并算出正确答案,并且判断数据是否正确,以及其次数。
·CorrectTimes():用于判断用户答案是否正确

3.1.全局变量

·grade:关于用户的年级
·level:用户所需要的难度

3.2.

·InputTips():进行友好提示

3.3

·RandomNumbers():用于生成随机数和随机符号并算出正确答案,并且判断数据是否正确,以及其次数。
利用switch()嵌套结构来进行对于不同年级不同难度进行选择,并输出不同的随机数和随机符号
对于答案是否正确给出判断,并且给出温馨提示。

3.4

·CorrectTimes():
根据不同的答题正确次数进行温馨提示使界面友好。

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

一年级:




二年级:



三年级:


5. 调试碰到问题及解决办法

问题1:
关于减法:在随机数生成中经常会出现前者数字小于后者数字,即所得出了负数,而小学生是没有学习负数这一门功课的。
初步想法:加入if语句,若a<b则引入temp使两者交换,但是在三数连减中我并不知道该如何实现。
问题2:
关于随机数的范围:我一直认为若使得随机数范围在2~4之间代码应该这么写:i=2+rand()%4。结果不尽人意,于是我上网查了一下,为i=rand()%2+2。按照网上的解释,大致内容为:

问题3:
关于如何把k[i]变为一个可读取的符号:
我尝试直接把k[i]放入数值中间进行计算正确答案,很明显,这是错误的。之后我就把k[i]可能为什么符号列出来了。

6.大作业总结

说实话,这次作业我自己写得很不满意也写得很崩溃。很多我想表达出来的内容我都没有办法去表达出来。调试出来也是漏洞百出,由于自己的惰性,并没有提早去写它所以没能自己慢慢的一点点去调试去完善。从而让这个系统更完整。对于现在的我来说,这种综合性作业确实具有挑战性,我也会在这次提交之后利用课余时间去更好的完善它。

posted @ 2019-11-03 22:23  林浈  阅读(265)  评论(2编辑  收藏  举报