校车调度问题(数学建模)

校车调度问题(数学建模),第1张

参考一下吧,我记得有个全国赛题就是公交车调度问题

第19 卷 建模专辑

2002 年02 月

工 程 数 学 学 报

JOURNAL OF EN GINEERIN G MATHEMATICS

Vol 19 Supp

Feb 2002

文章编号:100523085 (2002) 0520059208

公交车调度问题的研究

董 强, 刘超慧, 马 熠

指导教师: 吴孟达

(国防科技大学,长沙410073)

编者按: 该论文建立了两个多目标规划模型,尤其是选择运力与运量的平衡作为目标函数有新意。寻找最小车辆数的方

法正确。单车场模型作为双车场模型的补充,虽然简单,也有自身特点。运行发车时刻表切实可行,接近最优解。

摘 要:本题为带软时间窗的单线路单车型的公交调度问题,针对其多目标、多变量的动态特点,我们为满足不同的实际需

求建立两个多目标规划模型:双车场模型和单车场模型。双车场模型的主要目标是使运客能力与运输需求(实际客

运量) 达到最优匹配,单车场模型的主要目标是使乘客的平均不方便程度和公交公司的成本达最小,其目的都是为

了兼顾乘客与公司双方的利益。两个模型的主体都是采用时间步长法,模拟实际的运营过程,从而得出符合实际要

求的调度方案:静态调度和动态调度方案。

关键词: 公交车调度;软时间窗;满载率;时间步长法

分类号: AMS(2000) 90C08 中图分类号: TB114 1 文献标识码: A

1 问题分析

我们分析该问题为一带软时间窗的单车型运输问题。由已知条件无法确定是单车场问题

还是多车场问题,故我们分别建立两个模型:双车场模型和单车场模型。其中,双车场模型认为

车站A 13 和车站A 0 分别有车场A 和B 存车,即均可作为始发站和终点站,上行和下行路线独

立运行;单车场模型认为A 0 车站有转运能力但没有存车能力,这样实际上可将单车场方式理

解为环线行驶。

2 模型假设(略)

3 模型的建立与求解

一 双车场模型

1) 模块一:发车时刻表的确定

依据前面的分析,兼顾乘客与公交公司双方的利益,分别对单程的上行路线和下行路线建

立如下的多目标规划模型:

目标函数: Ⅰ 供求的最优匹配 min ∑( Qi ×βi - V i) 2

Ⅱ 各时段的发车车次均最小min{ Ni}

约束条件: ① 各时段的平均满载率限制015 ≤βi ≤112

② 供求匹配比限制α ≤ k

1 1 符号说明:

Ni 第i 时段发车次数

βi

第i 时段的平均满载率

βi

= Ri / ( c ×Ni) Ri 为第i 时段的总上车人数, c = 100 人/ 车次

α 供求匹配比 α = ( ∑V i) / ( ∑Qi)

k 控制参数

Qi 第i 时段运客能力(人×公里)

Qi = 第i 时段发车次数Ni ×每辆车标准载客量c ×单程(上行或下行) 总运行距离

L 。其中,上行时, L = 14 58 公里; 下行时, L = 14 61 公里

V i 第i 时段的需要运客量(人×公里)

V i = ∑j

( x ji

2yji) L j j ∈(13 ,12 ⋯,1 ,0) , 上行方向; j ∈ (0 ,2 ,3 , ⋯13) , 下行方

向。

其中, x ji 为第i 时段内A j 站的上车人数; yji为第i 时段内A j 站的下车人数

L j 为A j 站距该单程方向上终点站的距离。

112 目标函数说明:

目标函数Ⅰ使第i 时段的运客能力Qi 与运输需求(实际客运量) V i 达到最优匹配,βi 反

映满载率高低的影响。

目标函数Ⅱ使各时段所需的最大发车次,在满足约束条件下尽可能少, 以使总车辆数较

少。

113 约束条件说明:

条件①是限制满载率满足运营调度要求,是考虑了乘客的利益。

条件②是限制供求匹配比α小于常数k 。我们根据参数k 的变动量分别进行模拟,从而筛

选最恰当的k 值。

补充约束条件:为使始发站车场的每天起始时刻的车辆数保持不变,需使总发车次数与总收车

次数相等,即必须使单程车次总数达到匹配( N1 = N2) ,而N1 不能减少(受满

载率限制) ,因此我们在求解下行方向的Ni 时增加约束∑N2 i = N1 在增添

约束条件∑N2 i = N1 之后,用二次规划求得各时段发车次数N1 i 和N2 i 。

2) 模块二:运营过程的模拟

在这部分,我们采用时间步长法,根据假设一个时段内发车间隔时间t i 相等,则t i 可由Ni

确定,从而得到发车时刻表。按此发车时刻表模拟实际运行过程, 目标是确定满足时刻表的最

小车辆数n ,统计各项运营指标,搜索最优调度方案解。

211 模拟子程序一:确定最小车辆数目n

根据“按流发车”和“先进先出”的原则,对起点站, 在发车时刻应至少有一辆车可以发出

(处于等待发车状态) 。若有多辆车,则先进站者先发车,其余车辆“排队”等候;若无车可发,则

出现“间断”。完整的运营过程应保证车辆严格按时刻表发车,不发生间断。

设A 13 站和A 0 站分别有车场A 和B ,从车场中不断有车发出,同时接受车进场,则车场

中的车的数目是随时间变化的状态量。用Na 和Nb 来描述车场A 和车场B 中要满足车流不间

断所需的最小数目,分别搜索其在运行过程中的最大值,则所需最小车量数目n = Na + Nb。

2 2 模拟子程序二:统计各项运营指标

60 工 程 数 学 学 报 第19 卷

确定各项运营指标,采用模拟统计的计算方法, 对不同的运营指标进行定量计算, 主要功

能是通过定量分析运营指标来检验方案的可行性,以确定方案调整。

由于车次与发车时刻一一对应,而车辆的队列顺序是不发生改变,因而对所需车辆进行统

一编号,则对每一车次,与其对应的车辆编号是确定的,故我们直接对第k 次车进行考察。

我们统计的指标及其定义如下:

平均满载率 上行方向 β01 = ( ∑k

∑j

1

β( k , j1) / ( N1 ·J1)

下行方向β02 = ( ∑k

∑j

2

β( k , j2) / ( N2 ·J2)

满载率分布可以由β( k , j) 确定。

平均候车时间上行方向T1 = ( ∑k

∑j

1

T ( k , j1) / ( N1 ·J1)

下行方向T2 = ( ∑k

∑j

2

T ( k , j2) / ( N2 ·J2)

符号说明:

D ( k , j) 第k 次车到第j 站时上车与下车的人数之差; (已知)

C( k , j) 第k 次车离开第j 站时站台上的滞留人数; C( k , j) = C( k - 1 , j) + D ( k , j) -

(120 - B ( k , j - 1)

B ( k , j) 第k 次车离开第j 站时车上的人数; B ( k , j) = B ( k , j - 1) + D ( k , j) + C( k -

1 , j) - C( k , j)

T ( k , j) 为第k 次车离开第j 站时站台上滞留者的滞留时间; T ( k , j) = C( k , j) ·t i

β( k , j) 为第k 次车离开第j 站时的满载率,β( k , j) = B ( k , j) / 100 ;

N1 , N2 为一天单程所发的车次总数; J1 , J2 为单程站台总数;

2 3 模拟结果及统计指标分析

我们选取参数k = 018 ,0185 ,019 进行模拟运行,所得结论如表1 。(表中只给出上行方向

值) :

表1 模拟上行方向所得营运指标值

参数k 平均满载率β0 平均候车时间T 所需总车辆n 总发车次数N1

018 6817 % 3188 63 270

0185 7218 % 3188 63 255

019 7614 % 4124 62 243

0195 8014 % 7123 62 231

综合考虑以上参数,当k = 019 时,各项指标比较适当,平均满载率较高,平均候车时间较

短,所需车辆与总发车次数适中,所以我们选取k = 019 。

下面我们给出k = 019 时的具体模拟结果及统计指标。

结果:

⑴ 各时段内单程发车次数(见表2)

总车次N1 = N2 = 243 。

建模专辑 公交车调度问题的研究61

表2 k = 0 9 时各时段中的发车次数

时段5 ~ 6 6 ~ 7 7 ~ 8 8 ~ 9 9 ~ 10 10 ~ 11 11 ~ 12 12 ~ 13 13 ~ 14

上行7 28 41 23 13 11 13 11 11

下行3 12 21 26 16 11 10 9 10

时段14 ~ 15 15 ~ 16 16 ~ 17 17 ~ 18 18 ~ 19 19 ~ 20 20 ~ 21 21 ~ 22 22 ~ 23

上行9 9 19 24 8 5 5 4 2

下行11 13 19 30 19 11 9 8 5

⑵ 各时段单程发车时间间隔

由于一个时段内的发车间隔已假设为等距,所以由所得的车次很容易确定发车时间间隔。

⑶ 单程发车时刻表(数据量太大,故略)

⑷ 总车辆数n = 62 ,其中场A 存车57 辆,场B 存车5 辆。

统计指标:

⑴ 平均满载率 上行方向 β01 = 76 4 % 下行方向 β02 = 7019 %

⑵ 平均候车时间上行方向T1 = 4 24 分下行方向T2 = 3148 分

3) 调度方案

我们由不同的理解得到两种调度方案,其共同点是都必须形成完整的运营过程,使车流不

间断。

3 1 静态调度方案:

认为在该路线上运行的总车数固定不变,形成序贯流动的车流,依照“按流开车”和“先进

先出”的原则,按发车时刻表发车。

所需总车辆数为62 ,其中从A 13 站的车场A 始发的车数为57 ,从A 0 站的车场B 始发的

车数为5 。

3 2 动态调度方案:

考虑高峰期与低谷期实际需要的车辆数目不同, 为了满足高峰期而求得的车辆数目必然

大与其他时间需要的车辆数,即62 辆车只在高峰期得到充分利用,造成资源浪费。我们认为公

交公司可进行车辆动态调度,让一些车辆可以在特殊原因下进行修理调整, 并节约运营成本。

由此我们在保证车流不间断的条件下,计算得出各个时段内实际所需的最小车辆数。如表3 所

示: (同时给出A 、B 车场的存车状态,可以自由支配的车辆数目)

表3 动态调度中各时段的车辆数

时段5 ~ 6 6 ~ 7 7 ~ 8 8 ~ 9 9 ~ 10 10 ~ 11 11 ~ 12 12 ~ 13 13 ~ 14

所需车数9 34 56 48 38 22 20 19 18

A 场状态51 28 2 0 0 11 12 11 9

B 场状态2 0 4 14 24 29 30 32 35

时段14 ~ 15 15 ~ 16 16 ~ 17 17 ~ 18 18 ~ 19 19 ~ 20 20 ~ 21 21 ~ 22 22 ~ 23

所需车数17 20 29 42 41 25 17 14 10

A 场状态9 10 9 5 6 25 37 43 48

B 场状态36 32 24 15 15 12 8 5 4

由上表我们得出:在总车辆数目可变动的情况下,所需的最大车辆数为7 :008 :00 间的56

辆,在非高峰期时所需车辆数目都较小, A 车场和B 车场都有较多车辆库存着,可以根据实际

情况挪作它用。公交公司只需按表中所给的每个时段的所需车辆数进行调度,按发车时刻表发

62 工 程 数 学 学 报 第19 卷

车即可。

二 单车场模型

1) 模型的建立

根据问题分析,公交营运方式按单车场组织后我们建立如下带软时间窗口的单车型运输

问题多目标优化模型:

目标函数: Ⅰ y1 = min { n}

Ⅱ y2 = min ∑Ni

Ⅲ y3 = min ( ∑j

∑k

∑r

P( Ti) ) / ( R ·K ·M)

约束条件: ①平均满载率限制50 % ≤β ≤120 %

②发车间隔时间限制t i ≤5 + 5 k ; k =

0 i 为早高峰期时;

1 i 为非早高峰期时。

③ t i ∈{ 1 ,2 ,3 ⋯}

1 1 目标函数说明: 目标函数Ⅰ使总车辆数目最小,即使公司的投资成本达到最小。

目标函数Ⅱ使总车次数最小,即使公司的运营成本达到最小。

目标函数Ⅲ是使所有顾客的平均不方便程度达到最小。

112 约束条件说明: 条件③主要是考虑到可 *** 作性,发车间隔划分到秒一级,公交司机是没

法把握的,故最小只能划分到分一级, 那么发车间隔就应是1 分的整数

2) 模型的求解

本模型是多目标、多约束的优化模型,很难求出全局最优解,所以我们先将多目标规化简,

再仿真模拟运营过程求解。求解思路如下:

给出初始发车时刻表

客运数据

客流分布(平均分布)

v

v

v

模拟

运营

数据

v 统计指标v 结论w 人工分析

2 1 模型化简

化简多目标问题,我们可以有三个出发点: ①分析各目标之间相关联的数学关系,减少目

标函数数目或约束条件数目。②依限定条件,针对具体数据挖掘隐含信息以降低求解难度。③

分析各目标权重,去掉影响很小的目标函数,从而达到简化目的。

分析目标Ⅱ与Ⅲ存在数学关联,发现总车次越多,乘客不方便程度越小。因此y2 与y3 不

能同时取最小值。我们认为Ⅲ为主要目标,故主要考虑目标函数Ⅲ。从具体数据可知,在上行

方向7 :00 ~ 8 :00 , A 13 站上车人数达3626 人,平均每分钟到达60 人, A 12 站上车634 人而下

车仅205 人,为客流量最大的时段,发车间隔时间至少需要2 分钟。由平均速度20 公里/ 小时

及环行距离,可得到此时至少需45 辆车。

由以上分析将原模型简化为:

目标函数: y1 = min ( ∑j

∑k

∑r

P( Ti) ) / ( R ·K ·M)

y2 = min M

约束条件: 同上

建模专辑 公交车调度问题的研究63

2 2 运营过程模拟

⑴ 初始时刻表的产生方法

原则上初始时刻表可以随机产生,然后模拟判断搜索出较优解, 但这样搜索量太大, 且很

难保证有一个收敛结果。因此我们采用人机交互的方式,首先分析数据得出比较合理的发车时

间间隔的近似值,产生初始时刻表(见表4) ,然后在其附近搜索局部最优解。

表4 初始发车时刻表

时段5 ~ 6 6 ~ 7 7 ~ 8 8 ~ 9 9 ~ 10 10 ~ 11 11 ~ 12 12 ~ 13 13 ~ 14

ti (分) 10 3 2 3 8 8 8 8 8

时段14 ~ 15 15 ~ 16 16 ~ 17 17 ~ 18 18 ~ 19 19 ~ 20 20 ~ 21 21 ~ 22 22 ~ 23

ti (分) 8 8 3 2 3 10 10 10 10

⑵ 模拟运营过程,统计各指标,搜索最优解

由于模拟运营过程与双车场模型大同小异,故我们在此不再详述。

2 3 结果及统计分析

对仿真产生的多组发车时刻表进行模拟获得最小的Y = 516 分,我们把这一组解做为我

们的局部最优解,其结果(其中统计指标用来描述我们以怎样的程度照顾双方利益) 如下:

⑴ 总车数

理想的理解平均速度可得所需总车数为45 辆,加2 辆应急,为47 辆;

考虑高峰期车速小于20km/ h , 高峰期人流量大是造成高峰期速度稍低于20km/ h 的主

因,那么通过人流量数据和20km/ h 就可大致推算7 :00 - 8 :00 速度约为18km/ h 。这样高峰期

的最小总车数45 辆,应修正为50 辆,加2 辆应急最终为52 辆。

⑵ 全天总车次M = 253 ×2 = 506 次

⑶ 发车时刻表见表5 (用各时段发车间隔时间简述)

表5 单车场模型最优发车时刻表

时段5 ~ 6 6 ~ 7 7 ~ 8 8 ~ 9 9 ~ 10 10 ~ 11 11 ~ 12 12 ~ 13 13 ~ 14

ti (分) 10 2 2 2 4 6 6 6 8

时段14 ~ 15 15 ~ 16 16 ~ 17 17 ~ 18 18 ~ 19 19 ~ 20 20 ~ 21 21 ~ 22 22 ~ 23

ti (分) 8 6 3 2 3 7 10 10 10

注:5 :00 - 6 :00 只是一种统计划分,首发车可以在5 :00 之前,也可在5 :00 之后。当然当不

知道其它原则时可以假设首发车为5 :00 发。对单车场下行线始发为5 :45 与数据相吻

合。5 :00 - 6 :00 上行线共855 人上车;下行线共50 人。其可能原因之一就是上行在5 :

00 - 6 :00 都有车可统计;而下行只在5 :45 - 6 :00 中可实际统计到车。

统计指标: ⑴乘客平均候车时间 y3 = 516 分

⑵平均满载率 β0 = 66 4 %

结论分析:由上面两个图表可见我们的调度方案基本上能满足乘客候车时间的限制,高峰期乘

客在5 分钟内等到车的概率为9219 % ,非高峰期乘客在10 分钟内等到车的概率为

8917 %。

调度方案: (见表6)

64 工 程 数 学 学 报 第19 卷

表6 单车场动态调度方案

时段5 ~ 6 6 ~ 7 7 ~ 8 8 ~ 9 9 ~ 10 10 ~ 11 11 ~ 12 12 ~ 13 13 ~ 14

所需车辆数10 46 52 46 24 16 16 16 14

时段14 ~ 15 15 ~ 16 16 ~ 17 17 ~ 18 18 ~ 19 19 ~ 20 20 ~ 21 21 ~ 22 22 ~ 23

所需车辆数14 16 30 46 30 14 10 10 8

4 模型的进一步讨论

1) 关于采集运营数据的讨论

由于我们假设在一个时段内乘客到站服从均匀分布, 而实际中乘客到站时间不可能都服

从均匀分布。特别是在高峰期的情况下, 乘客到站时间的不均匀分布就会使模型结论误差较

大。我们建议以下几种改进采集方式的方法:

⑴ 采取不等的统计人数的间隔时间

在高峰期的情况下,为削弱乘客到站时间不均匀分布带来的影响,可适当减小统计的间隔

时间但统计时间加密应有一定限度。对客流量很小的时段,我们可适当增大统计的间隔时间。

⑵ 增加能反应有关滞留人数的统计数据。

⑶ 按相等到站人数来区分时间段的统计

方法是统计达到一定到站人数时的时间点,其优点是能较为准确地反映客流量的变化情

况,有利于按其分布的疏密进行车辆调度,以更好的满足乘客的需要。

2) 单车场调度方案与双车场调度方案的选用

由结果分析可知单车场调度方案减少了公司的前期投资成本;双车场调度方案的运营成

本小,更好的兼顾到乘客与公司双方的利益。我们建议, 在有双车场的条件下选取双车场调度

方案更好。当需进行路线规划,需要选取单车场或双车场时, 建议根据实际所需成本来选取方

案。

5 模型的评价

本文的优点如下:

1) 模型的主体是采用时间步长法,模拟生成的发车时刻表的实际运行过程,准确性高,

容量大,逻辑性严格,计算速度快,具有较强的说服力和适应能力。

2) 定义了能定量衡量我们的调度方案对乘客和公交公司双方利益满足程度的统计指

标。

3) 在求最少车辆数时,将两个车场看作两个发射源, 通过对两个车场的存车状态的实

时模拟,形成不间断的运营过程,从而求得所需车辆数目。

本文的缺点是:

1) 对于运营数据的采集方式,只给出了一些原则和想法,没有经过仿真验证。

2) 对于乘客到站的分布,直接假设为均匀分布,没有对其他分布的情况再作讨论。

建模专辑 公交车调度问题的研究65

参考文献:

[ 1 ] 钱 湔 运筹学[M] 北京:科学出版社,2000

[ 2 ] 肖 雁,符 卓,李育安 带软时间窗口的车辆路径问题及其应用前景探讨[J ] 中国运筹学会第六届学术交流会论文

集,下卷,634 - 638

Study on the Schedul ing Problem

DONG Qiang , L IU Chao2hui , MA Yi

Instructor : WU Meng2da

(National University of Defence Technology , ChangSha 410073)

Abstract : As it’s a vehicle2scheduling problem with soft time windows , we established two multiple objective programming mod2

els to satisfy different practical conditions : double2parking2lot model and single2parking2lot model The main objective of the former

was to match the capacity of passengers holding with the real demand , while the objective of the latter was to minimize the average

inconvenience of passengers and the cost of transit companies Both of the two models considered for benefits of both passengers and

companies By using the method of step2by2step time , we simulated the practical procedure and drew two dispatching plans : static

dispatching and dynamic dispatching

Key words : scheduling ; step2by2step time ; dispatching plans

66 工 程 数 学 学 报 第19 卷

曲线拟合的最小二乘法

如有实验数据如下

求x=55处的近似值 并画出图形

x 0 10 20 30 40 50 60 70 80 90

y 68 671 664 656 646 618 610 608 604 60

#include "stdioh"

#include "graphicsh"

double s(double x[],double y[],double x1)

{

double a,b,tmp1=0,tmp2=0,tmp3=0,tmp4=0,result;

int i=0;

for(;i<10;i++)

{

tmp1+=x[i]x[i];

tmp2+=y[i];

tmp3+=x[i];

tmp4+=x[i]y[i];

}

b=(tmp1tmp2-tmp3tmp4)/(10tmp1-tmp3tmp3);

a=(10tmp4-tmp2tmp3)/(10tmp1-tmp3tmp3);

result=ax1+b;

return result;

}

void hzbz(int x,int y)

{

int i,j;

line(0,y,1024,y);

moveto(x-200,y);

j=x-200;

for(i=0;i<100;i++)

{

if(i%5!=0)

lineto(j,y-5);

else

lineto(j,y-8);

j=j+10;

moveto(j,y);

}

line(x,768,x,0);

moveto(x,y+200);

j=y+640;

for(i=0;i<300;i++)

{

if(i%5!=0)

lineto(x+5,j);

else

lineto(x+8,j);

j=j-10;

moveto(x,j);

}

line(x,0,x-8,6);

line(x,0,x+8,6);

line(640,y,634,y-8);

line(640,y,634,y+8);

}

void main()

{

double x[]={0,10,20,30,40,50,60,70,80,90};

double y[]={68,671,664,656,646,618,610,608,604,60};

int graphdriver=DETECT,graphmode;

int i;

printf("x=55\ny=%lf\n",s(x,y,55));

getch();

initgraph(&graphdriver,&graphmode, "");

setbkcolor(BLUE);

hzbz(200,200);

moveto(200,200);

for(i=0;i<200;i++)

lineto(i+200,-s(x,y,i)+200);

getch();

closegraph();

}

这其实就是一个10到1000进制转化, 把1000进制的每一位保存在数组里, 最后按一定顺序输出就是了

int main()

{

int v[20] = {0};

int iTop = 0;

int i = 0;

scanf("%d", &i);

while (i != 0)

{

v[iTop++] = i % 1000;

i /= 1000;

}

while (--iTop >= 0)

{

printf("%d", v[iTop]);

if (iTop > 0)

{

printf(",");

}

}

}

如果用递归的话就更简单了, 你琢磨琢磨

void output(int i)

{

if (i > 1000)

{

output(i / 1000);

putchar(',');

}

printf("%d", i % 1000);

}

int main()

{

int v[20] = {0};

int iTop = 0;

int i = 0;

scanf("%d", &i);

output(i);

}

译者序 第一章 C语言入门 1 编程简介 2 创建ASCII码源文件 3 编译C程序 4 语法错误 5 典型的C程序结构 6 往程序里添加语句 7 在新的一行上显示输出结果 8 C语言区分大小写字母 9 逻辑错误BUG 10 程序开发过程 11 文件类型 12 进一步了解连接器 13 头文件 14 帮助编译器查找头文件 15 加速编译 16 注释程序 17 提高程序的可阅读性 18 注意编译器警告信息 19 控制编译器警告 20 用注释屏蔽警告 21 名字的重要性 22 分号的作用 23 变量 24 给变量赋值 25 变量类型 26 定义同一类型的多个变量 27 定义变量时加上注释 28 给变量赋初值 29 在定义时初始化多个变量 30 使用有意义的变量名 31 C关键字 32 整型变量 33 字符型变量 34 浮点型变量 35 双精度型变量 36 给浮点型变量赋值 37 类型标识符 38 无符号类型标识符 39 LONG长类型标识符 40 联合使用无符号和长类型标识符 41 使用大数值 42 寄存器类型标识符 43 短SHORT类型标识符 44 从类型申明中去掉INT 45 有符号类型示识符 46 多赋值运算符 47 把变量的值赋给另一种类型的变量 48 创建用户自己的类型 49 赋给十六进制或八进制值 50 溢出 51 精确度 52 赋值为引号或其他字符 53 PRINTF入门 54 使用PRINTF显示整型数值 55 打印八进制或十六进制整数 56 用PRINTF显示无符号整型数值 57 用PRINTF显示长整型数值 58 用PRINTF显示浮点型数值 59 用PRINTF显示字符型数值 60 用指数格式显示浮点数 61 显示浮点数 62 用PRINTF显示字符串 63 用PRINTF显示指针地址 64 在数值前添加正号和负号 65 用PRINTF格式化整数值 66 0填充整数输出 67 在八进制和十六进制数前显示前缀 68 用PRINTF格式化浮点数 69 格式化指数输出 70 左对齐PRINTF的输出 71 联合使用格式符 72 字符串的换行 73 显示NEAR和FAR字符 74 使用PRINTF的转义字符 75 判断PRINTF已显示的字符数目 76 使用PRINTF的返回值 77 使用ANSI设备驱动器 78 用ANSI驱动器清除屏幕显示 79 用ANSI驱动器显示屏幕颜色 80 用ANSI驱动器定位光标 81 在C中作基本的数学运算 82 模运算(取余运算) 83 运算符的优先级和结合性 84 强制 *** 作符运算顺序 85 C的自增运算符 86 C的自减运算符 87 按位或运算 88 按位与运算 89 按位异或运算 90 “取反”运算 91 对变量的值进行运算 92 C的条件运算符 93 C的长度SIZEOF运算符 94 移位运算 95 位循环运算 96 条件运算符 97 循环控制 98 C如何表示真TRUE和假FALSE 99 用IF判断条件 100 简单语句和复杂语句 101 判断是否相等 102 关系判断 103 用逻辑与判断两个条件 104 用逻辑或判断两个条件 105 逻辑非运算 106 将条件结果赋值给变量 107 在复合语句中定义变量 108 使用缩进来提高程序的可读性 109 使用扩展CTRL+BREAK检查 110 判断浮点数 111 永远循环下去 112 赋值判断 113 IF-IF-ELSE语句 114 按规定次数执行语句 115 FOR语句的有些部分是可选择的 116 在FOR语句中赋值 117 控制FOR循环的增值 118 在FOR循环中使用字符型和浮点型数值 119 空循环 120 无穷循环 121 在FOR循环中使用逗号运算符 122 不要在FOR循环中改变控制变量的值 123 用WHILE循环重复执行一条或多条语句 124 WHILE循环的组成部分 125 使用DO重复执行一条或多条语句 126 C的CONTINUE语句 127 使用C的BREAK语句来结束循环 128 GOTO语句分支 129 判断多个条件 130 在SWITCH中使用BREAK 131 使用SWITCH语句的DEFAULT CASE 第二章 宏与常量 132 在程序中定义常量 133 宏与常量扩展 134 给常量和宏命名 135 使用-FILE-预处理器常量 136 使用-LINE-预处理器常量 137 改变预处理器的行计数 138 生成无条件预处理器错误 139 其他预处理器常量 140 记录预处理器的日期和时间 141 判断是否进行ANSIC编译 142 判断是C++还是C 143 取消宏或常量 144 比较宏与函数 145 编译器PRAGMAS 146 预定义值和宏 147 创建用户自己的头文件 148 使用#INCLUDE<FILENAMEH>或#INCLUDE“FILENAMEH” 149 判断符号是否被定义 150 进行IF-ELSE预处理 151 更强大的预处理器条件判断 152 实现IF-ELSE和ELSE-IF预处理 153 定义需要多行的宏和常量 154 创建自定义宏 155 在宏定义中不要放置分号 156 创建MIN和MAX宏 157 创建SQUARE CUBE宏 158 注意宏定义中的空格 159 如何使用括号 160 宏是没有类型的 第三章 字符串 161 C字符串的形象化 162 编译器是如何表示字符串的 163 C是如何存储字符串的 164 ‘A’是如何区别于‘A’的 165 在字符串常量内表示引号 166 判断字符串的长度 167 使用STRLEN函数 168 将一个字符串的字符复制到另一个字符串中 169 将一个串的内容追加到另一个串上 170 给字符串追加N个字符 171 把一个字符串转移到另一个字符串 172 不要越过字符串的界限 173 判断两个字符串是否相同 174 比较字符串时忽略大小写 175 将字符串转换成大写或小写 176 获取字符串中第一次出现的某个字符 177 返回索引到串的首次出现 178 搜索字符在字符串中的末次出现 179 返回指向字符中末次出现的索引 180 使用FAR字符串 181 为FAR字符串编写字符串函数 182 计算字符串的内容反转 183 将字符串的内容反转 184 将某特定字符赋给整个字符串 185 比较两个字符串 186 比较两个字符中的前N个字符 187 不考虑大小写比较字符串 188 将字符串转换成数字 189 复制字符串的内容 190 从给定字符序列中查找字符的首次出现 191 在字符串中查找子字符串 192 计算子字符串出现的次数 193 给子字符串获取索引 194 获取子字符串的最右端出现 195 不使用%2格式标识符显示字符串 196 从字符串中删除子字符串 197 用另一个子字符串代替子字符串 198 转换数值的ASCII码形式 199 判断字符是否为字母数字 200 字符是否为字母 201 判断字符是否包含ASCII值 202 判断字符是否为控制符 203 判断字符是否为数字 204 判断字符是否为图形字符 205 判断字符是大写还是小写 206 判断字符是否可打印 207 判断字符是否为标点符号 208 判断字符是否包含空白符 209 判断字符是否为十六进制值 210 将字符转换成大写形式 211 将字符转换成小写形式 212 使用ASCII字符 213 将输出格式写进字符串变量 214 从字符串中读输入 215 标志字符串以节省空间 216 初始化字符串 第四章 函数 217 函数 218 在函数中使用变量 219 把MAIN当作函数 220 参数简介 221 使用多参数 222 老式C程序中的参数申明 223 函数返回值 224 RETURN语句 225 函数原型 226 运行时程序库 227 形参和实参 228 解决名称冲突 229 返回类型为非INT型的函数 230 局部变量 231 函数如何使用堆栈 232 函数的开销 233 C如何存储局部变量 234 申明全局变量 235 避免使用全局变量 236 解决全局和局部变量的名称冲突 237 更好地定义全局变量的有效范围 238 传值调用 239 使用传值调用防止参数值变化 240 传址调用 241 获取地址 242 使用变量的地址 243 改变参数的值 244 只改变指定参数 245 使用堆栈进行传址调用 246 记住函数变量的值 247 C是如何初始化静态变量的 248 使用PASCAL调用顺序 249 PASCAL关键字的影响 250 混合编程示例 251 CDECL关键字 252 递归函数 253 递归阶乘函数 254 另一个递归的例子 255 进一步理解递归 256 直接递归与间接递归 257 判断是否要使用递归 258 为什么递归函数慢 259 如何消除递归 260 将字符串传递给函数 261 传递指定的数组元素 262 形式参数中的CONST 263 使用CONST不会阻止参数值的修改 264 无界字符串的申明 265 指针的使用与字符串的申明 266 C是如何使用堆栈处理字符串参数的 267 外部变量 268 应用外部变量 269 外部静态变量 270 VOLATILE关键字 271 调用结构和基指针 272 调用汇编语言函数 273 从汇编语言函数中返回值 274 没有返回值的函数 275 不使用参数的函数 276 AUTO关键字 277 范围 278 范围的分类 279 名称空间和标识符 280 标识符的可见性 281 DURATION 282 支持参数个数可变的函数 283 支持个数可变的参数 284 VA-START、VA-ARG和VA-END是如何工作的 285 创建支持多参数多类型的函数 第五章 键盘 *** 作 286 从键盘读入字符 287 显示字符输出 288 缓冲输入 289 将键盘输入赋组合字符串 290 联合使用GETCHAR和PUTCHA 291 记住GETCHAR和PUTCHAR都是宏 292 使用直接I/O读入字符 293 不显示字符的直接键盘输入 294 知道何时使用‘\R’和‘\N’ 295 直接输出 296 将按键放回键盘缓存 297 使用CPPINTF快速格式化输出 298 快速格式化键盘输入 299 写字符串 300 使用直接I/O实现更快的字符串输出 301 从键盘读入字符串 302 以更快的速度从键盘输入字符串 303 以彩色显示输出 304 清除屏幕显示 305 删除当前行到行尾的内容 306 删除屏幕上的当前行 307 定位光标进行屏幕输出 308 判断行与列的位置 309 在屏幕上插入空行 310 将屏幕上的文本拷贝到缓冲区 311 将缓冲区中的文本拷贝到屏幕的指定位置 312 判断文本模式设置 313 控制屏幕颜色 314 指定背景色 315 使用TEXTCOLOR设置前景色 316 使用TEXTBACKGROUND设置背景色 317 控制文本的明暗度 318 决定当前文本模式 319 在屏幕上移动文本 320 定义文本窗口 第六章 数学 321 使用整型表达式的绝对值 322 使用ARCCOSINE反余弦 323 使用ARCSINE反正弦 324 使用ARCTANGENT反正切 325 求复数的绝对值 326 对浮点值进位舍入 327 使用角的余弦 328 使用角的双曲余弦 329 使用角的正弦 330 使用角的双曲正弦 331 使用角的正切 332 使用角的双曲正切 333 整数相除 334 使用指数 335 使用浮点型表达式的绝对值 336 使用浮点余数 337 使用浮点值的尾数和指数 338 计算X2E的结果 339 计算自然对数 340 计算LOG10X的值 341 判断最大值与最小值 342 把浮点值分解成整数和小数部分 343 计算Xn的结果 344 计算1010的结果 345 生成随机数 346 将随机值映射到指定范围 347 给随机数生成器赋初值 348 计算数值的平方根 349 创建定制数学错误处理程序 第七章 文件、目录和磁盘 350 判断当前盘驱动器 351 选择当前驱动器 352 判断可用的盘空间 353 当心DBLSPACE 354 读入文件分配表FAT信息 355 磁盘ID 356 绝对扇区读写 *** 作 357 进行BIOS磁盘I/O 358 测试软驱是否准备好 359 应用FOPEN打开文件 360 FILE结构 361 关闭一个打开的文件 362 每次读/写文件信息的一个字符 363 文件指针的位置指针 364 判断当前文件位置 365 文件流 366 文件翻译 367 CONFIGSYS文件的FILES=条目 368 使用低级和高级文件I/O 369 文件句柄FILE HANDLES 370 进程文件表PROCESS FILE TABLE 371 进程文件表入口 372 系统文件表 373 显示系统文件表 374 从流指针中导出文件句柄 375 进行格式化文件输出 376 重命名文件 377 删除文件 378 判断程序如何访问文件 379 设置文件的访问模式 380 深入掌握文件属性 381 检测文件流错误 382 判断文件的长度 383 刷新I/O流 384 一次关闭所有被打开的文件 385 获取文件流的文件句柄 386 使用P-TMPDIR创建临时文件名 387 使用TMP或TEMP创建临时文件名 388 创建真正的临时文件 389 删除临时文件 390 为文件搜索命令路径 391 为文件搜索环境入口的子目录 392 打开TEMP目录中的文件 393 最小化文件I/O *** 作 394 在目录名中使用反斜杠 395 改变当前目录 396 创建目录 397 删除目录 398 删除目录树 399 建立完全路径名 400 分解目录路径 401 建立路径名 402 使用低级函数打开和关闭文件 403 创建文件 404 进行低级读写 *** 作 405 判断文件是否结束 406 应用低级文件例行程序 407 为文件句柄翻译指定模式 408 打开LSEEK定位文件指针 409 打开多于20个的文件 410 使用DOS文件服务 411 获取文件的日期和时间标记 412 利用位域获取文件的日期与时间 413 设置文件的日期与时间标记 414 把文件日期和时间设置成当前日期和时间 415 每次读写一个字 416 改变文件的长度 417 控制文件打开 *** 作的读写模式 418 将缓冲区赋给文件 419 分配文件缓冲区 420 利用MKTEMP创建唯一文件名 421 读写结构 422 从文件流中读取结构数据 423 复制文件句柄 424 强制文件句柄设置 425 把文件句柄和文件流联系起来 426 文件共享 427 打开文件进行共享访问 428 锁定文件内容 429 获取更精细的文件锁定控制 430 使用DOS目录 431 打开目录 432 读取目录入口 433 利用目录服务读C:\WINDOWS 434 反绕目录 435 递归读取磁盘文件 436 判断当前文件位置 437 打开共享文件流 438 在指定目录中创建唯一文件 439 创建新文件 440 利用DOS服务访问文件 441 强制二进制或文本文件打开 442 按行写文本 443 按行读文本 444 应用FGETS和FPUTS 445 强制二进制文件翻译 446 为什么TEXTCOPY不能拷贝二进制文件 447 判断文件结尾 448 舍弃字符 449 读取格式化的文件数据 450 根据当前位置定位文件指针 451 获取文件句柄信息 452 重新打开文件流 第八章 数组、指针和结构 453 数组 454 申明数组 455 形象表示数组 456 数组的内存需求 457 初始化数组 458 访问数组元素 459 通过循环访问数组元素 460 使用常量定义数组 461 把一个数组传送给函数 462 把数组看作函数 463 区分字符串数组 464 在堆栈中传送数组 465 判断数组能存放多少个元素 466 为大数组使用HUGE内存模式 467 权衡数组与动态存储的利弊 468 多维数组 469 行与列 470 访问二维数组的元素 471 给二维数组元素赋初值 472 判断多维数组占用的内存 473 通过循环显示二维数组 474 遍历三维数组 475 初始化多维数组 476 把二维数组传送给函数 477 把多维数组当作一维数组 478 C是如何存放多维数组的 479 按行存放与按列存放 480 以数组为成员的结构数组 481 联合 482 使用联合节省内存 483 使用REGS——一种典型的联合 484 应用REGS联合中 485 位字段结构 486 形象表示位字段结构 487 位字段结构的取值范围 488 在数组中查找指定的值 489 对分查找 490 应用对分查找法 491 对数组进行排序 492 冒泡排序法 493 应用冒泡排序法 494 选择排序法 495 应用选择排序法 496 SHELL希尔排序法 497 应用SHELL排序法 498 快速排序法 499 应用快速排序法 500 上述排序方法的遗留问题 501 对字符串数组排序 502 利用LFIND搜索字符串 503 利用LSEARCH搜索数值 504 利用BSEARCH搜索已排序数组 505 利用QSORT对数组排序 506 判断数组元素的个数 507 把指针理解为地址 508 判断变量的地址 509 C是如何把数组当成指针的 510 对数组应用取地址运算符 (&) 511 申明指针变量 512 间接访问指针 513 使用指针值 514 指针与函数参数的使用 515 指针运算 516 指针的增值与减值 517 联合应用指针引用与增值 518 利用指针遍历数组 519 利用返回值为指针的函数 520 创建返回值为指针的函数 521 指针数组 522 形象表示字符串数组 523 遍历字符串数组 524 把字符串数组当成指针 525 使用指向一个指向字符串的指针的指针 526 利用指针申明字符串常量 527 VOID类型指针 528 创建指向函数的指针 529 使用指向函数的指针 530 使用三级指针 531 结构 532 结构是变量申明的模板 533 结构标记是结构的名称 534 用不同的方式申明结构 535 结构成员 536 形象表示结构 537 应用结构 538 把结构传递给函数 539 在函数内部改变结构 540 (point)member间接引用 541 使用pointer-->member格式 542 使用无标记结构 543 结构定义的范围 544 初始化结构 545 进行结构I/O 546 使用嵌套结构 547 包含数组的结构 548 创建结构数组 第九章 DOS和BIOS服务 549 DOS系统服务 550 BIOS服务 551 寄存器 552 标志寄存器 553 软件中断 554 利用BIOS访问指针 555 CONTROL+BREAK信息 556 可能的DOS副作用 557 暂时挂起程序 558 控制声音 559 获取国家专用的信息 560 磁盘传输地址 561 访问和控制磁盘传输区 562 BIOS键盘服务 563 获取BIOS设备列表 564 控制串行口I/O 565 利用BDOS访问DOS服务 566 获取扩展DOS错误信息 567 判断BIOS常规内存数量 568 创建远指针FAR PRINTER 569 把远端地址分解为段地址和偏移地址 570 判断自由核心内存 571 读段寄存器设置 572 内存的类型 573 常规内存 574 常规内存的分布 575 访问常规内存 576 为什么PC和DOS限制于1MB 577 从段和偏移量中产生地址 578 扩充内存 579 使用扩充内存 580 扩展内存 581 实模式和保护模式 582 访问扩展内存 583 高端内存区 584 堆栈 585 各种堆栈配置 586 判断程序的当前堆栈大小 587 使用-STKLEN控制堆栈空间 588 给内存区域赋值 589 拷贝内存区域 590 拷贝内存区域直到某指定字节 591 比较两个无符号字符数组 592 交换两个相邻字符串字节 593 分配动态内存 594 再谈类型转换 595 不再需要时释放内存 596 利用CALLOC函数分配内存 597 堆 598 解决64KB堆限制 599 从堆栈中分配内存 600 分配巨型数据 601 改变被分配内存区域的大小 602 BRK函数 603 检测堆 604 快速堆检测 605 填充自由堆空间 606 检测特定的堆入口 607 遍历堆入口 608 访问指定内存单元 609 向内存中置数 610 PC端口 第十章 内存管理 611 访问端口值 612 CMOS 613 内存模式 614 微型内存模式 615 小型内存模式 616 中型内存模式 617 压缩内存模式 618 大型内存模式 619 巨型内存模式 620 判断当前的内存模式 第十一章 日期和时间 621 获取当前日期与时间 622 将日期和时间从秒的形式转换成ASCII码 623 DAYLIGHT SAVINGS ADJUST MENT 624 延迟若干毫秒 625 判断程序的耗时 626 比较两个时间 627 获取数据串 628 获取时间串 629 读BIOS计时器 630 使用当地时间 631 使用格林威治平时 632 获取DOS系统时间 633 获取系统日期 634 设置DOS系统时间 635 设置DOS系统日期 636 把DOS日期转换为UNIX格式 637 利用TIMZONE计算时差 638 判断当前时区 639 利用TZSET设置时区区域 640 利用TZ环境入口 641 从用户程序中设置TZ环境入口 642 获取时区信息 643 以秒钟的形式设置自1/2/1970午夜以来的系统时间 644 把日期转换成自1/1/1970以来的秒数 645 判断日期的儒略历日期 646 创建格式化日期和时间串 647 PC时钟类型 第十二章 重定向I/O和进程命令行 648 等候按键 649 提醒用户输入密码 650 自己编写密码函数 651 输出重定向 652 输入重定向 653 联合使用INPUT和OUTPUT重定向 654 利用STDOUT和STDIN 655 管道运算符 656 GETCHAR和PUTCHAR 657 对重定向输入进行编号 658 确保信息出现在屏幕上 659 自定义MORE命令 660 显示重定向行的数目 661 显示得定向字符的个数 662 创建定时的MORE命令 663 防止I/O重定向 664 应用STDPRN文件句柄 665 把重定向输出分割到一个文件中 666 应用STDAUX文件句柄 667 在重定向输入人寻找子串的出现 668 显示重定义输入的头N行 669 命令行变元 670 显示命令行变元的个数 671 显示命令行 672 使用引号内的命令行变元 673 从命令行中显示文件内容 674 把ARGV当作指针 675 C是如何知道命令行的 676 环境 677 把ENV当作一个指针 678 对MAIN的参数使用VOID 679 使用命令行数字 680 出口状态值 681 为出口状态过程使用RETURN 682 判断是否把MAIN申明为VOID 683 在环境中搜索特定入口 684 DOS是如何对待环境的 685 应用ENVIRON全局变量 686 给当前环境添加入口 687 给DOS环境添加元素 688 退出当前程序 689 定义在程序结束时执行的函数 第十三章 编程工具 690 库 691 重复使用目标代码 692 编译C和OBJ文件时出现的问题 693 创建库文件 694 常用的库 *** 作 695 列出库文件中的子例行程序 696 利用库减少编译时间 697 库管理程序的其他功能 698 连接器 699 连接器的功能 700 使用连接映像 701 使用连接器响应文件 702 使用MAKE命令简化应用程序的创建 703 生成一个简单的MAKE文件 704 通过MAKE使用多依赖性文件 705 说明用户的MAKE文件 706 MAKE和命令行 707 在MAKE文件中放置多个依赖性 708 显现的和隐含的MAKE法则 709 使用MAKE宏 710 预定义MAKE宏 711 用MAKE执行条件进程 712 验证一个MAKE宏 713 再次包含一个MAKE文件 714 使用MAKE的宏修饰符 715 因错误结束MAKE文件 716 关闭命令显示 717 使用文件BUILTINSMAK 718 在MAKE中执行出口状态进程 719 同时激活和改变一个宏 720 为多个依赖文件执行一个MAKE命令 第十四章 高级C语言编程 721 判断是否有数学协处理器 722 理解CTYPEH,ISTYPE宏 723 控制直接的视像 724 检查系统和路径错误 725 显示预定义的错误信息 726 决定 *** 作系统版本号 727 理解可移值性 728 执行一个非本地的GOTO 729 获得进程ID(PID) 730 激活一个内部的DOS命令 731 使用-PSP全局变量 732 在变量申明中使用CONST修饰符 733 使用枚举类型 734 放置一个枚举类型来使用 735 理解一个枚举值 736 分配一个特殊的值给枚举类型 737 保存和恢复寄存器 738 动态列表简介 739 申明一个链接的列表结构 740 建立一个链接的列表 741 一个简单的链表例子 742 理解链表转移 743 创建一个更有用的列表 744 增加一个列表入口 745 插入一个列表入口 746 显示一个存储的目录 747 从一个列表中删除一个元素 748 使用一个双向链表 749 创建一个简单的双向链表 750 理解NODE-->PREVIOUS-->NEXT 751 从一个双向链表中移走一个元素 752 在一个双向链表中插入一个元素 753 理解子进程 754 派生一个子进程 755 使用其他的SPAWNLXX函数 756 使用SPAWNVXX函数 757 执行一个子进程 758 使用其他的EXECLXX函数 759 使用EXECVXX函数 760 理解覆盖 761 理解中断 762 PC机的中断 763 使用中断关键字 764 判断一个中断向量 765 设置一个中断向量 766 使能与禁止中断 767 生成简单的中断处理器 768 链接一个二次中断 769 生成一个中断 770 捕获PC机时钟 771 理解致命错误 772 C语言中的致命错误处理器 773 一个更完全的致命错误处理器 774 恢复改变过的中断 775 生成一个Ctrl+Break处理器 776 在用户的致命错误处理器使用DOS服务 777 使用指令集选择改善性能 778 直接插入内部函数 779 使能和禁止内在函数 780 理解快速函数调用 781 -FASTCALL参数传递的法则 782 理解不变代码 783 理解冗载入禁止 784 理解代码紧缩 785 理解循环紧缩 786 理解循环引入和强度削减 787 消除普通的子表达式 788 标准C语言转换 789 理解C语言的4个基本类型 790 基本类型与派生类型 791 理解初始化值 792 理解连接 793 理解临时申明 794 申明和定义 795 理解左值LVALUE 796 理解右值RVALUE 797 使用段寄存器关键字 798 谨慎使用远指针 799 理解正常化的指针 800 数学协处理器语句 801 理解变量中的CDECL和PASCAL 802 防止循环包含 第十五章 C++入门 803 C++介绍 804 C++源文件的差异 805 从简单的C++程序开始 806 理解COUT I/O流 807 使用COUT输出值和变量 808 用COUT连接不同的数据类型 809 显示十六进制和八进制数值 810 重定向COUT 811 如果钟情PRINTF,使用PRINTF 812 输出 CERR 813 用CIN得到输入 814 CIN不要使用指针 815 理解CIN如何选择数据域 816 理解输入输出流如何获得变量类型 817 使用CLOG实现输出 818 CIN、OCUT、CERR和CLOG是类的实例 819 使用FLUSH *** 纵符快速输出 820 理解ISOTREAMH头文件包含的内容 821 C++需要函数原型 822 C++增加的新关键字 823 C++支持匿名联合 824 分辨全局范围 825 提供缺省参数值 826 控制COUT的输出宽度 827 使用SETW设置COUT宽度 828 指定COUT的填充字符 829 左对齐和右对齐COUT的输出 830 控制COUT显示浮点数字的数目 831 以小数或科学记数格式显示数值 832 恢复COUT至默认值 833 设置输入输出基数 834 在需要的地方定义变量 835 在函数原型中放置默认参数值 836 使用按位运算符及COUT 837 理解迟缓或短路计算 838 在C++中使用CONST关键字 839 在C++中使用ENUM关键字 840 理解自由空间 841 用NEW分配内存 842 为多个数组分配内存 843 无自由空间的测试 844 关于堆空间 845 使用FAR指针和NEW运算符 846 释放内存至自由空间 847 理解C++中的引用 848 给函数传递引用 849 防止隐藏对象 850 用三种方法传递参数 851 使用引用的规则 852 函数可返回引用 853 使用INLINE关键字 854 使用C++的ASM关键字 855 用CIN读字符 856 用COUT写字符 857 简单过滤器程序 858 简单的TEE命令 859 简单的FIRST 860 更好的FIRST命令 861 文件结束测试 862 用ENDL产生新行 863 理解连接规范 864 理解重载 865 重载函数 866 重载函数的第二个例子 867 避免不明确的重载 868 使用CIN每次读一行 869 在循环中使用CINGETLINE 870 改变NEW运算符的缺省处理器 871 用SET-NEW-HANDLER函数设置NEW处理器 872 判断C++编译 873 理解C++中的结构 874 结构中定义函数成员 875 在结构内定义成员函数 876 在结构外定义成员函数 877 给成员函数传递参数 878 同一结构的多个变量 879 不同结构具有同名函数成员 880 同名成员不同函数 第十六章 对象 881 理解对象 882 理解面向对象编程 883 理解为什么使用对象 884 把程序分解成对象 885 理解对象和类 886 理解C++的类 887 理解封装 888 理解多态性 889 理解继承 890 类和结构的选择 891 创建简单类模型 892 实现简单类的程序 893 定义类构件 894 理解作用域分辨符 895 在申明中使用或省略类名 896 理解PUBLIC:标志 897 理解信息隐藏 898 理解PRIVATE:标志 899 理解PROTECTED:标志 900 使用公用和私数据 901 决定什么隐藏什么公开 902 公用方法常称为接口函数 903 在类外定义类函数 904 在类的内部和外部定义方法 905 理解对象实例 906 对象实例共享代码

出错是因为您训练数据有5行,但检验数据x只有1行,数据格式不对。

误差大的原因是因为您设计的神经网络只能逼近静态的一一映射函数,对于异或问题、多值映射问题是无法解决的,而您的样本恰恰是个多值映射问题。

此外,您的样本存在偏置,数据变化范围也很大,应该首先对数据进行归一化的预处理。而且还需要剔除异常数据和对数据进行滤波。

对训练参数设置也不佳。

一般的,神经网络误差大的主要原因是神经网络的基函数是tansig函数,属于S函数的一种,无法通过线性扩张的形式逼近非静态、一一映射的函数。

修改基函数吧,但这些在神经网络命令是无法实现的,还是自己老老实实用m文件编制神经网络程序吧,不要调用命令了。这对深入了解和改进神经网络是很有帮助的。

以下是修改的程序(仅仅对p的第一行进行训练):

clc; clear all;close all;

P=[666 675 634 620 609 620 689 726 701 711 712 728 725 722 717 721 718 739 764 750 757 698 650 641;

669 659 633 623 628 607 667 718 754 726 741 739 749 746 736 726 740 765 744 734 741 714 647 645;

665 666 646 627 609 596 591 584 604 623 657 704 694 716 708 714 695 731 726 725 716 667 657 659;

622 650 621 598 583 575 556 537 545 578 632 659 647 641 651 648 628 635 673 690 702 649 623 613;

653 628 610 586 590 583 662 705 711 712 742 746 733 756 751 724 728 738 742 751 744 695 637 638];

T=[669 659 633 623 628 607 667 718 754 726 741 739 749 746 736 726 740 765 744 734 741 714 647 645;

665 666 646 627 609 596 591 584 604 623 657 704 694 716 708 714 695 731 726 725 716 667 657 659;

622 650 621 598 583 575 556 537 545 578 632 659 647 641 651 648 628 635 673 690 702 649 623 613;

653 628 610 586 590 583 662 705 711 712 742 746 733 756 751 724 728 738 742 751 744 695 637 638;

676 659 620 607 624 617 667 711 722 736 751 734 724 755 733 722 718 772 747 775 750 719 668 640];

% 创建一个新的前向神经网络

net_1=newff(minmax(P(1,:)),T(1,:),[20,1],{'tansig','purelin'},'traingdm');

% 设置训练参数

net_1trainParamshow = 1;

net_1trainParamlr = 0000001;

net_1trainParammc = 05;

net_1trainParamepochs = 100000;

net_1trainParamgoal = 00001;

% 调用 TRAINGDM 算法训练 BP 网络

[net_1,tr]=train(net_1,P(1,:),T(1,:));

% 对 BP 网络进行仿真

A = sim(net_1,P(1,:));

% 计算仿真误差

E = T(1,:) - A;

MSE=mse(E);

figure(1);

X=1:24;

plot(X,A,'r',X,T(1,:),'bo');

title('o为真实值,为预测值');

x=[645 665 658 617 628 628 677 721 733 730 739 727 725 733 731 714 734 739 753 773 743 697 650 654];

%测试

sim(net_1,x)

// 用字符处理比较方便

#include<iostream>

using namespace std;

int main()

{

int i,j,len;

char a[20];

cingetline(a,20);

len=strlen(a);

j=len%3;

for(i=0;i<len;i++)

{

cout<<a[i];

if((i<len-1) && (i+1)%3==j)cout<<",";

}

cout<<endl;

system("pause");

return 0;

}

802 不识别提供的卡。请检查是否正确插入卡,并且是否插紧。­

801 该链接已配置为验证访问服务器的身份,Windows 无法验证服务器发送的数字证书。­

800 无法建立 *** 连接。无法连接 *** 服务器,或者该连接的安全参数配置不正确。­

799 由于网络上存在 IP 地址,因此无法启用 Internet 连接共享­

798 找不到可与可扩展身份验证协议一起使用的证书。­

797 无法建立到远程计算机的连接,因为找不到调制解调器或者调制解调器忙。­

796 该用户的服务类型 RADIUS 属性既不是帧也不是回拨帧。­

795 该用户的隧道类型 RADIUS 属性不正确。­

794 该用户的帧协议 RADIUS 属性不是 PPP。­

792 L2TP 连接尝试失败,因为安全协商超时。­

791 L2TP 连接尝试失败,因为没有找到该连接的安全策略。­

790 L2TP 连接尝试失败,因为远程计算机上的证书验证失败。­

789 L2TP 连接尝试失败,因为安全层在与远程计算机进行初始协商时遇到处理错误。­

788 L2TP 连接尝试失败,因为安全层无法与远程计算机协商兼容参数。­

787 L2TP 连接尝试失败,因为安全层无法验证远程计算机。­

786 L2TP 连接尝试失败,因为进行安全验证时计算机上没有有效的计算机证书。­

785 登录时不能用此连接拨号,因为它没有配置为使用智能卡­

784 登录时不能用此连接拨号,因为它被配置为使用一个与智能卡上的名称;;­

783 不能启用 Internet 连接共享(ICS)。选择为专用网络的 LAN­

782 网络地址转换 (NAT) 当前安装为路由协议­

781 由于找不到有效的证书,从而导致加密尝试失败。­

780 所尝试使用的功能对此连接无效。­

779 如果用这个连接拨出,您必须使用智能卡。­

778 不能验证服务器的身份。­

777 由于远程计算机上的调制解调器(或其他连接设备)出现故障,连接尝试失败。­

776 由于目标已经调用“请勿打扰”功能,因此该呼叫无法连接。­

775 呼叫被远程计算机阻塞。­

774 临时故障导致连接尝试失败。再次尝试连接。­

773 由于目标号码已更改,从而导致连接尝试失败。­

772 远程计算机的网络硬件与请求的呼叫类型不兼容。­

771 由于网络忙,因此连接尝试失败。­

770 远程计算机拒绝连接尝试。­

769 指定的目的地是不可访问的。­

768 由于加密数据失败,导致连接尝试失败。­

767 不能启用 Internet 连接共享 (ICS)。专用网络上选择的 LAN ­

766 找不到证书。使用通过 IPSec 的 L2TP 协议要求安装一个机器证书­

765 不能启用 Internet 连接共享。LAN 连接已经配置­

764 未安装智能卡读取器。­

763 不能启用 Internet 连接共享。除了共享的连接之外,还有两个或多个局域网连接。­

761 对该连接启用 Internet 连接共享时发生错误。­

760 启用路由功能时发生错误。­

758 该连接上已经启用 Internet 连接共享。­

757 远程访问服务不能自动启动。事件日志中提供了其他信息。­

756 已经拨打该连接。­

755 由于该项已经指定自定义的拨号程序,因此系统不能执行自动拨号。­

754 系统无法找到多路链接绑定。­

753 由于连接是由多协议路由器创建的,因此该连接无法断开。­

752 处理脚本时遇到语法错误。­

751 回拨号码包含无效的字符。只允许有下列字符:0 到­

743 远程服务器要求数据加密。­

742 远程计算机不支持所需的数据加密类型。­

741 本地计算机不支持所需的数据加密类型。­

740 检测到无效拨号规则。­

739 远程服务器所需的身份验证协议不能使用存储的密码。重拨,明确地输入密码。­

738 服务器没有指派地址。­

737 检测到环回。­

736 远程计算机终止了控制协议。­

735 请求的地址被服务器拒绝。­

734 PPP 链接控制协议被终止。­

733 不能完成到远程计算机的连接。您可能需要调整此计算机上的协议。­

732 您的计算机和远程计算机的 PPP 控制协议无法一致。­

731 未配置协议。­

729 除非安装 IP 协议,否则不能使用 SLIP。­

728 系统找不到 IP 适配器。­

726 IPX 协议不能用于在多个调制解调器(或其他连接设备)上同时向外拨号。­

723 电话号码(包含前缀和后缀)太长。­

722 从远程计算机接收到无效的数据。该数据被忽略。­

721 远程计算机没反应。­

720 无法建立与远程计算机的连接。您可能需要更改此连接的网络设置。­

719 连接被远程计算机终止。­

718 因为远程计算机不能及时响应,此连接已被终止。­

717 在远程访问服务 IP 地址的静态池中没有可用的 IP 地址。­

716 远程访问服务 IP 配置不可用。­

715 由于电话线质量差,所以发生过多错误。­

714 没有 ISDN 信道可用于拨号。­

713 没有活动的 ISDN 线路可用。­

712 双路端口正在初始化。等几秒钟再重拨。­

711 在此计算机上的配置错误不能进行此连接。­

710 当与调制解调器通讯时检测到序列溢出错误。­

709 更改域上的密码时发生错误。密码可能太短或者可能与以前使用的密码匹配。­

708 帐户已经过期。­

707 出现与 X25 协议有关的错误。­

705 身份验证状态无效。­

704 回拨号码无效。­

703 连接需要用户提供信息,但应用程序不允许用户交互。­

701 调制解调器使用了 COM 驱动程序不支持的连接速度。­

700 设备 INF 文件中的扩展命令太长。­

699 调制解调器的响应导致缓冲区溢出。­

697 响应循环未完成。­

696 已启动状态机器。­

695 未启动状态机器。­

692 调制解调器(或其他连接设备)发生硬件故障。­

681 调制解调器(或其他连接设备)报告了一个常规错误。­

679 系统无法检测载波。­

678 远程计算机没响应。­

677 是某人而不是调制解调器(或其他连接设备)应答。­

676 电话线忙。­

675 系统不能从 INI 文件中读取最大的载波连接速度。­

674 系统不能从 INI 文件中读取最大的连接速率 (bps)。­

673 系统不能从 INI 文件中读取用法。­

672 系统不能从 INI 文件中读取设备名称。­

671 系统不能从 INI 文件中读取设备类型。­

670 系统不能从 INI 文件中读取部分名称。­

669 INI 文件中的用法参数无效。­

668 连接被终止。­

667 系统不能读取 INI 文件。­

666 调制解调器(或其他连接设备)不起作用。­

665 调制解调器(或其他连接设备)配置不正确。­

664 系统内存不足。­

663 INI 文件引用了未知的设备类型。­

662 试图设置设备 INF 文件部分没有列出的宏。­

661 设备 INF 文件缺少命令。­

660 设备 INF 文件没有包含对该命令的响应。­

659 INI 文件引用了未知的设备名。­

658 在设备 INF 或 INI 文件中的设备名太长。­

657 无法打开设备 INF 文件。­

656 在设备 INF 文件部分中的 宏包含未定义的宏。­

655 在设备 INF 文件部分中未找到 宏。­

654 设备 INF 文件部分中的命令或响应引用了未定义的宏。­

653 在设备 INF 文件中找不到调制解调器(或其他连接设备)所需的宏。­

652 来自调制解调器(或其他连接设备)的无法识别的响应。­

651 调制解调器(或其他连接设备)报告了一个错误。­

650 远程访问服务器没有响应。­

649 帐户没有拨入的权限。­

648 该帐户的密码已过期。­

647 此帐户被禁用。­

646 此时间不允许该帐户登录。­

645 发生内部身份验证错误。­

644 您将无法接收d出的网络消息。­

643 服务器上的网络适配器出现故障。­

642 计算机的 NetBIOS 名称之一已经在远程网络上注册。­

641 服务器不能分配支持该客户端所需的 NetBIOS 资源。­

640 发生与 NetBIOS 有关的错误。­

639 异步网络不可用。­

638 请求超时。­

637 检测到不能转换的字符串。­

636 连接到端口的设备不是所期望的设备。­

635 出现未知错误。­

634 您的计算机无法在远程网络上注册。­

633 调制解调器(或其他连接设备)早已在使用,或没有正确配置。­

632 检测到不正确的结构大小。­

631 调制解调器(或其他连接设备)已由用户断开。­

630 调制解调器(或其他连接设备)由于硬件故障已断开。­

629 连接被远程计算机关闭。­

628 在连接完成前,连接被远程计算机终止。­

627 无法找到关键字。­

626 无法加载字符串。­

625 系统在电话簿文件中找到无效信息。­

624 系统无法更新电话簿文件。­

623 系统无法为这个连接找到电话簿项。­

622 系统无法加载电话簿文件。­

621 系统无法打开电话簿文件。­

错误代码 00000020,参数1 00000000,参数2 0000fff6,参数3 00000000,参数4 00000001­

620 无法确定端点。­

619 不能建立到远程计算机的连接,因此用于此连接的端口已关闭。­

618 指定的端口没有打开。­

617 调制解调器(或其他连接设备)已断开。­

616 异步请求处于挂起状态。­

615 找不到指定的端口。­

以上就是关于校车调度问题(数学建模)全部的内容,包括:校车调度问题(数学建模)、求最小二乘曲线的拟合的C语言程序、编写程序,将用户输入的一个位数不确定的正整数按照标准的三位分节格式输出,求救啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10090917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存