• 听翁恺讲C语言7-数组


    数组

    printf("输入一些数,最后输入-1结束:
    ");      
    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
    ", sum/cnt);     
       int i;               
       for ( i=0; i<cnt; i++ )               
       {                
          if (number[i] > sum/cnt)          
          {                   
             printf("%d
    ", 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},                 
    };                                   //列数必须有,行数可省略,每个每行一个{},逗号隔开
    

  • 相关阅读:
    深度系统安装wine
    Android应用真正的入口在哪里?
    推荐系统算法概览
    Android面试题:Scrollview内嵌一个Button他的事件消费是怎样的?Move,Down,Up分别被哪个组件消费?
    Java面试题:多线程交替打印字符串
    EventBus使用初体验
    Andoird面试题:A活动启动B活动,他们的生命周期各是怎么样的?
    Android在开发过程中如何选择compileSdkVersion,minSdkVersion和targetSdkVersion
    华为2020暑期实习面经(已拿Offer)
    工商银行软件开发中心2020暑期实习面经(已拿Offer)
  • 原文地址:https://www.cnblogs.com/wpoem/p/12448513.html
Copyright © 2020-2023  润新知