在这里插入图片描述
在这里插入图片描述

一、设计思路

复分解反应的判断有一套严格的三步法:①反应物可溶(酸除外)→ ②交换成分 → ③生成物有沉淀/气体/水之一。这套流程逻辑分明,适合固化成代码:溶解性表用 Record 存储,三条件判定封装成函数,最后用 canDoubleDecompose() 串联成完整判断器,UI 层做可视化分步演示。

二、溶解性表与判断函数(DoubleDecomposeRules.ets)

/**
 * 复分解反应三步判断器
 * 口诀:钾钠铵硝皆可溶,盐酸盐除银,硫酸盐除钡,碳酸盐只溶钾钠铵
 */

// 常见物质的溶解性表(true = 可溶)
const SOLUBILITY: Record<string, boolean> = {
  'NaCl': true, 'KNO₃': true, 'NaNO₃': true, 'AgNO₃': true,
  'KCl': true, 'BaCl₂': true, 'Na₂SO₄': true, 'Ba(NO₃)₂': true,
  'NaOH': true, 'KOH': true, 'Ca(OH)₂': true,
  'Na₂CO₃': true, 'K₂CO₃': true, '(NH₄)₂CO₃': true,
  'AgCl': false, 'BaSO₄': false, 'CaCO₃': false, 'BaCO₃': false,
  'Mg(OH)₂': false, 'Cu(OH)₂': false, 'Fe(OH)₃': false
};

// 沉淀颜色表(用于现象提示)
const PRECIPITATE_COLOR: Record<string, string> = {
  'AgCl': '白色沉淀(不溶于稀硝酸)',
  'BaSO₄': '白色沉淀(不溶于稀硝酸)',
  'CaCO₃': '白色沉淀(溶于稀盐酸放气泡)',
  'BaCO₃': '白色沉淀(溶于稀盐酸放气泡)',
  'Mg(OH)₂': '白色沉淀',
  'Cu(OH)₂': '蓝色沉淀',
  'Fe(OH)₃': '红褐色沉淀'
};

// 步骤①:检查反应物是否可溶(酸除外;查不到默认按可溶)
function reactantsSoluble(a: string, b: string): boolean {
  const aS = SOLUBILITY[a] ?? true;
  const bS = SOLUBILITY[b] ?? true;
  return aS || bS;   // 两种都不溶则失败;酸(默认可溶)可放宽
}

// 步骤③:检查生成物是否有沉淀 / 气体 / 水
function hasProductCondition(products: string[]): string {
  for (const p of products) {
    if (PRECIPITATE_COLOR[p] !== undefined) {
      return `生成${PRECIPITATE_COLOR[p]} → 反应能发生`;
    }
    if (p === 'H₂O') {
      return '生成水 → 反应能发生';
    }
    if (p === 'CO₂↑' || p === 'CO₂') {
      return '生成气体 CO₂ → 反应能发生';
    }
  }
  return '无沉淀、无气体、无水 → 反应不能发生';
}

// 三步法主函数:传入两种反应物与生成的产物
export function canDoubleDecompose(a: string, b: string,
                                   products: string[]): string {
  // 步骤①
  if (!reactantsSoluble(a, b)) {
    return '反应物都不溶于水 → 反应不能发生';
  }
  // 步骤② 交换成分(由调用方给出产物)步骤③
  return hasProductCondition(products);
}

// 单元测试式验证
console.info(canDoubleDecompose('NaCl', 'AgNO₃', ['AgCl', 'NaNO₃']));
// 生成白色沉淀(不溶于稀硝酸) → 反应能发生
console.info(canDoubleDecompose('NaCl', 'KNO₃', ['NaCl', 'KNO₃']));
// 无沉淀、无气体、无水 → 反应不能发生
console.info(canDoubleDecompose('HCl', 'NaOH', ['NaCl', 'H₂O']));
// 生成水 → 反应能发生(中和反应)

三、三步判断器页面(DoubleDecomposeChecker.ets)

import { canDoubleDecompose } from '../common/DoubleDecomposeRules';

/**
 * 复分解反应三步判断器(可视化分步演示)
 * ①查溶解性 → ②交换成分 → ③查三条件
 */
@Entry
@Component
struct DoubleDecomposeChecker {
  @State step: number = 0;            // 当前演示步骤 0/1/2
  @State result: string = '';

  // 示例:NaCl + AgNO₃
  private reactantA: string = 'NaCl';
  private reactantB: string = 'AgNO₃';
  private products: string[] = ['AgCl', 'NaNO₃'];

  private stepTexts: string[] = [
    '① 检查反应物溶解性:NaCl 可溶 ✓,AgNO₃ 可溶 ✓',
    '② 交换成分:NaCl + AgNO₃ → AgCl + NaNO₃',
    '③ 检查生成物三条件(沉淀/气体/水)'
  ];

  build() {
    Column({ space: 14 }) {
      Text('🧪 复分解三步判断器')
        .fontSize(20).fontWeight(FontWeight.Bold)

      // 方程式展示
      Text('NaCl + AgNO₃ → AgCl↓ + NaNO₃')
        .fontSize(16).fontWeight(FontWeight.Bold).fontColor('#111827')
        .padding(12).borderRadius(10).backgroundColor('#EAF0FF')
        .width('90%').textAlign(TextAlign.Center)

      // 分步文本
      Text(this.stepTexts[this.step])
        .fontSize(14).fontColor('#4B5563').lineHeight(22)
        .width('90%').textAlign(TextAlign.Center)

      // 分步推进按钮
      Button(this.step < 2 ? '下一步 →' : '重新演示 ↺')
        .width('80%').height(44).backgroundColor('#4C7DFF')
        .onClick(() => {
          if (this.step < 2) {
            this.step++;
          } else {
            this.step = 0;
            this.result = '';
          }
        })

      // 步骤③后执行完整判断
      if (this.step === 2) {
        Button('执行完整判断').width('80%').height(40)
          .backgroundColor('#0F766E')
          .onClick(() => {
            this.result = canDoubleDecompose(this.reactantA, this.reactantB,
                                             this.products);
          })
      }

      // 结论卡片
      if (this.result.length > 0) {
        Text(this.result).fontSize(14).fontColor('#0F766E')
          .lineHeight(22).textAlign(TextAlign.Center).width('90%')
          .padding(14).borderRadius(12).backgroundColor('#E6FFF9')
      }
    }
    .padding(20)
  }
}

四、代码要点

  • 查表驱动Record<string, boolean> 类型的 SOLUBILITY 表就是"溶解性口诀"的数字化,查表代替死记。
  • 函数流水线reactantsSolublehasProductConditioncanDoubleDecompose,三步法逐级串联,逻辑清晰可测。
  • 分步教学@State step 控制演示进度,先分步展示三步法,最后"执行完整判断"验证结果。

五、复分解反应核心知识点

要点 内容
定义 两种化合物交换成分(AB + CD → AD + CB),化合价不变
发生条件 反应物可溶(酸除外)+ 生成物有沉淀 / 气体 / 水之一
溶解性口诀 钾钠铵硝皆可溶,盐酸盐除银,硫酸盐除钡,碳酸盐只溶钾钠铵
常见沉淀 AgCl、BaSO₄(白,不溶稀硝酸);CaCO₃、BaCO₃(白,溶于酸放气泡);Cu(OH)₂(蓝);Fe(OH)₃(红褐)
离子检验 Cl⁻ 加 AgNO₃ 白沉淀不溶硝酸;SO₄²⁻ 加 BaCl₂ 白沉淀;CO₃²⁻ 加稀盐酸冒气泡
中和反应 酸 + 碱 → 盐 + 水,是复分解反应的特例
典型易错 NaOH 与 CO₂ 不属复分解(不交换成分);AgCl 不溶故 AgCl 与 NaNO₃ 不反应
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐