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;
    }
    
  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/sublimter/p/4161477.html
Copyright © 2011-2022 走看看