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','+','+',''};

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

  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8060419.html
Copyright © 2011-2022 走看看