C语言-数组

C语言中使用数组来存储相同类型的大批量数据。

数组:

数组名:起名规则和变量名一样;

定义数组:数组每个元素存储的数据类型+数组名[常量(时表示数组分配存储数据类型的个数也就是长度)]={每个元素,以逗号(,)分割每个数组元素来初始化数组};

以下表读取数组元素,从下标开始,以此累加,分别代表对应数组元素;

该写数组中的元素也是通过下标来读写数组中的元素;

注意数组越累问题,C语言中,程序不能检测数组越界,所以要注意

数组在内存中是一段连续的内存空间

定义方式:

    int a[10]={1}; //数组初值只给一个,相当于把第一个元素赋初值,其它元素清零

    int a[]={1,2,3,4,5,6,7,8,9,10};  //数组元素赋值个数确定时,可以省略括号中的数组长度

实例:

1、使用键盘输入十个数,保存在数组中,并循环输出:

    int a[10];
    for (int i=0; i<10;i++ ) {
        scanf("%d",&a[i]);//阻塞式:程序运行到这里,或者遇到一个函数,函数必须完成某项任务程序才能继续向下执行
    }
    for (int i=0; i<10; i++) {
        printf("%d	", a[i]);
    }

2、输入一个数,查询是否在数组中,如果是,输出它所在的位置(该数组元素的下标),如果不是,输出提示。

int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int m=0;
    int b=0;
    int i=0;
    
    for (int k=0; k<10; k++) {
        
        printf("请输入要查找的数:");
        scanf("%d",&b);
        
        for (i=0; i<10; i++) {
            if (a[i]==b) {
                m=i;
                break;
            }
        }
        if (i==10) {
            printf("未找到要查找的数字
");
        }else{
            printf("%d
",m);
        }
    }

3、输入一个数,插入到一个从大到小排列的有序数组中,我使用的方法比较笨,但是可以得出结果,最简单的办法是定义个flag,用来检测是否插入,如果插入,后续的数组元素后移一位即可

//    输入一个数,插入到一个从大到小排列的有序数组中
    int a[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    int b[11] = {};
    int insert = 0;
    
    scanf("%d",&insert);
    
    for (int i=0; i<10; i++) {
        if (a[i]>=insert && a[i+1]<=insert) {
            for (int j=0; j<i; j++) {
                b[j]=a[j];
            }
            b[i]=insert;
            for (int j=i; j<10; j++) {
                b[j+1]=a[j];
            }
        }else{
            if (insert>a[0]) {
                b[0]= insert;
                for (int j=1; j<=10; j++) {
                    b[j]=a[j-1];
                }
            }else{
                for (int j=0; j<10; j++) {
                    b[j]=a[j];
                }
                b[10]=insert;
                
            }
        }
    }
    
    for (int i=0; i<=10; i++) {
    
        printf("%d	",b[i]);
    }
    printf("
");

4、输入十个数,使用选择法对十个数进行排序,使用数组存储是个数。最终输出排好的顺序。

     
    int a[10];
    int max;
    int tmp;
    for (int i=0; i<10; i++) {
        scanf("%d",&a[i]);
    }
    for (int i=0; i<10-1; i++) {
        max = i;
        for (int j=i+1; j<10; j++) {
            if (a[max]<a[j]) {
                max = j;
            }
        }
        
            tmp = a[max];
            a[max] = a[i];
            a[i] = tmp;
        
    }

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


        printf("%d ", a[i]);


    }

5、使用冒泡法进行排序:

 #define SIZE 10
    
    int a[SIZE];
    int b[SIZE];
    int max = 0;

    for (int i=0; i<SIZE; i++) {

        scanf("%d",&a[i]);

    }
    
    for (int i=0; i<SIZE-1; i++) {
        max=0;
        for (int j=0; j<SIZE-i-1; j++) {
            if (a[j] > a[j+1]) {
                max=j;
            }
        }
        b[SIZE-i-1]=a[max];
    }
    
    for (int i=0; i<SIZE; i++) {
        
        printf("%d
",a[i]);
        
    }
    
    for (int i=0; i<SIZE; i++) {
        
        printf("%d
",b[i]);
        
    }

6、二维数组的使用:把二位数组相同的列的数字加起来赋给另一个一维数组:

    int a[4][3] = {0};
    int b[3] = {0};
    
    for (int i=0; i<4; i++) {
        for (int j=0; j<3; j++) {
            a[i][j]=i+j;
            printf("%d	", a[i][j]);
        }
        printf("
");
    }
    
    printf("
");
    
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            b[i]+=a[j][i];
            
        }
        printf("%d	",b[i]);
    }
    printf("
");

7、使用选择法对五个学生的成绩进行排序,数组表示五个学生,{学号,数学,语文,英语}下面的程序按照数学成绩进行排序:

#define ID      5
#define KEMU    4
    
    int a[ID][KEMU] = {
        {1, 89, 87, 76},
        {2, 92, 31, 90},
        {3, 60, 75, 34},
        {4, 70, 43, 71},
        {5, 54, 89, 45}
        };
    
    int tmp=0,m=0;

    for (int i=0; i<ID; i++) {
        m=i;
        for (int j=i; j<ID;j++) {
            if (a[m][1]<a[j][1]) {
                m=j;
            }
        }
        for (int k=0; k<4; k++) {
            if (m!=i) {
                tmp=a[i][k];;
                a[i][k]=a[m][k];
                a[m][k]=tmp;
            }
        }
    }
    
    for (int i=0; i<5; i++) {
        for (int j=0; j<4;j++) {
            printf("%d	",a[i][j]);
        }
        printf("
");
    }

结果:

    2    92    31    90
    1    89    87    76
    4    70    43    71
    3    60    75    34
    5    54    89    45
    Program ended with exit code: 0

8、给出一个数组,求最大值,最小值,平均值,和:

    int a[10] = {9, 7, 10, 6, 5, 3, 2, 4, 1, 8};
    int min = 0, max = 0;
    int sum = 0;
    float avg = 0;
    
    min = a[0];
    max = a[0];
    sum = a[0];
    
    for (int i=1; i<10; i++) {
        if (min>a[i]) {
            min=a[i];
        }
        if (max<a[i]) {
            max=a[i];
        }
        sum+=a[i];
    }
    
    avg=(float)sum/10;
    
    printf("sum=%d,max=%d,min=%d,avg=%.1f
",sum,max,min,avg);
原文地址:https://www.cnblogs.com/jiwangbujiu/p/5268113.html