C语言基础篇四——数组

int main()
{
    int id[18] = {};
    int arr[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int compare[11] = {1,0,'X',9,8,7,6,5,4,3,2};
    //将身份证存进id数组中
    for (int i=0; i<18; ++i)
    {
        printf("输入%d位身份证号:\n",i+1);
        scanf("%d",&id[i]);
    }
    //计算相应的结果
    int result = 0;
    for (int i=0; i<17; ++i)
    {
        result += id[i] * arr[i];
    }
    //比较验证
    if (id[17] == compare[result%11])
    {
        printf("身份证有可能是真的 !\n");
    }
    else
    {
        printf("这张身份证一定是假的!\n");
    }
    return 0;
}

 

什么是数组

同类型的一些数字连续排列形成的一个数字集合(没有空隙)

声明一个数组

类型  数组   数组名 【常量表达式】

类型---数组中的单个数字(数组元素)的类型

常量表示数组中元素的个数

 

int main()
{
    int array[5] = {1,2,3,4,5};
    //数据的个数与数组的容量相等,  完全初始化
    float array1[3] = {3.14};
    //数据个数小于数组容量,  用数据依次初始化每一个位置多出来的位置自动为0.
    int array2[4] = {1,2,3,4,5,6,7,8};
    int array3[5] = {};
    int number = 10;
    int array4[number];//变长数组 ,不可以被初始化
}

//int array[5] = {1,2,3,4,5};//使用数组中的单个元素

    //下标 index

    //所以的下标都是从0开始依次递增

    //int number = array[0];//通过下标0  引用第一个元素

    /*array[0] = 100;

    printf("%d",array[0]);

    scanf("%d",&array[1]);*/

    //int array[5] = {};

    //array[5];//下标不合法  数组越界

    //array1 = array;数组不能直接整体赋值

    //利用循环给复制数组

 

int main()
{
    int number;
    printf("input a number:\n");
    scanf("%d",&number);
    int arr[32] = {};//记录所有的余数
    //利用循环将每一次的循环写入数组中,在将其逆序遍历数组。
    for (int i=0; i<32; ++i) {
        arr[i] = number % 2;
        number /= 2;
        if (!number) {
            break;
        }
    }
    
    // 逆序遍历数组   也就是将脚坐标的值换一个顺序
    printf("0b");
    for (int j=31; j>=0; j--) {
        printf("%d", arr[j]);
    }
    printf("\n");
}

随机输入一列数,将其升序,降序排列

#include <stdlib.h>
int main()
{
    int arr[7];
    printf("排序前:\n");
    for (int i=0; i<7; ++i)
    {
        arr[i] = arc4random() % 34;
        printf("%d ",arr[i]);
    }
    printf("\n");
    //排序
    //冒泡排序    升序
    /*
     第一轮
     20 16 6 5 8 21 15
     16 20 6 5 8 21 15
     16 6 20 5 8 21 15
     16 6 5 20 8 21 15
     16 6 5 8 20 21 15
     16 6 5 8 20 21 15
     16 6 5 8 20 15 21
     
     第二轮
     6 16 5 8 20 15
     6 5 16 8 20 15
     6 5 8 16 20 15
     6 5 8 16 20 15
     6 5 8 16 15 20
     
     ...
     
     */

    for (int i=0; i<6; ++i)
    {
        for (int j=0; j<6-i; ++j)
        {
            if (arr[j]>arr[j+1])//if语句执行为真时执行括号内的语句。
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    printf("升序后:\n");
    for (int i=0; i<7; ++i)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    //选择排序   降序
    for (int i=0; i<6; ++i)
    {
        for (int j=i+1; j<7; ++j)
        {
            if (arr[i]<arr[j])
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    //遍历
    printf("降序后:\n");
    for (int i=0; i<7; ++i)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

乱序

 

#include <stdlib.h>
int main()
{
    int arr[8] = {1,2,3,4,5,6,7,8};
    int brr[8] = {};
    for (int i=0; i<8; ++i)
    {
        int index = arc4random() % (8-i);
        brr[i] = arr[index];
        int temp = arr[index];
        arr[index] = arr[7-i];
        arr[7-i] = temp;
    }
}

 

二维数组

以一维数组为元素的数组

类型 数组名 [常量表达式]

int main()
{
    int arr[3];
    int array[5][3];
    int array1[3][2] =
    {
        1,2,
        3,4,
        5,6
    };
    int array2[3][4] = {1,2};
    int arr1[] = {1,2,3,4,5,6};//默认为完全初始化
    int array4[][3]= {1,2,3,4,5,6,7,8,9};//个数是可以省的,数值不能省。数值少了就补0.
}

 

#include <string.h>
int main()
{
    int m;
    printf("输入m的值(m是奇数)");
    scanf("%d",&m);
    int arr[m][m];
    //初始化数组
    memset(arr,0,m*m*4);
    int indexCol = 0;
    int indexRol = m / 2;
    for (int i=0; i<m*m; ++i)
    {
        arr[indexCol][indexRol] = i+1;
        int col = indexCol;
        int rol = indexRol;
        indexRol -= 1;
        indexCol -= 1;
        if (indexCol < 0)
        {
            indexCol = m - 1;
        }
        if (indexRol < 0)
        {
            indexRol = m - 1;
        }
        if (arr[indexCol][indexRol] != 0)
        {
            indexCol = col + 1;
            indexRol = rol + 1;
        }
    }
    for (int i=0; i<m; ++i)
    {
        for (int j=0; j<m; ++j)
        {
            printf("%2d",arr[i][j]);
        }
        printf("\n");
    }
}

 

posted on 2016-08-08 12:49  小豌先生  阅读(126)  评论(0)    收藏  举报

导航