鱼C论坛

 找回密码
 立即注册
查看: 3479|回复: 3

[学习笔记] 基本数据类型与表达式03 - 零基础入门学习Delphi004

[复制链接]
发表于 2017-6-11 21:01:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这节课就轻松多了,主要学习运算符,delphi一共有8类运算符,这次只学习最简单的算术运算符。
  
符号
  
名称
解释
单目运算符
+
取正运算符
取其数值本身,结果的类型同原数据,仅右边有运算对象时使用
-
取负运算符
取其数值相反数,结果的类型同原数据,仅右边有运算对象时使用
双目运算符
+
加法运算符
符号与取正运算符相同,在左右两边都有运算对象时使用,结果类型为两个运算对象精度高的
-
减法运算符
符号与取负运算符相同,在左右两边都有运算对象时使用,结果类型为两个运算对象精度高的
*
乘法运算符
结果类型为两个运算对象精度高的
/
除法运算符
即使两个运算对象都是整数,结果也为浮点数,除数不能为零
Div
整除运算符
两个运算对象只能是整数,结果也是整数,除数不能为零
Mod
取余(取模)运算符
两个运算对象只能是整数,结果也是整数,除数不能为零
这里用DivMod取代python//%,好处是望文生义,很明确的告诉你要干什么,坏处就是需要多打些字,与之类似的C语言用{}delphibegin end
小甲鱼没有讲到的是优先级。我自己尝试了一下:
+-(取正取负) > */DivMod > +-(加减)
另外有括号的更优先。
另外慎重做Mod的负数运算,不同的程序语言会有不同的结果。这里从度娘摘录一段。
取模运算(“Modulo Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。
取余运算区别编辑
对于整型数ab来说,取模运算或者求余运算的方法都是:
1. 整数商: c = a/b;
2.计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)
例如:计算-7 Mod 4
那么:a = -7b = 4
第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入);
第二步:计算模和余数的公式相同,但因c的值不同,求模时r = 1,求余时r = -3
归纳:当ab符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。
当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。
另外各个环境下%运算符的含义不同,比如c/c++java 为取余,而python则为取模。
再次进入编程阶段,这回我们要编写一个计算器,给出2个数,分别按加减乘除按钮得到结果。
1.png
程序很简单,设计3Edit控件,2Label4Button,要求在鼠标点击Edit时清空其内容,点击加减乘除按钮则把Label1Caption改为相应的内容,并把结果放入Edit3中。为了减少篇幅,我只把除法的过程放上来。

  1. procedure TForm1.Edit1Click(Sender: TObject);
  2. begin
  3.   Edit1.Text := ''
  4. end;

  5. procedure TForm1.Edit2Click(Sender: TObject);
  6. begin
  7.   Edit2.Text := ''
  8. end;

  9. procedure TForm1.Button4Click(Sender: TObject);
  10. begin
  11.   Edit3.Text := FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit2.Text));
  12.   Label1.Caption := '÷'
  13. end;
复制代码

我们发现一个有意思现象,即如果计算结果为整数时,虽然数据类型仍是浮点数,但FloatToStr函数会自动取整,这样显示对用户更友好。另外FloatToStr不仅可以转换浮点数,也可以转化整数。
在小甲鱼的视频中误键入了EditChange事件,再其过程编写了内容,其后的删除是先删除这个过程,再删除其声明,比较复杂,其实只要把过程体的内容清空,即beginend之间的内容清空,等保存程序或运行程序时,delphi会自动删除没有内容的事件过程和声明。

这个程序还有些需要优化的地方,Edit3是显示结果的地方,但仍可输入内容,可改为Label或仍用EditReadOnly属性改为True;再次键入数值时,上次的运算结果还保留着,可以在Edit12Click中加上Edit3内容清空。此外没有对输入的是否是数值以及除数是否为0做判断,因为还没学到if语句,就不展开了。

评分

参与人数 1鱼币 +7 收起 理由
小甲鱼 + 7 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-25 21:29:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-23 20:59:14 | 显示全部楼层
顶顶更健康
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-25 09:02:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表