C语言博客作业03--函数
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| :----: | :----: | :----: |
| 这个作业的地址 | C博客作业03--函数 |
| 这个作业的目标 | 学习如何设计函数、C语言基本数据类型。 |
| 姓名 | 陈宇杭 |
0. 展示PTA总分
1. 本章学习总结
1.1 函数定义、调用、声明
- 函数定义
函数主要以以下形式定义
函数类型 函数名(定义变量1,定义变量2,...) //也可以不包含变量;
{
函数体;
return 表达式; //返回值(如果函数类型为void则不返回值);
}
函数类型 | 返回值 |
---|---|
void | 不返回值 |
int | 返回一个int类型变量值 |
double | 返回一个double类型变量值 |
float | 返回一个float类型变量值 |
char | 返回一个char类型变量值 |
函数调用
- 函数主要以以下形式调用
函数名(所定义的变量1,变量2); //变量需要和定义时所定义的类型相同;
- 如果函数有返回值亦可赋值给变量
int Ilove_C;
Ilove_C = 函数名(所定义的变量1,变量2);
- 函数声明
如果函数需要正常调用,而又不想把函数写在main函数的上方喧宾夺主,可以在main函数与头文件间进行函数声明,如下
函数类型 函数名(定义变量1,定义变量2,...); //此处有分号
1.2 全局、局部变量、静态局部变量
- 全局变量
- 定义在函数外部的变量被称为全局变量(包括main函数);
- 通常全局变量是可以被本程序所有对象或函数引用调用.
- 局部变量
- 定义在函数内部的变量通常被称为动态局部变量,如
int count;
- 局部变量可以在函数中被声明后调用,但离开此函数后变量就会"消失".
- 定义在函数内部的变量通常被称为动态局部变量,如
- 静态局部变量
- 定义在函数内部的局部变量,可通过定义静态局部变量来实现保存,使程序在离开函数时变量的内存不会消失;
- 当再次回到该函数时,保留上次变量值,定义声明如
static int count;
;
1.3 C数据类型及注意点
- 数据类型
数据类型 | 数据类型说明 | 在内存所占字节 | 功能 | 输入 | 输出 |
---|---|---|---|---|---|
char | 字符型 | 1 | 定义变量储存字符 | %c | %c |
int | 整型 | 4 (视寄存器大小) |
定义变量储存整数 | %d | %d |
long int | 长整型 | 4 | 定义变量储存整数 | %ld | %ld |
float | 单精度浮点数 | 4 | 定义变量储存小数 | %f | %f |
double | 双精度浮点数 | 8 | 定义变量储存小数 (可存位数更多) |
%lf | %f |
- 其他
因为浮点数的储存方式与整数不同,在进行浮点数运算时可能会出现误差,在比较时需注意;
因为误差范围较小,可以通过判断与预期答案的差值来进行修正,如if(diff < 0.000001)
;
1.4 C运算符
优先级 | 运算符 | 名称 | 特征 | 结合方向 |
---|---|---|---|---|
2 | ~ | 按位取反 | 单目运算 | 从右到左 |
8 | & | 按位"与" | 位逻辑运算 | 从左到右 |
9 | ^ | 按位"异或" | ||
10 | | | 按位"或" | ||
13 | ?: | 条件运算 | 三目运算 | 从右到左 |
运算符优先级非常重要,略微出错答案可能会天差地别; |
学习体会
将代码封装函数实现了代码模块化,增加了程序代码的灵活性和可读性;
函数的参数问题有助于我们更进一步的理解C语言的变量与地址,为指针打下基础;
这边建议把代码全部写在一行来节省空间嗷
2. 综合作业:小学生口算表达式自动生成系统
2.1 模块流程图
最开始构思的流程图
2.2 函数功能及全局变量介绍
2.2.1 全局变量
int time1; //进入答题模块输出题目后开始计时(时的时间)
int time2; //提交答案后结束计时(时的时间);用于计算每题完成时间;
int EveryTurnQCount = 0; //每轮答题中所完成的题目数量
int count = 0; //在本程序中所答总题数
int rightCount = 0, wrongCount = 0; //总正确题数,总错误题数;用于计算正确率;
int questionNumber; //每轮做题预输入的预完成题数;
2.2.2 菜单相关函数
- 主菜单
通过读取整数并判断来进入不同的年级菜单; - 一年级菜单
- 通过函数生成操作数和操作符并进行算式合法性判断;
- 展示题目;
- 询问是否想要完成此题;
- 二年级菜单
- 同上;
- 三年级菜单
- 同上;
好像没有全部上传的必要
- 同上;
2.2.3 出题相关函数
- 操作数与算式生成
- 通过
srand(time(NULL))
生成随机数,并进行取余计算来取得预想范围的数值; - 通过取余来进行随机获得运算符;
- 再通过一些奇怪的方法进行随机随机种子来完全随机数值;
- 通过
- 算式难度处理
- 一年级为一位数加减乘除,且减法答案不为负数,除法为整除;
- 二年级大概率为二位数加减法,二位数与个位数乘除法;
- 三年级为三位数加减法,二位数乘法,三位数与两位数除法;
- 答案处理与输出
- 如果答案正确输出勉励话语,错误输出正确答案与鼓励话语;
2.3 运行结果截图,测试用例
- 菜单界面
- 题目数量预输入
- 答题系统
2.4 大作业中编程技巧总结
- 随机数生成
- 由于当初写大作业时不知道如何让随机数真正随机,就用l这种神奇的方法;
- 清除缓存区字符
- VS中
fflush(stdin)
似乎无法生效,用此法可清除缓存区字符;
- 函数
- 在函数中可以调用函数,并可以通过套娃式调用来实现一个闭合的代码回路;