zoukankan      html  css  js  c++  java
  • 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. 函数
    • 在函数中可以调用函数,并可以通过套娃式调用来实现一个闭合的代码回路;
  • 相关阅读:
    ABP文档
    SqlServer英文单词全字匹配
    npm不是以管理身份运行遇到的问题
    concurrenthashmap jdk1.8
    HashSet源码分析 jdk1.6
    Iterator设计模式--jdk1.7
    代理模式
    高并发下的HashMap,ConcurrentHashMap
    HashMap源码分析jdk1.6
    Stack&Vector源码分析 jdk1.6
  • 原文地址:https://www.cnblogs.com/YasakaKiyokaze/p/14063467.html
Copyright © 2011-2022 走看看