听翁恺讲C语言7-数组

数组

printf("输入一些数,最后输入-1结束:\n");      
int x;             
double sum = 0;     
int cnt = 0;        
int number[100];   //可以放100个int  定义数组            
scanf("%d", &x);             
while ( x!= -1 )           
{            
   number[cnt] = x;  //对数组中的元素进行赋值  cnt那个位置上的元素等于x。      
   sum += x;               
   cnt ++;               
   scanf("%d", &x);  //读下一个x,前面的scanf只读第一个出现的数,而while条件里的x值并不会改变。 
}           
if ( cnt >0 )        
{            
   printf("%f\n", sum/cnt);     
   int i;               
   for ( i=0; i<cnt; i++ )               
   {                
      if (number[i] > sum/cnt)          
      {                   
         printf("%d\n", number[i]);   //使用数组中的元素       
      }              
   }                     //遍历数组,把数组中的每一个单元走透透         
}

a、 <类型> 变量名称[元素数量]

I、int grades[100];

//grades数组,有一百个单元。

·元素数量必须是整数,c99之后可以用变量来定义数组的大小。也就是int a[x]

变量表示数组

int x;  
double sum = 0;      
int cnt;           
printf("请输入数字的数量:");  
scanf("%d",&cnt);          
if( cnt>0 )  
{  int number[cnt];           
 scanf("%d",&x);          
 while ( x!= -1 )       
 {                   
    number[cnt] = x;          
    sum += x;                    
    cnt ++;                      
    scanf("%d",&x);             
 }             
}            
II、数组就是一个容器(放物品的东西),

特点是:

·其中所有元素的数据类型一致。

·一旦创建就无法改变大小。

·数组中的元素在内存中是连续依次排列的。(而且是紧密排列的)

III、

·可以出现在赋值的左边或右边。

·a[2]=a[1]+6 //a[1]的值读出来+6后,写入到a[2]里去。

·在赋值左边的叫做左值。

IV、

·数组的每一个单元就是数组类型的一个变量。

·使用数组时放在[]中的数字叫做下标或索引,从零开始编号。每次都是n-1

·编译器和运行环境都不会检查数组下标是否越界,注意不要越界。 越界错误提示:segmentation fault

V、int a[0]

可以存在,但并没有什么用处。

b、初始化数组的例子。

c、数组的集成初始化,

eg、int a[] = {2,4,5,6,7,1,8,9,11,33,45,67,22}

eg:a[3]={22,33,44}

若写成a[3]={22},则后面的33,44都会被认为是0

I、集成初始化时的定位。

​ ·用[n]在初始化数据中给出定位。

​ ·没有定义的数据接在前面的位置后面。

​ ·其他位置的值补零。

​ ·也可以不给出数组大小,让编译器算。

​ ·特别适合初始数据稀疏的数组。

eg:int a[13] ={[1]=2, 4, [5]=6,} //此逗号有必要,为下一步写数据进数组提供便利。 输出结果为:0 2 4 0 0 6 0 0 0 0 0 0 0 //c99才适合

若为a[]={[1]=2, 4, [5]=6,} 输出结果就为:0 2 4 0 0 6

d、数组的大小

·sizeof:给出整个数组所占据的内容的大小,单位是字节。 (是一个数组总共的字节数哈) sizeof(a)/sizeof(a[0]) //得到的结果就是数组的大小

·sizeof(a[0])给出数组单个元素的大小。 sizeof(a[0])就是一个元素占的字节数

初始化数组的三种方法:            
1、       
void function1()                
{                  
  char array[ARRAY_SIZE_MAX] = {0}; //声明时使用{0}初始化为全0        
}           
2、              
void function2()              
{                
   char array[ARRAY_SIZE_MAX];               
   memset(array, 0, ARRAY_SIZE_MAX); //使用memset方法            
}           
3、            
void function3()           
{                 
   int i = 0;                
   char array[ARRAY_SIZE_MAX];           
   for (i = 0; i < ARRAY_SIZE_MAX; i++) //for循环赋值         
   {                    
      array[i] = 0;     
   }                
}

f、数组的赋值

能不能 int a[]={1,3,4,5,6,};

​ int b[]= a;

无法将一个数组变量赋值给另一个数组变量的

·数组变量本身不能被赋值

·要把一个数组的所有元素交给另一个数组,必须采取遍历,也就是写一个循环,将一个数组的每个元素,赋给另一个数组

遍历数组赋值:                 
    for ( i=0; i<length; i++ )       
    {                       
   b[i] = a[i];        
    }                  
遍历数组做初始化                    
   for ( i=0; i<length; i++ )              
   {                        
      count[i] = 0;              
   }                
判断

·通常都是使用for循环,让循环变量i从0到<1数组的长度,这样的循环体内最大的i正好是数组最大的有效下标。

·常见错误:

​ ·循环条件是<=数组长度,/离开循环体后,继续用i的值来做数组元素的下标! //因为离开循环后,i的值正好是无效的下标。eg i=0; i<length; i++ 此时i的值正好是length.

g、数组作为函数参数的时候,往往必须再用另一个参数来传入数组的大小。

h、数组作为函数的参数时:

·不能在[]中给出数组的大小。

·不能再利用sizeof来计算数组的元素个数。

 int search(int key, int a[], int length)   //作为函数的参数 
 {          
    int ret = -1;        
    int i;        
    for ( i=0; i<length; i++ )   
    {            
       if( a[i] ==key )       
       {        
          ret = i;           
          break;        
       }    
    }       
    return ret;    
 }

​ 2、二维数组 int a[3][5]; //通常理解为3行5列的矩阵。

a、二维数组的遍历。

for ( i=0; i<3; i++ )            
{              
    for( j=0; j<5; j++)              
    {                
    a[i][j] = i*j;         //a[i][j]是一个int,表示第i行第j列上的单元              
    }                            
}            //二维数组,两重循环,才能遍历。     

​ a[i,j] 错误表达二维数组的方式

b、二维数组的初始化

int a[][3] ={                  
   {1,3,4},                   
   {2,3,4},                 
};                                   //列数必须有,行数可省略,每个每行一个{},逗号隔开

猜你喜欢

转载自www.cnblogs.com/wpoem/p/12448513.html
今日推荐