C博客作业03--函数
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业03--函数 |
| 这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
| 姓名 | 韩龙飞 |
0.展示PTA总分
1.本章学习总结
1.1 函数定义、调用、声明
1.函数定义
函数定义的一般形式:
函数类型 函数名 (形参)/*函数首部*/
{
函数内容 /*函数体*/
}
①函数首部
函数首部由函数类型,函数名,形参组成。函数名需要有一个合法标识符表示。函数类型是函数结果返回类型,应于return语句中表达式类型一致。若没有定义函数类型,则默认为int类型
②函数体
函数体由若干条语句组成,用以完成特定工作。
2.函数调用
调用形式为:
.....
函数名(实参);
.....
当在主函数执行语句时遇到函数,则先跳转执行函数中的内容。
参数传递
①实参:主调函数中的参数,可以将其值传递给形参;实参可以是常量,变量,表达式。
②形参与普通变量效果类似,可接受实参的值。形参和实参必须一一对应
3.函数结果返回
return作用:结束函数的运行,return之后的语句不再执行;带着表达式的值返回主调函数且return语句一次只能返回一个值。
在void类型的函数中,如果不写return语句,当函数中所以语句都执行完了以后,遇到最后的大括号会自动返回主调函数。
1.2 全局、局部变量、静态局部变量
全局变量:从定义位置开始有效,一直到程序结束,当一个变量需要传递到多个函数中时使用,可以解决单个变量在多个函数之间的传递和返回多个结果的问题。
局部变量:只在定义变量的函数起作用,函数调用时有效,函数调用结束时就消亡,减少不必要的干扰。
静态局部变量:从被调用开始一直作用到程序结束,可以保留上一次函数调用后的值。
※注意
1.局部变量和全局变量的变量名可以相同,但所表达出的效果不一样。
2.静态变量若没有赋值则默认为零。
1.3 C数据类型及注意点
c基本数据类型
类别 | 名称 | 类型名 | 数据长度 | 取值范围 |
---|---|---|---|---|
整型 | 整型 | int | 32位 | -231~231-1 |
整型 | 短整型 | short | 16位 | -215~215-1 |
整型 | 长整型 | long | 32位 | -231~231-1 |
整型 | 无符号整型 | unsigned | 32位 | 0~2^32-1 |
整型 | 无符号短整型 | unsigned short | 16位 | 0~2^16-1 |
整型 | 无符号长整形 | unsigned long | 32位 | 0~2^32-1 |
字符型 | 字符型 | char | 8位 | 0~255 |
浮点型 | 单精度浮点型 | float | 32位 | 10-38~1038 |
浮点型 | 双精度浮点型 | double | 64位 | 10-308~10308 |
※注意 | ||||
若数据长度超过类型规定范围,则会输出乱数。 |
1.4 C运算符
运算符种类 | 运算符 | 结合方向 | 优先级 |
---|---|---|---|
逻辑运算符 | ! | 右结合 | 最高 |
算术运算符 | ++ -- + - | 右结合 | ↑ |
算术运算符 | * / % | 左结合 | ↑ |
算术运算符 | + - | 左结合 | ↑ |
关系运算符 | < <= > >= | 左结合 | ↑ |
关系运算符 | == != | 左结合 | ↑ |
逻辑运算符 | && | 左结合 | ↑ |
逻辑运算符 | \\ | 左结合 | ↑ |
条件表达式 | ?: | 左结合 | ↑ |
赋值运算符 | = += -= *= /= %= | 右结合 | ↑ |
逗号运算符 | , | 左结合 | 最低 |
2.综合作业:小学生口算表达式自动生成系统
2.1.模块流程图
总流程
一年级
二三年级
2.2.函数功能及全局变量介绍
2.2.1.全局变量
-
num1是计算式中的第一个计算数
-
num2是计算式中的第二个计算数
-
num3是计算式中的第三个计算数
-
op1是第一个运算符
-
op2是第二个运算符
-
countWrong用来记录答错的题数
-
countRight用来记录答对的题数
-
grade用来存储输入的年级
-
question用来存储输入的想做的题数
-
result是系统根据随机给出的计算式算出的正确结果
-
anwser是用户输入的自己计算的结果
-
remainder是用户输入的自己计算出的余数
2.2.2 菜单相关函数
menu是根据用户输入的年级,选择进入哪一个年级的函数
GradeOneMenu是一年级的函数,其中含有计算答案判断正误的函数,只会输出一年级的题目。
GradeTwoMenu是二年级的函数,其中含有计算答案判断正误的函数,只会输出二年级的题目。
GradeThreeMenu是三年级的函数,其中含有计算答案判断正误的函数,只会输出三年级的题目。
2.2.3 出题相关函数
CalculationSelection是用来随机进入不同操作数函数的函数。
CalculationNumber2是会生成两个操作数的函数。
CalculationNumber3是会生成三个操作数的函数。
Character会根据年级和操作数生成相应的一个或两个运算符。
Calculate是计算随机生成的计算式的函数,用来与用户输入的答案作比较。
2.3运行结果截图,测试用例
主菜单页面
图示进入一年级页面
一年级页面
图中有加减算式,有两个操作数和三个操作数的算式。
正确率
中途停止做题
返回主页面
二年级页面
图中有除法运算和乘法运算,有两个操作数和三个操作数的算式。
尾数为0的加法运算
三年级页面
两位数乘法
万以内的加减法(得数不超过万)
整数除法(余数为0却带了余数??)
混合运算
带余数的除法
上述出现整除有余数的情况是因为在二三年级的局部变量中我定义用户输入的余数的初始值为0,导致满足整除余数为零的情况,在整除的时候同样输出了余数
经过更改后,整除算式不再出现余数:
疑惑点
当运行程序时,出现除法的算式老是三个计算数且连除,单步调试则不会出现这种情况,而且基本上能够把每种题型随机打出来。
2.4大作业中编程技巧总结体会
-
一定要在函数头的位置或者重要的点上作注释,不然面对这么多的代码很可能会搞不清哪个是哪个,对后续的调试纠正带来麻烦。
-
在写程序之前要先写出框架,不能够说想到哪一步就写哪一步,容易在中途思维混乱。(说的就是我)
-
在使用随机数的时候一定要注意在函数开头用上种子,不然出来的随机数会是一样的,还有要使用对的符号不要把%打成&。(我是傻子,傻子是我)
-
应该把代码行数多的程序分文件编写,便于后续查看;在写完一个函数的时候就应该进行调试,而不是全部写完再调试。
-
清屏
system("cls")
停顿在界面Sleep(微秒)