当前位置: 首页 > news >正文

安全编码课程 实验6 整数安全

实验项目

实现安全计数器实现 Counter 结构,确保计数范围为 0~100。

实验要求:

1、使用 struct 封装计数值value;

2、计数器初值为 0;

3、increment() 方法增加计数,但不能超过 100;

4、decrement() 方法减少计数,但不能小于 0;

5、get_count() 方法返回当前计数值;

6、释放计数器。

7、编写测试代码,注意测试边界条件。

以上1-7用c语言编写

8、用c++构造计数器类,同样包含上述功能,无需测试

提交:

1. 代码

2. 测试用例

3. 过程及结果截图

目录

实验项目

实验步骤、实验结果及结果分析:

1. 代码

1、使用 struct 封装计数值value;

2、计数器初值为 0;

3、increment() 方法增加计数,但不能超过 100;

4、decrement() 方法减少计数,但不能小于 0;

5、get_count() 方法返回当前计数值;

6、释放计数器。

2. 测试用例 

7、编写测试代码。

8、用c++构造计数器类,同样包含上述功能

3. 过程及结果截图


实验步骤、实验结果及结果分析:

1. 代码

1、使用 struct 封装计数值value;

typedef struct {
    int value;   
} Counter;

2、计数器初值为 0;

Counter* create_counter() {
    Counter* counter = (Counter*)malloc(sizeof(Counter));
    if (counter != NULL) {
        counter->value = 0;  // 初始化为0
    }
    return counter;
}

3、increment() 方法增加计数,但不能超过 100;

void increment(Counter* counter) {
    if (counter->value < 100) {
        counter->value++;
    }
}

4、decrement() 方法减少计数,但不能小于 0;

void decrement(Counter* counter) {
    if (counter->value > 0) {
        counter->value--;
    }
}

5、get_count() 方法返回当前计数值;

int get_count(Counter* counter) {
    return counter->value;   
}   

6、释放计数器。

void destroy_counter(Counter* counter) {
    free(counter);   
}   

2. 测试用例 

7、编写测试代码。

    // 创建计数器
    Counter* counter = create_counter();
    // 测试初始值
    printf("Initial count: %d \n", get_count(counter));
    // 测试增加到上限
    for (int i = 0; i < 105; i++) {
        increment(counter);
    }
    printf("After 105 increments: %d \n", get_count(counter));
    // 测试减少到下限
    for (int i = 0; i < 105; i++) {
        decrement(counter);
    }
    printf("After 105 decrements: %d \n", get_count(counter));
    // 测试边界附近的单个操作
    increment(counter);
    printf("After increment at 0: %d \n", get_count(counter));
    increment(counter);
    printf("After increment at 0: %d \n", get_count(counter));
    decrement(counter);
    printf("After decrement at 1: %d \n", get_count(counter));
    decrement(counter);
    printf("After decrement at 1: %d \n", get_count(counter));
    decrement(counter);
    printf("After decrement at 1: %d \n", get_count(counter));
    // 边界精确测试   
    for (int i = 0; i < 100; i++) increment(counter);   
    printf("After exactly 100 increments: %d\n", get_count(counter)); 
    // 混合操作测试   
    for (int i = 0; i < 200; i++) {
        if (i % 3 == 0) decrement(counter);
        else increment(counter);   
    }   
    printf("After mixed 200 operations: %d\n", get_count(counter)); 
    // 释放计数器
    destroy_counter(counter);

8、用c++构造计数器类,同样包含上述功能

#include <iostream>  
class Counter {    
private:
    int value;  
public:
    // 1. 使用类封装计数值value
    // 2. 构造函数初始化计数器为0
    Counter() : value(0) {}
    // 3. increment()方法增加计数(不超过100)
    void increment() {
        if (value < 100) {
            value++;
        }
    }
    // 4. decrement()方法减少计数(不小于0)
    void decrement() {
        if (value > 0) {
            value--;
        }
    }
    // 5. get_count()方法返回当前计数值
    int get_count() const {
        return value;
    }
    // 6. 析构函数自动释放资源
    ~Counter() = default;
};

3. 过程及结果截图

计数器程序运行结果符合预期,边界条件和操作逻辑都实现。

相关文章:

  • WPF依赖注入
  • 【金仓数据库】
  • 深入解析 MySQL 中的日期时间函数:DATE_FORMAT 与时间查询优化
  • HTTP 响应头 Strict-Transport-Security 缺失漏洞
  • GraphRAG与知识图谱
  • 【数据标准】数据标准化实施流程与方法-保障机制篇
  • 图灵逆向——题一-动态数据采集
  • createContext+useContext+useReducer组合管理React复杂状态
  • 代码片段 - C#实现多张图片根据重叠部分拼接图像
  • SpringBoot的简单介绍
  • Vue3实战八、路由权限和动态路由
  • 使用 Lua 脚本高效查询 Redis 键的内存占用
  • 【go】slice的浅拷贝和深拷贝
  • Python设计模式:适配模式
  • 2025 年江苏保安员职业资格考试经验分享​
  • starrocks split函数和trino split函数差异性
  • 【正点原子】如何设置 ATK-DLMP135 开发板 eth0 的开机默认 IP 地址
  • Windows RAC 集群故障:表决盘 “失踪” 致无法启动的排查实践
  • Docker部署Jenkins服务
  • ComfyUI模型下载与路径问题解决
  • 手机怎么建立网站/网站发布与推广
  • 如何使用wordpress插件/西安自动seo
  • 深圳企业网站建设报价/域名批量查询工具
  • 定制一个网站多少钱/关键词热度分析工具
  • 做微电网的公司网站/在线培训app
  • 看板娘 wordpress/枫树seo网