c语言中输出数组逗号,c中怎么输出数组的值

fa0b36a856ae8af3cc19bfa8ffa8d10f.png

如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。

注意:这一部分讨论的数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。

一个数组中的所有元素具有相同的数据类型。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、 字符串 、数值等等)。 可以声明任何基本数据类型的数组,包括用户自定义类型(请参阅 “再论编程”中的“创建自己的数据类型”)和对象变量(请参阅“用对象编程”)。

在 Visual Basic 中有两种类型的数组:固定大小的数组— 它总是保持同样的大小,以及在运行时大小可以改变的动态数组。在本章后面的“动态数组”中将要详细讨论动态数组。

声明固定大小的数组

有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:

建立公用数组,在模块的声明段用 Public 语句声明数组。

建立模块级数组,在模块的声明段用 Private 语句声明数组。

建立局部数组,在过程中用 Private 语句声明数组。

设定上下界

声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过 Long 数据类型的范围(-2,147,483,648 到 2,147,483,647)。例如,下列数组声明可出现在模块的声明段:

Dim Counters (14) As Integer '15 个元素。

Dim Sums (20) As Double '21 个元素。

为建立公用数组,直接用 Public 取代 Dim。

Public Counters (14) As Integer

Public Sums (20) As Double

在过程之中同样的声明使用 Dim:

Dim Counters (14) As Integer

Dim Sums (20) As Double

第一个声明建立了一个有 15 个元素的数组,其索引号从 0 到 14 。第二个声明建立了一个有 21 个元素的数组,其索引号从 0 到 20 。缺省的下界为 0。

为了规定下界,用关键字 To 显式提供下界(为 Long 数据类型):

Dim Counters (1 To 15) As Integer

Dim Sums (100 To 120) As String

在前述声明中,Counters 的索引值范围从 1 到 15,而 Sums 的索引值范围从 100 到 200。

包含其它数组的数组

有可能建立 Variant 数据类型数组,并与不同数据类型的数组共居一处。以下代码建立两个数组,一个包含整数,而另一个包含 字符串。然后声明第三个 Variant 数组,并将整数和字符串数组放置其中:

Private Sub Command1_Click ()

Dim intX As Integer '声明计数器变量。

'声明并放置整数数组。

Dim countersA (5) As Integer

For intX = 0 To 4

countersA (intX) = 5

Next intX

'声明并放置字符串数组。

Dim countersB (5) As String

For intX = 0 To 4

countersB (intX) = "hello"

Next intX

Dim arrX (2) As Variant '声明拥有两个成员的新数组。

arrX (1) = countersA () '将其它数组移居到数组。

arrX (2) = countersB ()

MsgBox arrX (1) (2) '显示每一个数组的成员。

MsgBox arrX (2) (3)

End Sub

多维数组

有时需要追踪记录数组中的相关信息。例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的 X、Y 坐标。这时应该用多维数组存储值。

可用 Visual Basic 声明多维数组。例如,下面的语句声明了一个过程内的 10 × 10 的二维数组。

Static MatrixA (9, 9) As Double

可用显式下界来声明两个维数或两个维数中的任何一个:

Static MatrixA (1 To 10, 1 To 10) As Double

可以将所有这些推广到二维以上的数组。例如:

Dim MultiD (3, 1 To 10, 1 To 15)

这个声明建立了三维数组,大小为 4 × 10 × 15。元素总数为三个维数的乘积,为 600。

注意 在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。

用循环操作数组

可以用 For 循环嵌套有效的处理多维数组。例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:

Dim I As Integer, J As Integer

Static MatrixA(1 To 10, 1 To 10) As Double

For I = 1 To 10

For J = 1 To 10

MatrixA (I, J) = I * 10 + J

Next J

Next I

-----------------------------------------------------------------------------

数 组

数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

关于可变长数组(VLA)的问题:原来的C标准中是不允许可变长数组出现的,也就是你说的那个n可变。但是在C99中,加入了对VLA的支持,也有不少编译器已经支持这个了,而且好像没有太多的人用这个可变长数组。

如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。

你说的那个函数compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。

原型可以这样写(假设数组的元素是type):

int compact(type *Array,int Count)

{

//这里主要是对数组的地址的操作了。仍然可以用Array[n]来引用数组!

}

本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。数组类型说明 在C语言中使用数组必须先进行类型说明。 数组说明的一般形

式为: 类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

例如:

int a[10]; 说明整型数组a,有10个元素。

float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。

char ch[20]; 说明字符数组ch,有20个元素。

对于数组类型说明应注意以下几点:

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同,例如:

void main()

{

int a;

float a[10];

……

}

是错误的。

4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。

5.不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如:

#define FD 5

void main()

{

int a[3+2],b[7+FD];

……

}

是合法的。但是下述说明方式是错误的。

void main()

{

int n=5;

int a[n];

……

}

6.允许在同一个类型说明中,说明多个数组和多个变量。

例如: int a,b,c,d,k1[10],k2[20];

数组元素的表示方法

数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。 下标表示了元素在数组中的顺序号。数组元素的一般形式为: 数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。 例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量:

for(i=0; i<10; i++) printf("%d",a); 而不能用一个语句输出整个数组,下面的写法是错误的: printf("%d",a);

void main()

{

int i,a[10];

for(i=0;i<10;)

a[i++]=2*i+1;

for(i=9;i>=0;i--)

printf("%d",a);

printf("\n%d %d\n",a[5.2],a[5.8]);} for(i=0;i<10;)

a[i++]=2*i+1; for(i=9;i>=0;i--)

printf("%d",a); printf("\n%d %d\n",a[5.2],a[5.8]);

本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大到小输出各个奇数。在第一个 for语句中,表达式3省略了。在下标变量中使用了表达式i++,用以修改循环变量。当然第二个for语句也可以这样作, C语言允许用表达式表示下标。 程序中最后一个printf语句输出了两次a[5]的值, 可以看出当下标不为整数时将自动取整。数组的赋值给数组赋值的方法除了用赋值语句对数组元素逐个赋值外, 还可采用初始化赋值和动态赋值的方法。数组初始化赋值数组初始化赋值是指在数组说明时给数组元素赋予初值。 数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。

初始化赋值的一般形式为: static 类型说明符 数组名[常量表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储,外部存储的概念在第五章中介绍)。在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。例如: static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;

C语言对数组的初始赋值还有以下几点规定:

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如: static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为: static int a[10]=1;

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如: static int a[5]={1,2,3,4,5};可写为: static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。 这时可用循环语句配合scanf函数逐个对数组元素赋值。

void main()

{

int i,max,a[10];

printf("input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a);

max=a[0];

for(i=1;i<10;i++)

if(a>max) max=a;

printf("maxmum=%d\n",max);

}

for(i=0;i<10;i++)

scanf("%d",&a);

max=a[0];

for(i=1;i<10;i++)

if(a>max) max=a;

printf("maxmum=%d\n",max);

本例程序中第一个for语句逐个输入10个数到数组a中。 然后把a[0]送入max中。在第二个for语句中,从a[1]到a[9]逐个与max中的内容比较,若比max的值大,则把该下标变量送入max中,因此max总是在已比较过的下标变量中为最大者。比较结束,输出max的值。

void main()

{

int i,j,p,q,s,a[10];

printf("\n input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a);

for(i=0;i<10;i++){

p=i;q=a;

for(j=i+1;j<10;j++)

if(q

if(i!=p)

{s=a;

a=a[p];

a[p]=s; }

printf("%d",a);

}

}

for(i=0;i<10;i++)

scanf("%d",&a);

for(i=0;i<10;i++){

p=i;q=a;

for(j=i+1;j<10;j++)

if(q

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值