版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、水资源短缺风险综合评价摘要关键词: 一、问题重述水资源,是指可供人类直接利用,能够不断更新的天然水体。主要包括陆地上的地表水和地下水。风险,是指某一特定危险情况发生的可能性和后果的组合。水资源短缺风险,泛指在特定的时空环境条件下,由于来水和用水两方面存在不确定性,使区域水资源系统发生供水短缺的可能性以及由此产生的损失。近年来,我国、特别是北方地区水资源短缺问题日趋严重,水资源成为焦点话题。以北京市为例,北京是世界上水资源严重缺乏的大都市之一,其人均水资源占有量不足300m3,为全国人均的1/8,世界人均的1/30,属重度缺水地区,附表中所列的数据给出了1979年至2000年北京市水资源短缺的状
2、况。北京市水资源短缺已经成为影响和制约首都社会和经济发展的主要因素。政府采取了一系列措施, 如南水北调工程建设, 建立污水处理厂,产业结构调整等。但是,气候变化和经济社会不断发展,水资源短缺风险始终存在。如何对水资源风险的主要因子进行识别,对风险造成的危害等级进行划分,对不同风险因子采取相应的有效措施规避风险或减少其造成的危害,这对社会经济的稳定、可持续发展战略的实施具有重要的意义。北京2009统计年鉴及市政统计资料提供了北京市水资源的有关信息。利用这些资料和你自己可获得的其他资料,讨论以下问题:1评价判定北京市水资源短缺风险的主要风险因子是什么?影响水资源的因素很多,例如:气候条件、水利工程
3、设施、工业污染、农业用水、管理制度,人口规模等。2建立一个数学模型对北京市水资源短缺风险进行综合评价, 作出风险等级划分并陈述理由。对主要风险因子,如何进行调控,使得风险降低?3 对北京市未来两年水资源的短缺风险进行预测,并提出应对措施。4 以北京市水行政主管部门为报告对象,写一份建议报告。二、符号说明三、评价判定水资源短缺风险因子3.1问题的分析3.1.1基于聚类分析的水资源短缺风险因子分类为了直观地说明水资源短缺风险程度,利用Quick Cluster过程(快速样本聚类) 对风险进行聚类。快速样本聚类需要确定类数,利用均值分类方法对观测量进行聚类,根据设定的收敛判据和迭代次数结束聚类过程,
4、计算观测量与各类中心的距离,根据距离最小的原则把各观测量分派到各类中心所在的类中去。事先选定初始类中心,根据组成每一类的观测量,计算各变量均值,每一类中的均值组成第二次迭代的类中心,按照这种方法迭代下去,直到达到迭代次数或达到中止迭代的数据要求时,迭代停止,聚类过程结束。对于等间隔测度的变量,一般用Euclidean distance(欧式距离) 计算。3.1.2基于因子分析与主成分分析的水资源短缺主要风险因子判定因子分析 为了直观地突出主要的水资源短缺风险因子,方便控制和治理水资源短缺问题,利用因子分析这种降维、简化数据的技术。通过研究众多观测量之间的内部依赖关系,探求观测数据中的基本结构,
5、并用少数几个“抽象”的观测量来表示其基本的数据结构。能反映原来众多变量的主要信息,原始的变量是可观测的显在变量,而因子一般是不可观测的潜在变量。因子分析的模型因子分析的数学模型,与一般的多元回归模型比较相似,即每个变量都可表示成各个因子的线性组合。例如“入境水量”的指标可以表示为 (1)式(1)与一般多元回归方程式的不同之处是:括号内的这三个变量并非独立变量,而是由一组变量按其特征形成了新变量,这就是“共同因子”;而变量则称为“唯一因子”,它仅是(即入境水量)指标中的孤立的一个因子。式(1)中的为共同因子的常数(即因子载荷量)一般的说,对于第个观测量的数学模型为 (2)式(2)中,是共同因子,
6、是共同因子的常数。主成分分析由于多个观测量之间往往存在着一定程度的相关性。我们自然希望通过线性组合的方式,从这些指标中尽可能地提取信息。当第一个线性组合不能提取更多的信息时,再考虑用第二个线性组合继续这个快速提取的过程,直到所提取的信息与原指标相差不多为止。一般说来,在主成分分析适用的场合,用较少的主成分就可以得到较多的信息量。以各个主成分为分量,就得到一个更低维的随机向量;因此,通过主成分分析既可以降低数据“维数”,又保留了原数据的大部分信息。主成分分析的模型 设个观测量构成的维随机向量为.对作正交变换,令,其中为正交阵,要求的个分量是不相关的,并且的第一个分量的方差是最大的,第二个分量的方
7、差次之,。为了保持信息不丢失,的各分量的方差和与的各分量的方差和相等。3.2模型的假设影响水资源短缺风险因子存在而且可以用来解释复杂变量。只要这个变量共同具有这个因子,便可观测到这些变量是相关的。3.3模型的求解年份工业用水/亿立方米生活用水/亿立方米农业用水/亿立方米水耗/立方米全年水资源总量地下水资源总量地表水资源总量降水量/毫米20019.212.00.3104.9119.215.77.8338.920027.510.80.880.1916.114.75.3370.420038.413.00.671.5018.414.86.1444.920047.712.80.657.3521.416.
8、58.2483.520056.813.41.149.5023.218.57.6410.720066.213.71.642.2524.518.56.031820075.813.92.735.3423.816.27.6483.920085.214.73.231.5834.221.412.8626.320095.214.73.629.9221.815.16.8480.6初始的因子载荷量及因子解释的方差Factor1Factor2x1工业用水-0.870430.42069x2生活用水0.88322-0.22440 x3农业用水0.85161-0.42067x4水耗-0.869630.41256x5全年
9、水资源总量0.925610.32630 x6地下水资源总量0.741710.49757x7地表水资源总量0.742350.62574x8降水量0.780480.18681Variance Explained by Each FactorFactor1 Factor25.5863371 1.3550108由表2显示出前2个因子与各个变量之间的相关关系,这些系数称为因子载荷量。它们表示系数绝对值较大的变量,与相应因子(Factor)的相关强度较强,可以看出,全年水资源总量与Factor1的系数为0.92561,但对于因子2来说系数很小,为0.32630,表明全年水资源总量只与Factor1关系密切
10、。从表2可以看出x1,x2,x3,x4,x5,x6,x7,x8分别与Factor1相关,x7则与Factor2相关。但是到目前为止,不知道这8个因子对模型的拟合度究竟如何,因此需要进一步研究这8个因子。转轴后的因子载荷量及因子解释的方差Factor1Factor2x1工业用水0.93250-0.25508x2生活用水-0.813120.41141x3农业用水-0.918310.24273x4水耗0.92656-0.26068x5全年水资源总量-0.483090.85431x6地下水资源总量-0.231930.86251x7地表水资源总量-0.148170.95952x8降水量-0.465400
11、.65379Variance Explained by Each FactorFactor1 Factor2 3.7582617 3.1830862根据表4可以看出转轴后的因子矩阵与表2大不一样,Factor1因子载荷量大于0.5的,由8个锐减到4个,同时变量与因子相关的情形大不一样了,即转轴前x5,x6,x8与Factor1相关,所以x5,x6,x8 相关,但转轴后,x5,x6,x7,x8与Factor2相关,又因为Factor2居后,他们的相关性就显得相对地不太重要。 表3变量与因子得分Factor1Factor2x1工业用水0.321500.13156x2生活用水-0.22801-0.0
12、2089x3农业用水-0.31895-0.13377x4水耗0.317450.12714x5全年水资源总量0.033410.29039x6地下水资源总量0.141300.36401x7地表水资源总量0.203390.43537 x8降水量-0.014670.19573Squared Multiple Correlations of the Variables with Each FactorFactor1 Factor21.0000000 1.0000000从表6可以看出,变量x1(工业用水),x2(生活用水),x3(农业用水),x4(水耗)对因子1得分相对较高,起决定作用,但x5(全年水资源
13、总量),x6(地下水资源总量),x7(地表水资源总量),x8(降水量)对因子2得分相对较高,对其贡献较大。 相关矩阵x1x2x3x4x5x6x7x8x11.0000-0.7758-0.92750.9400-0.6849-0.5005-0.3659-0.5417x2-0.77581.00000.8111-0.85580.75230.53340.50660.6053x3-0.92750.81111.0000-0.83430.64300.35400.42380.6204x40.9400-0.8558-0.83431.0000-0.6747-0.4984-0.3437-0.5824x5-0.68490
14、.75230.6430-0.67471.00000.91480.86140.6820 x6-0.50050.53340.3540-0.49840.91481.00000.76860.4391x7-0.36590.50660.4238-0.34370.86140.76861.00000.7835x8-0.54170.60530.6204-0.58240.68200.43910.78351.0000表8列出的是相关系数矩阵,从表中可以看出,工业用水和农业用水的相关系数为-0.9275,呈现较强的负相关,即当工业用水数量增加时,农业用水数量将有所下降;其次是生活用水和工业用水的相关系数为-0.775
15、8,即当工业用水的数量增加时,生活用水的数量有所下降。这是与实际相符的,用于供水量是一定的,所以作为用水量相对较大的三个板块,一方用水的增加势必导致其他行业的用水紧张,其次我们也可以看到,水耗与工业用水 的相关系数为0.9400,表明水耗与工业用水成较强的正相关,说明工业用水的耗水量比较大,对水资源的利用率还不够高。表9 Eigenvalues of the Correlation Matrix前两个主成分的特征值都大于1 EigenvalueDifferenceProportionCumulative16.427522134.920341700.71420.714221.507180430.
16、885709820.16750.881630.621470610.386162620.06910.950740.235307990.054874360.02610.976850.180433630.162975060.02000.996960.017458570.007908710.00190.998870.009549860.008473060.00110.999980.001076800.001076800.00011.000090.000000000.00001.0000从表9中可以看出,前8个主成分的特征值,表示每个原始变量对于各个主成分的因子载荷量的贡献率,比如对于第一个主成分而言,
17、工业用水对于第一主成分的比重为0.7142,是所有用水量中最关键的。按第一主成分中的个数升序排序年份yPrin1Prin2x1x2x3x4x5x6x7x82001-3.172791.258569.212.00.3104.9119.215.77.8338.92002-3.01422-0.413127.510.80.880.1916.114.75.3370.42003-1.91158-0.085778.413.00.671.5018.414.86.1444.92004-0.659590.681777.712.80.657.3521.416.58.2483.520050.183580.334146.
18、813.41.149.5023.218.57.6410.720060.38829-0.647386.213.71.642.2524.518.56.0318.020071.47857-0.918755.813.92.735.3423.816.27.6483.920092.06717-2.158245.214.73.629.9221.815.16.8480.620084.640581.948795.214.73.231.5834.221.412.8626.3观察表10的结果来看从第一主成分中的水资源用水和来水的排序看,2001-2009年水资源总体呈现上升趋势,特别是2007-2008上升得很明显
19、(载荷因子由1.47857提高到4.64058)生活用水量是明显呈现逐年上升的势头(12.8-13.4-13.7-13.9-)3.4 模型的结果对于第一主成分最有影响的变量首先是x1(工业用水),x2(生活用水),x3(农业用水)x4(水耗),所以第一主成分可解释为用水量因子。对于第二主成分最有影响力的变量是x5(全年水资源总量),x6(地下水资源总量),x7(地表水资源总量)x8(降水量),所以第二主成分可解释为供水量因子。可以为下面的层次分析法的分层提供有力依据。我们得出影响水资源短缺的最主要风险因子是工业用水,对主成分因子载荷量的贡献相当大,远远大于生活用水,农业用水以及水耗。3.5模型
20、的优缺点分析模型优点:模型缺点:四、水资源短缺风险综合评价4.1问题分析4.2模型的假设模糊综合评价决策是对受多种因素的事物作出全面的评价的一种十分有效的多因素决策方法。而我们所研究的水资源短缺风险也受许多因素的影响。设为种因素(或指标),为种评判,它们的元素个数和名称均可根据实际问题需要由人们主观规定。由于各种因素所处的地位不同,作用也不同,当然权重也不同,因而评判也就不同,人们对种评判并不是绝对地肯定或否定,因此综合评判应该是上的一个模糊子集,其中反映了第种评判在综合评价中所占的地位(即对模糊集的隶属度,)。综合评判依赖于各个因素的权重,它应该是上的模糊子集,且,其中表示第种因素的权重。因
21、此,一旦给定权重,相应地可得到一个综合评价。于是,我们先建立一个从到的模糊变换,如果对每一个因素单独作一个评判,就可以看作是到的模糊映射,即由可诱导出一个到的模糊线性变换,我们就可以把看作是由权重得到的综合评判的数学模型。工业用水生活用水农业用水工业水污染生活水污染农业水污染人均生产总值植被覆盖面积人口数水资源耗用!水污染状况!水利资金投入及人口数!4.3模型的建立与求解第一步 将研究目标(A)、准则(B)、指标(X)按相关关系分成最高层、中间层和最底层,层次结构图如图3.1所示。北京市水资源短缺风险水利资金投入及人口数工业用水量生活用水量农业用水量准则层指标层目标层水资源耗用水污染状况工业水
22、污染生活水污染农业水污染人均GDP植被覆盖率人口数据此给出水资源耗用、水污染状况、水利资金投入及人口数两两成对比较的判断矩阵。借助Matlab软件进行求取最大模特征根及相应特征向量的计算,再将所求的特征向量单位化后得到的就是因素B对目标A相对重要性的权重,记为W(见表3.2)表3.2 准则B对目标A相对重要性的权重WAB1B2B3WB11250.58B21/2130.31B31/51/310.11由(表3.2)求得比较矩阵的最大特征值为:通过Matlab编程得到在目标A中所占的权重分别为: 0.58,0.31,0.11第二步 给出最低层对中间层的各个因素的判断矩阵并进行分析。在这个关系的基础上
23、,给出了最低层X:x1,x2,x9对于中间层P:B1,B2,B3各个因素的判断矩阵,并用Matlab进行了类似的计算,显示出了对B1,B2,B3的权重。真正反映了x在B1,B2,B3中所占的比重。B1-xB1x1x2x3Wx11370.68x21/3120.22x31/71/210.10 在中所占的权重分别为:0.68,0.22,0.10B2-xB2x4x5x6Wx41360.67x51/3110.18x61/6110.15在中所占的权重分别为:0.67,0.18,0.15B3-xB3x7x8x9Wx71350.65x81/3120.23x91/51/210.12在中所占的权重分别为:0.65
24、,0.23,0.12表1 各评价因素分级指标水资源短缺风险 u1 (风险率) u2 (脆弱性) u3 (可恢复性) u4 (重现期) u5(风险度)v1 (低) 0. 200 0. 200 0. 800 9. 000 0. 200v2 (较低) 0. 2000. 400 0. 2000. 400 0. 6010. 800 6. 0019. 00 0. 2010. 60v3 (中) 0. 4010. 600 0. 4010. 600 0. 4010. 600 3. 0016. 000 0. 6011. 000v4 (较高) 0. 6010. 800 0. 6010. 800 0. 2000. 4
25、00 1. 0003. 000 1. 0012. 00v5 (高) 0. 800 0. 800 0. 200 1 2. 0004.3模型的结果4.4模型的优缺点评价模型优点:模型缺点:4.5相关建议五、未来两年水资源短缺风险预测5.1问题分析城市年用水量状态是一族依赖于时间的随机变量,是一个随机过程。用水量在时刻所处的状态只与在时刻t的状态有关,而与t时刻以前所处的状态无关,即具有无后效性,又因城市年用水量只能产生可列个状态,而且只在可列个时刻发生转移(即改变其状态),故城市年用水量符合马尔可夫链。设表示系统在时刻处于状态,则马尔可夫链的状态概率为马尔可夫链以表示在时刻系统处于状态的条件下,在
26、时刻系统处于的条件概率,也称转移概率,即。当时,称上述转移概率为一步转移概率。一步转移概率不仅依赖于出发状态和下一步转移到的状态,而且还依赖于系统处于状态的时刻。如果一步转移概率与时间起点无关,即 则称该马尔可夫链具有平稳转移概率,或称是齐次的。马尔可夫链的齐次性表示:无论从什么时刻开始,系统在未来的状态变化过程的统计规律性总是一致的,或保持一种时间历程的不变性。因为城市年用水量状态的一步转移概率只与时间差有关,而与时间起点无关,故可将其看成是一个齐次马尔可夫链。首先,根据城市历年用水量的统计数据,确定城市用水量状态及其一步转移概率矩阵P。其次,通过0,1均匀分布随机数的产生和概率模型的转变,
27、获得给定马尔可夫链的一个样本函数,即得城市今后若干年每年用水量状态的一个样本序列。其中是城市年用水量状态(是随机变量)的样本值。因此,要获得马尔可夫链的一个样本序列。只要获得每个随机变量的样本值。如果相互独立且分布规律已知,则可以按随机变量仿真的方法,分别独立地产生各随机变量X(i)的样本值。但马尔可夫链的各随机变量并非相互独立,而是具有一定的相依关系,即马氏性。但这种相关程度比较微弱,它只要求任一时刻的状态只依赖于前一时刻的状态。即依赖于依赖。因此,只要给定初始状态与一步转移概率矩阵P,用事件序列仿真的方法确定的样本值(即下一年的用水量状态),再由和P确定的样本值,如此递推求解,直到满足要求
28、为止。5.2模型的建立与求解5.3模型的结果5.4模型的优缺点评价模型优点:模型缺点:5.5相关建议六、建议报告参考文献1 2 3 4 5 6 7 8 9附录资料:不需要的可以自行删除Pascal/C/C+语句对比(补充版)一、Hello world 先看三种语言的样例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! endl; return 0;
29、 从这三个程序可以看到一些最基本的东西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序没有返回值,而C/C+返回0(好像在C中可以为NULL)。在C/C+中,main函数以前的是头文件,样例中C为stdio.h,C+除了iostream还有第二行的using namespace std,这个是打开命名空间的,NOIP不会考这个,可以不管,只要知道就行了。 此外说明 注释单行用/,段落的话Pascal为,C/C+为/* */。* 常用头文件(模板)#include #include #include #include #include #include using n
30、amespace std;int main() system(“pause”);return 0;二、数据类型及定义 这里只列出常用的类型。1、整型PascalC/C+范围shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long l
31、ong0 18446744073709551615 * 当对long long 变量赋值时,后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、实型PascalC/C+范围realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三种语言中都为char,C里没有字符串,只有用字符数组来代替字符串,Pascal和C+均为str
32、ing。Pascal中字符串长度有限制,为255,C+则没有。 字符串和字符在Pascal中均用单引号注明,在C/C+中字符用单引号,字符串用双引号。4、布尔类型 Pascal 中为 boolean,C/C+ 为 bool。值均为True 或 False。C/C+中除0外bool都为真。5、定义 常量的定义均为 const,只是在C/C+中必须要注明常量的类型。在C/C+中还可以用宏来定义常量,此时不注明类型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 30;const strin
33、g d = “”;define MAXN 501 /这个是宏 * 宏定义其实就是直接在程序相应的位置替换: #define randomize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;cout a endl;特别说明C+中cin一个字符的话会自动跳过空格和回车,Pascal和C则会读入空格和回车。在Pascal中writeln(a:n:m) 表示在n个字符宽的输出域上输出a保留m位小数。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal write(a:6:2) c
34、/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁琐!) 需要加头文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a; /作用临时 以下三个进制设定都是永久作用: cout deca; 相当 printf(“%d”,a); /十进制 cout hexa; 相当 printf(“%X”,a); /十六进制 cout octa; 相当 printf(“%o”,a); /八进制例如:cout 12hex12oct1212endl;输出:12c1414 C 的输入输出里面的字符串中%表示变量,%后面的字目表示变量类型。下
35、面是类型表:%hd1个short型整数%d1个int型整数%u1个unsigned int型整数%I64d1个long long型整数%c1个字符%s1个C字符串%f1个float型实数%lf1个double型实数%10.4f输出1个总宽度为10,保留4位小数的实数 文件输入输出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin = fopen(“test
36、.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因为C+的读入较慢,个人建议C+的话使用C的输入方式。当然也有人用C的读入,C+的输
37、出的,这种方式我们称之为城乡结合。*中国计算机学会竞赛须知发布的C读写程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_stdio(false); 取
38、消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下扩充c/c+混用是可行的:#include #include using namespace std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、赋值语句及运算符号 一一对应的关系PascalC/C+赋值运算赋
39、值:=基本运算加+减-乘*除(实数)/ (double)除法取整div(int) / (int)取余mod%比较等于=不等于!=大于大于等于=小于小于等于=逻辑且and&或or|非not!位运算左移(*2)shl且and&或or|非not异或xor其他增一inc(x)x+减一dec(x)x- 在C/C+中对某个变量自身进行运算可以简写为 变量名 运算符号= 改变量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里还存在一种三目运算 变量名 = 条件 ? 值A : 值B 如 x = x 0 ? x : -x; /表示若x 0 则取 x, 否则取 x, 同
40、if x 0 then x := x else x := -x;五、条件语句1、if C/C+中if 语句的条件必须要用括号括起来,后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else flag = false;2、多种分支 C/C+中为switch,Pascal为case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +; break; case 2
41、: x -; break; default: x *= x; 切记C/C+中一定要写break,后果你可以去掉break,运行看看就知道了。六、循环语句1、forPascalC/C+for 变量名 := 初始值 to(downto) 终止值 dofor (变量名=初始值;条件;改变方式)for i := 5 to 10 do dec(a);/终止值大于初始值用 tofor i := 5 downto 1 do dec(a);/终止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 满足条件就会一直循环。C/C+中i是实数、指针都可以*/C/C+中for
42、的特殊用法:/变量为实数for (double i = 1; i 符号为间接引用,后面会提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 条件 dowhile (条件)while i 0 do dec(i);while (i != 0) i-;/也可写作 while (i) i-;/在C/C+中非0即为真。3、repeat-until & do-whilePascalC/C+repeat 语句 until 结束条件;do while (运行条件)repeat i
43、nt(i) until i 100;do i+; while (i = 100);七、数组 Pascal中数组的下标可以随意定义,而C/C+下标始终为从0开始到(数组大小1)。PascalC/C+定义a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含义a 为大小为100的integer数组,合法下标为1到100b 为大小为10*10的int64数组,合法下标为1,1到10,10a 为大小为100的int数组,合法下标为0到99b 为大小为10*10的int数组,合法下标为0,0到9,9;使用in
44、c(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 数组清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a, 0, sizeof(a);/头文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但达不到 INT_MAX) 如果要填最小: memset(a,128,sizeof(a) (但达不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C风格的字符串就是字符数组。 C+和
45、Pascal的字符串使用基本相同,只是C+中字符串下标以0开始,Pascal以1开始。字符串处理很多这里不一一列举,只写最常用的几个。PascalC (包含)定义用:char sC+(包含)定义用:string s输入输出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能输入输出c+的字符串Cins;Couts = s 的区别: getline(cin,s)cins一次性整行读入,直至行末尾。只读入一个“单词”,遇空格和行末停止。例如输入;How are you?s=” How are you?”读入整串含空格例如输入;How are
46、 you?s=”How”如果三个都读:cins1s2s3*C+ 数字与数值之间的转换:#include #include #include /必须加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、过程和函数1、过程 在C/C+中没有过程,但可以把返回值为“空”的函数理解为过程。PascalC/C+无参过程pro
47、cedure 过程名;说明部分begin 语句部分 end;/说明部分、begin、end语句部分统称为过程体void 函数名(); 主体部分; return ;带参过程procedure 过程名(形参表)过程体void 函数名(形参表)过程体 值传和址传:当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。址传则会影响。下例中a为值传,b为址传。初始a = 5,b = 5,运行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer);begin b :=
48、a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HYPERLINK a a认为值参,b认为变量传参 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址传参可以给调用者传回若干值 Void tryit(int &x,int &y,int &z) 调用时: tryit(a,b,c) ,可以传回 a,b,c的值。* 用数组名(也是地址
49、)传参可以传回整组的数据 Void tryit( int a) 调用时: tryit(x),可以传回整个数组。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函数的指针作为参数,可以执行指定的函数。(略)STL 的两个应用:* C+ 快排函数#include Bool com(int a,int b) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7;Sort(a,a+10,com); /如果升序可以省略com.For(int i=0;i10;i+) Coutai” “;* 优先队列(以堆排为例)#include #include using namespace std;priority_queue Q;int main() int n,a; cinn; while (n-) cina; Q.push(a); while (!Q.empty() cout Q.top() ; Q.pop(); return 0;* 队列、栈、优先队列 三种数据结构汇总:#includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度呈现大合集人员管理十篇
- 2024年城管督查个人总结
- 寒假自习课 25春初中道德与法治八年级下册教学课件 第三单元 第五课 第1课时 根本政治制度
- 建筑工程行业安全管理工作总结
- 2011年高考语文试卷(大纲版全国Ⅱ卷)(空白卷)
- 化妆品行业销售工作总结
- 小学数学教学计划18篇
- 2023年项目部治理人员安全培训考试题含下载答案可打印
- 2023年-2024年项目部安全培训考试题答案往年题考
- 竞业限制协议书三篇
- 2024年国家公务员考试公共法律知识考试题库及答案(共530题)
- 2024年秋一年级上册4日月山川 公开课一等奖创新教学设计
- 护士先进个人事迹材料(12篇)
- 2024-2030年中国压电薄膜传感器行业市场发展趋势与前景展望战略分析报告
- TSG+23-2021气瓶安全技术规程
- 法人授权委托书查询征信
- 期末试卷(试题)-2024-2025学年三年级上册数学人教版
- 形象权授权协议
- 新外研版高中英语必修1单词正序英汉互译默写本
- 2024北京市《安全员》C证考试题库及参考答案一套
- 社区矫正专业人员的培训
评论
0/150
提交评论