C博客作业03--函数
这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业03--函数 |
这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
0.展示PTA总分
1.本章学习总结
1.1有关函数的知识点
1.1.1 函数的定义
- 基本形式:
函数类型 函数名(形式参数表) /*函数首部*/
{
函数实现过程 /*函数体*/
}
-
定义:函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种。例如,库函数:scanf()、printf(),是由C语言系统提供定义,编程时直接调用即可,而用户自己定义的函数属于自定义函数。
-
函数首部:函数首部由函数类型、函数名和形式参数表组成,位于函数义的第一行。函数首部中,函数名是函数整体的称谓,需用一个合法的标识符表示。函数类型指函数结果返回的类型,一般与return语句中表达式的类型一致。
注意:
- 函数首部后面不能加分号,它和函数体一起构成完整的函数定义
1.1.2 函数的调用
-
形参表:格式为
类型1 形参1,类型2 形参2,…,类型n 形参n
每个形参前面的类型写明,函数的形参的数量可以是0,1,2....注意:
- int x,y是错误的;形参只能为变量
-
函数体:函数体体现函数的实现过程,由一对大括号内的若干条语句组成,用于计算,或完成特定的工作,并用return语句返回运算的结果。
1.1.3函数的原型声明
-
一般形式:
函数类型 函数名(参数表);
注意:
- 目的是说明函数类型和参数情况,以保证程序编译时能判断对该函数的调用是否正确
- 在调用函数前一定要先声明,再调用
- 函数声明是一条C语句,而函数定义时的函数首部不是语句,后面不能跟分号
1.1.4 形参与实参
- 形参:
- 函数定义时位于参数表的被称为形参。
- 形参除了接受实参的值外,使用方法与普通变量类似
- 形参只在自定义函数里起作用,形参的任何变化与实参没有关系
- 形参必须是变量
- 实参:
- 主调函数(main函数)的参数被称为实参。
- 实参的作用:只是把值传给形参
- 实参可以是常量、变量和表达式
- 参数传递:实参→形参
1.2 全局变量、局部变量和静态变量
变量种类 | 定义位置 | 使用范围 | 优点 | 什么时候使用 |
---|---|---|---|---|
全局变量 | 函数外部 | 从定义开始到程序所在的文件结束 | 可以解决单个变量在多个函数之间的问题 | 一个变量需要到多个函数中 |
局部变量 | 函数内部 | 被局限于所在的函数,函数调用结束时就失效 | 保证了函数的独立性 | 一个变量只在单个函数中起作用 |
静态变量 | 函数内部 | 从被调用开始一直作用到程序结束 | 保留上一个函数调用后的值 | 变量需要积累之类的运算 |
1.3 C数据类型及注意点
1.3.1数据的存储
-
整型数据的存储:
-
计算机处理的所有信息都以二进制形式表示
-
0代表正数,1代表负数
-
数值可以采用原码,反码,补码表示
-
正数的原码、反码和补码相同,符号位是0,其余各位表示数值
-
负数的原码、反码和补码不同:
原码:符号位是1,其余各位表示数值的绝对值;反码:符号位是1,其余各位对原码取反;补码:反码+1
-
-
例如:-1的原码是:10000000 00000001 -1的反码是:11111111 11111110 -1的补码是:11111111 11111111
- 实型数据的存储:
- 分为符号位、阶码和尾数
- 字符型数据的存储:
- ASCII码
1.3.2 基本数据类型
常用整型类型:
名称 | 类型名 | 数据长度 |
---|---|---|
整型 | int | 32位 |
短整型 | short | 16位 |
长整型 | long | 32位 |
字符型:
名称 | 类型名 | 数据长度 |
---|---|---|
字符型 | char | 8位 |
浮点型:
名称 | 类型名 | 数据长度 |
---|---|---|
单精度浮点型 | float | 32位 |
双精度浮点型 | double | 64位 |
1.3.3 转义字符
- 转义字符:由反斜杠加上一个字符或数字组成,它把后面的字符或数字转换成别的意义。虽然转义字符形式上由多个字符组成,但它是字符常量只代表一个字符,它的使用方法与其它字符常量使用相同。
字符 | 含义 |
---|---|
\n | 换行 |
\t | 横向跳格 |
\ | 反斜杠 |
'' | 双引号 |
' | 单引号 |
\ddd | 1~3位八进制整数所代表的字符 |
\xhh | 1~2位十六进制整数所代表的字符。 |
例题:
1.3.4 数据的输入和输出
- 整型数据:
十进制 | 八进制 | 十六进制 | |
---|---|---|---|
int | %d | %o | %x |
long | %ld | %lo | %lx |
unsigned | %u | %o | %x |
unsigned long | %lu | %lo | %lx |
-
说明:
%u 十进制:无符号整数 %o 八进制:一个整数 %x 十六进制:一个整数
1.4 C运算符
1.4.1 部分预算符优先级和结合性
-
右结合(从右向左):!,++ -- + -(单目),?: (条件表达式),= += -= *= /= %= (赋值运算符)
-
左结合(从左向右):,(逗号运算符), < >...(关系运算符),&& ||( 逻辑运算符),(双目运算符)
1.4.2 位运算
(几个不常见的)
- ~ 取反
- ^按位“异或”
学习体会
学习了函数和数据类型后,开始觉得题目变难了,而且上课进度也变快了。但话说回来,使用了函数确实能使代码简洁不少,但因为技巧掌握和代码量不太足,还是需要自己不断的敲代码!不断总结!
2.综合作业:小学生口算表达式自动生成系统
2.1.模块流程图
2.2.函数功能及全局变量介绍
2.2.1.全局变量
//全局变量
int RightNumber = 0;//计算正确题目的个数
int WrongNumber = 0;//计算错误题目的个数
int QustionNum = 0;//储存题目数量
2.2.2 菜单相关函数
void ListMenu()//操作菜单界面
用于展示操作的首页面,并选择所对应的年级。
int main(void)//主函数
2.2.3 年级函数
void GradeOneMenu()//一年级
- 注意:
case 2情况中,要进行数字判断,如果减数比被减数小,则需要调换。
void GradeTwoMenu()//二年级
void GradeThreeMenu()//三年级
-
注意:
case 1情况中,要进行数字判断,如果减数比被减数小,则需要调换。
2.2.4 出题相关函数
出题注意:
- 题目中不能出现答案为负数的情况
- 涉及除法运算时,除数不能为0
- 题目中出现乘法除法需要用“×”“÷”符号表示
- 要相应的年级出对应的题目,难度不能过大
int GetValue(int grade)//对于随机生成操作数
随机数的生成:10以内的个位数,两位数,三位数
char GetOp(int op)//对于运算符的随机生成
随机生成运算符:分别对应一二三年级调用“+-*/”
2.2.5 其他相关函数
int TimeAccount(void)//计算时间
void Judgement()//结算函数
void RightAnswer()//答对正确之后的表扬
void WrongAnswer()//答对错误之后的鼓励
2.3 运行结果截图 测试用例
2.3.1 基本流程
- 开始页面:
- 输入“1”后,进入一年级的页面(需要判断是否答题):
- 系统随机生成题目:
- 答题后有计算答对答错的个数:
- 若年级输入错误:
2.3.2 一年级
- 两个个位数相加:
- 个位数加两位数:
-
个位减个位:
2.3.3 二年级
-
个位乘个位:
-
两位数加两位数:
- 一位乘两位:
2.3.4 三年级
- 两位数乘两位数:
- 两位数除一位数:
- 三位数加两位数:
2.4.1大作业中编程技巧
- 打一大段代码的时候,要打完一个函数之后,运行一下看一下情况,不然一直打代码上去到最后,只要有一点错误,就要大改动。很多细节的地方没有注意,因为很多函数,代码量很长,只能一步一步调试找错误。
- 注意吸收字符的问题!
- 在进行除法运算时,有的除法要注意,运算出来是小数的,而结果被定义整型。
2.4.2大作业总结
- 感觉本次的大作业,并没有做的很好很细致,还需完善,有些可以给用户更好的互动感或者体验感,还可以加强改进,还有题目现在只是一题一题的出现,运算法则也可以再补充补充,还是有蛮多地方可以改进的,但因为函数的语法使用还是有点不太透彻,操作的时候还是不太熟练。