赋值的语法定义是等号左边放一个变量列表, 而等号右边放一个表达式列表。 两边的列表中的元素都用逗号间开:
stat ::= varlist ‘=’ explist
varlist ::= var {‘,’ var}
explist ::= exp {‘,’ exp}
表达式放在 §3.4 中讨论。
在作赋值 *** 作之前, 那值列表会被 调整 为左边变量列表的个数。 如果值比需要的更多的话,多余的值就被扔掉。 如果值的数量不够需求, 将会按所需扩展若干个 nil。 如果表达式列表以一个函数调用结束, 这个函数所返回的所有值都会在调整 *** 作之前被置入值列表中 (除非这个函数调用被用括号括了起来
赋值语句首先让所有的表达式完成运算, 之后再做赋值 *** 作。 因此,下面这段代码
i = 3
i, a[i] = i+1, 20
会把 a[3] 设置为 20,而不会影响到 a[4] 。 这是因为 a[i] 中的 i 在被赋值为 4 之前就被计算出来了(当时是 3 )。 简单说 ,这样一行
x, y = y, x
会交换 x 和 y 的值, 及
x, y, z = y, z, x
会轮换 x,y,z 的值。
对全局变量以及表的域的赋值 *** 作的含义可以通过元表来改变。 对 t[i] = val 这样的变量索引赋值, 等价于 settable_event(t,i,val)。 (关于函数 settable_event 的详细说明,。 这个函数并没有在 Lua 中定义出来,也不可以被调用。 这里我们列出来,仅仅出于方便解释的目
对于全局变量 x = val 的赋值等价于 _ENV.x = val
一位数组赋值的几种方式int
a[10]={1,2,3,4,5,6,7,8,9,10}
.一般初始化,例:
int
a[10]={3,10,5,3,4,5,6,7,8,9};
int
array[5]={2,3,4,5,6};
其结果是给每一个数组元素都指定了初值。
2.部分元素初始化,其余元素均为零。
例:
int
a[10]={7,8,9,67,54};
仅给前5个元素赋初值,后5个元素初值为0。
3.全部元素均初始化为1。
int
a[10]
=
{1,1,1,1,1,1,1,1,1,1}
不允许简写为 int
a[10]={1}或int
b[10]={1*10}
同学们想一想上述定义a和b数组后,初始化结果是什么?
注意:当程序不给数组指定初始值时,编译器作如下处理:
(1)部分元素初始化,编译器自动为没有初始化的元素初始化为0。
(2)数值数组如果只定义不初始化,编译器不为数组自动指定初始值,即初值为一些随机值(值不确定)。
4.如果全部元素均指定初值,定义中可省略元素的个数。
例:
int
a[5]={9,28,3,4,5}可以写为:
int
a[
]={9,28,3,4,5}
数组元素的引用
c语言规定,不能整体引用数值数组,只能逐个引用数组元素;
元素引用方式:数组名[下标表达式]
例:a[0]
=
a[5]
+
a[7]
-
a[2*3]
“下标表达式”可以是任何非负整型数据。
特别强调:1.一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。
2.在c语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理。
Pascal这里是完全程序,过程部分为快排
program qsort
var n,p:integer
a:array[0..100000] of integer
procedure qs(l,r:integer)//假设被排序的数组是a,且快排后按升序排列)
var i,j,m,t:integer
begin
i:=l
j:=r//(l(left),r(right)表示快排的左右区间)
m:=a[(l+r)div2]//注意:本句不能写成:m:=(l+r)div2
repeat
while a[i]<m do inc(i)
while a[j]>m do dec(j)//若是降序把'<'与‘>'互换
if i<=j then
begin
t:=a[i]
a[i]:=a[j]
a[j]:=t
inc(i)
dec(j)
end
until i>j
if l<j then qs(l,j)//递归查找左区间
if i<r then qs(i,r)//递归查找右区间
end
begin
readln(n)//有n个数据要处理
for p:=1 to n do read(a[p])//输入数据
qs(1,n)
for p:=1 to n do write(a[p],'')//输出快排后的数据
end.
或者
procedure quickSort(var a:array of integerl,r:Integer)
var i,j,x:integer
begin
if l>=r then exit
i:=l
j:=r
x:=a[i]
while i<=j do
begin
while (i<j)and(a[j]>x) do dec(j)
if i<j then
begin
a[i]:=a[j]
inc(i)
end
while (i<j)and(a[i]<x) do inc(i)
if i<j then
begin
a[j]:=a[i]
dec(j)
end
a[i]:=x
quicksort(a,l,i-1)
quicksort(a,i+1,r)
end
end
C++语言#include <iostream>
using namespace std
void Qsort(int a[], int low, int high)
{
if(low >= high)
{
return
}
int first = low
int last = high
int key = a[first]/*用字表的第一个记录作为枢轴*/
while(first < last)
{
while(first < last && a[last] >= key)
{
--last
}
a[first] = a[last]/*将比第一个小的移到低端*/
while(first < last && a[first] <= key)
{
++first
}
a[last] = a[first]
/*将比第一个大的移到高端*/
}
a[first] = key/*枢轴记录到位*/
Qsort(a, low, first-1)
Qsort(a, first+1, high)
}
int main()
{
int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}
Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1)/*这里原文第三个参数要减1否则内存越界*/
for(int i = 0 i < sizeof(a) / sizeof(a[0]) i++)
{
cout << a[i] << ""
}
return 0
}/*参考数据结构p274(清华大学出版社,严蔚敏)*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)