zoukankan      html  css  js  c++  java
  • C_数组详解

    数组:

    一 一维数组

    1.1 一维数组的定义:

    类型符 数组名[常量表达式];
    int a[10];
    

    说明:

    1.数组的命名规则遵循标识符命名规则。
    2.定义时需要指定元素的个数。方括号里的常量表达式表示元素的个数。
    3.常量表达式中不能包含变量;如:int a[n];不合法,c语言不允许对数组的大小作动态的定义。

    1.2 引用一维数组:

    格式:
    数组名[下标];
    
    #include<stdio.h>
    int main() {
    #if(0)
        //逆序输出一个数组的元素
    #endif
        int a[10],i;
        for(int i = 0;i < 10;i++) {
            a[i] = i;
        }
        for(i = 9;i > 0;i--) {
            printf("%d ",a[i]);
        }
        printf("
    ");
        return 0;
    }
    

    1.3 一维数组的初始化:

    1.在定义数组时对全部数组赋予初值;
    eg: int a[10] = {0,1,2,3,4,5,6,7,8,9};
    2.可以给数组中的一部分赋值
    eg: int a[10] = {0,1,2,3,4};//系统会给后面未付赋值的空间赋值0.
    3.如果对数组去不赋值可以不定义长度。
    eg: int a[5] = {0,1,2,3,4};
        int a[] = {0,1,2,3,4};
    
    #include<stdio.h>
    int main() {
    #if(0)
        //逆序输出一个数组的元素
        int a[10],i;
        for(int i = 0;i < 10;i++) {
            a[i] = i;
        }
        for(i = 9;i > 0;i--) {
            printf("%d ",a[i]);
        }
        printf("
    ");
    #endif
    
    #if(1)
        //利数组求Fibonacci数列,前二十项
    #endif
        int i, fi[20] = {1,1};
        for(i = 2;i < 20;i++) {
            fi[i] = fi[i-2] + fi[i-1];
        }
        for(i = 0;i < 20;i++) {
            if(i%5 == 0) {//每行5个数换行
                printf("
    ");
            }
            printf("%12d",fi[i]);
        }
        printf("
    ");
    
    
        return 0;
    }
    
    #include<stdio.h>
    int main() {
    #if(0)
        //逆序输出一个数组的元素
        int a[10],i;
        for(int i = 0;i < 10;i++) {
            a[i] = i;
        }
        for(i = 9;i > 0;i--) {
            printf("%d ",a[i]);
        }
        printf("
    ");
    #endif
    
    #if(0)
        //利数组求Fibonacci数列,前二十项
        int i, fi[20] = {1,1};
        for(i = 2;i < 20;i++) {
            fi[i] = fi[i-2] + fi[i-1];
        }
        for(i = 0;i < 20;i++) {
            if(i%5 == 0) {//每行5个数换行
                printf("
    ");
            }
            printf("%12d",fi[i]);
        }
        printf("
    ");
    #endif
    
    #if(1)
        //利用冒泡法进行排序。
        int a[10];
        int i,j,k;
        printf("请输入10个数字:
    ");
        for(i = 0;i < 10;i++) {
            scanf("%d",&a[i]);
        }
        printf("
    ");
        for(i = 0;i < 9;i++) {
            for(j = 0;j < 9-i;j++) {
                if(a[j] > a[j+1]) {
                    k = a[j];
                    a[j] = a[j+1];
                    a[j+1] = k;
                }
            }
        }
        printf("数字的大小顺序是:
    ");
        for(i = 0;i < 10;i++) {
            printf("%4d",a[i]);
        }
        printf("
    ");
    #endif
    
    
    
        return 0;
    }
    

    二 二维数组

    2.1 二维数组定义

    类型说明符 数组名[常量表达式][常量表达式];
    eg:int [3][4];//三行四列的数组,形象的可容认为三行四列的矩阵
        float [2][3];
    

    说明:在C语言中,二维数组可以看成是特殊的一维数组,实质上在内存中是连续的地址存储。是线性存储的。几行几列是逻辑上的表示。

    2.2 二维数组的引用

    格式:
    数组名[下标][下标];
    a[2][3];
    

    2.3 二维数组的初始化

    1.分行给二维数组赋初值
    eg: int a[3][4] = {{1,2,3,4},{2,3,4,6},{1,3,4,5}};
    2.可以将所有的值放在一个打括弧里。和线性存储一致。这样可以对第一维的长度可以不写,第二维的长度必须写。
    eg: int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
        int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    3.也可以对局部元素赋初值
    eg: int a[3][4] = {{1},{0,5},{0,0,9,8}};
    
    #if(0)
    //二维数组练习
    //1.一个两行三列的矩阵转换成三行两列的矩阵
        int a[2][3] = {{1,2,3},{4,5,6}};
        int b[3][2],i,j;
        printf("a矩阵为:
    ");
        for(i = 0;i < 2;i++) {
            for(j = 0;j < 3;j++) {
                printf("%5d",a[i][j]);
                b[j][i] = a[i][j];
            }
            printf("
    ");
        }
        printf("b矩阵:
    ");
            for(i = 0;i < 3;i++) {
                for(j = 0;j < 2;j++) {
                    printf("%5d",b[i][j]);
                }
                printf("
    ");
            }
    
    #endif
    
    #if(1)
        //有一个3*4的矩阵,求出矩阵中最大的一个数
        int a[3][4] = {{23,4,-2,3},{4,45,9,-45},{31,67,45,0}};
        int i,j,row,col,max;
        max = a[0][0];
        for(i = 0;i < 3;i++) {
            for(j = 0;j < 4;j++) {
                if(a[i][j] > max) {
                    max = a[i][j];
                    row = i;
                    col = j;
                }
            }
        }
        printf("最大的元素为:%d
     第%d行
     第%d列
    ",max,row,col);
    #endif
    
        return 0;
    }
    

    三 字符数组

    3.1 定义字符数组

    char c[10];//包含10个字符
    

    3.2 字符数组的初始化

    char c[12] = {'I',' ','a','m',' ','l','i','k','e','c','/','c++'};
    

    说明:字符数组必须初始化,如果提供的处置个数大于数组的个数则会出现语法错误,如果小于数组长度,系统会给最后一个自动补'';如果两者相等即可省略个数。 char c[] = {'I',' ','a','m',' ','l','i','k','e','c','/','c++'};
    二维字符数组初始化;
    char diamond[5][5] = {{'','',''},{'','','','',''},{'','','','',''},{'','','','',''},{'','',''}}//代表一个菱形

    3.3 字符数组的引用

    #include<stdio.h>
    int main() {
    #if(1)
    //利用字符二维数组输出一个菱形
         char diamond[5][5] = {{' ',' ','*'},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{' ','*',' ','*',' '},{' ',' ','*'}};//没有的字符有个空格
         int i,j;
         for(i = 0;i < 5;i++) {
             for(j = 0;j < 5;j++) {
                 printf("%c",diamond[i][j]);
             }
             printf("
    ");
         }
    
    #endif
    
        return 0;
    }
    

    3.4 字符串和字符串结束的标志

    在C语言中,字符串是作为字符数组来处理的。定义一个字符串就会利用一个一维数组来存放。字符中的字符是逐个放到数组中的,两者的长度是相同的。
    为了测定字符串的实际长度,C语言规定了一个“字符串结束的标志”,其中有一个'',则''前面的为有效长度。

    字符串常量使字符数组初始化

    char c[] = {"I love C/C++"};
    or
    char c[] = "I love C/C++";
    

    而下面的并不等价
    char c[12] = {'I',' ','l','o','v','e','C','/','C','+','+'};
    不等价
    char c[12] = {'I',' ','l','o','v','e','C','/','C','+','+',''};

    说明:字符数组并不要求他的最后一个字符'',根据自己的需求定义。而系统会给字符串添加一个'',便于测定字符串的实际长度。由于字符串的处理方式是字符数组的形式,为了处理方式一致可对字符数组也认为的添加'',便于处理。

  • 相关阅读:
    spring boot banner设置关闭以及关闭特定的自动配置
    spring boot 初始及快速搭建
    spring scheduling 计划任务
    idea database 导入实体带注解
    idea mapper下的方法找不到 Invalid bound statement (not found)
    spring jwt token 认证
    spring event 事件
    FrontEnd-Basis-6th
    FrontEnd-Basis-5th
    FrontEnd-Basis-4th
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8060419.html
Copyright © 2011-2022 走看看