C博客作业03--函数
0.展示PTA总分(0----2)#
1.本章学习总结(2分)#
1.1 学习内容总结##
-
函数的定义
- 函数定义的一般形式为:
函数类型 函数名 (形式参数表)
{
函数实现过程
} - 函数首部由函数类型、函数名和形式参数(简称形参表)组成,位于函数定义的第一行。函数类型指函数结果返回的类型,一般与return语句中表达式的类型一致。形参表中的格式为
类型1 形参1,类型2 形参2,...,类型n 形参n 。函数首部后面不能加分号。 - 函数体体现函数的实现过程,由一对大括号内的若干条语句组成,用以计算或完成特定的工作。
- 函数定义的一般形式为:
-
函数的调用及声明
- 函数调用的一般形式为:函数名 (实际参数表) 实际参数表可以是常量、变量和表达式,通常出现两种情况:1.赋值语句,例如volume = cylinder ( radius , height ) ; 2.输出函数的实参,
例如printf ( " % f " , cylinder ( radius , height ) ) ; - 参数传递。参数由实参传递给形参,并且一一对应。形参必须是变量,而实参可以是常量、变量或表达式。
- 函数的声明。如果自定义函数被放在主函数的后面,就需要在函数调用前,加上函数声明,目的是说明函数的类型和参数的情况。一般格式为:函数类型 函数名 (形式参数表);
- 函数调用的一般形式为:函数名 (实际参数表) 实际参数表可以是常量、变量和表达式,通常出现两种情况:1.赋值语句,例如volume = cylinder ( radius , height ) ; 2.输出函数的实参,
-
不返回结果的函数
- 不返回结果的函数定义:
void 函数名 (形式参数表)
{
函数实现过程
}
void不能省略,否则函数类型被默认定义为Int。它的适用场合主要是把一些确定的、相对独立的程序功能封装成函数。
- 不返回结果的函数定义:
-
局部变量、全局变量、变量生存周期和静态局部变量
- 局部变量和全局变量。局部变量与全局变量同名时,局部变量有效,全局变量无效,局部变量优先,并不影响全局变量。局部变量作用范围局限于所在函数内,一般定义在函数或复合语句的开始处,全局变量定义在程序的最前面,全局变量作用于整个函数,用于多个函数的交流,但不能使用过多。
- 变量生存周期和静态局部变量。变量生存周期是指变量从定义开始分配存储单元,到运行结束存储单元被回收的整个过程。自动变量定义形式:auto 类型名 变量表;auto可以省略。变量储存分为动态储存区和静态储存区,静态储存区分为全局变量和静态局部变量。静态变量定义格式:static 类型名 变量表,静态变量赋初值只在函数第一次调用时起作用,若没有赋初值,系统将自动赋0,静态变量只能用于所定义函数,而不能用于其他函数。
1.2 本章学习体会及代码量学习体会##
1.2.1 学习体会###
- 通过对本章函数的学习,我发现通过自定义函数,可以把一个复杂的问题分解成一个一个小问题去解决,当所有小问题都解决了,回到主函数,相应的大问题也解决了,思路清晰,简单方便。通过学习,我最大的感受就是,要多多阅读并学习他人优秀的代码,总结并改正代码,取长补短,积累代码量,这样才有可能取得进步。
1.2.2 代码累计###
- 本次综合作业代码量198行。
2.综合作业(8分)#
题目:小学生口算表达式自动生成系统##
2.本次作业的函数关系图#
3.函数功能及全局变量介绍#
3.1.全局变量##
- right 表示对的题目数
- count 表示做的题目数
3.2.ListMenu()函数##
- 列出一个列表,供用户选择年级。
3.3.GetChoice()函数##
- 根据用户输入的序号,选择年级,进入题库。
3.4.FirstClass()函数,SecondClass()函数,ThirdClass()函数,JiaJianOperation(int number1,int number2,int op)函数,ThirdClassOperation(int number1,int number2,int op)函数##
- 开始生成题目,供用户做题,并判断用户做的对错。
3.5.BackMenu()函数##
- 用于是否结束练习,并统计正确率。
4.运行结果截图,测试用例。#
-
该测试数据是一年级十以内的加减法。
-
该测试数据是二年级100以内的加减法。
-
该测试数据是三年级两位数的乘法运算。
5. 调试碰到问题及解决办法##
- 1.刚开始不知道怎么算那个正确率,后来想到了全局变量,又想到了以前上课的时候老师讲的清屏函数system("cls");所以明白了正确率怎么算,把正确个数和题目总数,当成全局变量来看。
- 2.算正确率的时候,老是为零,后来发现right和count都是整型的,所以在right后面乘一个1.0就解决问题了。
- 3.在调试的时候,遇到了本来不应该跳的某个函数,结果却跳到了那个函数,看来半天,不知道怎么回事,最后静下心从头到尾读了一遍,发现了问题,原来是调用函数的时候写错了函数。
6.大作业总结#
- 第一次接触这种设计程序的大作业,刚开始一点思路都没有,都不知道怎么开头,然后看着那个小学生算法网站,看了看那里面的操作流程,然后用笔在纸上画了一下,也大概知道流程是什么样的了。然后逐步逐层的建立函数,用函数解决各个问题,比如出题问题,判断对错问题,是否继续练习问题。
- 这次大作业基本上算是很潦草的完成了,实现的算法功能很少,因为只用了一下午,第一次的时候写了很多功能,写完之后,代码大概有700多行,然后一运行,出现错误了,当时是真的崩溃,有种想砸电脑的冲动,大概原因还是时间太紧了吧,平时没有对C语言下很多功夫,一半的功夫都用到线代高数上了,可以说C语言只用了大概四分之一的功夫,这就导致了这次大作业的质量直线下降,说不上喜欢C语言,但也不讨厌,可能是比较喜欢数学,才愿意花时间在线代高数上的,但我们又是网络专业的,这样的话,我就是主次不分了,所以以后我会尽可能的把时间都挪到C语言上,把自己的专业课知识先学好。回到刚才的话题,第一次写了700多行后,出现错误,脑子一片混乱,不知道怎么改正,写完之后,时间也不够用再次写了,所以我就把很多功能都去掉了,减少了很多代码量,一直减到200行,然后程序可以运行了,但发现结果又有错的,当时就特别着急了,然后就赶紧修改了一下,但是修改的还是不完美,还是漏洞很多,好多测试点不能过,最后没办法了,就又重新写了一遍,然后运行,这时还是有些测试点过不了,这时我也没时间了,就只把那些对的测试点截了图。
- 碰到的问题就是刚开始写的时候,很多函数套来套去,很快就不知道哪跟哪了,迷失了方向,然后我就在纸上把他们先一一列出来,然后逐步把他们用程序写出来。还有问题就是刚开始不知道怎么开始函数运行和结束,后知道了开始于第一个函数,结束于嵌套运行的最后一个函数。
- 通过这次大作业的编写,我得到了教训,凡事都要早开始,不能挤到离结束没有多长时间才开始,那样的话质量很低,我也知道了对一个功能很多的程序来说,不能直接上去就写函数,应该先理清其中的思绪,再在纸上把他们列出来,大概表达出来,再去编写,那样才不会发生运行错误而不知道从何找起的情况,再一个是写代码要有耐心,不能急,不能燥,否则越急越燥,越是写不出来,也越找不出来错,思绪也会越来越乱,会造成一个恶性循环,所以写代码的时候要静下心来!!!