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 大作业中编程技巧总结

  1. 随机数生成
  • 由于当初写大作业时不知道如何让随机数真正随机,就用l这种神奇的方法;
  1. 清除缓存区字符
  • VS中fflush(stdin)似乎无法生效,用此法可清除缓存区字符;
  1. 函数
  • 在函数中可以调用函数,并可以通过套娃式调用来实现一个闭合的代码回路;
posted @ 2020-11-30 22:47  DuckSword  阅读(140)  评论(1编辑  收藏  举报