代码示例

以下是CH+编程语言的代码示例,展示了从基础语法到高级特性的各种用法

1
基础语法示例

展示变量定义、数学运算和基本输出功能。这是CH+最基础的语法示例,演示了如何定义变量、进行数学运算以及使用控制台输出函数。

main.ch
// 基础语法示例
定义(空类型) 主函数() {
    // 变量定义
    定义(整型) 数值一 = 10;
    定义(整型) 数值二 = 20;

    // 数学运算
    定义(整型) 和 = 数值一 + 数值二;
    定义(整型) 积 = 数值一 * 数值二;
    定义(整型) 差 = 数值一 - 数值二;
    定义(小数) 商 = 数值一 / 数值二;

    // 输出结果
    控制台输出("a + b = " + 和);
    控制台输出("a * b = " + 积);
    控制台输出("a - b = " + 差);
    控制台输出("a / b = " + 商);
}
运行结果
a + b = 30
a * b = 200
a - b = -10
a / b = 0.5
变量定义 数学运算 控制台输出 字符串拼接
2
条件判断示例

展示如果、否则、否则如果等条件判断语句的使用方法。通过成绩等级判断的例子,演示多条件分支的处理。

condition.ch
// 条件判断示例 - 成绩等级判断
定义(空类型) 主函数() {
    定义(整型) 分数 = 85;
    
    // 成绩等级判断
    如果 (分数 >= 90) {
        控制台输出("成绩优秀!");
    } 否则如果 (分数 >= 80) {
        控制台输出("成绩良好!");
    } 否则如果 (分数 >= 70) {
        控制台输出("成绩中等!");
    } 否则如果 (分数 >= 60) {
        控制台输出("成绩及格!");
    } 否则 {
        控制台输出("成绩不及格,需要努力!");
    }
}
运行结果
成绩良好!
如果语句 否则如果 否则 多条件判断
3
循环结构示例

展示对于循环和当循环的使用方法,包括循环计数、条件循环和循环嵌套等常见模式。

loop.ch
// 循环结构示例
定义(空类型) 主函数() {
    // 对于循环 - 打印1到5
    控制台输出("对于循环示例:");
    定义(整型) i;
    对于 (i = 1; i <= 5; i = i + 1) {
        控制台输出(i);
    }
    
    // 当循环 - 计算累加和
    控制台输出("当循环示例 - 计算1到10的和:");
    定义(整型) 总和 = 0;
    定义(整型) n = 1;
     (n <= 10) {
        总和 = 总和 + n;
        n = n + 1;
    }
    控制台输出("1到10的和 = " + 总和);
}
运行结果
对于循环示例:
1
2
3
4
5
当循环示例 - 计算1到10的和:
1到10的和 = 55
对于循环 当循环 累加计算 循环计数
4
函数定义示例

展示函数的定义和调用方法,包括参数传递、返回值、递归调用等高级特性。

function.ch
// 函数定义示例

// 定义加法函数
定义(整型) 加法(定义(整型) a, 定义(整型) b) {
    返回 a + b;
}

// 定义阶乘函数(递归)
定义(整型) 阶乘(定义(整型) n) {
    如果 (n <= 1) {
        返回 1;
    }
    返回 n * 阶乘(n - 1);
}

// 主函数
定义(整型) 主函数() {
    // 调用加法函数
    定义(整型) 结果 = 加法(10, 20);
    控制台输出("10 + 20 = " + 结果);
    
    // 调用阶乘函数
    定义(整型) 阶乘结果 = 阶乘(5);
    控制台输出("5! = " + 阶乘结果);
    
    返回 0;
}
运行结果
10 + 20 = 30
5! = 120
函数定义 参数传递 返回值 递归调用
5
汇编执行示例

展示内联汇编和汇编执行块的使用方法,包括变量替换和返回值捕获等高级特性。

asm.ch
// 汇编执行示例
定义(整型) 主函数() {
    // 定义变量
    定义(整型) 数值A = 10;
    定义(整型) 数值B = 20;
    
    // 内联汇编 - 使用变量替换
    asm("mov eax, ${数值A}");
    asm("add eax, ${数值B}");
    
    // 汇编执行块
    定义(整型) 汇编结果;
    汇编执行{
        mov eax, 100
        add eax, 50
        返回 eax
    };
    
    控制台输出("汇编计算结果: " + 汇编结果);
    返回 0;
}
运行结果
汇编计算结果: 150
内联汇编 汇编执行块 变量替换 返回值捕获
6
系统调用示例

展示系统调用和WindowsAPI的使用方法,包括平台检测、获取进程ID、获取系统时间等系统级操作。

syscall.ch
// 系统调用示例
定义(整型) 主函数() {
    // 平台检测
    控制台输出("当前平台: " + 平台);
    控制台输出("操作系统: " + 操作系统);
    
    // 获取进程ID
    定义(整型) 进程ID;
    如果 (平台 == "Windows") {
        // Windows: GetCurrentProcessId
        WindowsAPI(24 进程ID);
    } 否则如果 (平台 == "Linux") {
        // Linux: getpid
        系统调用(39 进程ID);
    } 否则如果 (平台 == "Android") {
        // Android: getpid
        系统调用(39 进程ID);
    }
    控制台输出("进程ID: " + 进程ID);
    
    // Windows专用功能
    如果 (平台 == "Windows") {
        定义(整型) 运行时间;
        // GetTickCount
        WindowsAPI(0 运行时间);
        控制台输出("系统运行时间: " + 运行时间 + " 毫秒");
    }
    
    返回 0;
}
运行结果 (Windows)
当前平台: Windows
操作系统: Windows
进程ID: 12345
系统运行时间: 1234567 毫秒
系统调用 WindowsAPI 平台检测 跨平台
7
结构体示例

展示结构体的定义和使用方法,包括成员访问、结构体数组等高级用法。

struct.ch
// 结构体示例

// 定义学生结构体
结构体 学生 {
    字符串 姓名;
    整型 年龄;
    小数 分数;
};

定义(空类型) 主函数() {
    // 创建结构体实例
    定义(学生) 学生一;
    学生一.姓名 = "张三";
    学生一.年龄 = 18;
    学生一.分数 = 95.5;
    
    // 输出学生信息
    控制台输出("姓名: " + 学生一.姓名);
    控制台输出("年龄: " + 学生一.年龄);
    控制台输出("分数: " + 学生一.分数);
}
运行结果
姓名: 张三
年龄: 18
分数: 95.5
结构体 成员访问 自定义类型 数据封装
8
字符串操作示例

展示字符串的定义、拼接、比较等常用操作,以及字符串与数字之间的转换。

string.ch
// 字符串操作示例
定义(空类型) 主函数() {
    // 字符串定义
    定义(字符串) 姓名 = "张三";
    定义(字符串) 城市 = "北京";
    
    // 字符串拼接
    定义(字符串) 问候语 = "你好," + 姓名 + "!欢迎来到" + 城市;
    控制台输出(问候语);
    
    // 字符串与数字转换
    定义(整型) 年龄 = 25;
    定义(字符串) 年龄文本 = "年龄: " + 年龄;
    控制台输出(年龄文本);
    
    // 多行文本
    控制台输出("====================");
    控制台输出("  个人信息卡片");
    控制台输出("====================");
    控制台输出("姓名: " + 姓名);
    控制台输出("城市: " + 城市);
    控制台输出("年龄: " + 年龄);
}
运行结果
你好,张三!欢迎来到北京
年龄: 25
====================
  个人信息卡片
====================
姓名: 张三
城市: 北京
年龄: 25
字符串定义 字符串拼接 类型转换 多行文本
9
数组操作示例

展示数组的定义、访问、遍历等操作,以及数组与循环的结合使用。

array.ch
// 数组操作示例
定义(空类型) 主函数() {
    // 定义数组
    定义(整型) 分数数组[5];
    
    // 初始化数组
    分数数组[0] = 85;
    分数数组[1] = 92;
    分数数组[2] = 78;
    分数数组[3] = 95;
    分数数组[4] = 88;
    
    // 遍历数组并计算总分
    定义(整型) 总分 = 0;
    定义(整型) i;
    控制台输出("各科分数:");
    对于 (i = 0; i < 5; i = i + 1) {
        控制台输出("科目" + (i + 1) + ": " + 分数数组[i]);
        总分 = 总分 + 分数数组[i];
    }
    
    // 计算平均分
    定义(小数) 平均分 = 总分 / 5;
    控制台输出("====================");
    控制台输出("总分: " + 总分);
    控制台输出("平均分: " + 平均分);
}
运行结果
各科分数:
科目1: 85
科目2: 92
科目3: 78
科目4: 95
科目5: 88
====================
总分: 438
平均分: 87.6
数组定义 数组访问 数组遍历 统计计算
10
文件操作示例

展示文件的读取、写入和追加操作,实现数据的持久化存储。

file.ch
// 文件操作示例
定义(空类型) 主函数() {
    // 写入文件
    控制台输出("正在写入文件...");
    文件写入("test.txt", "Hello, CH+!\n");
    控制台输出("文件写入成功!");
    
    // 追加内容
    文件追加("test.txt", "这是追加的内容\n");
    控制台输出("内容追加成功!");
    
    // 读取文件
    控制台输出("====================");
    控制台输出("文件内容:");
    定义(字符串) 内容 = 文件读取("test.txt");
    控制台输出(内容);
    
    // 检查文件是否存在
    定义(布尔型) 存在 = 文件存在("test.txt");
    如果 (存在) {
        控制台输出("文件存在!");
    }
}
运行结果
正在写入文件...
文件写入成功!
内容追加成功!
====================
文件内容:
Hello, CH+!
这是追加的内容

文件存在!
文件写入 文件读取 文件追加 文件检测
11
逻辑运算示例

展示逻辑运算符与、或、非的使用方法,以及布尔类型的应用场景。

logic.ch
// 逻辑运算示例
定义(空类型) 主函数() {
    // 定义布尔变量
    定义(布尔型) 条件A = ;
    定义(布尔型) 条件B = ;
    
    // 逻辑与运算
    如果 (条件A 并且 条件B) {
        控制台输出("两个条件都为真");
    } 否则 {
        控制台输出("至少一个条件为假");
    }
    
    // 逻辑或运算
    如果 (条件A 或者 条件B) {
        控制台输出("至少一个条件为真");
    }
    
    // 逻辑非运算
    如果 ( 条件B) {
        控制台输出("条件B为假");
    }
    
    // 复合逻辑运算
    定义(整型) 年龄 = 25;
    定义(整型) 收入 = 5000;
    
    如果 (年龄 >= 18 并且 收入 >= 3000) {
        控制台输出("符合条件");
    }
}
运行结果
至少一个条件为假
至少一个条件为真
条件B为假
符合条件
逻辑与 逻辑或 逻辑非 布尔类型
12
循环控制示例

展示退出循环和下一层循环的使用方法,实现循环的精确控制。

control.ch
// 循环控制示例
定义(空类型) 主函数() {
    // 退出循环示例 - 找到第一个能被7整除的数
    定义(整型) i = 1;
    控制台输出("查找第一个能被7整除的数:");
     (i <= 20) {
        如果 (i % 7 == 0) {
            控制台输出(i);
            退出循环;
        }
        i = i + 1;
    }
    
    // 下一层循环示例 - 打印奇数
    控制台输出("打印1-10中的奇数:");
    对于 (i = 1; i <= 10; i = i + 1) {
        如果 (i % 2 == 0) {
            下一层循环;
        }
        控制台输出(i);
    }
}
运行结果
查找第一个能被7整除的数:
7
打印1-10中的奇数:
1
3
5
7
9
退出循环 下一层循环 循环控制 取模运算
13
用户输入示例

展示控制台输入的使用方法,实现与用户的交互式程序。

input.ch
// 用户输入示例
定义(空类型) 主函数() {
    // 获取用户姓名
    控制台输出("请输入您的姓名:");
    定义(字符串) 姓名;
    控制台输入(姓名);
    
    // 获取用户年龄
    控制台输出("请输入您的年龄:");
    定义(整型) 年龄;
    控制台输入(年龄);
    
    // 输出用户信息
    控制台输出("====================");
    控制台输出("用户信息:");
    控制台输出("姓名: " + 姓名);
    控制台输出("年龄: " + 年龄);
    
    // 年龄判断
    如果 (年龄 >= 18) {
        控制台输出("您已成年!");
    } 否则 {
        控制台输出("您未成年!");
    }
}
运行结果
请输入您的姓名:
张三
请输入您的年龄:
25
====================
用户信息:
姓名: 张三
年龄: 25
您已成年!
控制台输入 用户交互 字符串输入 整数输入
14
嵌套循环示例

展示嵌套循环的使用方法,通过九九乘法表和图形打印演示多层循环的应用。

nested.ch
// 嵌套循环示例 - 九九乘法表
定义(空类型) 主函数() {
    控制台输出("九九乘法表:");
    定义(整型) i;
    定义(整型) j;
    
    对于 (i = 1; i <= 9; i = i + 1) {
        对于 (j = 1; j <= i; j = j + 1) {
            控制台输出(j + "×" + i + "=" + (i * j) + " ");
        }
        控制台输出("");
    }
    
    // 打印三角形
    控制台输出("====================");
    控制台输出("打印三角形:");
    对于 (i = 1; i <= 5; i = i + 1) {
        定义(字符串) 行 = "";
        对于 (j = 1; j <= i; j = j + 1) {
            行 = 行 + "★";
        }
        控制台输出(行);
    }
}
运行结果
九九乘法表:
1×1=1 
1×2=2 2×2=4 
1×3=3 2×3=6 3×3=9 
...
====================
打印三角形:
★
★★
★★★
★★★★
★★★★★
嵌套循环 九九乘法表 图形打印 字符串累加
15
模块导入示例

展示模块导入功能,使用标准库中的数学函数和字符串处理函数。

module.ch
// 模块导入示例

// 导入标准库
导入("math.ch");

定义(空类型) 主函数() {
    // 使用数学函数
    控制台输出("数学函数示例:");
    
    // 平方根
    定义(小数) 根号16 = 平方根(16);
    控制台输出("√16 = " + 根号16);
    
    // 幂运算
    定义(小数) 二的三次方 = (2, 3);
    控制台输出("2³ = " + 二的三次方);
    
    // 绝对值
    定义(小数) 绝对值结果 = 绝对值(-10.5);
    控制台输出("|-10.5| = " + 绝对值结果);
    
    // 三角函数
    定义(小数) 正弦值 = 正弦(1.57);
    控制台输出("sin(1.57) ≈ " + 正弦值);
}
运行结果
数学函数示例:
√16 = 4
2³ = 8
|-10.5| = 10.5
sin(1.57) ≈ 1
模块导入 数学函数 标准库 函数调用

💡 学习建议

建议按照示例顺序逐步学习,先掌握基础语法,再学习高级特性。每个示例都可以直接运行,动手实践是学习编程的最佳方式!