比较氧化还原反应与酸碱、沉淀反应的异同讨论
完成日期:20##年11月18日
作者:戴安婧 刘春宏 刘树青 刘薇 吴亦歌 徐璐颖
生命科学院
指导老师:王睿博
一 摘要
本文先描述还原、酸碱和沉淀反应的定义,并比较它们各方面的异同,并从微观角度讨论其根源。
二 前言
完成了酸碱、沉淀、和氧化反应这三个实验后,理解这三种反应的特点和原理,了解其原因,对理论上的学习和实际实验进行总结。
三、内容
1.氧化还原反应、酸碱反应和沉淀反应的定义:
氧化还原反应:在反应前后元素的氧化数具有相应的升降变化的化学反应。
酸碱反应:酸碱质子理论中的酸碱反应是酸碱之间的质子传递。
沉淀反应:沉淀的生成和溶解统称为沉淀反应。
2.氧化还原反应、酸碱反应和沉淀反应的相同点:
① 均存在化学平衡。
氧化还原反应:
以酸性条件下高锰酸根(MnO4?)与草酸根(C2O42?)做为例子,MnO4?发生还原反应,故为氧化剂,C2 O42?发生氧化反应,故为还原剂。
其还原半反应式为:
MnO4? + 8H + + 5e- → Mn2+ + 4H2O
而氧化半反应式为:
C2O42?→ + 2CO2 + 2e-
总反应:2MnO4? + 5C2O42? + 16H + → 2Mn2+ + 10CO2 + 8H2O
Aox1 + Bred2 = Cred1 + Dox2
A: MnO4? B: C2O42? C:Mn2+ D: CO2
A氧化成C,B还原成D。这两个正向反应和其逆反应都同时进行并且达到平衡。
酸碱反应:水是两性物质,因此依反应物的不同,水可能是酸(释放质子),也可能是碱(接受质子)。例如在水和乙酸的反应中,水扮演碱的角色:
CH3COOH + H2O CH3COO? + H3O+
生成物之一的乙酸根离子 CH3COO? 是乙酸的共轭碱,而水合氢离子 H3O+ 则是水的共轭酸。正向反应与逆反应都同时进行,最终达到平衡。
沉淀反应: 在一定温度下难溶电解质晶体与溶解在溶液中的离子之间存在溶解和结晶的平衡。
以AgCl为例,从固体溶解平衡角度认识,AgCl在溶液中存在下属两个过程:
·在水分子作用下,少量Ag+和Cl-脱离AgCl表面溶入水中;
·溶液中的Ag+和Cl-受AgCl表面正负离子的吸引,回到AgCl表面,析出沉淀。
在一定温度下,当沉淀溶解和沉淀生成的速率相等时,得到AgCl的饱和溶液,即建立下列动态平衡:
AgCl(s)<=> Ag+(aq)+ Cl-(aq)
溶解平衡的特点是动态平衡,即溶解速率等于结晶速率,且不等于零。 沉淀溶解平衡常数为Ksp,受温度的影响。
② 平衡常数均受温度的影响。
温度的改变会使溶液中离子和电荷的移动速率改变,进而改变平衡常数。
③ 均满足化学反应中的守恒关系。
如:电荷守恒,原子守恒和元素守恒。
3.氧化还原反应、酸碱反应和沉淀反应的不同点:
① 反应原理不同:
氧化还原反应是电子的转移或偏移。酸碱反应中是质子的转移。沉淀反应是固体沉淀与电离离子之间的相互作用。
② 反应平衡的判据不同:氧化还原平衡为电池电动势。酸碱平衡为离解常数,沉淀溶解平衡为溶度积。
③ 反应的速率不同:氧化还原反应的反应速率比其他两个反应较慢。酸碱反应和沉淀溶解反应一般在溶液中进行,溶液中离子反应的活化能一般都较小(小于40KJ·mol),反应速率较快。
④ 对于无法自发进行的氧化还原反应,可以通过电解、光解的方法利用物理手段使反应得以进行。如水的电解和光解。
四、结论
酸碱反应、沉淀反应、氧化还原反应的共同点如下:都存在化学平衡,都受温度的影响。
不同点:平衡的判据、反应条件、反应速率、等等。
五 参考文献
六.小组分工表
第二篇:c++实验八报告
华南农业大学信息(软件)学院
综合性、设计性实验成绩单
开设时间:2013~20##年第二学期
1 实验内容及目的
2 实验步骤
(1)按照要求建立相关的函数
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
void printStack();
bool contains(T element);
(2)建立两个测试的数据栈,一个是字母,一个是数字
Stack<string> stringStack;
stringStack.push("zhongguo");
stringStack.push("xianggang");
stringStack.push("aomen");
for(int i=0;i<10;i++){
intStack.push(i);
}
3 源代码
Main.cpp
#include <iostream>
#include <string>
#include "Stack.h"
using namespace std;
int main()
{
Stack<int> intStack;
Stack<string> stringStack;
stringStack.push("zhongguo");
stringStack.push("xianggang");
stringStack.push("aomen");
cout<<"is contain zhongguo? "<<stringStack.contains("zhongguo")<<endl;
cout<<"is contain taiwan? "<<stringStack.contains("taiwan")<<endl;
cout<<"is contain zhuhai? "<<stringStack.contains("zhuhai")<<endl;
stringStack.printStack();
cout<<endl;
for(int i=0;i<10;i++){
intStack.push(i);
}
cout<<"is contain 2? "<<intStack.contains(5)<<endl;
cout<<"is contain 7? "<<intStack.contains(6)<<endl;
cout<<"is contain 15? "<<intStack.contains(10)<<endl;
intStack.printStack();
return 0;
}
Stack.h
#ifndef STACK_H
#define STACK_H
template<typename T>
class Stack
{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
void printStack();
bool contains(T element);
private:
T elements[100];
int size;
};
template<typename T>
Stack<T>::Stack()
{
size=0;
}
template<typename T>
bool Stack<T>::empty()
{
return (size==0);
}
template<typename T>
T Stack<T>::peek()
{
return elements[size-1];
}
template<typename T>
void Stack<T>::push(T value)
{
elements[size++]=value;
}
template<typename T>
T Stack<T>::pop()
{
return elements[--size];
}
template<typename T>
int Stack<T>::getSize()
{
return size;
}
template<typename T>
void Stack<T>::printStack()
{
while(!empty())
{
cout<<pop()<<" ";
}
cout<<endl;
}
template<typename T>
bool Stack<T>::contains(T element)
{
for(int i=0;i<size;i++)
{
if(element==elements[i])
{
return true;
}
}
return false;
}
#endif
4 遇到的问题与分析
很快就完成了,感觉就跟玩一样,所以也没有什么问题。
5 实验体会
前面已经做过了StackOflntegers类,所以做这个实验简直就是玩一样的感觉,也就是十几分钟的事情,但是感觉做的还是不错的。