• 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);
  • 相关阅读:
    共轭梯度法
    OpenGLGLUT教程(十一) GLUT子菜单
    怎样让函数返回数组
    OpenGLGLUT教程(九) GLUT鼠标
    OpenGLGLUT教程(七) GLUT高级键盘控制
    OpenGLGLUT教程(六) GLUT场景漫游
    OpenGLGLUT教程(五) GLUT键盘控制
    OpenGLGLUT教程(八) GLUT场景漫游II
    dos指令 批处理文件
    新的启程!
  • 原文地址:https://www.cnblogs.com/jiwangbujiu/p/5268113.html
Copyright © 2020-2023  润新知