zoukankan      html  css  js  c++  java
  • c语言--数组&排序

    1.数组

    数组定义形式: int score[100];

    数组下标: 从0开始,score[0],score[1]...score[99];

    a[n], a[0].....a[n-1]

     数据类型 标示符[常量表达式]

     1. 数组中的每个元素的类型相同

     2. 数组的长度必须为常量(长度指的是数组元素个数)

     3. 数组名必须符合标示符定义

     4. 数组下标从0开始

     5. 数组名是一个地址常量,不是变量

     6. 数组中的每个元素是变量

    数组在内存中占用的大小 = 数据类型长度 * 数组元素个数

    数组访问不能越界操作!

    1.1数组初始化

    //完全初始化
    //
    int main(int argc, const char *argv[])
    {
        int a[5]={1,2,3,4,5};
        for (int i=0; i<5; i++) {
            printf("a[%d]==%d
    ", i, a[i]);
        }
        
        return 0;
    }
    
    //不完全初始化
    int main(int argc, const char *argv[])
    {
        int a[5]={3,6};
        for (int i=0; i< 5; i++) {
            printf("a[%d]==%d
    ",i, a[i]);
        }
        return 0;
    }
    
    //初始化为0
    int main(int argc, const char *argv[])
    {
        //int a[5]={};
        int a[5]={0};
        for (int i=0; i<5; i++) {
            printf("a[%d]==%d
    ", i,a[i]);
        }
        return 0;
    }
    

    1.2数组简单操作

    //数组遍历
    int main(int argc, const char * argv[])
    {
        int a[10];
        int i;
        for (i=0; i<10; i++) {
            a[i]=i;
        }
        for (i=0; i<10; i++) {
            printf("a[%d]==%d
    ", i,a[i]);
        }
        return 0;
    }
    
    // 倒序操作数组
    
    int main(int argc, const char *argv[])
    {
        int a[5];
        for (int i = 4; i >=0; i--) {
            scanf("%d",&a[i]);
        }
        for (int i=0; i<5; i++) {
            printf("a[%d]==%d
    ", i, a[i]);
        }
        return 0;
    }
    

    eg.求学生的平均成绩

    int main(int argc, const char *argv[])
    {
        int total=0;
        float average;
        int a[10];
        for (int i=0; i<10; i++) {
            scanf("%d",&a[i]);
            total+=a[i];
        }
        average = (float)(total/10);
        printf("average == %.2f
    ", average);
        
        return 0;
    }
    

    eg.输入10个数据, 查找该数据中的最大数,并将其输出到屏幕上

    int main(int argc, const char *argv[])
    {
        int a[10];
        int max;
       //输入数组
        for (int i=0; i<10; i++) {
            scanf("%d", &a[i]);
        }
        max = a[0];
       //循环比较大小
        for (int i=1; i<10; i++) {
            if (a[i]>max) {
                max = a[i];
            }
        }
        printf("The max value is : %d 
    ", max);
        return 0;
    }
    

     eg.字符数组

    //字符数组
    // char str[100];
    // 每个元素占用1个字节的空间
    //
    
    int main(int argc, const char *argv[])
    {
        // 1
        char str[100];
        scanf("%s",str);
        printf("%s
    ", str);
        
        // 2
       char str[5]={'a','b','c','d','e'};
        for (int i=0 ; i<5; i++) {
            printf("%c",str[i]);
        }
        putchar('
    '); 
    
        return 0;
    }
    

     eg.字符数组操作

    //字符串
    int main(int argc, const char *argv[])
    {
        char str[100]="qianfengjiaoyu";
        printf("%s
    ", str);
    }
    
    /*int main(int argc, const char *argv[])
    {
        char str[12]="hello world!";
        //str[12]='';
        //printf("%s",str);
        for (int i=0; i<12; i++) {
            printf("%c",str[i]);
        }
        return 0;
    }*/
    

     2.二维数组

    eg.初始化&遍历

    //二维数组初始化
    //初始化方式 1
    int main(int argc, const char *argv[])
    {
        int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
        int i, j;
       //遍历数组
        for (i=0; i<3; i++) {
            for (j=0; j<4; j++) {
                printf("%d ", a[i][j]);
            }
        }
        return  0;
    }
    //初始化方式 2
    int main(int argc,const char *argv[])
    {
        int a[3][4]={{1,2,3,4},
                     {5,6,7,8},
                     {9,10,11,12}};
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                printf("%d ",a[i][j]);
            }
            printf("
    ");
        }
        printf("
    ");
        return 0;
    }
    

     eg.打印杨辉三角(二维数组)

    //1
    //1 1
    //1 2 1
    //1 3 3 1
    //1 4 6 4 1
    //....
    /*
        2=1+1
        3=1+2
        3=2+1
        4=1+3
        6=3+3
        4=3+1
        ....
    */
    
    int main(int argc,const char *argv[])
    {
        int a[10][10];
        int i, j;
        for (i=0; i<10; i++) {
            //内层循环打印具体每一个数字
            for (j=0; j<=i; j++) {
                //初始化三角图形左右两边 1
                if (j==0 || i==j) {
                    a[i][j]=1;
                }
                else
                {
                    a[i][j]=a[i-1][j-1]+a[i-1][j];
                }
                printf("%d  ",a[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }
    

    3.数组应用(排序算法)

    3.1冒泡排序

    //冒泡排序: 相邻两数比较,大数往后移动,小数往前移动;
    //4 5 7 8 9
    
    //  9 7 8 5 4
    //第一次排序,交换4次
    //  7 9 8 5 4
    //  7 8 9 5 4
    //  7 8 5 9 4
    //  7 8 5 4 9
    
    //第二次排序,交换3次
    //  7 8 5 4
    //  7 5 8 4
    //  7 5 4 8 9
    
    //第三次排序,交换2次
    //  5 7 4 8 9
    //  5 4 7 8 9
    
    //第四次排序
    //  4 5 7 8 9
    
    #define LEN 10
    
    int main(int argc, const char * argv[])
    {
        int a[LEN];
        int i, j;
        int temp;
       //遍历输入
        for (i=0; i<LEN; i++) {
            scanf("%d",&a[i]);
        }
        for (i = 0; i<LEN-1; i++) {
            for (j=0; j<LEN-1-i; j++) {
                //交换位置
                if (a[j]>a[j+1]) {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        //遍历输出
        for (i=0; i<LEN; i++) {
            printf("%d ",a[i]);
        }
        putchar('
    ');
        
        return 0;
    }
    

     3.2选择排序

    //选择排序
    
    //9 7 8 5 4
    //
    //第一次排序
    //4 7 8 5 9
    
    //第二次排序
    //4 5 8 7 9
    
    //第三次排序
    //4 5 7 8 9
    
    //第四次排序
    //4 5 7 8 9
    
    int main(int argc, const char *argv[])
    {
        //int a[5]={9, 7, 8, 5, 4};
        int a[LEN];
        int i,j;
        int k,temp;
        for (i=0; i<LEN; i++) {
            scanf("%d", &a[i]);
        }
        for (i=0; i<LEN-1; i++) {
            k=i;
            for (j=i+1; j<LEN; j++) {
                if (a[k]>a[j]) {
                    k=j;
                }
            }
            if (k!=i) {
                temp = a[k];
                a[k] = a[i];
                a[i] = temp;
            }
        }
        for (i = 0; i<LEN; i++) {
            printf("%d ",a[i]);
        }
        putchar('
    ');
        return 0;
    }
    
  • 相关阅读:
    数学考试
    奇♂妙拆分
    11.25
    11.21
    11.20
    11.19
    11.18
    11.15
    11.14作业
    11.14
  • 原文地址:https://www.cnblogs.com/sublimter/p/4161477.html
Copyright © 2011-2022 走看看