C++ 语法基础(二)(三)

简介: C++ 语法基础(二)(三)

设计自己的库

库的概念


库:常用的工具


库的主题:同一个库中的函数都应该是处理同一类问题,自己设计的库也要有一个主题


库的通用性:在某一应用程序中提取库内容时应尽量考虑到兼容更多的应用,使其他应用程序也能共享这个库


库的设计和实现


设计库的接口:库的用户必须了解的内容,包括库中函数的原型、这些函数用到的符号常量和自定义类型,接口表现为一个头文件


设计库中的函数的实现:表现为一个源文件


库的这种实现方法称为信息隐藏



image.png



接口文件


头文件的格式


注释


头文件头上有段注释,说明库的主题、功能


每个函数声明前有一段注释,告诉用户如何使用这些函数


随机函数库接口文件

//文件:Random.h
//随机函数库的头文件
#ifndef _random_h
#define _random_h
//函数:RandomInit
//用法:RandomInit()
//作用:此函数初始化随机数种子
void RandomInit();
//函数:RandomInteger
//用法:n = RandomInteger(low,  high)
//作用:此函数返回一个 low 到 high 之间的随机数,包括 low 和 high
int RandomInteger(int low,  int high);
#endif

库的实现


实现文件名:与头文件的名字是相同


实现文件的格式


注释(这一部分简单介绍库的功能)

include此cpp文件所需的头文件

每个实现要包含自己的头文件,以便编译器能检查函数定义和函数原型声明的一致性

每个函数的实现代码(在每个函数实现的前面也必须有一段注释)

随机函数库实现文件

//文件:Random.cpp
//该文件实现了Random库
#include <cstdlib>
#include <ctime>
#include "Random.h"
//函数:RandomInit
//该函数取当前系统时间作为随机数发生器的种子
void RandomInit()
{
    srand(time(NULL));
}
// 函数:RandomInteger
// 该函数将0到RAND_MAX的区间的划分成high - low + 1 个 子区间。当产生的随机数落在第一个
// 子区间时,则映射成low。 当落在最后一个子区间时,映射成high。当落在第 i 个子区间时
//(i 从 0 到 high-low),则映射到low + i
int RandomInteger(int low, int high)
{
    return (low + (high - low + 1) * rand() / (RAND_MAX + 1));
}

1.统计学的一些计算在计算机的帮助下变得准确和高效,下面请给出这个有关统计学的函数库的接口文件,其中需要包含的函数和要求如下。


算数平均值计算Average():传入两个double指针代表数组的起始位置和结束位置的后一位,返回一个double表示答案

最值统计MinMax():数组表示同上,同时通过两个double的引用传递记录最小最大值的答案,无返回值

中位数统计Median():数组表示同上,返回一个double表示答案

众数统计Mode():数组表示同上,返回一个double表示答案

//文件:statistics.h
//统计学函数库
#ifndef _statistics_h
#define _statistics_h
//函数:Average
//用法:double ave = Average(double*, double*)
//作用:计算从数组中所有实数的算数平均值
double Average(double *begin, double *end);
//函数:MinMax
//用法:MinMax(double *, double *, double &, double &)
//作用:统计数组的最小最大值,并且通过引用传参得到结果
void MinMax(double *begin, double *end, double &Min, double &Max);
//函数:Median
//用法:double med = Median(double*, double*)
//作用:计算从数组中所有实数的中位数
double Median(double *begin, double *end);
//函数:Mode
//用法:double mod = Mode(double*, double*)
//作用:计算从数组中所有实数的众数
double Mode(double *begin, double *end);
#endif

龟兔赛跑规则


image.png


解题思路


分别用变量tortoise和hare代表乌龟和兔子的当前位置

时间用秒计算

用随机数来决定乌龟和兔子在每一秒的动作

根据动作决定乌龟和兔子的位置的移动

跑道的长度设为70个点

模块划分


主模块:main


移动模块:move_tortoise、move_hare


输出模块:print_position


实现


主模块

#include "Random.h" //包含随机数库
#include <iostream>
using namespace std;
const int RACE_END = 70; //设置跑道的长度
int move_tortoise();
int move_hare();
void print_position(int, int, int);
int main()
{
    int hare = 0, tortoise = 0, timer = 0;
    RandomInit();                      //随机数初始化
    cout << "timer  tortoise  hare\n"; //输出表头
    while (hare < RACE_END && tortoise < RACE_END)
    {
        tortoise += move_tortoise(); //乌龟移动
        hare += move_hare();         //兔子移动
        print_position(timer, tortoise, hare);
        ++timer;
    }
    if (hare > tortoise)
        cout << "\n hare wins!\n";
    else
        cout << "\n tortoise wins!\n";
    return 0;
}

Move模块


用户行为生成方法


利用随机数的等概率生成0-9之间的随机数

当生成的随机数为0-4时,认为是第一种情况,5-6是第二种情况,7-9是第三种情况

// 文件名:move.cpp
#include "Random.h" //本模块用到了随机函数库
int move_tortoise()
{
    int probability = RandomInteger(0, 9); //产生0到9之间的随机数
    if (probability < 5)
        return 3; //快走
    else if (probability < 7)
        return -6; //后滑
    else
        return 1; //慢走
}
int move_hare()
{
    int probability = RandomInteger(0, 9);
    if (probability < 2)
        return 0; //睡觉
    else if (probability < 4)
        return -9; //大后滑
    else if (probability < 5)
        return 14; //快走
    else if (probability < 8)
        return 3; //小步跳
    else
        return -2; //慢后滑
}

Print模块

// 文件名:print.cpp
#include <iostream>
using namespace std;
void print_position(int timer, int t, int h)
{
    if (timer % 6 == 0) //每隔6秒空一行
        cout << endl;
    cout << timer << '\t' << t << '\t' << h << '\n';
}


相关文章
|
1月前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
17 0
|
1月前
|
存储 编译器 Shell
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
15 0
|
1月前
|
编译器 C++
c++基本语法
c++基本语法
19 1
|
1月前
|
编译器 C++
|
1月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
32 2
|
4月前
|
存储 编译器 C语言
C++入门第二篇---类和对象【1】&&C++语法细节补充
C++入门第二篇---类和对象【1】&&C++语法细节补充
41 0
|
5月前
|
Linux C++
63 C++ - 异常语法
63 C++ - 异常语法
23 0
|
6月前
|
C++
C++语言学习基本语法应用案例
C++语言学习基本语法应用案例
|
6月前
|
编译器 C++
C++ 基础篇之基本语法解析
C++ 基础篇之基本语法解析
|
1月前
|
编译器 测试技术 C++
【Python 基础教程 01 全面介绍】 Python编程基础全攻略:一文掌握Python语法精髓,从C/C++ 角度学习Python的差异
【Python 基础教程 01 全面介绍】 Python编程基础全攻略:一文掌握Python语法精髓,从C/C++ 角度学习Python的差异
165 0

热门文章

最新文章