返回文章列表

测试

渲染风格:

6. 自测题目


题目1:成绩统计工具(覆盖:变量与数据类型、函数、条件/循环语句)

覆盖知识点

ArkTS变量定义与类型注解、函数定义/调用、for循环、if-else条件判断、数组操作

需求

  1. 定义一个数字类型数组 scores: number[],手动初始化3个学生成绩(如 [85, 92, 58]);
  2. 编写函数 calcScoreStats(scores: number[]): {}
    • for 循环计算成绩总和;
    • 基于总和计算平均分(保留1位小数);
    • if-else 判断平均分等级(≥90:"优秀";80-89:"良好";60-79:"及格";<60:"不及格");
  3. 调用函数并在控制台打印结果(格式:总和:235,平均分:78.3,等级:及格)。

参考代码

// 先定义返回类型接口
interface ScoreStats {
  sum: number;
  avg: number;
  level: string;
}

// 定义成绩数组(变量与数据类型)
let scores: number[] = [85, 92, 58];

// 定义统计函数
function calcScoreStats(scores: number[]): ScoreStats {
  let sum: number = 0;
  // for循环计算总和
  for (let i = 0; i < scores.length; i++) {
    sum += scores[i];
  }
  // 计算平均分并保留1位小数
  let avg: number = Number((sum / scores.length).toFixed(1));
  let level: string = "";

  // 条件判断等级
  if (avg >= 90) {
    level = "优秀";
  } else if (avg >= 80) {
    level = "良好";
  } else if (avg >= 60) {
    level = "及格";
  } else {
    level = "不及格";
  }

  return { sum, avg, level };
}

// 调用函数并打印结果
const result = calcScoreStats(scores);
console.log(`总和:${result.sum},平均分:${result.avg},等级:${result.level}`);

题目2:商品信息模型(覆盖:类的定义、接口实现、数据类型)

覆盖知识点

ArkTS接口定义、类的实现、构造函数、方法重写、类型约束

需求

  1. 定义接口 IGoods,约束商品的属性和方法:
    • 属性:id: number(商品ID)、name: string(商品名称)、price: number(价格);
    • 方法:getDesc(): string(返回商品描述字符串);
  2. 定义类 Goods 实现 IGoods 接口:
    • 构造函数接收 idnameprice 初始化属性;
    • 实现 getDesc() 方法,返回格式:"商品ID:1,名称:华为手机,价格:3999元"
  3. 实例化2个 Goods 对象,调用 getDesc() 方法并在控制台打印结果。

参考代码

// 定义商品接口
interface IGoods {
  id: number;
  name: string;
  price: number;
  getDesc(): string;
}

// 定义类实现接口
class Goods implements IGoods {
  id: number;
  name: string;
  price: number;

  // 构造函数初始化属性
  constructor(id: number, name: string, price: number) {
    this.id = id;
    this.name = name;
    this.price = price;
  }

  // 实现接口的方法
  getDesc(): string {
    return `商品ID:${this.id},名称:${this.name},价格:${this.price}元`;
  }
}

// 实例化对象并调用方法
const phone = new Goods(1, "华为手机", 3999);
const headphone = new Goods(2, "蓝牙耳机", 299);

console.log(phone.getDesc()); // 输出:商品ID:1,名称:华为手机,价格:3999元
console.log(headphone.getDesc()); // 输出:商品ID:2,名称:蓝牙耳机,价格:299元

题目3:模块化复用(覆盖:模块导入导出)

覆盖知识点

ArkTS模块导出(export)、导入(import)、模块间依赖调用

需求

  1. 新建2个文件:
    • utils/CalcUtil.ets:将题目1的 calcScoreStats 函数移入,并用 export 暴露;
    • model/GoodsModel.ets:将题目2的 IGoods 接口、Goods 类移入,并用 export 暴露;
  2. 新建主文件 main.ets,通过 import 导入上述函数、接口、类:
    • 调用 calcScoreStats 处理新的成绩数组 [78, 88, 95]
    • 实例化1个新的 Goods 对象(如ID=3,名称=平板,价格=2499);
  3. 在控制台打印所有结果,验证模块化调用是否正常。

参考代码

1. utils/CalcUtil.ets(导出函数)

// 先定义返回类型接口
export interface ScoreStats {
  sum: number;
  avg: number;
  level: string;
}

// 定义统计函数
export function calcScoreStats(scores: number[]): ScoreStats {
  let sum: number = 0;
  // for循环计算总和
  for (let i = 0; i < scores.length; i++) {
    sum += scores[i];
  }
  // 计算平均分并保留1位小数
  let avg: number = Number((sum / scores.length).toFixed(1));
  let level: string = "";

  // 条件判断等级
  if (avg >= 90) {
    level = "优秀";
  } else if (avg >= 80) {
    level = "良好";
  } else if (avg >= 60) {
    level = "及格";
  } else {
    level = "不及格";
  }

  return { sum, avg, level };
}

2. model/GoodsModel.ets(导出接口和类)

// 导出接口
export interface IGoods {
  id: number;
  name: string;
  price: number;
  getDesc(): string;
}

// 导出类
export class Goods implements IGoods {
  id: number;
  name: string;
  price: number;

  constructor(id: number, name: string, price: number) {
    this.id = id;
    this.name = name;
    this.price = price;
  }

  getDesc(): string {
    return `商品ID:${this.id},名称:${this.name},价格:${this.price}元`;
  }
}

3. index.ets(导入并调用)

import { Goods, IGoods } from '../model/GoodsModel';
import { calcScoreStats } from '../utils/CalcUtil';

// 调用成绩统计函数
const newScores: number[] = [78, 88, 95];
const scoreResult = calcScoreStats(newScores);
console.log("新成绩统计结果:", JSON.stringify(scoreResult));

// 实例化商品对象
const pad: IGoods = new Goods(3, "平板", 2499);
console.log("新商品信息:", pad.getDesc());