c(HIn )
c φ a a
因此,当溶液的pH值由pK φ - 1变化到pK φ
+ 1,就能明显地看到指示剂由酸
式色变为碱式色,所以pH = pK φ ±1就是指示剂变色的pH范围,实际上这一
范围,并非完全靠计算得到,而是通过人眼观察出来的,例如:甲基橙,
φ
pKa
= 3.4 ,根据理论计算,应为2.4 —4.4 ,但实测结果为3.1—4.4。这是
由于人眼对红色较之对黄色敏感的原因。 指示剂的用量不宜过多,否则会由于色调的变化不明显,指示剂要消耗
滴定剂等原因,引起误差。
(4)滴定曲线 在酸碱滴定中如何选择合适的指示剂来指示滴定终点,需根据滴定曲线
来选择。在进行酸碱滴定时,表示溶液 pH 值如何变化的曲线称为滴定曲线,
现以 0.1000mol·L-1NaOH 滴定 0.1000mol·L-1HCl 为例,讨论强碱滴定强酸 时的滴定曲线和指示剂选择。
1)滴定前,溶液的酸度等于 HCl 的原始浓度。
c(H+)=0.1000mol·L-1 pH=1.00
2)滴定开始至化学计量点前,溶液的酸度取决于剩余 HCl 的浓度,即
c( H ? ) ?
c( HCl)×剩余HCl体积
溶液总体积
按照此式计算加入 NaOH 18.00mL,19.80mL,19.98mL 时溶液的 pH 值,其结 果列入表 2-1。
3)化学计量点时,已滴入 NaOH 溶液 20.00mL,溶液是中性。c(H+)=c
(OHˉ)=1.00×10-7mol·L-1pH=7.00。
4)化学计量点后,溶液的 pH 值取决于过量 NaOH 的浓度。即
c(OH ? ) ?
c( NaOH)×过量NaOH体积
溶液总体积
pH=14.00-pOH=14.00-(-lg{c(OHˉ)}) 过量不同 NaOH 量的计算结果,也列于表 2-1 中。
表 2-1 用 0.1000mol·L-1 的 NaOH 滴定 20.00mL 0.1000mol·L-1 HCl
加入 NaOH/mL
中和百分数
剩余 HCl/mL
过量 NaOH/mL
+ -1
c ( H )/mol · L
pH
0.00
18.00
19.80
19.96
19.98
20.00
20.02
20.04
20.20
22.00
0.00
90.00
99.00
99.80
99.90
100.0
100.1
100.2
101.0
110.0
20.00
2.00
0.20
0.04
0.02
0.00
0.02
0.04
0.20
2.00
0.02
0.04
0.20
2.00
1.00 × 10-1
-2
5.26 × 10
-4
5.02 × 10
-4
1.00 × 10
5.00 × 10-5
-7
1.00 × 10
-10
2.00 × 10
-10
1.00 × 10
2.00 × 10-11
-12
2.10 × 10
1.00
2.28
3.30
4.00
4.30 突跃
7.00
9.70 范围
10.00
110.70
11.68
从表 2-1 和图 2-2 可以看出,从滴定开始到加入 19.80mLNaOH 溶液,溶
液的 pH 值只变 2.3 个单位。但在计量点前后,从剩余 0.02mLHCl 到过量
0.02mLNaOH,即 NaOH 不足 0.02mL 到过量 0.02mL,总共不过是 0.04mL(约一 滴),溶液的 pH 值却从 4.30 增加到 9.70,变化 5.4 个单位,形成滴定曲线 中的“突跃”部分。指示剂的选择主要是以此为依据。显然,最理想的指示 剂应该恰好在计量点时变色。但由于存在滴定突跃,凡在 pH4.30-9.70 以内 变色的指示剂都可保证确定有足够的准确度,因此,甲基红(pH4.4-6.2)、 酚酞(pH8.0-10.0)等都可用做指示剂。
2.实验目的
(1)练习滴定操作,学习判断滴定终点。
(2)练习滴定管等仪器的洗涤。
3.实验内容
(1)按要求洗净酸式和碱式滴定管各一支。
(2)将实验 4 已配制的 0.1mol·L-1NaOH 溶液装入碱式滴定管中,调节
至 0.00 刻度。再将实验 4 配制的 0.1mol·L-1HCl 溶液装入酸式滴定管中, 调节好零点。
(3)以 10mL/min 的速度放出 20.00mL NaOH 溶液至 250mL 锥形瓶中。
加入 2 滴甲基橙指示剂,用 0.1mol·L-1HCl 溶液滴定至溶液由黄变橙,记下 读数。再自碱式滴定管中放出 2.00mLNaOH 溶液(此时碱管读数为 22.00mL), 继续用 HCl 溶液滴定至橙色,记下读数。如此继续,每次加入 2.00mL 碱溶液, 得到一系列(滴定 3 次以上) HCl 滴定数据(累计体积),求各次滴定的体
积比 VHCl/VNaOH,测定相对平均偏差应不超过 0.2%。
(4)以 10mL/min 的速度放出 20.00mL 0.1mol·L-1HCl 溶液于锥形瓶中, 加入 2 滴酚酞指示剂,用 0.1mol·L-1NaOH 溶液滴定至微红色且在 30s 不褪, 记下读数。再向锥形瓶中放入 2.00mL 0.1mol·L-1HCl 溶液(酸式滴定管读 数为 22.00mL);继续用 NaOH 溶液滴定至终点。重复滴定 3 次以上,求出
VHCl/VNaOH 的值,要求测定结果的相对平均偏差在 0.2%以内。
4.数据表格(示范)
(1)以甲基橙为指示剂
测定次数
1
2
3
V (终)/mL
HCl
V (初)/mL
HCl
VHCl/mL
0.00
0.00
0.00
V (终)/mL
NaOH
V (初)/mL
NaOH
V mL
NaOH/
0.00
0.00
0.00
VHCl/V
NaOH
V /N
HCl aOH
绝对偏差
平均偏差
相对平均偏差
(2)以酚酞为指示剂(略)
5.思考题
(1)锥形瓶是否需用盛放的溶液洗涤?是否要干燥?为什么?(2)在 实验中读取溶液体积时,为什么要读累积体积?(3)若用酸溶液滴定碱溶液 时,能否用酚酞作指示剂?
实验 6 pH 法测定醋酸解离常数
1.概述
醋酸(以 HAc 表示)是弱电解质,在水溶液中存在以下解离平衡: HAc H++Acˉ
起始浓度 c 0 0
平衡浓度 c(HAc)c(H+)c(Acˉ)
{c(H ? ) / c φ }·{c(Ac? ) / c φ }
K φ (HAc) ?
c( HAc) / cφ
Kφ(HAc)为醋酸解离常数。
c(H+)=c(Acˉ)c(HAc)=c-c(H+) 在 HAc 溶液中
c φ K φ
(HAc) ?
[c( H ?
)]2
(1)
α为解离度:
c ? c( H ? )
c(H ? )
α ?
c
(2)
测定已知浓度 HAc 溶液的 pH 值,便可算出它的解离常数和解离度。
2.实验目的
(1)测定醋酸的解离常数。
(2)巩固酸碱滴定操作,掌握方法和原理。
(3)练习使用酸度计。
3.实验步骤
(1)NaOH 溶液浓度的标定
将 0.1mol·L-1 的 NaOH 溶液装入洗净的碱式滴定管内。
用移液管吸取实验 4 配制的草酸标准溶液 25.00mL3 份。分别置于 3 个锥 形瓶中,各加入 1-2 滴酚酞指示剂,用待标定的 NaOH 溶液滴定至溶液呈现微 红色且在 30s 内不褪为止。3 次滴定消耗的碱量之差应小于 0.04mL。由草酸 标准溶液的浓度和体积及氢氧化钠溶液的体积,计算氢氧化钠溶液的浓度。
实验序号
Ⅰ
Ⅱ
Ⅲ
NaOH 溶液用量/mL
H C O 溶液用量/mL
2 2 4
H C O 溶液浓度/mol · L-1
2 2 4
NaOH 溶液浓度/mol · L-1
NaOH 溶液平均浓度/mol · L-1
(2)醋酸溶液浓度的测定
用移液管吸取 HAc 溶液 25.00mL 放入锥形瓶中,加入 2 滴酚酞,用已标 定的 NaOH 溶液滴定 HAc 溶液(注意每次滴定都从 0.00mL 开始)。
重复上述操作 3 次,3 次耗碱量的差不超过 0.04mL。
实验序号
Ⅰ
Ⅱ
Ⅲ
NaOH 溶液的浓度/mol · L-1
HAc 溶液的用量/mL
NaOH 溶液用量/mL
-1
HAc 溶液浓度 mol · L
测定值
平均值
(3)配制不同浓度的醋酸溶液
用移液管和吸量管分别取 25.00mL,5.00mL,2.50mL 已测定浓度的 HAc 溶液,把它们分别加入 3 个 50mL 容量瓶中,再用去离子水稀释到刻度,摇匀。 算出此 3 瓶 HAc 溶液的浓度。
(4)测定醋酸溶液的 pH 值
把以上稀释的 HAc 溶液和原 HAc 溶液共 4 种不同浓度的溶液,分别放入
4 个干燥的 50mL 烧杯中,按由稀到浓的次序用酸度计分别测定它们的 pH 值, 记录数据和室温。计算解离度和解离常数。
溶液编号
HAc 浓度
pH
c ( H+)
α
解离常数 K φ HAc
(
测定值
平均值
1
2
3
4
4.思考题
(1)在标定 0.1mol·L-1NaOH 溶液时,使用滴定管是否每次都要从 0.00 开始滴定?
(2)用移液管吸取草酸溶液时,是否需用草酸溶液洗涤?
(3)不同浓度的 HAc 溶液的解离度和解离常数是否相同?
(4)实验时为什么要记录温度?
实验 7 电导法测定醋酸解离常数(含微型实验)
1.概述
物质导电能力的大小,通常以电阻 R 或电导 G 表示,电导是电阻的倒数: G=1/R。电阻的单位是Ω,电导的单位是 S,1S=1Ω-1。
导体的电阻与其长度 L成正比,与其截面积 A成反比: R∝L / A或R =
(L / A),式中R为比例常数,称为电阻率。根据电导与电阻的关系,可推
出:
A
G ? k
L
或k ? G L A
k 称为电导率,是长 1m,截面积为 1m2 的导体的电导,单位是 S/m。对于电解 质溶液,电导率是电极面积为 1m2 且两极相距 1m 时溶液的电导。
电解质溶液的摩尔电导(Λm)是把含有 1mol 电解质的溶液置于相距 1m
的两个电极之间的电导。溶液的浓度以 c 表示,单位若为 mol·L-1,则含有
1mol 电解质溶液的体积为(1/c)L 或者(1/c)10-3m3,因此,溶液的摩尔 电导=电导率×溶液体积:
Λm ? k×
10?3
c
一般是测定溶液的电导率,然后通过上式计算摩尔电导,它的单位是 S·m2·mol-1。
弱电解质在无限稀释时,可看作完全电离,这时溶液的摩尔电导叫做极
限摩尔电导(Λ∞)。在一定温度下,弱电解质的Λ∞是一定的,表 2-2 列出
了醋酸溶液的Λ∞。
表 2-2 醋酸溶液的极限摩尔电导
温度/℃
0
18
25
30
Λ∞ S · m2 · mol-1
0.0245
0.0349
0.03907
0.04218
一定浓度的弱电解质,其解离度等于该浓度时的摩尔电导与极限摩尔电
导之比:
Λ
α = m
Λ∞
所以可通过测定 HAc 溶液的摩尔电导,由上式计算得到 HAc 溶液的解离度, 再由解离度与解离常数的关系:
φ φ cα
c K HAc
计算求得醋酸的解离常数。
2.实验目的
?
1 ? α
(1)学习用电导率测定解离常数的原理和方法。
(2)了解电导率仪的使用方法。
3.实验内容
(1)配制不同浓度的醋酸溶液
先将 3 个烘干的 100mL 烧杯编号,然后按照下表的烧杯号数,用两支滴 定管分别准确放入已知浓度的 HAc 溶液和去离子水。
2 电导率 k/s · m
(2)由稀到浓测定 1-3 号 HAc 溶液的电导率,将结果记录在上表中。
(3)数据记录及结果处理: 电极常数= ;室温: ℃;
在此温度下,查表得 HAc 的Λ∞= S·m2·mol-1
编 号
1
2
3
HAc 浓度/mol · -1
L
k/S · m-1
K φ
( HAc )
4.思考题
(1)电解质溶液导电的特点是什么?
(2)什么叫电导、电导率和摩尔电导?
(3)弱电解质的解离度与哪些因素有关?
(4)下列说法是否正确?为什么?
1)HAc 稀释一倍,其解离度也增加一倍:
2)HAc 溶液越稀,其解离度较大,H+浓度也越大。
(5)测定 HAc 溶液的电导时,溶液为什么要由稀到浓地进行?
5.微型实验*
(1)配制不同浓度的醋酸溶液。在井穴板上编 1-3 号,用滴定管或两支
5mL 吸量管分别准确放入已知浓度的 HAc 溶液和去离子水。
井穴号数
HAc 体积/mL
H2O 体积/mL HAc 浓度/mol · L-1
电导率 k/S · m-1
1
1.50
3.50
2
2.50
2.50
3
5.00
0.00
(2)由稀到浓测定 1-3 号 HAc 溶液的电导率,将结果记录在上表中。
(3)数据记录及结果处理(见常量实验)。
实验 8 未知物摩尔质量和酸解离常数测定
1.概述
实验室备有 3 种未知物,可能为磷酸二氢钾 KH2PO4、磷苯二甲酸氢钾 KHC8H4O4、磷酸二氢钠 NaH2PO4·2H2O 每位同学领取一种未知物。通过实验确 定此物质的摩尔质量和酸解离常数,并指出是何种物质。
2.实验目的
(1)巩固所学电解质溶液的知识。
(2)熟悉滴定操作和 pH 计的使用。
(3)确定未知物的种类、摩尔质量和弱酸解离常数。
3.实验步骤
(1)准确称取一定量(2.3g 左右)未知物,放入小烧杯中溶解,然后 定量转移至 250mL 容量瓶中。
(2)用移液管吸取 25.00mL 未知物溶液,放入 250mL 锥形瓶中,加入两 滴酚酞,用已知浓度的 NaOH 溶液滴定至微红色(保留此溶液)。
(3)重复上述操作两次。3 次滴定消耗的氢氧化钠的毫升数相差不超过
0.04mL。取 3 次滴定平均值。计算出未知物的摩尔质量。
(4)在滴定到终点的溶液中(上面保留的溶液)再加入 25.00mL 未知物 溶液配制成缓冲溶液。
(5)用 pH 计测定缓冲溶液的 pH 值,求出未知酸解离常数。
4.数据记录及处理
要求将所测得数据列表表示。通过计算求出所测未知物的摩尔质量、是 何种物质、酸解离常数(计算解离常数时需考虑离子强度的影响)。
5.思考题
(1)为什么所测得未知物的摩尔质量与其理论值不同?
(2 )实验中所测的缓冲溶液的pH值,为何与该酸的理论pK φ 值不同?
实验 9 阿佛加德罗常数的测定
1.概述
阿佛加德罗常数是一重要的物理常数,它的测定方法很多,本实验用电 解法测定。
用两块铜片做阴极和阳极,以硫酸铜溶液为电解质进行电解。两极反应
如下: 阴极反应:Cu2++2e→Cu 阳极反应:Cu→Cu2++2e
即在阴极上,Cu2+得到电子析出金属铜使铜片质量增加。在阳极上,金 属铜溶解成 Cu2+使铜片质量减少。
若电流强度为 I(A),则在 t(s)内,通过的总电量是:
Q=It
Q 的单位是 C。
如果在阴极上铜片的质量增加 m(g),则每增加 1g 质量所需的电量为:
It
(C / g)
m
铜的摩尔质量为 63.5g,所以电解析出 63.5g 铜所需的电量为:
It
×63.5
m
(C)
已知一个 1 价离子所带电量(即 1 个电子的电荷)是 1.60×10-19C,1 个二价离子所带的电量是 2×1.60×10-9C,所以 1mol 铜所含的原子个数为:
It×63.5
N A ?
m×2 ×1.60 ×10 ?19
NA 为阿佛加德罗常数。
2.实验要求
(1)用电解方法测定阿佛加德罗常数,掌握方法和原理。
(2)练习电解法的基本操作。
3.实验步骤
按图 2-3 连好线路。取两块纯的紫铜片(3×5cm2)当作阴、阳极。在烧 杯中加入 CuSO4 溶液(每 1L 溶液含 125g 硫酸铜和 2.5mL 浓 H2SO4)。阴极和 阳极的 2/3 浸没在 CuSO4 溶液中,电极之间的距离约为 1.5cm,控制直流电压
为 10V,电阻为 90~100Ω。接通电路,再调节电阻使电流约为 100mA。调好 电流强度后,断开电路,取下电极,将两块铜片冲洗,擦干后,用“零”号 砂纸擦去表面氧化物,然后用去离子水洗净,并在一块铜片上滴几滴酒精, 晾干后,在分析天平上称出其质量(称准至 0.1mg),这块铜片作为阴极。 另一块铜片作阳极(亦要准确称出其质量)。
重新装好电极后,接通线路,同时开动秒表,并准确记录电流强度,在 电解过程中,随时调节电阻维持电流约为 100mA。
通电 1h,断电路,取下阴、阳极。先用去离子水漂洗,再在上面滴几滴 酒精,晾干后在天平上称出其质量。
根据以上所测数据、计算阿佛加德罗常数。
4.数据记录和结果处理
电极称量
阴极增量 m/g
阳极减量 m '/g
电解后质量
电解前质量
m=
电解前质量
电解后质量
m '=
电解时间 t/S
电流强度 I/A
NA 值
It ×63.5
?
m×2 ×1.6 ? 10 ? 19 ?
It×63.5
?19 ?
m'×2 ×1.6 ×10
5.思考题
(1)在电解过程中是否要维持电流恒定?为什么?
(2)实验中可能引起的误差是哪些?
实验 10 碘酸铜溶度积的测定
1.概述
碘酸铜是难溶强电解质,在其水溶液中存在下述动态平衡:
Cu(IO3)2(s) Cu2+(aq)+2IO-3(aq)
其平衡常数叫做溶度积常数,简称溶度积,以K φ (Cu(IO
) )表
sp 3 2
示:
K φ (Cu(IO ) )={c(Cu 2 +
) / cφ
}{c(IO
- 3 ) / c φ }2
平衡时的溶液为饱和溶液,测定 Cu(IO3)2 饱和溶液中的 c(Cu2+)和 c(IOˉ
3),便可计算出其溶度积的值。
c(Cu2+)的测定可通过分光光度法进行,用一系列已知浓度的 Cu2+溶液, 加入氨水,使 Cu2+生成蓝色[Cu(NH3)4]2+,在分光光度计上测定有色液的 吸光度 A,以 A 为纵坐标,c(Cu2+)为横坐标,描绘 A-c(Cu2+)的关系曲线
(称为标准曲线)。然后吸取一定量 Cu(IO3)2 饱和溶液与氨水作用,测定
所得蓝色溶液的吸光度 A',在标准曲线上找出与 A'相对应的 c(Cu2+),即
为 Cu(IO3)2 饱和溶液中的 c(Cu2+)。这样便可求算碘酸铜溶度积(如何
计算?)。
2.实验目的
(1)了解分光光度法测定溶度积的原理。
(2)熟练溶液配制、移液等操作。
(3)练习分光光度计的使用。
3.实验内容
(1)配制 Cu(IO3)2 饱和溶液
取 Cu(IO3)2 固体 1.5g 放入 150mL 锥形瓶中,加入 100mL 蒸馏水,加
热至 70—80℃。搅拌 15min,在室温下静置 2h。
(2)标准曲线制作
1)在 4 个 50mL 容量瓶中,用吸量管分别加入:1.0,2.5,5.0,7.5mL 标准 CuSO4 溶液(0.1000mol·L-1),用水稀释至刻度,摇匀。
2)取上述 4 种浓度的溶液各 10.00mL,放入 25mL 比色管中,再加入
10.00mL 1mol· L-1 NH3 · H2O,另取一比色管加入 10.00mL 蒸馏水和
10.00mL1mol·L-1NH3·H2O(作空白溶液),将比色管中的溶液摇匀。
3)在 610nm 波长下,用 2cm 比色皿,在 721 分光光度计上测吸光度,做 出标准曲线。
(3)测定 Cu(IO3)2 饱和溶液中 c(Cu2+)
吸取 10.00mL Cu(IO3)2 饱和溶液(上层清液)两份放入两个比色管
中,再各加入 10.00mL 1mol·L-1NH3·H2O,混合均匀,在与测定标准曲线相 同的条件下,测定吸光度。
4.求算 Cu(IO3 )2 溶度积
(1)根据上述 3 中(3)测定的吸光度,在标准曲线上找出相应的 c
(Cu2+)。
(2)由c(Cu 2+ )计算K φ (Cu(IO
) )。
sp 3 2
5.思考题
(1)加入 1mol·L-1NH3·H2O 量是否要准确?能否用量筒量取?
(2)吸取 Cu(IO3)2 饱和溶液时,若吸取少量固体,对测定结果有无
影响?
(3)若不使用特殊仪器,用目测法如何测定 Cu(IO3)2 溶度积?
实验 11 5-磺基水杨酸合铜(Ⅱ)配离子的 组成和稳定常数的测定
1.概述
单色光(具有一定波长的光)通过有色溶液后,有一部分被有色物质吸 收。有色物质对光的吸收程度(用吸光度 A 表示)与其厚度(b)和浓度(c) 成正比:
A=εbc
这就是朗白-比耳定律,ε是比例常数,称为摩尔吸光系数。当波长一定时, 它是有色物质的一个特征常数。用分光光度法研究溶液中的配合物时,其前 提就是体系中形成的有色配合物对光的吸收行为必须服从郎白-比耳定律。本 实验是用分光光度法研究 5-磺基水杨酸合铜(Ⅱ)配离子的组成和稳定常 数。
随着溶液的 pH 值不同,5-磺基水杨酸(HO3SC6H3(OH)COOH,简式为 H3R)
与 Cu2+可形成两种不同的配合物,在 pH=5 以下时只形成一种形式的配合物。 本实验测定 pH=5 时形成配合物的组成和稳定常数。采用等摩尔系列法测定。 等摩尔系列法是使金属离子与配体的总量(总的摩尔数)保持不变,可取用 其摩尔浓度相同的金属离子和配位体溶液,维持总体积不变(即 VM+VR=常 数。VM 为金属离子溶液体积,VR 为配位体溶液体积。)的前提下,按照不同 体积比,配成一系列混合溶液,测定其吸光度。以吸光度为纵坐标,以体积 分数 VM/(VM+VR)为横坐标,描绘吸光度-组成图(图 2-4),求出吸光度 的极大值 A 极大。显然,与此极大值相对应的溶液的组成即是配合物的组成, 因为只有在组成与配合物组成相一致的溶液中,形成的配合物的浓度最大, 因而其对光的吸收也最大。若形成的配合物不够稳定,离解使曲线转折点不 够明显,则可通过横坐标的两个端点向曲线作切线,切线交点对应的溶液即
为配合物的组成。 若在给定实验条件下,体系中只形成一种有色配合物 MRn:
M+nR MRn
(以下表示离子时省去电荷以简化)。其稳定常数为:
c(MRn) / c φ
K φ ?
{c(M) / cφ }·{c(R) / c φ }n
(1)
在两组成不同的溶液中,如具有相同的吸光度,则该两溶液中配合物的 量必然相等。
设配合物的浓度为 c(x),则:
K φ ?
?
{c(x)}
[{c(M a )} ? {c(x)}][{c(R a )} ? n{c( x)}]
{c( x)}
n
(2)
[{c(M b )} ? {c( x)}][{c(R b )} ? n{c( x)}]
其中 c(Ma),c(Mb);c(Ra),c(Rb)分别为二组分溶液金属离子
和配体的起始浓度。由(2)式可求出 c(x)。再代入(1)式,
则可计算出配合物的稳定常数K φ 。
若配合物组成为 MR 型时,不能直接从一条吸光度-组成曲线上任取相同 吸光度的两点来计算K φ ,此时需要将某一组溶液稀释后再测出吸光度,由 不同组成的吸光曲线上找出相同吸光的两点计算K φ (图2 - 5)。
应用(2)式计算铜离子与 5-磺基水杨酸(H3R 表示)形成的配离子的稳 定常数时,应注意:
K φ (H) ?
φ
R+HHR
c( HR) / c φ
{c(R) / c φ }{c(H) / cφ }
K1 (H)称为5 - 磺基水杨酸的一级加质子常数。其对数值为lgK1 (H) = 11.6
K φ H
HR+H H2R
c(H R) / c φ
( ) ?
2 {c(HR) / cφ }{c(H ) / c φ }
φ φ
K2 (H)称为二级加质子常数。其对数值为lgK 2 (H) = 2.6,三级加质
子常数可忽略。
由于加质子常数较大,所以计算时不能忽略,溶液中除存在 CuR 和 R 外, 还存在 HR 和 H2R。在(2)式中的[{c(Ra)}-n{c(x)}]n 或[{c(Rb)}
-n{c(x)}]n 为平衡时溶液中游离配体浓度的 n 次方。对于 5-磺基水杨 酸(H3R),若控制溶液的 pH 值为 5,当它与铜离子形成配合物达到平衡时, 游离配体的浓度应为 c(Ra)-n{c(x)}-c(HR)-c(H2R)。即在 a 溶液 中:平衡时游离配体浓度=5-磺基水杨酸总浓度-n×形成配合物浓度-HR 物 种浓度-H2R 物种浓度。
离子强度对于溶液中稳定常数的测定影响很大,实验时一般要求以 NaClO4(或 KNO3)来维持一定的离子强度。
2.实验目的
(1)了解光度法测定溶液中配合物组成及稳定常数的原理。
(2)练习分光光度计的使用。
3.实验内容
(1)溶液配制
1)0.050mol·L-1 硝酸铜溶液
2) 0.050mol·L-1 5-磺基水杨酸溶液
3)1mol·L-1NaOH 溶液,0.05mol· L-1NaOH 溶液。以上溶液均用
0.1mol·L-1KNO3 溶液配制。
4) 0.01mol· L-1 HNO3 溶液、 pH=5 的 HNO3 溶液。
(2)按下表所列体积比配制 0.050mol·L-1 硝酸铜溶液和 0.050mol·L-1
5-磺基水杨酸溶液的混合溶液(用滴定管量取溶液)。
溶 液 编 号 1 2 3 4 5 6 7 8 9 10 11
硝酸铜溶液的体积 V 铜/mL
5-磺基水杨酸溶液的体积 V 磺/mL
V铜
浓度比
V ? V
铜 磺
第一系列溶液的 A 值
第二系列溶液的 A 值
(3)依次在每份混合溶液中,插入电极,与酸度计连接。在电磁搅拌器
搅拌下,逐滴加入 1mol· L-1NaOH 溶液以调节 pH 为 4 左右,然后用 0.05
mol· L-1NaOH 溶液以调节 pH 为 4.5-5。若 pH 超过 5,可用 0.01 mol·L-1HNO3
溶液调回。注意溶液体积
将调节好 pH 的溶液分别转移到预先编有号码的 50mL 容量瓶中,用 pH
为 5 的 HNO3 溶液稀释至刻度线,此称为第一系列溶液。
(4)用 721 分光光度计,选用波长 440nm,分别测定每份混合溶液的吸 光度(所以选用 440nm 波长的光,因在此条件下 5-磺基水杨酸溶液无吸收, 铜离子很稀时也基本不吸收,只有二者形成配合物后有一定的吸收)。将所 测得的结果记录在上述表中。
(5)从测定过 A 值的 2 号至 6 号溶液中,用移液管吸取各份溶液 10mL,
分别置于已编号的 25mL 容量瓶中,用 pH 为 5 的硝酸溶液稀释至刻度,这一 系列溶液为第二系列溶液。
(6)在波长为 440nm 的条件下,分别测定第二系列溶液的吸光度。记入 上表中。
4.数据处理
(1)根据第一系列溶液的吸光度,作吸光度-组成图,求出 CuLn 的 n 值。
(2)结合第二系列溶液的吸光度-组成图,求算配离子的稳定常数 K 稳。
5.思考题
(1)不考虑加质子常数与考虑加质子常数计算值有多大差别?
(2)为什么说在等摩尔系列中,金属离子的浓度与配位体的浓度之比恰 好等于其配离子组成时,其配合离子浓度最大?
第 3 章 化学反应速率、热效应与溶液中的平衡
实验 12 化学反应速率与活化能
1.概述
化学反应速率用符号 J 或ξ表示,其定义为:
J=dξ/dt (3-1)
ξ为反应进度,单位是 mol,t 为时间,单位是 s。所以单位时间的反应 进度即为反应速率。
dξ=v-1BdnB (3-2)
将式(3-2)代入式(3-1)得:
J=v-1BdnB/dt
式中 nB 为物质 B 的物质的量,dnB/dt 是物质 B 的物质的量对时间的变化
率,vB 为物质 B 的化学计量数(对反应物 vB 取负值,产物 vB 取正值)。反应
速率 J 总为正值。J 的单位是 mol·s-1。
J表示平均反应速率,它表示单位时间内平均反应进度。
J = v -1Δn / Δt
根据质量作用定律,若 A 与 B 按下式反应:
aA+bB→cC+dD
其反应速率方程为:
k 为反应速率常数。
J=kca(A)cb(B)
a+b=n
n 为反应级数。n=1 称为一级反应,n=2 为二级反应,三级反应较少。反 应级数有时不能从方程式判定,如:
2HI→I2+H2
看起来是二级反应。实际上是一级反应,因为 HI→H+I(慢) HI+H→H2+I(快) I+I→I2(快)
反应决定于第一步慢反应,是一级反应。从上述可知,反应级数应由实 验测定。
反应速率的测定 测定反应速率的方法很多,可直接分析反应物或产物浓度的变化,也可
利用反应前后颜色的改变、导电性的变化等来测定,如:
2? 3? ?
[CoCl(NH 3 )5 ]
? H 2 O→[Co(NH 3 ) 5 H 2 O]
? Cl
(紫色) (粉红色)
可通过分析溶液中 Cl-离子浓度的增加,确定反应速率,也可利用反应 物和产物颜色不同,所导致的光学性质的差异进行测定。从上式还可以看到, 反应前后离子个数和离子电荷数都有所改变,溶液的导电性有变化,所以也 可用导电性的改变测定反应速率。概括地说,任何性质只要它与反应物(或
产物)的浓度有函数关系,便可用来测定反应速率。但对于反应速率很快的
反应,如T 在10-3 s以下的反应,其速率的测量需用特殊的方法。
2
本实验测定(NH4)2S2O8(过二硫酸铵)和 KI 反应的速率是利用一个
记时反应测定反应物S O 2- 浓度变化来确定。
在水溶液中,(NH4)2S2O8 和 KI 发生以下反应:
2? ?
2 ? ?
S2 O 8
? 3I
→2SO4
? I3
(1)
这个反应的平均反应速率可用下式表示
△c(S
O2 ? )
J ? 2 8 ? kca (S
△t
2- 2-
O 2? )cb (I ? )
式中Δc(S2 O 8 )为Δt时间内S 2 O8 浓度的变化,为了测定这个变化,在将
(NH4)2S2O8 溶液和 KI 溶液混合时,同时加入一定体积的已知浓度的 Na2S2O3
2- - - 2-
溶液和淀粉溶液。当S2 O 8 离子与I 离子反应产生I 3 离子时,它立即与S2 O 3
反应:
2- -
2- -
2S 2 O 3 +I 3 →S 4O 6 +3I
(2)
- 2-
反应(2)比反应(1)速率快,所以反应(1)生成的I 3与S 2 O 3 的作用瞬时
2- 2- ?
完成,生成无色的S4 O 6 和Iˉ。当S2 O 3 用尽,生成的微量I 3 与淀粉作用,使
溶液呈蓝色。从上述两个反应式可以看出,在反应中S O 2- 浓度的改变量为
S O 2- 浓度变化的一半,即:
2- 2-
Δc(S2 O 8 ) = Δc(S 2 O 3 ) / 2
记录从反应开始到溶液出现蓝色所需要的时间Δt。由于在Δt 时间内
2- 2-
S2 O 3 全部反应,由它的起始浓度可求出Δc(S2 O 8 ),进一步可计算出
Δc(S O 2- )和J。
对S O 2- 与Iˉ反应的速率方程两边取对数得:
lg{J} = alg[c(S O 2- ) / cφ ]+blg[c(Iˉ) / cφ ]+lg{k}
式中,{k}代表量 k 的数值。
当c(Iˉ)保持不变,改变c(S O2- ),以lg{J}对lg[c(S O 2- ) / cφ ]
2 8 2 8
2- ?
作图,可得一直线,斜率为 a,当保持c(S2 O 8 )不变,改变c(I
对 lg[c(I ? ) / cφ ]作图,可求出b。a和b为已知,由
J
) ,以 lg{J}
k ? ca (S O 2? )cb (I ? )
可求得反应速率常数 k。
根据阿伦尼乌斯公式:
E
lg{k} ? lg A ? a
2.303RT
若测出不同温度时的k值,以lg{k}对 1 作图,得到一条直线。直线的斜
T
率等于-Ea/2.303R,通过计算求出活化能 Ea。
2.实验目的
(1)掌握浓度、温度及催化剂对化学反应速率的影响。
(2)测定过二硫酸铵与碘化钾反应的反应速率,并计算反应级数、反应 速率常数及反应的活化能。
(3)初步练习用计算机进行数据处理。
3.实验内容
(1)实验浓度对化学反应速率的影响
在室温下,取 3 个量筒分别量取 20ml 0.20mol·L-1 KI 溶液、8.0ml 0.010
mol· L-1 Na2S2O3 溶液和 4.0mL 0.2%淀粉溶液,均加到 150mL 烧杯中,混
合均匀。再用另一个量筒取 20mL0.20mol· L-1(NH4)2S2O8 溶液,快速加到 烧杯中,同时开动秒表,并不断搅拌。当溶液刚出现蓝色时,立即停秒表, 记下时间及室温。
用同样的方法按照表 3-1 中的用量进行另外 4 次实验。为了使每次实验 中的溶液的离子强度和总体积保持不变,不足的量分别用 0.20mol·L-1 KNO3
溶液和 0.20mol·L-1(NH4)2SO4 溶液补足。
表 3-1 不同浓度时平均反应速率
实验序号
Ⅰ
Ⅱ
Ⅲ
Ⅳ
Ⅴ
反应温度℃
2- 2- -1
用表中实验Ⅰ,Ⅱ,Ⅲ的数据作图求出 a,用实验Ⅰ,Ⅳ,Ⅴ的数据作
图求出 b,然后再计算出反应速率常数 k。
(2)温度对化学反应速率的影响
按表 3-1 实验Ⅳ中的用量,把 KI,Na2S2O3,KNO3 和淀粉的混合溶液加到
150mL 烧杯中,把(NH4)2S2O8 溶液加到另一个烧杯中,并将两个烧杯放入冰
水浴中冷却。等烧杯中的溶液都冷到 O℃时,把(NH4)2S2O8 溶液加到 KI 混
合溶液中,同时开动秒表,并不断搅拌,当溶液刚出现蓝色时,记下反应时 间。
在 10℃,20℃和 30℃的条件下,重复上述实验。将结果填于表 3-2 中。 用表 3.2 的数据,以 lg{k}对 1/T 作图,求出反应(1)的活化能。
表 3-2 不同温度时平均反应速率
实验序号
Ⅰ
Ⅱ
Ⅲ
Ⅳ
反应温度/℃
反应时间/s
平均反应速率 J=mol · L - 1 · s - 1
(3)催化剂对反应速率的影响
在 150mL 烧杯中加入 10mL 0.20mol·L-1KI 溶液,4.0mL 淀粉溶液,8.0mL
0.010mol·L-1 Na2S2O3 溶液和 10mL 0.20mol·L-1 KNO3 溶液,再加入 1 滴
0.02mol·L-1 Cu(NO3)2 溶液。搅拌均匀,然后迅速加入 20mL 0.20mol·L-1
(NH4)2S2O8 溶液,搅拌,记下反应时间,并与前面不加催化剂的实验进行
比较。
4.思考题
(1)通过上述实验总结温度、浓度、催化剂对反应速率的影响。
(2)上述反应中,溶液出现蓝色是否反应终止? 另外,实验数据的处理,除了用方格纸作图并进行计算外,还可以利用
计算机进行数据处理。计算机处理实验数据的程序及使用说明如下:
帮助文件
使用说明:
1.打开与选择菜单
(1)按 F10 键即可激活顶层菜单,然后使用方向键(→,←)选择顶层 菜单项,按回车(Enter)键即可打开所选择的菜单。使用热键(Alt+菜单 上加亮的字母)即可快速地打开该字母所对应的菜单。
(2)打开菜单后即可使用方向键(↑,↓)选择菜单项,选中后按回车 键即可执行此菜单项。打开菜单后,按菜单项中加亮的字母也可以执行该菜 单项。使用热键(菜单项后部提示的组合键)即可快速地执行对应的菜单项。
(3)当一个菜单项处于灰色时,表示该菜单项当前不可使用,必须进行 一些前备工作后才可以使用。
(4)任何时候当选择“OK”或“确认”即表示确认本次操作。选择 Cancel
或“取消”即表示取消本次操作。
2.菜单说明
顶层菜单项共有 4 项:
(1)输入 用于输入实验所测数据,必须先输入学号才能进行后面的输入工作。 输入时使用 Tab 键(向后移)或 Shift+Tab 键(向前移)在各区域之间
切换。当前活动区域被高亮度显示。当可输入区成为当前活动区时,可在此 区域内进行输入以及修改工作。
在输入数据后,若选择“确认”,则接受本此输入,也可选择“取消” 或按 ESC 键取消本次输入。
输入后必须存储数据,否则教师将检查不到你的实验数据。 注意:因为在执行完存储数据的工作(执行“输入”菜单中的“保存数
据”菜单项或使用热键 F2)后,将认为该学生已经完成所有操作,则一些菜 单项将会无效,不能继续进行输入数据,作图,以及显示答案等工作,因此, 存储数据的工作应该放在最后执行。
菜单项:
输入学号:输入你的学号。 输入第一组:输入过硫酸根离子浓度不变时的 3 组数据。 输入第二组:输入碘离子浓度不变时的 3 组数据。 输入第三组:输入求反应活化能的 4 组数据。 保存数据:存储你的实验数据。 退出:结束实验,退回操作系统。
(2)结果
进行作图以及显示结果的工作。 菜单项:
作图:显示用实验点所拟合的直线及其斜率。
答案:显示最后答案。
(3)教师 用于教师检查及删除学生的实验数据, 当教师进行操作时需要先输入密码。 菜单项:
检查数据:检查学生数据。 删除所有数据:删除所有数据,释放磁盘空间。
(4)求助 用于显示帮助及其他信息。 菜单项: 关于:显示版本信息。 使用:显示本帮助信息。
使用 Esc 键或 Alt+F3 键关闭帮助窗口。
/*头文件 chem.h*/
#ifndefCHEM_H
#define CHEM_H
const int cmInput1=200;\\assign new command values const int cmInput2=201;
const int cmInput3=202; const int cmInName=203; const int cmMySave=204; const int cmDosShell=205; const int cmDraw=210;
const int cmAnswer=211;
const int cmCheck=220;
const int cmDeleteAll=221;
const int cmAbout=230; const char*PASS=″pass″; const int Y=8;
const int BX=1;
const int WX=26;
const char KEY=0X84;
struct HData{ int x,y; char*text;
} hint[8]={
{5,Y,″第一组″},
{35,Y,″第一组″},
{5,Y+2,″第二组″},
{35,Y+2,″第二组″},
{5,Y+4,″第三组″},
{35,Y+4,″第三组″},
{5,Y+6,″第四组″},
{35,Y+6,″第四组″}
};
typedef struct{
typedef struct{
HData hint2[3]={
int cx,cy; int x1,x2; int y1,y2;
}XYP;
float x,y;
} POINT;
{10,4,″过硫酸根离子浓度不变=″},
{10,4,″碘离子浓度不变=″},
{10,4,″输入数据 0″}
};
char*hint3[6]={″碘化钾溶液体积(ml)″,″反应时间(秒)″,
″过硫酸铵溶液体积(ml)″,″反应时间(秒)″,
″反应温度(摄氏度)″,″反应时间(秒)″
}; const int DX=25; constintDY=25;
struct DialogData
{
char Data[8][15];
}*pInData;
float c_s2o8,c_ia,s2o8[3],ia[3],sj[3],ij[3];
float EA,kEa,a,b,k,T[4],K[4];
float lgso[3],lgsj[3],lgia[3],lgij[3];
float lgk[4],Tt[4],tmpl,tmp2,tmp3;
int flags[6];\\0--name,1-3--input1-3,4--MenuInputvalidflag。
\\5--MenuResulevalidflag.
/*类 TPassInputLine 用于取得一个密码输入*/
class TPassInputLine:public TInputLine
{
virtual void draw(void);
public:
TPassInputLine(const TRect&,int);
};
/*显示窗口类*/
class Tshow Window;public TWindow
{
public: TTerminal*interior;
TShowWindow ( TRect bounds , constchar*winTitle ,
ushortwindowNo);
~TShowWindow(); TTerminal*makeInterior(intsize);
void showFile(char*fileName,intsize,intflag);
};
/*应用程序类*/
class TChemApp:public TApplication public:
TChemApp();
~TChemApp();
static TMenuBar*initMenuBar(TRect);
static TDeskTop*initDestTop(TRect);
private:
TCommandSet WinCommand1,WinCommand2; TShowWindow*pShowWindow;
/*成员函数*/
void clearFlags(void);
void cal(int num,float*x,float*y,float*a,float*b);
void cal_data(void);/*计算结果*/
void init_g(void);/*初始化图形*/
POINT trans(int cx,int cy,POINT point); void sp(XYP xp,int num float*x,float*y); void dline(XYP ct,float a,float b);
void darrow(int flag);
void draw_x_y(XYPpl);/*绘制一个坐标系*/ void mydraw(void);/*根据实验结果作图*/ void save_soore(void);/*存放实验数据*/ virtual voidhandleEvent(TEvent&event); int newDialog(intflag,char*str);
void Insert(TDialog*pd,HData d);
int GetData(float*desl,float*des2,chartext[][15],intnum);
void myCheck(void);
void ShowHelp(void);/*显示帮助信息*/
void showShowWindow(void);
int CheckPass(void);
};
#endif
/*主文件 chem.cpp*/
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<graphics.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<io.h>
#include<alloc.h>#include<fcntl.h>
#include<strstrea.h>
#include<fstream.h>
#include<dir.h>
#define Uses_TEventQueue
#define Uses_Tevent
#define Uses_Tprogram
#define Uses_Tapplication
#define Uses_Tkeys
#define Uses_Trect
#define Uses_TMenuBar
#define Uses_TSubMenu
#define Uses_Tmenultem
#define Uses_TStatusDef
#define Uses_TDeskTop
#define Uses_Tview
#define Uses_Tframe
#define Uses_Tdialog
#define Uses_Tbutton
#define Uses_Tlabel
#define Uses_TInputLine
#define Uses_MsgBox
#define Uses_Twindow
#define Uses_Tterminal
#define Uses_otstream
#include<tv.h>
#include″chem.h″
/*类 TPassInputLine*/ TPassInputLine∷TPassInputLine(constTRect&bounds,intaMaxLen)
:TInputLine(bounds,aMaxLen)
{
}
void TPassInputLine∷draw(void)
{
char buf[128];
int len;
len=strlen(data);
memcpy(buf,data,len);
for(int i=0;i<len;i++) data[i]=′*′; TInputLine∷draw(); memcpy(data,buf,len);
}
/*类 TShowWindow*/
TShowWindow∷TShowWindow(TRectbounds,constchar*winTitle,
ushort windowNo): TWindowInit(&TShowWindow∷initFrame), TWindow(bounds,winTitle,windowNo)
{
interior=makeInterior(1024);
} TShowWindow∷~TShowWindow()
{
remove(interior);
}
TTerminal*Tshow Window∷makeInterior(intsize)
{
TRect bounds=getExtent();
bounds.grow(-1,-1);
return newTTerminal(bounds,0,
standardScrollBar(sbVerticall sbHandleKeyboard),size);
}
/*类 TChemApp*/ TChemApp∷TChemApp();
TProgInit(&TChemApp∷initStatusLine,
&TChemApp∷initMenuBar,
&TChemApp∷initDeskTop
)
{
pInData=new DialogData; WinCommand1+=cmInput1; WinCommand1+=cmInput2; WinCommand1+=cmInput3; WinCommand2+=cmMySave; WinCommand2+=cmDraw; WinCommand2+=cmAnswer; disableCommands(WinCommand1); disableCommands(WinCommand2); clearFlags(); chdir(″\\score″);
}
TChemApp∷~TChemApp()
{
delete pInData;
}
void TChemApp∷showShowWindow(void)
{
pShowWindow=new TShowWindow(TRect(WX,1,WX+52,21),
″检查窗口″,wnNoNumber);
deskTop—>insert(pShowWindow);
}
void TShowWindow ∷ showFile ( char*fileName , intsize=1024 ,
intflag=0)
{
inti;
remove(interior); destroy(interior); interior=makeInterior(size); insert(interior);
otstream os(interior); ifstream is(fileName); is unsetf(ios∷skipws);
char st[128];
while(!is.eof())
{
if(flag)
{
is read(st,128); for(i=0;i<is.gcount();i++) st[i]^=KEY;
}
else is.getline(st,sizeof st);
os<<st; if(!flag) os<<endl;
}
interior—>scrollTo(0,0);
}
void TChemApp∷clearFlags(void)
{
inti; strcpy(s_no,″\0″); for(i=0;i<4;i++) flags[i]=0;
}
void TChemApp∷myCheck(void)
{
char f_name[16]; FILE*fp;
TDialog*pd; TView*b;
showShowWindow();
Pd=new TDialog(TRect(BX,4,BX+22,16),″输入查询学号″);
b=new TInputLine(TRect(3,3,13,4),7);
pd->insert(newTButton(TRect(4,6,14,8),″~O~.选中″,
cmOK,bfDefault));
pd->insert(newTButton(TRect(4,9,14,11),″~D~.返回″,
cmCancel,bfNormal));
pd->insert(b);
pd->insert(newTLabel(TRect(1,2,18,3),″学号″,b));
pd->setData(s_no);
while(deskTop->execView(pd)==cmOK)
{
pd->getData(s_no); strcpy(f_name,s_no); strcat(f_name,″.scr″); if((fp=fopen(f_name,″r″))==NULL)
{
messageBox(″找不到该学生的数据″,mfOKButton);
s_no[0]=′\0′;
continue;
}
pShowWindow->showFile(f_name,1024,1);
s_no[0]=′\0′;
pd->setData(s_no);
}
destroy(pd);
pShowWindow->close();
}
void TChemApp∷ShowHelp(void);
{
ifstreamifs; ifs.open(″\\score\\chem.hlp″,ios∷in); if(!ifs.good())
{
messageBox(″找不到帮助文件!″,mfError|mfOKButton);
return;
}
TDialog*pd=new TDialog(TRect(1,1,77,22),″″);
pShowWindow=new TShowWindow(TRect(0,0,77,21),″帮助窗口
″,wnNoNumber);
pShowWindow->flags=0;
pShowWindow->showFile(″\\score\\chem.hlp″,3000);
pd->insert(pShowWindow);
deskTop->execView(pd);
destroy(pd);}int TChemApp∷CheckPass(void){
char pass[11]=″\0″;
TDialog*pd=new TDialog(TRect(15,5,50,15),″输入″);
pd->insert(newTButton(TRect(20,2,30,4),″~O~.确认″,
cmOK,bfDefault));
pd->insert(new TButton(TRect(20,6,30,8),″~C~.返回″,
cmCancel,bfNormal));
pd->insert(new TStaticText(TRect(2,3,17,4),″输入密码
″));
pd->insert(newTPassInputLine(TRect(5,5,17,6),10));
pd->setData(pass);
if(deskTop->execView(pd)==cmCancel)
{ destroy(pd); return0;
}
pd->getData(pass); destroy(pd); if(strcmp(pass,PASS))
{
messageBox(″\n\n 密码错误!〃,mfOKButton);
return0;
}
return1;
}
voidDeleteAllScore(void)
{ structffblkfb; intdone.
charbuf[80]=″\\score\\″;
done=findfirst(″\\score\\*.scr″,&fb,0);
while(!done)
{ remove(strcat(buf,fb.ff_name)); strcpy(buf,″\\score\\″); done=findnext(&fb);
}
}
voidTChemApp∷handleEvent(TEvent&event)
{ TApplication∷handleEvent(event);
if(event.what==evCommand)
{
switch(event.message.command)
{
case cmInName: if(inputBox(″输入学号″,″学号″,s_no,7)==cmCancel‖ s_no[0]==′\0′)
break; flags[0]=1; break;
case cmInput1: newDialog(1,″过硫酸根离子浓度不变″); break;
case cmInput2: newDialog(2,″碘离子浓度不变″); break;
case cmInput3: newDialog(3,″求反应活化能″); break;
case cmMySave:
clearFlags();
break;
case cmDraw; mydraw(); break;
case cmAnswer;
char buf[128];
sprintf(buf,″--------计算结果-----\n\n\ a=%.3f1b=%,3f/n 反应速率常数 k=%e\n\ 反应活化能 EA=%.2f″a,b,k,EA);
messageBoxRect(TRect(20,5,60,15),mfOKButton,buf);
break;
casecmCheck; if(!CheckPass()) break;
myCheck(); break; casecmDeleteAll;
if(!CheckPass()) breaK; DeleteAllScore(); break;
casecmAbout;
messageBoxRect(TRect(15,5,65,16),mfOKButton,″%s″,
″实验 12 化学反应速率与活化能\n\
\n\
本程序使用 TurboVisionforC++编写,\n\ 在 BorlandC++3.1 上调试通过”);
break;
casecmHelp; ShowHelp(); break;
return;
}
default;
clearEvent(event);\\cleareventafterhandling
}
if((flags[1]&&flags[2]&&flags[3]&&!flags[5])
{
enableCommands(Win Command2);
flags[5]=1;
}
else if(!(flags[1]&&flags[2]&&flags[3])&&flags[5])
{ disableCommands(WinCommand2); flags[5]=0;
}
if(flags[0]&&!flags[4])
{ enableCommands(WinCommand1); flags[4]=1;
}
else if(!flags[0]&&flags[4])
{ disableCommands(WinCommand1); flags[4]=0
}}TMenuBar*TChemApp∷initMenuBar(TRectr)
{
r.b.y=r.a.y+1;
return new TMenuBar(r,
*newTSubMenu(″~I~.输入″,kbAltI)+
*newTMenuItem(″~N~.输入学号″,cmInName,
k bAlt N,hcNoContext,″Alt+n″)+
*newTMenuItem(″~1~.输入第一组″,cmInput1,
kbAlt1,hcNoContext,″Alt+1″)+
*newTMenuItem(″~2~.输入第二组″,cmInput2,
kbAlt2,hcNoContext,″Alt+2″)+
*new TMenuItem(″~3~.输入第三组″,cmInput3,
kbAlt3,hcNoContext,″Alt+3″)+
*newTMenuItem(″~S~保存数据″,cmMySave,kbF2,hcNoContext,
″F2″)+
*new TMenuItem(″~Q~退出″,cmQuit,kbAltX,hcNoContext,″ Alt+X″)+
*newTSubMenu(″~R~结果″,kbAltR)+
*newTMenuItem(″~D~作图″,cmDraw,kbF3,hcNoContext,″F3
″)+
*newTMenuItem(″~A~答案″,cmAnswer,kbAltA,<hcNoContext,
″Alt+A″)+
*newTSubMenu(″~T~教师″,kbAltT)+
*new TMenuItem(″~C~检查数据″,cmCheck,kbAltC,
hcNoContext,″Alt+C″)+
*newTMenuItem(″~D~删除所有数据″,cmDeleteAll,kbAltD,
hoNoContext,″Alt+D″)+
*newTSubMenu(″~H~.求助″,kbAltH)+
*new TMenuItem(″~A~.关于?″,cmAbout,kbF4,hcNoContext,
″F4″)+
*new TMenuItem(″~U~.使用″,cmHelp,kbF1,hcNoContext,″F1
″));
}
void TChemApp∷Insert(TDialog*pd,HDatad)
{TView *b;
int len=strlen(d.text)+2;
b=new TInputLine(TRect(d.x+len,d.y,d.x+len+15,d.y+1),
15);
pd->insert(b);
pd->insert(new TLabel(TRect(d.x,d.y,d.x+len-1,d.y+1),
d.text,b));
}
int TChemApp∷GetData(float*desl,float*desl,char text[][15],
intnum)?*
{
int i;
for(i=0;i<num;i+=2)
des1[i/2]=atof(text[i]);loat*desl,char text[][15],
intnum)?*
for(i=1;i<num;i+=2)
des2[i/2]=atof(text[i]);oat*desl,char text[][15],
intnum)?*
for(i=0;i<num/2—1;i++)
if(desl[i]!=desl[i+1]‖des2[i]!=des2[i+1])][15],
intnum)?*
return 0;
return1;
}
int TChem App∷newDialog(intflag,char*text)
{
int error, TDialog*pd=newTDialog(TRect(10,1,70,20),″输入框″); if(pd)
{TView *b;
int i;
b=new TStaticText(TRect(20,1,50,2),text);
pd->insert(b);
for(i=0;i<2;i++)
pd->insert(new TStaticText(TRect(12+i*32,6,
13+i*32+strlen(hint3[flag*2+j-2]),7),hint3[flag*2+i-2]));
if(flag!=3) Insert(pd,hint2[flag—1];
else pd->insert(newTStaticText(TRect(10,4,30,5),hint2
[2],text)); for(i=0;i<((flag==3)?8:6);i++) Insert(pd,hint[i]);
pd->insert(new TButton(TRect(15,16,25,18),″~O~确认
″,cmOK,
bfNormal));
pd->insert(new TButton(TRect(28,16,38,18),″~C~取消
″,
cmCancel,bfNormal));
pd->selectNext(False);
for(i=0;i<8;i++)
strcpy(pInData->Data[i],″\0″);
pd->setData(pInData);
ushort control=deskTop->execView(pd); pd->makeFirst(); if(control!=cmCancel)
{
pd->getData(pInData);
switch(flag)
{
case 1;
c_s2o8=atof(pInData->Data[0]; error=GetData(ia,ij,&pInData->Data[1],6); break;
case 2;
c_ia=atof(pInData->Data[0]);
error=GetData(s2o8,sj,&pInData->Data[1],6);
break;
case 3;
error=GetData(T,K,pInData->Data,8);
break;
}
}
return 1;
} destroy(pd); if(error)
{
messageBox(″数据输入错误!″,mfOKButton);
return 0;
}
flags[flag]=1;
if(flags[1]&&flags[2]&&flags[3])OKButton);
{
cal_data();
save_score();
}
return 1;
}
void TChemApp∷cal(intnum,float*x,float*y,float*a,float*b)
/*用最小二乘法拟合 y=a*x+b*/
{
float x_sum=0,x2_sum=0; inti; for(i=0;i<num;i++)
{
x_sum+=x[i];
x2_sum+=x[i]*x[i];
}
*a=0;
*b=0;
for(i=0;i<num;i++)
{
*b+=y[i]*(x2_sum—x[i]*x_sum);
*a+=y[i]*(x_sum—num*x[i]);
}
*a/=(x_sum*x_sum—num*x2_sum);
*b/=(num*x2_sum—x_sum*x_sum);
}
voidTChemApp∷cal_data(void)/*计算结果*/
{
inti;
for(i=0,i<3;i++)
{
lgso[i]=log10(s2o8[i]/260.0); lgsj[i]=log10(1.0/1300/sj[i]); lgia[i]=log10(ia[i]/260); lgij[i]=log10(1.0/1300/ij[i]);
} cal(3,lgso,lgsj,&a,&tmp1); cal(3,lgia,lgij,&b,&tmp2); doubletp1,tp2; tp1=pow(13,0,a); tp2=pow(26,0,b); for(i=0;i<4;i++)
{ lgk[i]=log10(tp1*tp2/K[i]/130); Tt[i]=1.0/(T[i]+273.2);
}
cal(4,Tt,lgk,&EA,&tmp3);
kEa=EA; EA=EA*(—2.3)*8.314;
k=pow(10,tmp1—b*log10(c_ia));
k=(k+pow(10,tmp2-a*log*10(c_s2o8)))/2;}
void TChemApp∷init_g(void)/*初始化图形*/
{
int gdriver=DETECT,gmode,errorcode; errorcode=registerbgidriver(EGAVGA_driver); if(errorcode<0)
{
printf(″Graphics error.%s\n″,grapherrormsg(errorcode));
printf(″Press any key to halt:″);
getch();
exit(1);
} initgraph(&gdriver,&gmode,″″); errorcode=graphresult(); if(errorcode!=grOK)
{
printf(″Graphics error:%s\n″,grapherrormsg(errorcode));
printf(″Press any key to halt″);
getch();
exit(1);
成为本站VIP会员VIP会员登录,
若未注册,请点击免费注册VIP 成为本站会员.
版权声明:本站所有电子书均来自互联网。如果您发现有任何侵犯您权益的情况,请立即和我们联系,我们会及时作相关处理。