为什么计数器使用变量“ i”和“ j”?

我知道这个问题看起来很愚蠢,但我很好奇,不得不问..。

为什么“ i”和“ j”成为大多数控制结构中用作计数器的 THE 变量?

虽然常识告诉我,它们就像 X,用来表示未知的值,但我不禁认为,为什么每个人都被一遍又一遍地用同样的方式教导,一定有一个原因。

是因为它实际上被推荐用于最佳实践,还是一个惯例,或者它背后有一些模糊的原因?

以防万一 我知道我可以给他们任何我想要的名字,变量的名字是不相关的。

101754 次浏览

I = 整数

来自 Fortran,整数变量必须以字母 i 到 n 开头,而实数变量则以其他字母开头。因此,我是第一个和最短的整数变量名称。Fortran 是最早被广泛使用的编程语言之一,程序员使用它所形成的习惯也被其他语言所继承。

编辑 : 我对从数学中得出的答案没有异议。毫无疑问,这就是 Fortran 设计师的灵感来源。事实上,对我来说,当我开始在 Fortran 中编程时,我们使用 I,J,K,... 作为循环计数器,因为它们很短,而且第一个合法允许的变量名是整数。在 H.S. 读大二的时候,我可能听说过笛卡尔(以及其他极少数人) ,但在编程时,我很少与数学联系在一起。事实上,我上的第一门课叫做“ Fortran for Business”,不是由数学系教授,而是由商业/经济系教授。

至少对我来说,变量的命名与数学没有什么关系,但这一切都是因为我养成了用其他语言编写 Fortran 代码的习惯。

我认为它最有可能来源于索引(在 数学感觉中)——它通常被用作求和或其他基于集合的操作的索引,而且很可能在编程语言出现之前就已经这样使用了。

我使用它有很多原因。

  • 通常我的循环是基于 int 的,所以 构成一个完整的三角形 键盘输入“ int i” 我处理的空间例外 我的拇指。这是一个非常快的 序列到类型。

  • “ i”可以表示迭代器、整数、增量或索引,它们各自构成 逻辑意义

撇开我的个人用途不谈,从 FORTRAN 推导出来的理论是正确的,其中整数变量使用字母 I-N。

可能是历史性的?

FORTRAN,可以说是第一个高级语言,默认将 i,j,k,l,m 定义为整数数据类型,循环只能由整数变量控制,约定继续?

例如:

做100i = j,100,5 .... 100继续 ....

早在计算机出现之前(如 1836年1816年) ,数学家们就已经使用 i,j,k 来表示代数中的整数(下标,级数,求和等)(这是 FORTRAN 变量类型缺省值的起源)。对未知变量使用字母表末尾的字母(... ,x,y,z)以及从开头(a,b,c)使用字母的习惯。.)因为常数通常是从 归属勒内 · 笛卡尔(也参见 给你) ,所以我假设 i,j,k。.N (在字母表的中间)表示整数,可能也是因为他。

I = 迭代器,i = 索引,i = 整数

无论你认为“ i”代表什么,它仍然“符合条件”。

另外,除非您在该循环中只有一行代码,否则您可能应该将迭代器/索引/整数变量命名为更有意义的名称。比如: EmployeeIndex

顺便说一句,我通常在简单的迭代器循环中使用“ i”; 当然,除非它包含多行代码。

i代表 指数。
ji之后。

我相信可以追溯到 Fortran。从 I 到 Q 开始的变量在默认情况下是整数,其他的都是实数。这意味着 I是第一个整数变量,J是第二个整数变量,等等,所以它们在循环中使用。

早在电子计算机发明之前,这些符号就被用作数学中的矩阵索引。

它最终来自于数学: 求和符号传统上使用 作为第一个索引,J作为第二个索引,依此类推。例子(来自 http://en.wikipedia.org/wiki/Summation) :

\sum_{i=1}^{n} i = \frac{n^2 + n}{2}

它也用这种方式来处理事物的集合,比如,如果您有一堆变量 x1、 x2、 ... xN,那么任意一个变量将被称为 x

至于为什么会这样,我想 SLaks 是对的,因为我是 Index 中的第一个字母。

在数学中,人们更喜欢用字母表中的连续字母来表示类似的“匿名”变量。因此,不仅仅是“ i,j,k”,还有“ f,g,h”,“ p,q,r”,“ x,y,z”(很少加上“ u,v,w”) ,以及“ & alpha; ,& beta; ,& γ;”。

现在,“ f,g,h”和“ x,y,z”不能随意使用: 前者用于函数,后者用于维数。“ p,q,r”也经常用于函数。

然后还有其他对可用序列的限制: 避免使用“ l”和“ o”,因为它们在许多字体中看起来太像“1”和“0”。“ t”常用于表示时间,“ d & & delta;”表示微分,“ a,s,m,v”表示加速度、位移、质量和速度的物理量。这就使得三个连续字母之间的间隔不再那么多,在数学指标方面没有不必要的关联。

然后,正如其他一些人所注意到的,来自数学的约定对早期编程约定有很大的影响,并且“ & alpha; ,& beta; ,& γ;”在许多早期的字符集中是不可用的。

我认为这是因为很多循环使用一个 Int 类型的变量来进行计数,比如

for (int i = 0; etc

当你打字的时候,你实际上是在脑子里说出来的(就像你读书的时候) ,所以在你的脑子里,你说“ int... ...”

当你必须在“ int...”后面写一个字母时,你说/键入“ i”,因为这是你刚刚说“ int”时想到的第一个字母

就像你给刚开始学习的孩子们拼写一个单词一样你通过使用名字为他们拼写单词,像这样:

单词拼写为 William W,Ok O,Ruby R,Done D

在第一个字母的基础上,你可以说 Int I,Double d,Float f,string s 等等。

之所以使用 j 是因为当你完成 int I 后,J 紧随其后。

计数器在程序中是如此普遍,在计算的早期,一切是一个溢价..。
程序员很自然地试图保留像素,而“ i”所需要的像素比其他任何字母都要少。(数学家由于懒惰,选择它的原因和最小的字形一样)。
如前所述,“ j”自然而然地跟着..。

:)

我认为这是其他原因的结合:

对于初学者来说,“ i”是数学家们常用的符号,在早期的计算机语言不是二进制的(即必须以某种方式解析和词法化) ,计算机的绝大多数用户也是数学家(... ... 科学家和工程师) ,所以符号在计算机语言的编程循环中开始使用,并且从那时起就一直存在。

结合这个事实,屏幕空间在那些非常早期的日子是有限的 非常,因为是内存,这是有意义的,保持较短的变量名称。

通过丢弃(有一点偏见)

a seems an array
b seems another array
c seems a language name
d seems another language name
e seems exception
f looks bad in combination with "for" (for f, a pickup?)
g seems g force
h seems height

i seems an index
j seems i (another index)

k seems a constant k
l seems a number one (1)
m seems a matrix
n seems a node
o seems an output
p sounds like a pointer
q seems a queue
r seems a return value
s seems a string
t looks like time
u reserved for UVW mapping or electic phase
v reserved for UVW mapping or electic phase or a vector
w reserved for UVW mapping or electic phase or a weight
x seems an axis (or an unknown variable)
y seems an axis
z seems a third axis

我想有很多可能的主要原因:

  • 数学家在公式中使用 ij来表示 自然数(至少很少使用 复数的公式) ,所以这个问题留给了编程
  • Ci暗示到 int。如果你需要另一个 int,那么 i2就是太长了,所以你决定使用 j
  • 有些语言,第一个字母决定类型,然后 i是一个 integer

I = iota,j = jot; 两个小变化。

Iota 是希腊字母表中最小的字母; 在英语中,它的意思是与小的变化联系在一起的,如“一点也不”(来自新约中的一个短语: “直到天地消失,一点也不会从律法中消失”(太5:18))。

计数器表示值中的一个小更改。

而由 iota 产生的 jot (iot) ,也是一个小变化的同义词。

参考文献 < a href = “ http://en.wikipedia.org/wiki/Iota”rel = “ nofollow”> http://en.wikipedia.org/wiki/iota

一个阳光明媚的下午,阿基米德在沉思什么(和往常一样,阳光明媚的下午) ,碰到了他的好友埃拉托色尼。

阿基米德说: “阿基米德向埃拉托色尼问好!我正在尝试解决几个球形刚体在平衡状态下的比例问题。我希望对这些主体进行多次迭代,但是我花了很多时间来记录我做了多少次迭代!”

埃拉托色尼说: “为什么是阿基米德,你这个开玩笑的成熟的李子,你只能在沙子上连续地标出一行行的线条,每一行都记录着你在迭代中所做的迭代次数!”

阿基米德向全世界大声疾呼,他伟大的朋友不可否认是智慧的明灯,因为他想出了这样一个简单的解决办法。但是阿基米德说,他喜欢在思考的时候绕着他的沙坑走一圈。因此,有可能会忘记哪一行在上面,哪一行在下面。

“也许我应该在这些行旁边标上字母,这样我就总能知道哪一行是哪一行了!你觉得怎么样?”他问道,然后补充道: “但是埃拉托色尼... ... 我该用什么字母呢?”

埃拉托色尼确信自己不知道哪个字母最好,于是对阿基米德说了同样的话。但是阿基米德并不满意,他继续督促这个可怜的图书管理员至少选择两个字母,这两个字母是他当前球体平衡解所需要的。

埃拉托色尼,终于厌倦了不断要求两个字母,喊道,“我只是不知道! ! !”

因此,阿基米德选择了埃拉托色尼感叹句的前两个字母,并感谢他的朋友的贡献。


这些符号很快被古希腊爪哇语开发者采用,其余的都是历史了。

它肯定来自数学,早在计算机编程之前。

那么,如果是从哪里来的数学?我完全没有受过教育的猜测是,正如一个家伙所说的,数学家喜欢用字母组来表示类似的东西—— f,g,h 表示函数; x,y,z 表示数值变量; p,q,r 表示逻辑变量; u,v,w 表示其他变量集,特别是在微积分中; a,b,c 表示很多东西。I,j,k 对于迭代变量来说很方便,这就排除了所有的可能性。为什么不是 m,n?它们用于整数,但更多时候是迭代的终点,而不是迭代变量本身。

有人应该问问数学史学家。

1965年,我在一家控制数据公司3100上学习 FORTRAN 语言。以“ I”到“ N”开头的变量被暗示为整数。例如: ‘ IGGY’和‘ NORB’是整数,‘ XMAX’和‘ ALPHA’是浮点数。但是,您可以通过显式声明重写这一点。

我找到了另一个可能的答案,i,j,k 来自 Hamilton's Quaternions

alt text

欧拉选了 i 作为虚单位。

Hamilton 还需要两个 -1的平方根: ii = jj = kk = ijk = -1

汉密尔顿真的很有影响力,在1900年之前,四元数是进行3D 分析的标准方法。那时,数学家们已经习惯于把(ijk)看作一个匹配的集合。 在19世纪90年代,向量微积分取代了四元数分析,因为写麦克斯韦方程是 更好的方式。但是人们倾向于这样写矢量: (3i-2j+k) 而不是 (3,-2,1)。因此(ijk)成为 R ^ 3中的标准基向量。

最后,物理学家开始使用群论来描述微分方程系统的对称性。因此(ijk)开始意味着“由置换群交换的向量”,然后转向“类似索引的东西,在某个特定集合中采用所有可能的值”,哪个基本上就是它们在 for 循环中的意思。

来自数学: (用于拉丁字母)

A,b: 用作有理数的常数或整数
常数
D: 衍生工具
Euler 的号码
F,g,h: 函数
I,j,k: 是索引(也是单位向量和四元数)
一般不用,看起来像1
M,n: 是矩阵的行和列,或者是有理数的整数
也没有使用(除非你使用小写的 o 符号)
P,q: 经常用作素数
R: 有时变量的空间变化,其它时间与素数有关
S,t: 空间和时间变量或 s 用作 t 的变量
U,v,w: 变量的变化
X,y,z: 变量 < br >

它来自 Fortran,其中 i,j,k,l,m,n 是隐式整数。