QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

版主

Rank: 20Rank: 20Rank: 20Rank: 20

技术值
查看: 730|回复: 3

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

[复制链接]
最佳答案
748 
累计签到:850 天
连续签到:19 天
冬雪雪冬 发表于 2017-6-11 21:01:45 7303 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

楼层
跳转到指定楼层
最佳答案
0 
累计签到:3 天
连续签到:2 天
九蜗牛 发表于 2017-12-25 21:29:46 | 显示全部楼层
最佳答案
0 
累计签到:19 天
连续签到:2 天
不多太少 发表于 2018-2-23 20:59:14 | 显示全部楼层
顶顶更健康
最佳答案
0 
累计签到:1 天
连续签到:1 天
可心儿 发表于 2018-2-25 09:02:27 | 显示全部楼层

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-5-25 07:41

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