「Mac玩转仓颉内测版55」应用篇2 - 使用函数实现更复杂的计算
本篇教程基于仓颉编程语言扩展了计算器功能,支持加减乘除的基础运算,以及幂运算和开平方等高级功能。代码经过简化后,移除了对输入的复杂校验,提升了程序的可维护性和交互效率。
关键词
- 仓颉编程语言
- 函数封装
- 高级运算
一、功能说明
升级后的计算器实现了以下功能:
- 支持基础运算(加、减、乘、除)和高级运算(幂运算、开平方)。
- 提供简单的用户提示,减少复杂的输入校验。
- 使用函数封装,保持代码逻辑清晰和可扩展性。
二、代码实现
2.1 主程序
主程序用于提供菜单交互,并调用相应的功能处理函数。
/* 文件名:55-1.cj */
package cjcDemoimport std.console.*
import std.math.* // 数学运算支持
import std.convert.* // 数据转换模块// 主函数
main(): Int64 {println("高级计算器 - 支持加减乘除、幂运算与开平方")while (true) {println("\n请选择操作:")println("1. 基础运算 (+, -, *, /)")println("2. 幂运算 (^)")println("3. 开平方 (sqrt)")println("4. 退出程序")let mode: Int64 = readInt("请输入操作编号 (1-4):")if (mode == 4) {println("程序已退出。再见!")break}handleChoice(mode)}return 0
}
2.2 核心功能:操作处理与计算
// 根据用户选择调用对应功能
func handleChoice(mode: Int64) {if (mode == 1) {println("请输入第一个数字:")let num1: Int64 = readInt("请输入整数:")println("请输入第二个数字:")let num2: Int64 = readInt("请输入整数:")println("请输入操作符 (+, -, *, /):")let operation: String = Console.stdIn.readln().getOrThrow()calculateAndPrintResult(num1, num2, operation)} else if (mode == 2) {println("请输入底数:")let base: Float64 = readFloat("请输入数字:")println("请输入指数:")let exponent: Float64 = readFloat("请输入数字:")let result: Float64 = power(base, exponent)println("幂运算结果: ${result}")} else if (mode == 3) {println("请输入需要开平方的数字:")let number: Float64 = readFloat("请输入数字:")let result: Float64 = squareRoot(number)println("开平方结果: ${result}")} else {println("无效选择,请输入 1, 2, 3 或 4。")}
}
2.3 公共工具函数
// 幂运算函数
func power(base: Float64, exponent: Float64): Float64 {return pow(base, exponent)
}// 开平方函数
func squareRoot(number: Float64): Float64 {if (number < 0.0) {println("错误:不能对负数开平方")return 0.0}return sqrt(number)
}// 读取整数输入
func readInt(prompt: String): Int64 {println(prompt)let input: String = Console.stdIn.readln().getOrThrow()return Int64.parse(input)
}// 读取浮点数输入
func readFloat(prompt: String): Float64 {println(prompt)let input: String = Console.stdIn.readln().getOrThrow()return Float64.parse(input)
}// 计算并输出结果
func calculateAndPrintResult(num1: Int64, num2: Int64, operation: String) {if (operation == "+") {println("结果: ${num1 + num2}")} else if (operation == "-") {println("结果: ${num1 - num2}")} else if (operation == "*") {println("结果: ${num1 * num2}")} else if (operation == "/") {if (num2 != 0) {println("结果: ${num1 / num2}")} else {println("错误:除数不能为零")}} else {println("错误:无效的操作符。请使用 +, -, *, /")}
}
三、效果示例
效果示例
输入:
高级计算器 - 支持加减乘除、幂运算与开平方 请选择操作: 1 请输入第一个数字: 8 请输入第二个数字: 2 请输入操作符 (+, -, *, /): /输出:
结果: 4输入:
请选择操作: 2 请输入底数: 3 请输入指数: 2输出:
幂运算结果: 9.000000输入:
请选择操作: 3 请输入需要开平方的数字: -4输出:
错误:不能对负数开平方
四、小结
本次教程通过仓颉编程语言实现了更复杂的计算器功能。简化后的实现去掉了复杂的输入校验逻辑,依赖用户的正确输入,保持了代码简洁性。同时,通过函数封装保持代码模块化,方便后续扩展更多功能。
上一篇: 「Mac玩转仓颉内测版54」应用篇1 - 编写一个简单的计算器
下一篇: 「Mac玩转仓颉内测版56」应用篇3 - 增强计算器功能与数据存储
📍公测版
- 仓颉编程语言官网
- 开发指南
- 仓颉编程语言库 API
- 仓颉语言 IDE 插件使用指南
- 仓颉编程语言白皮书
- 词法结构
相关文章:
「Mac玩转仓颉内测版55」应用篇2 - 使用函数实现更复杂的计算
本篇教程基于仓颉编程语言扩展了计算器功能,支持加减乘除的基础运算,以及幂运算和开平方等高级功能。代码经过简化后,移除了对输入的复杂校验,提升了程序的可维护性和交互效率。 关键词 仓颉编程语言函数封装高级运算 一、功能说…...
map参数详解
const items new Array(15).fill(null).map((_, index) > ({key: index 1,label: nav ${index 1}, })); $.map() 函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回。 注意:1. 在jQuery 1.6 之前&#…...
OSI 七层模型 | TCP/IP 四层模型
注:本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型(七层模型) BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型,亦称 OSI(Open System Interconnection…...
高转速风扇|无刷暴力风扇方案设计
在当今科技高速发展的时代,电子设备的性能不断提升,散热问题也日益成为关注的焦点。而 13w 高转速暴力风扇方案的出现,为解决各种设备的散热难题提供了强大的技术支持。 一、高转速暴力风扇的重要性 随着电子设备的不断升级,其功率…...
GPU 进阶笔记(三):华为 NPU/GPU 演进
大家读完觉得有意义记得关注和点赞!!! 1 术语 1.1 CPU1.2 GPU1.3 NPU / TPU1.4 小结2 华为 DaVinci 架构:一种方案覆盖所有算力场景 2.1 场景、算力需求和解决方案2.2 Ascend NPU 设计3 路线一:NPU 用在手机芯片&…...
计算机网络 (13)信道复用技术
前言 计算机网络中的信道复用技术是一种提高网络资源利用率的关键技术。它允许在一条物理信道上同时传输多个用户的信号,从而提高了信道的传输效率和带宽利用率。 一、信道复用技术的定义 信道复用(Multiplexing)就是在一条传输媒体上同时传输…...
数据库约束和查询
一 约束意义 这个后面的字段是什么意思呢? 先前说数据类型是一种约束,约束我们只能放该类型的数据,还有其它的约束来保证数据的合法性,下面的字段就和约束有关。 编译器的编译就是一个约束,保证我们的代码一定是语法合格的。我们…...
网工日记:FTP两种工作模式的区别
FTP 的主动模式和被动模式在连接建立的发起方、数据传输端口以及对网络环境的适应性等方面存在明显区别: 1. 连接发起方 主动模式:数据连接由服务器主动发起。在控制连接建立后,客户端通过 PORT 命令告知服务器自己用于接收数据的临时端口号…...
NLP模型工程化部署
文章目录 一、理论-微服务、测试与GPU1)微服务架构2)代码测试3)GPU使用 二、实践-封装微服务,编写测试用例和脚本,并观察GPU1)微服务封装(RestFul和RPC)2)测试编写(unit_test\api_test\load_tes…...
分布式版本管理工具——git 中忽略文件的版本跟踪(初级方法及高级方法)
git工具忽略指定文件的版本跟踪 一、简单方式实现二、复杂方式实现(模式匹配)1. 相关规则2. 应用案例a) 忽略所有内容b) 忽略所有目录(不忽略当前目录的具体文件)c)忽略指定目录下的所有文件,但排除某文件d)…...
【LangChain】Chapter4 - Question and Answer Over Documents
说在前面 文档问答,是常见的一类LLM应用,给定一段可能是从 PDF文件、网页或某公司内部文档库中提取的文本,使用LLM回答关于这些文档内容的问题。这样的应用非常的强大,它可以将LLM与完全没被训练的数据相结合,可以灵活…...
TCP/IP 协议演进中的瓶颈,权衡和突破
所有(去掉 “几乎” 修饰)问题都来自于生长速度的不一致,换句话说,膨胀不是均匀的,从而产生瓶颈甚至触碰极限,TCP/IP 从协议到实现面临的多方问题与动物体型不能无限大,摩天大楼不能无限高本质上一样。 如今被高性能网…...
软件测试面试八股文,查漏补缺(附文档)
大家好,最近有不少小伙伴在后台留言,准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想的…...
IDEA工具使用介绍、IDEA常用设置以及如何集成Git版本控制工具
文章目录 一、IDEA二、建立第一个 Java 程序三、IDEA 常用设置四、IDEA 集成版本控制工具(Git、GitHub)4.1 IDEA 拉 GitHub/Git 项目4.2 IDEA 上传 项目到 Git4.3 更新提交命令 一、IDEA 1、什么是IDEA? IDEA,全称为 IntelliJ ID…...
YOLOv10-1.1部分代码阅读笔记-transformer.py
transformer.py ultralytics\nn\modules\transformer.py 目录 transformer.py 1.所需的库和模块 2.class TransformerEncoderLayer(nn.Module): 3.class AIFI(TransformerEncoderLayer): 4.class TransformerLayer(nn.Module): 5.class TransformerBlock(nn.Module)…...
机器人革新!ModbusTCP转CCLINKIE网关揭秘
在当今这个科技日新月异的时代,机器人技术正以前所未有的速度发展着,它们在工业制造、医疗服务、家庭娱乐等多个领域扮演着越来越重要的角色。而随着机器人应用的普及和多样化,如何实现不同设备之间的高效通信成为了一个亟待解决的问题。开疆…...
JWT包中的源码分析【Golang】
前言 最近在学web编程的途中,经过学长提醒,在进行登陆(Login)操作之后,识别是否登陆的标识应该要放入authorization中,正好最近也在学鉴权,就顺便来看看源码了。 正文 1. 代码示例 在进行分…...
SpringBoot数据字典字段自动生成对应code和desc
效果:接口会返回orderType,但是这个orderType是枚举的类型(1,2,3,4),我想多返回一个orderTypeDesc给前端展示,这样前端就可以直接拿orderTypeDesc使用了。 1. 定义注解 …...
TencentOS 2.4 final 安装mysql8.0备忘录
准备 tencentOS 2.4 与Red Hat Enterprise Linux 7 是兼容的。 我们首先从oracle官网上下载mysql的源文件。 下载完成后你会得到以下文件: mysql84-community-release-el7-1.noarch.rpm 安装 首先你需要切换到root用户下。 1.安装源文件 yum localinstall my…...
Hadoop HA安装配置(容器环境),大数据职业技能竞赛模块A平台搭建,jdk+zookeeper+hadoop HA
HA概述 (1) 所谓HA(High Availablity),即高可用(7*24小时不中断服务)。 (2) 实现高可用最关键的策略是消除单点故障,HA严格来说应该分为各个组件的HA机制,H…...
Phi-4-mini-reasoning企业知识图谱增强:实体关系推理与逻辑补全案例
Phi-4-mini-reasoning企业知识图谱增强:实体关系推理与逻辑补全案例 1. 模型简介与核心能力 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员,它特别强化了数…...
别让格式毁掉你的毕业论文!Paperxie AI 排版:3 分钟复刻学校官方标准
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 一、 本科生的痛:论文写完了,格式却能逼疯人 毕业论文的终极考验,从来都…...
告别“权限不足”:手把手教你用CobaltStrike的Bypass UAC功能搞定Windows提权
实战指南:利用CobaltStrike突破Windows权限限制 当你手握一个普通用户权限的Beacon会话,却卡在"请求的操作需要提升"的提示前,这种挫败感每个渗透测试员都深有体会。Windows的用户账户控制(UAC)就像一堵无形的墙,将普通…...
Arduino TFT库:寄存器级驱动与双芯片兼容设计
1. 项目概述TFT 库是一个专为 Arduino 平台设计的轻量级图形驱动库,核心目标是支持 Seeed Studio 推出的 2.8 英寸 TFT 触摸屏扩展板(v1.0 版本)。该硬件模块采用双芯片方案:显示控制器可选用 SPFD5408A 或 ST7781R 其中之一&…...
用C语言和EasyX库写一个五子棋,我踩过的这些坑你别再踩了
用C语言和EasyX库写五子棋:那些教科书不会告诉你的实战陷阱 第一次用EasyX库写五子棋时,我以为三天就能搞定,结果花了三周时间调试各种奇葩问题。坐标计算差1个像素导致棋子永远对不齐、鼠标点击识别区域偏差、二维数组越界导致程序崩溃...这…...
2026届必备的十大AI科研网站解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 伴随人工智能技术的迅猛发展,AI论文工具已然成为学术写作范畴的关键辅助方式&…...
微信小程序表格实战:我是如何用原生组件解决数据展示和‘文本无法选中’这个坑的
微信小程序表格实战:原生组件解决数据展示与文本选中难题 第一次在小程序里实现表格功能时,我遇到了一个看似简单却让人头疼的问题——用户无法选中单元格里的文本进行复制。这个在Web开发中根本不是问题的问题,在小程序里却成了影响用户体验…...
IAR堆栈优化实战:如何精准配置与监控嵌入式内存布局
1. 嵌入式开发中的内存管理痛点 刚入行嵌入式开发那会儿,我最怕遇到系统莫名其妙崩溃的情况。有一次做智能家居控制器项目,设备运行几天后就会死机,排查了一周才发现是线程栈溢出导致的。这种内存问题就像定时炸弹,可能在任何时候…...
SMART200与FANUC机器人Profinet通讯:除了组态,这些调试‘玄学’问题你遇到过吗?
SMART200与FANUC机器人Profinet通讯实战:那些手册上没写的调试技巧 第一次在项目现场看到FANUC机器人手臂突然停止动作,而SMART200 PLC的指示灯还在正常闪烁时,我就知道遇到了传说中的"通讯玄学"问题。这种场景对于自动化工程师来说…...
YOLOX训练避坑指南:从VOC数据集制作到模型调优的全流程实战
YOLOX实战避坑手册:VOC数据集构建与工业级调优策略 当你第一次在屏幕上看到YOLOX识别出目标物体时,那种成就感就像解开一道复杂的数学题。但在此之前,大多数开发者都会在数据准备、环境配置和参数调优这三个环节反复跌倒。去年我们团队在智能…...
