第3篇:数据的运算——让数据动起来 仓颉 中文编程
本文介绍了仓颉编程语言中的基本运算符及其应用,主要包括算术运算符、比较运算符、逻辑运算符和赋值运算符。文章通过生活化示例(如买菜计算、成绩比较等)讲解运算符的使用方法,并提供了多个代码实例演示如何实现简易计算器和成绩分析器功能。特别指出了仓颉语言在运算符设计上符合中文习惯的优点,同时也提出了类型转换等方面的改进建议。全文采用通俗易懂的方式,帮助编程零基础读者理解计算机运算的基本概念。
第3篇:数据的运算——让数据动起来
**作者:**中文编程倡导者—— 李金雨
联系方式: wbtm2718@qq.com
**目标读者:**编程入门(零基础)
核心理念: 使用华为仓颉原生中文编程,体验真正的国产编程语言
一、开篇引入
1.1 生活中的运算
生活中处处都有运算:
- 买菜:3斤苹果 × 5元/斤 = 15元
- 分糖果:10颗糖 ÷ 5个人 = 2颗/人
- 比较身高:小明比小红高多少?
- 判断年龄:年满18岁才能考驾照
1.2 程序中的运算
计算机最擅长的就是计算!我们可以让程序帮我们:
- 快速计算复杂的数学题
- 自动判断条件
- 批量处理数据
1.3 关于运算符位置的思考
在开始学习运算之前,我们再聊聊仓颉的语法设计。
上一篇我们讨论了类型后置的问题(let 年龄: Int64),这一篇我们来看看运算符。
好消息是:仓颉的运算符设计还是比较符合习惯的:
let 和 = 甲 + 乙 // 甲加乙,符合习惯
let 差 = 甲 - 乙 // 甲减乙,符合习惯
let 积 = 甲 * 乙 // 甲乘乙,符合习惯
let 商 = 甲 / 乙 // 甲除以乙,符合习惯
这些中缀运算符(运算符在两个操作数中间)是全世界通用的,不管是中国人还是外国人,都是这样写的。这一点仓颉做得很好!
1.4 本课目标
今天我们要学习:
- 算术运算符(加减乘除)
- 比较运算符(大于小于等于)
- 逻辑运算符(并且、或者、非)
- 赋值运算符
- 做一个智能计算器
二、概念讲解
2.1 算术运算符——加减乘除
基本运算符
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
+ |
加 | 5 + 3 |
8 |
- |
减 | 5 - 3 |
2 |
* |
乘 | 5 * 3 |
15 |
/ |
除 | 5 / 3 |
1(整数除法) |
% |
取余 | 5 % 3 |
2 |
代码示例
main() {
let 甲: Int64 = 10
let 乙: Int64 = 3
println("${甲} + ${乙} = ${甲 + 乙}") // 10 + 3 = 13
println("${甲} - ${乙} = ${甲 - 乙}") // 10 - 3 = 7
println("${甲} * ${乙} = ${甲 * 乙}") // 10 * 3 = 30
println("${甲} / ${乙} = ${甲 / 乙}") // 10 / 3 = 3
println("${甲} % ${乙} = ${甲 % 乙}") // 10 % 3 = 1
}
注意整数除法
在计算机中,10 / 3 不等于 3.333...,而是等于 3(只保留整数部分)。
如果想要小数结果,需要这样写:
let 结果: Float64 = Float64(10) / Float64(3) // 结果是3.333...
吐槽一下:这里又涉及到类型转换的问题。如果仓颉能像JavaScript那样自动类型转换,或者像C#那样有更简洁的语法,就更好了!
2.2 比较运算符——比大小
基本比较符
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 5 > 3 |
true |
< |
小于 | 5 < 3 |
false |
>= |
大于等于 | 5 >= 5 |
true |
<= |
小于等于 | 3 <= 5 |
true |
代码示例
main() {
let 小明的成绩: Int64 = 85
let 小红的成绩: Int64 = 92
println("小明的成绩:${小明的成绩}")
println("小红的成绩:${小红的成绩}")
println("")
// 比较成绩
println("小明和小红成绩相等:${小明的成绩 == 小红的成绩}")
println("小明成绩比小红高:${小明的成绩 > 小红的成绩}")
println("小明成绩比小红低:${小明的成绩 < 小红的成绩}")
println("小明及格了:${小明的成绩 >= 60}")
}
2.3 逻辑运算符——并且、或者、非
逻辑运算符表
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
&& |
并且(AND) | true && true |
true |
|| |
或者(OR) | true || false |
true |
! |
非(NOT) | !true |
false |
生活中的逻辑
并且(&&):两个条件都要满足
- 买手机:有钱 并且 有货 才能买到
- 考试优秀:语文>=90 并且 数学>=90
或者(||):满足一个条件就行
- 周末活动:去公园 或者 看电影
- 免费入场:儿童 或者 老人
非(!):反过来
- 不是学生
- 没有及格
代码示例
main() {
let 有身份证: Bool = true
let 年满18岁: Bool = true
let 有驾照: Bool = false
// 可以考驾照吗?(需要身份证并且年满18岁)
let 可以考驾照: Bool = 有身份证 && 年满18岁
println("可以考驾照:${可以考驾照}")
// 可以开车吗?(有驾照或者年满18岁有身份证)
let 可以开车: Bool = 有驾照 || (年满18岁 && 有身份证)
println("可以开车:${可以开车}")
// 没有驾照
println("没有驾照:${!有驾照}")
}
2.4 赋值运算符——快捷赋值
基本赋值
let 分数: Int64 = 100 // 把100赋给分数
复合赋值
| 运算符 | 含义 | 等价于 |
|---|---|---|
+= |
加后赋值 | a = a + b |
-= |
减后赋值 | a = a - b |
*= |
乘后赋值 | a = a * b |
/= |
除后赋值 | a = a / b |
%= |
取余后赋值 | a = a % b |
代码示例
main() {
var 分数: Int64 = 100
println("初始分数:${分数}")
分数 += 10 // 分数 = 分数 + 10
println("加10分后:${分数}")
分数 -= 5 // 分数 = 分数 - 5
println("扣5分后:${分数}")
分数 *= 2 // 分数 = 分数 * 2
println("翻倍后:${分数}")
分数 /= 2 // 分数 = 分数 / 2
println("减半后:${分数}")
}
注意:使用复合赋值时,变量必须用var声明(可变),不能用let(不可变)。
三、动手实践
3.1 基础练习:简易计算器
// 简易计算器
main() {
println("=== 简易计算器 ===")
// 定义两个数
let 甲: Float64 = 15.5
let 乙: Float64 = 4.5
println("第一个数:${甲}")
println("第二个数:${乙}")
println("")
// 各种运算
println("加法:${甲} + ${乙} = ${甲 + 乙}")
println("减法:${甲} - ${乙} = ${甲 - 乙}")
println("乘法:${甲} × ${乙} = ${甲 * 乙}")
println("除法:${甲} ÷ ${乙} = ${甲 / 乙}")
// 判断关系
println("")
println("${甲} > ${乙}:${甲 > 乙}")
println("${甲} == ${乙}:${甲 == 乙}")
println("${甲} != ${乙}:${甲 != 乙}")
}
3.2 进阶练习:成绩分析器
// 成绩分析器
main() {
println("=== 成绩分析器 ===")
// 三个学生的成绩
let 小明: Int64 = 85
let 小红: Int64 = 92
let 小刚: Int64 = 78
println("小明:${小明}分")
println("小红:${小红}分")
println("小刚:${小刚}分")
println("")
// 计算平均分
let 总分: Int64 = 小明 + 小红 + 小刚
let 平均分: Float64 = Float64(总分) / 3.0
println("平均分:${平均分}分")
println("")
// 找出最高分和最低分
var 最高分: Int64 = 小明
if (小红 > 最高分) { 最高分 = 小红 }
if (小刚 > 最高分) { 最高分 = 小刚 }
var 最低分: Int64 = 小明
if (小红 < 最低分) { 最低分 = 小红 }
if (小刚 < 最低分) { 最低分 = 小刚 }
println("最高分:${最高分}分")
println("最低分:${最低分}分")
println("")
// 统计及格人数(>=60分)
var 及格人数: Int64 = 0
if (小明 >= 60) { 及格人数 += 1 }
if (小红 >= 60) { 及格人数 += 1 }
if (小刚 >= 60) { 及格人数 += 1 }
println("及格人数:${及格人数}人")
// 统计优秀人数(>=90分)
var 优秀人数: Int64 = 0
if (小红 >= 90) { 优秀人数 += 1 }
// 其他人都没达到90分
println("优秀人数:${优秀人数}人")
}
3.3 挑战练习:智能判断系统
// 智能判断系统
main() {
println("=== 智能判断系统 ===")
println("")
// 场景1:判断是否可以看电影
let 年龄: Int64 = 16
let 有家长陪同: Bool = true
let 电影分级: String = "PG-13" // 13岁以上可以观看
println("【电影院入场判断】")
println("年龄:${年龄}岁")
println("有家长陪同:${有家长陪同}")
println("电影分级:${电影分级}")
// PG-13电影:13岁以上可以单独看,13岁以下需要家长陪同
let 可以入场: Bool = (年龄 >= 13) || (有家长陪同)
println("可以入场:${可以入场}")
println("")
// 场景2:判断是否可以免费乘车
let 是儿童: Bool = false // 6岁以下
let 是老人: Bool = false // 65岁以上
let 是学生: Bool = true
let 有学生证: Bool = true
println("【公交免费判断】")
println("是儿童:${是儿童}")
println("是老人:${是老人}")
println("是学生:${是学生}")
println("有学生证:${有学生证}")
// 免费条件:儿童或老人,或学生有学生证
let 可以免费: Bool = 是儿童 || 是老人 || (是学生 && 有学生证)
println("可以免费乘车:${可以免费}")
println("")
// 场景3:判断是否可以参加竞赛
let 数学成绩: Int64 = 88
let 英语成绩: Int64 = 92
let 有竞赛经验: Bool = false
println("【竞赛资格判断】")
println("数学成绩:${数学成绩}")
println("英语成绩:${英语成绩}")
println("有竞赛经验:${有竞赛经验}")
// 参加条件:数学和英语都>=85,或者有竞赛经验
let 可以参加: Bool = (数学成绩 >= 85 && 英语成绩 >= 85) || 有竞赛经验
println("可以参加竞赛:${可以参加}")
}
四、知识总结
4.1 核心概念回顾
- 算术运算符:
+、-、*、/、% - 比较运算符:
==、!=、>、<、>=、<= - 逻辑运算符:
&&(并且)、||(或者)、!(非) - 赋值运算符:
=、+=、-=、*=、/=、%=
4.2 关于语法设计的再思考
这一篇我们学习的运算符设计,仓颉做得还是不错的:
做得好的地方:
- 中缀运算符符合国际惯例(
a + b) - 逻辑运算符使用符号(
&&、||)简洁明了 - 比较运算符直观易懂
可以改进的地方:
如果仓颉能支持更中文化的运算符,就更好了:
// 设想中的中文运算符(仅供娱乐)
let 和 = 甲 加 乙
let 差 = 甲 减 乙
let 并且 = 条件一 且 条件二
let 或者 = 条件一 或 条件二
当然,这在实际编程语言中不太现实,因为:
- 输入中文标点比较麻烦
- 与国际标准不兼容
- 代码会显得太长
所以,我们还是 happily 使用符号运算符吧!
4.3 关键代码速查
// 算术运算
let 和 = 甲 + 乙
let 差 = 甲 - 乙
let 积 = 甲 * 乙
let 商 = 甲 / 乙
let 余数 = 甲 % 乙
// 比较运算
let 相等 = 甲 == 乙
let 不等 = 甲 != 乙
let 大于 = 甲 > 乙
let 小于 = 甲 < 乙
// 逻辑运算
let 并且 = 条件一 && 条件二
let 或者 = 条件一 || 条件二
let 非 = !条件
// 复合赋值
var 数 = 10
数 += 5 // 数 = 15
数 -= 3 // 数 = 12
数 *= 2 // 数 = 24
数 /= 4 // 数 = 6
4.4 常见错误提醒
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 整数除法没小数 | 两个整数相除 | 转换为Float64再除 |
| 逻辑判断错误 | 运算符优先级 | 使用括号明确优先级 |
| 赋值给let变量 | let不可变 | 改用var声明 |
| 类型不匹配 | 运算数类型不同 | 统一类型后再运算 |
五、课后作业
5.1 巩固练习(必做)
练习1:BMI计算器
输入身高(米)和体重(公斤),计算BMI并判断体重状态。
练习2:闰年判断
输入年份,判断是否是闰年:
- 能被4整除但不能被100整除,或者能被400整除
练习3:三角形判断
输入三条边长,判断:
- 能否构成三角形(任意两边之和大于第三边)
- 是什么类型的三角形(等边、等腰、直角、普通)
5.2 创意编程(选做)
创意1:简易计算器
实现一个支持加减乘除的计算器,可以连续运算。
创意2:猜数字游戏
程序随机生成一个1-100的数字,用户猜数字,程序提示"大了"或"小了"。
创意3:24点游戏
输入4个数字,判断是否能通过加减乘除得到24。
5.3 下篇预习
下一篇,我们将学习如果…那么——条件判断,让程序能够根据不同情况执行不同的代码。预习问题:
- 怎么让程序判断成绩是否及格?
- 怎么实现多条件判断?
- 怎么让程序选择执行不同的代码?
恭喜你完成了第3篇的学习! 🎉
现在你已经掌握了仓颉的各种运算符。虽然运算符本身设计得不错,但在实际使用中,我们还是要注意类型转换的问题——这又让我们想到了类型后置的语法设计…
下节课,我们将学习条件判断,让程序变得更智能!
更多推荐


所有评论(0)