博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

G.C--YANG

  guoyangyang.cublog.cn

关于作者
姓名:G.C--YANG
职业:学生
年龄:20
位置:辽宁省丹东
个性介绍:
|| << >> ||
我的分类


数组(C语言)
     
   我们以前学过char,int,float,double以及int和double的变体。这些数组有一个限制:在一个特定的时间内这些数据类型的变量只能保存一个数值,因此它们只能用于数量有限的数据,而在实际应用中,我们要读取和显示大量的数据。就需在一些功能强大数据类型。C语言支持一各派生数据类型,称为数组。
数组:含有相同数据类型的元素的系列集合。
以下的示例用到了数组的概念:
  1  一天,一个月或一年中每个小时所记录的湿度列表。
  2  某公司的职工名单列表。
  3  某班学生考试成绩。
  4  客户及其电话号码列表。
 
一维数组:
  一维数组的定义方程为   type varible-name [size];
 type指定了包含元素的类型,如int ,float或char等。而size则表明了数组所存储元素的最大数目。
 例如:如果要用number表示5个数字的集合(3,5,69,78,125),可以这样声明变量number:
  int number[5];
计算机将如下为变量保留5个存储空间的位置:

 3(number0)

 5(number1)

 69(number2)

 78(number3)

 125(number4)

 
 
数组的元素可以像C语言的其它变量一样使用:
a=number[0]+10;number[4]=number[10]+number[2];number[2]=x[5]+y[10];a[0]=a[5]+a[7]-a[2*3];
数组的下标可以是整数常量,整数变量,或者是生成整数的表达式。
数组的大小必须是一个数字常量或符号常量,有的同学可能会对这样的一个程序产生疑问
#include<stdio.h>
void main()
{
int i,a[10];
for(i=0;i<=10;i++)
 a[i]=i;
for(i=9;i>=0;a++)
 printf("%d",a[i]);
printf("\n");
}
 
疑问a[i]=i;  ??? 这里的i不是一个变量吗?
大家注意,在声明里是int i,a[10].计算机开辟了10个空间给a[10],i只不过是一个代表符,在将i赋给a[i]时,i代表一个确定的值如0,1,2...而不是变量。而下面的例子则是不行的:
  int n;
  scanf("%d",&n);
  int a[n];
 
 
C语言只是把字符串当作字符的数组,字符串的大小表示字符的最大数目。例:
 char name[10];
将name声明为字符数组(即字符串)变量,最多可以保存10个字符。如我们将“well done”这个字符串读入到字符串变量name中。字符串的每个字符都看作数组name的一个元素,在内存中按如下形式保存:
 
  'w'
  'e'
  'l'
  'l'
  ' '
  'd'
  'o'
  'n'
  'e'
  '\0'
当编译器遇到一个字符串时,将把它添加空字符以作为结尾。
 
写程序:输入十个数,求它们的平方和。
 #include<stdio.h>
 main()
  {
    int i;
    float x[10],value,total;
 /*......reading values into array......*/
   printf("enter 10 real numbers\n");
    for(i=0;i<10;i++)
     { 
      scanf("%f",&value);
      x[i]=value;
     }
/*......computation of total......*/
  total=0.0;
  for(i=0;i<10;i++)
   total=total+x[i]*x[i];
/*......printing of x[i] value and total......*/
  printf("%\n");
  for(i=0;i<10;i++)
   printf("x[%2d]=%5.2f\n",i+1,x[i]);
  printf("\n total=%.2f\n",total);
}
 
一维数组的初始化
1 编译时初始化: 和普通变量一样,在声明数组时初始化数组的元素。一般形式:type array-name[size]={list of value};
列表中的数值用逗号隔开,例
int number[3]={0,0,0};
将变量number声明为大小为3的数组,并把零赋给每个元素。如果列表中的数组少于元素的个数,只有部分元素初始化,剩余的元素自动设置为0。
数组的大小可以省略,这样编译器为所有已初始化的元素分配足够的空间。例
 int number[]={32,65,87};
将number声明为大小为3的数组。
字符串数组也可以用同样的方法初始化char name[]={'j','o','h','n','\o'};
将name声明为有5个字符的数组,并用字符串'john'进行初始化,末位为空字符。我们也可以这样直接将字符串赋给数组:char name[]="john";
如果用于初始化的数值多于所声明的数组大小,编译器将产生一个错误。如int number[2]={10,554,74};不能运行,它在C语言中不合法。
 
2 运行时初始化: 可以在运行时显式的初始化数组。这种方法通常大于数组的初始化。例:
  for(i=0;i<10;i++)
   {
    if (i<5)
     sum[i]=0;
    else
     sum[i]=1;
   }
  数组sum前5个元素在运行时初始化为0,而后5个元素初始化为1。
也可以用scanf之类的函数来初始化数组。
 int x[3];
 scanf("%d%d%d",&x[0],&x[1],&x[2]);
       
 
 
二维数组:
我们以前学过的数组变量只能存储数列;有时我们需要存数值表。
 声明   type  array-name[row-size][column-size];
 

                0           1            2

                  |                |                  |

              [0][0]       [0][1]           [0][2]

21

56

47

0-----

 

            [1][0]       [1][1]           [1][2]

58

57

96

1-----

 

          [2][0]       [2][1]      [2][2]

84

66

36

2-----

 

二维数组在内存中的存储情况

 
数组元素可以出现在表达式中,也可以被赋值。b[1][2]=a[2][3]/2
 
同一维数组,二维数组也可以在使用前初始化。(1)最常用的赋值方法int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
(2)可以把所有的数据写在一个括号里,按数组排列的顺序对各元素赋初值。int a[3][4]={1,2,3,4,2,3,4,5,3,4,5,6};结果与第一种相同,但赞成用第一种,一行对一行,不容易混淆,也容易简查。这样写的话也可以把[3]省去,但第二维的长度不能省。
(3)可以对部分赋值int a[3][4]={{1},{3},{2}};它的作用是只对各行第一列赋值,其它的自动赋值为0。
 
 
程序举例:请用二维数组编写一个程序,计算并显示上面介绍的数据表的以下信息,
 (a)每个销售人员的销售总值;
 (b)每种物品的销售总值;
 (c)所有销售人员销售的全部物品的总值。
#define maxgirls 4
#define maxtiems 3
main()
 {
   int value[maxgirls][maxitems];
   int girl_total[maxgirls],item_total[maxitems];
   int i,j,grand_total;
 
/*...reading of value and computing girl_total...*/
 
 printf("Input data\n Enter values,one at a time,row-wise\n\n");
 
 for(i=0;i<maxgirls;i++)
 {
   girl_total[i]=0;
   for(j=0,j<maxitems;j++)
    {
     scanf("%d",&value[i][j]);
     girl_total[i]=girl_total[i]+value[i][j];
    }
 }
 
/*...computing item_total...*/
 
 for(j=0;j<maxitems;j++)
 {
  item_total[j]=0;
  for(i=0;i<maxgirls;i++)
   item_total[j]=item_total[j]+value[i][j];
 }
 
/*...computing grand_total...*/
 
 grand_total=0;
 for(i=0;i<maxgirls;i++)
  grand_total=grand_total+girl_total[i];
 
/*...printing of results...*/
 
printf("\n girls totals\n\n");
 for(i=0;i<maxgirls;i++)
  printf("Salesgirl[%d]=%d\n",i+1,girl_total[i]);
printf("\n item totals\n\n");
for(j=0;j<maxitems;j++)
 printf("item[%d]=%d\n",j+1,item_total[j]);
printf("\n grand total=%d\n",grand_total);
}
 
 
 
 
 
 
 
 
 
 

发表于: 2007-11-27,修改于: 2007-11-30 12:53,已浏览233次,有评论0条 推荐 投诉


网友评论
 发表评论