0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
函数的定义
- 函数包括库函数和自定义函数 。例如,scanf(),printf()函数是由C语言系统直接定义的,再编辑时可以直接调用使用,属于库函数;而有时我们需要使用一些有特定功能的函数,而这些函数是C语言系统中没有的,因此我们需要自己定义,这些自己定义的函数就属于自定义函数。C语言的函数在程序中必然是属于某一种数据类型,我们称之为函数类型。
函数组成
- 函数声明:函数声明指函数原型声明,只有函数名,函数类型,参数个数和类型,无函数体。一般放在主函数前,以分号结尾
- void start(int n);
- 函数定义:除上述外,去掉结尾分号,加函数体
- void start(int n)
- 函数体:函数体体现函数的实现过程,由一对大括号内的若干条语句组成,用于计算,或完成特定的工作,并用return语句返回运算的结果。
- 形参:必须是变量,用于接收实参传递过来的值
- 实参:可以是常量,变量或表达式
函数的一般形式及调用
函数类型 函数名(形式参数表)
{
函数实现过程
}
局部变量
- 迄今为止,在程序中使用的变量都定义在函数内部,它们的有效使用范围被局限于所在的函数内。因此主调函数只有通过参数传递,才能把实参数据传递给函数使;同样,形参的改变也不会影响到实参变量。这种变量的有效使用范围,最大程度保了各函数之间的独立性,避免函数之间相互干扰。
C语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限于所在的函数内部。形参是局部变量。
使用局部变量可以避免各个函数之间的变量相互干扰,当使用了同名的形参,且与相互函数实参变量同名时,由于分属不同函数,它们有各自不同的变量实体和使用范围,不会相互千扰。C语言的这个特性在结构化程序设计中非常有用。
除了作用于函数的局部变量外,C语言还允许定义作用于复合语句中的局部变量,其有效使用范围被局限于复合语句内,一般用作小范围内的临时变量。
全局变量
- 定义在函数外而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有的函数都起作用。
全局变量的定义格式与局部变量完全一致,只是定义位置不在函数内,它可以定义在程序的头部,也可以定义在两个函数的中间或程序尾部,只要在函数外部即可。
一般情况下把全局变量定义在程序的最前面,即第一个函数的前面。(由于全局变量和局部变量的作用范围不同,允许它们同名。当某函数的局部变量与全局变量同名时,在该函数中全局变量不起作用,而由局部变量起作用。对于其他不存在同名变量的函数,全局变量仍然有效。同样,当函数局部变量与复合语句的局部变量同名时,以复合语句为准。全局变量可以帮助解决函数多结果返回的问题,但全局变量更多地用于多函数间的全局数据表示。)
静态局部变量
- 在静态存储区中,除了全局变量外,还有一种特殊的局部变量一一静态局部变量。它存放在静态存储区,不会像普通局部变量那样因为函数调用结束而被系统回收,它的生存周期会持续到程序结束。由于存储单元被保留,一旦含有静态局部变量的函数被再次调用,则静态局部变量会被重新激活,上一次函数调用后的值仍然保存卷,可供本次调用继续使用。
函数类别
- void (),int (), double()
- 主要分为判断类型的函数和计算类型
易错点
- 在不返回结果的函数定义中,void不能省略;否则,函数类型被默认定义为int。
- 实参和形参要一一对应
- 静态变量赋初值只在函数第一次调用时起作用,若没有赋初值,系统将自动赋值0。
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 在这2周的学习过程中,我从一个c语言函数小白,逐渐加深了对函数的理解,直至能熟练运用函数去解决一些实际问题。在这其中最让我有感触的就是大作业。可以用一句话来表达我的内心:痛并快乐着吧,但痛是远大于快乐的。乐趣:主要是我希望可以把此次的小生学口算系统程序编写得像一个经典简洁地小游戏一样。
痛苦:在完成大作业地过程中,我花费了很多时间,感觉好像也掉了头发!!!!!但不可否认地是,正是这次大作业才大大提高了我对函数地熟练程度。
1.2.1 代码累计
2.综合作业——小学生口算系统
2.1 本次作业的函数关系图
3.函数功能及全局变量介绍
3.1 全局变量
3.2 void InitialInterface ();//向用户展示菜单
3.3 int InputLevel ();//用户选择年纪
3.4 int InputNumber ();//用户选择题目数量
3.5 void GetGradeExpression (int level, int number);//生成3个年纪的表达式
3.6 void end(int number, int right, int fault);//界面结算,输出用户的各种考试信息
void end2(int time);////界面结算,输出用户的各种考试信息
3.7 void praise();//在用户答对时,表扬用户
3.8 void Encourage();//在用户答错时,鼓励用户
4.运行结果截图,测试用例
一年级的题目
- 一位数加一位数的加法
- 整十数减整十数的减法
- 两位数减整十数的减法
- 10以内三个数连加
- 100以内连加连减混合运算
二年级的题目
- 1-9以内的表内乘除法
- 整十数加整十数的加法(进位的)
- 尾数是0三位数加法
- 整百数加减法(和超过一千的,退位的)
- 10以内除法加法混合运算
三年级的题目
- 一位数乘三位数
- 万以内的加减法
5. 调试碰到问题及解决办法
Q1:运行程序时,会连续一次性出现好几个表达式
A1:在某些地方少了break;。
Q2:在编写菜单界面时,有些时候‘/’,‘%’无法显示出来
A2:在程序中打出‘//’就可以显示‘/’,‘%’
Q3:不知道整型除整型怎么保留小数。
A3:将其中一个整型数据强制转化为double
Q4:在编写结束界面时,本来想都写在一个函数上,但是一个函数最多只可以调用3个参数。
A4:分成2个函数,连续运行。
6.大作业总结
-
起初要编写这个程序时,我毫无头绪。一直想着,怎么才能做好。然后发现这样想,好像没有用,所以我就打算先做出一个系统的框架,再慢慢优化。从框架做出来之后,我就觉得轻松很多。因为我可以从一个一个的小地方开始慢慢去优化。
-
编写过程注意事项:1.在代码复杂的情况下,务必创建一个清晰的思维导图 2.保证界面的友好 3.确定函数的先后顺序以及在程序中的位置
-
碰到的问题:1.一开始不知道如何将3个年级写在同一函数。 2.分母为0、减法不能出现负数的情况。 3. 在设计程序,写代码的能力有待提高