• 十、数组(1):一维数组


    1、数组的使用

    什么是数组?

    ——是一种容器(放东西的东西),特点是:

    (1) 其中所有的元素具有相同的数据类型;

    (2)  一旦创建,不能改变大小;

    数组中的元素在内存中是连续依次排列的。

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

    a[2]=a[1]+6;
    定义数组

    ——<类型>  变量名称 [元素数量];

    int grades[100];
    double weight[20];

    ——元素数量必须是整数

    C99之前:元素数量必须是编译时刻确定的字面量

    数组的单元

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

    ——使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数:

    grades[0];
    grades[99];
    average[5];
    有效的下标范围

    ——编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写。

    ——一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃。(segmentation fault)

    ——但是可能运气好,没造成严重后果。

    ——所以这是程序员的责任来保证程序只适应有效的下标值:[0,数组的大小-1]。

    长度为0的数组?

    ——int a[0];

    ——可以存在,但是无用。

    2、数组的例子

    投票统计

    ——写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束。

    #include<stdio.h>
    
    int main()
    { 
        const int Number=10; //数组大小C99 
        int x;
        int count[Number];   //定义数组 
        int i; 
        
        //初始化数组 
        for(i=0;i<Number;i++)
        {
            count[i]=0;
        }
        
        scanf("%d",&x);
        while(x!=-1)
        {
            if(x>=0&&x<=9){
                count[x]++;  //数组参与运算 
            }
            
            scanf("%d",&x);
        }
        
        //遍历数组输出 
        for(i=0;i<Number;i++){
            printf("%d :%d
    ",i,count[i]);
        }
        
        return 0;
     } 

    3、数组运算

    ——在一组给定的数据中,如何找出某个数据是否存在?

    #include<stdio.h>
    
    /**
    找出key在数组a中的位置
    @param key 要寻找的数字
    @param a  要寻找的数组
    @param length 数组a的长度
    @return 如果找到,返回其在a中的位置; 返回如果找不到则返回-1 
    */
    int search(int key,int a[],int length);
    
    int main()
    {
        int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
        int x;
        int loc;
        
        printf("请输入一个数字:");
        scanf("%d",&x);
        
        loc=search(x,a,sizeof(a)/sizeof(a[0]));
        
        if(loc!=-1){
            printf("%d在第%d个位置上
    ",x,loc);
        }else{
            printf("%d不存在
    ",x);
        }
        
        return 0;
    }
    
    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;
    }

    数组的集成初始化
     int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
    数组的大小

    ——sizeof给出整个数组所占据的内容的大小,单位是字节。

    sizeof(a)/sizeof(a[0])

    ——sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数。

     数组的赋值

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

     int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
     int b[]=a;//这是错误的。 

    ——要把一个数组的所有元素交给另一个数组,必须采用遍历。

    for(i=;i<length;i++){
       b[i]=a[i];
    }
    遍历数组

    ——通常都是使用for循环。

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

    int search(int key,int a[],int length);

    ——数组作为函数的参数时:

    (1)不能在[]中给出数组的大小;

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

  • 相关阅读:
    flexbox弹性盒子布局
    LAMP环境 源码包安装
    用条件注释判断浏览器版本,解决兼容问题
    事件冒泡和事件捕获
    为js和css文件自动添加版本号
    uEditor独立图片上传
    修改netbeans模版头部的说明
    thinkphp多表关联并且分页
    thinkphp 独立分组配置
    荣耀路由HiLink一键组网如何实现?
  • 原文地址:https://www.cnblogs.com/Strugglinggirl/p/9032672.html
Copyright © 2020-2023  润新知